summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/SCsub7
-rw-r--r--drivers/ogg/COPYING28
-rw-r--r--drivers/ogg/SCsub9
-rw-r--r--drivers/ogg/bitwise.c1088
-rw-r--r--drivers/ogg/config_types.h12
-rw-r--r--drivers/ogg/framing.c2111
-rw-r--r--drivers/ogg/ogg.h210
-rw-r--r--drivers/ogg/os_types.h147
-rw-r--r--drivers/opus/COPYING28
-rw-r--r--drivers/opus/SCsub196
-rw-r--r--drivers/opus/analysis.c672
-rw-r--r--drivers/opus/analysis.h103
-rw-r--r--drivers/opus/audio_stream_opus.cpp376
-rw-r--r--drivers/opus/audio_stream_opus.h141
-rw-r--r--drivers/opus/celt/_kiss_fft_guts.h182
-rw-r--r--drivers/opus/celt/arch.h241
-rwxr-xr-xdrivers/opus/celt/arm/arm2gnu.pl353
-rw-r--r--drivers/opus/celt/arm/arm_celt_map.c118
-rw-r--r--drivers/opus/celt/arm/armcpu.c171
-rw-r--r--drivers/opus/celt/arm/armcpu.h71
-rw-r--r--drivers/opus/celt/arm/armopts.s.in37
-rw-r--r--drivers/opus/celt/arm/celt_ne10_fft.c172
-rw-r--r--drivers/opus/celt/arm/celt_ne10_mdct.c256
-rw-r--r--drivers/opus/celt/arm/celt_neon_intr.c249
-rw-r--r--drivers/opus/celt/arm/celt_pitch_xcorr_arm-gnu.S551
-rw-r--r--drivers/opus/celt/arm/celt_pitch_xcorr_arm.s547
-rw-r--r--drivers/opus/celt/arm/fft_arm.h72
-rw-r--r--drivers/opus/celt/arm/fixed_armv4.h80
-rw-r--r--drivers/opus/celt/arm/fixed_armv5e.h151
-rw-r--r--drivers/opus/celt/arm/kiss_fft_armv4.h121
-rw-r--r--drivers/opus/celt/arm/kiss_fft_armv5e.h118
-rw-r--r--drivers/opus/celt/arm/mdct_arm.h60
-rw-r--r--drivers/opus/celt/arm/pitch_arm.h68
-rw-r--r--drivers/opus/celt/bands.c1526
-rw-r--r--drivers/opus/celt/bands.h120
-rw-r--r--drivers/opus/celt/celt.c296
-rw-r--r--drivers/opus/celt/celt.h229
-rw-r--r--drivers/opus/celt/celt_decoder.c1241
-rw-r--r--drivers/opus/celt/celt_encoder.c2404
-rw-r--r--drivers/opus/celt/celt_lpc.c312
-rw-r--r--drivers/opus/celt/celt_lpc.h67
-rw-r--r--drivers/opus/celt/cpu_support.h70
-rw-r--r--drivers/opus/celt/cwrs.c712
-rw-r--r--drivers/opus/celt/cwrs.h48
-rw-r--r--drivers/opus/celt/ecintrin.h87
-rw-r--r--drivers/opus/celt/entcode.c150
-rw-r--r--drivers/opus/celt/entcode.h152
-rw-r--r--drivers/opus/celt/entdec.c242
-rw-r--r--drivers/opus/celt/entdec.h100
-rw-r--r--drivers/opus/celt/entenc.c291
-rw-r--r--drivers/opus/celt/entenc.h110
-rw-r--r--drivers/opus/celt/fixed_debug.h784
-rw-r--r--drivers/opus/celt/fixed_generic.h151
-rw-r--r--drivers/opus/celt/float_cast.h140
-rw-r--r--drivers/opus/celt/kiss_fft.c602
-rw-r--r--drivers/opus/celt/kiss_fft.h200
-rw-r--r--drivers/opus/celt/laplace.c131
-rw-r--r--drivers/opus/celt/laplace.h48
-rw-r--r--drivers/opus/celt/mathops.c205
-rw-r--r--drivers/opus/celt/mathops.h258
-rw-r--r--drivers/opus/celt/mdct.c341
-rw-r--r--drivers/opus/celt/mdct.h112
-rw-r--r--drivers/opus/celt/mfrngcod.h48
-rw-r--r--drivers/opus/celt/mips/celt_mipsr1.h148
-rw-r--r--drivers/opus/celt/mips/fixed_generic_mipsr1.h126
-rw-r--r--drivers/opus/celt/mips/kiss_fft_mipsr1.h167
-rw-r--r--drivers/opus/celt/mips/mdct_mipsr1.h286
-rw-r--r--drivers/opus/celt/mips/pitch_mipsr1.h161
-rw-r--r--drivers/opus/celt/mips/vq_mipsr1.h122
-rw-r--r--drivers/opus/celt/modes.c439
-rw-r--r--drivers/opus/celt/modes.h75
-rw-r--r--drivers/opus/celt/opus_custom_demo.c207
-rw-r--r--drivers/opus/celt/os_support.h92
-rw-r--r--drivers/opus/celt/pitch.c541
-rw-r--r--drivers/opus/celt/pitch.h220
-rw-r--r--drivers/opus/celt/quant_bands.c553
-rw-r--r--drivers/opus/celt/quant_bands.h66
-rw-r--r--drivers/opus/celt/rate.c636
-rw-r--r--drivers/opus/celt/rate.h101
-rw-r--r--drivers/opus/celt/stack_alloc.h184
-rw-r--r--drivers/opus/celt/static_modes_fixed.h892
-rw-r--r--drivers/opus/celt/static_modes_fixed_arm_ne10.h388
-rw-r--r--drivers/opus/celt/static_modes_float.h888
-rw-r--r--drivers/opus/celt/static_modes_float_arm_ne10.h404
-rw-r--r--drivers/opus/celt/vq.c405
-rw-r--r--drivers/opus/celt/vq.h75
-rw-r--r--drivers/opus/celt/x86/celt_lpc_sse.c129
-rw-r--r--drivers/opus/celt/x86/celt_lpc_sse.h65
-rw-r--r--drivers/opus/celt/x86/pitch_sse.c182
-rw-r--r--drivers/opus/celt/x86/pitch_sse.h189
-rw-r--r--drivers/opus/celt/x86/pitch_sse2.c92
-rw-r--r--drivers/opus/celt/x86/pitch_sse4_1.c192
-rw-r--r--drivers/opus/celt/x86/x86_celt_map.c152
-rw-r--r--drivers/opus/celt/x86/x86cpu.c154
-rw-r--r--drivers/opus/celt/x86/x86cpu.h93
-rw-r--r--drivers/opus/http.c3427
-rw-r--r--drivers/opus/info.c751
-rw-r--r--drivers/opus/internal.c40
-rw-r--r--drivers/opus/internal.h254
-rw-r--r--drivers/opus/mlp.c142
-rw-r--r--drivers/opus/mlp.h43
-rw-r--r--drivers/opus/mlp_data.c106
-rw-r--r--drivers/opus/opus.c347
-rw-r--r--drivers/opus/opus.h981
-rw-r--r--drivers/opus/opus_compare.c379
-rw-r--r--drivers/opus/opus_config.h133
-rw-r--r--drivers/opus/opus_custom.h342
-rw-r--r--drivers/opus/opus_decoder.c978
-rw-r--r--drivers/opus/opus_defines.h753
-rw-r--r--drivers/opus/opus_encoder.c2524
-rw-r--r--drivers/opus/opus_multistream.c89
-rw-r--r--drivers/opus/opus_multistream.h660
-rw-r--r--drivers/opus/opus_multistream_decoder.c534
-rw-r--r--drivers/opus/opus_multistream_encoder.c1217
-rw-r--r--drivers/opus/opus_private.h134
-rw-r--r--drivers/opus/opus_types.h159
-rw-r--r--drivers/opus/opusfile.c3275
-rw-r--r--drivers/opus/opusfile.h2148
-rw-r--r--drivers/opus/repacketizer.c343
-rw-r--r--drivers/opus/repacketizer_demo.c214
-rw-r--r--drivers/opus/silk/A2NLSF.c264
-rw-r--r--drivers/opus/silk/API.h134
-rw-r--r--drivers/opus/silk/CNG.c178
-rw-r--r--drivers/opus/silk/HP_variable_cutoff.c74
-rw-r--r--drivers/opus/silk/Inlines.h188
-rw-r--r--drivers/opus/silk/LPC_analysis_filter.c105
-rw-r--r--drivers/opus/silk/LPC_inv_pred_gain.c151
-rw-r--r--drivers/opus/silk/LP_variable_cutoff.c132
-rw-r--r--drivers/opus/silk/MacroCount.h718
-rw-r--r--drivers/opus/silk/MacroDebug.h952
-rw-r--r--drivers/opus/silk/NLSF2A.c175
-rw-r--r--drivers/opus/silk/NLSF_VQ.c65
-rw-r--r--drivers/opus/silk/NLSF_VQ_weights_laroia.c77
-rw-r--r--drivers/opus/silk/NLSF_decode.c98
-rw-r--r--drivers/opus/silk/NLSF_del_dec_quant.c214
-rw-r--r--drivers/opus/silk/NLSF_encode.c133
-rw-r--r--drivers/opus/silk/NLSF_stabilize.c139
-rw-r--r--drivers/opus/silk/NLSF_unpack.c52
-rw-r--r--drivers/opus/silk/NSQ.c450
-rw-r--r--drivers/opus/silk/NSQ_del_dec.c721
-rw-r--r--drivers/opus/silk/PLC.c442
-rw-r--r--drivers/opus/silk/PLC.h62
-rw-r--r--drivers/opus/silk/SigProc_FIX.h615
-rw-r--r--drivers/opus/silk/VAD.c359
-rw-r--r--drivers/opus/silk/VQ_WMat_EC.c117
-rw-r--r--drivers/opus/silk/ana_filt_bank_1.c71
-rw-r--r--drivers/opus/silk/arm/SigProc_FIX_armv4.h47
-rw-r--r--drivers/opus/silk/arm/SigProc_FIX_armv5e.h61
-rw-r--r--drivers/opus/silk/arm/macros_armv4.h103
-rw-r--r--drivers/opus/silk/arm/macros_armv5e.h213
-rw-r--r--drivers/opus/silk/biquad_alt.c75
-rw-r--r--drivers/opus/silk/bwexpander.c48
-rw-r--r--drivers/opus/silk/bwexpander_32.c47
-rw-r--r--drivers/opus/silk/check_control_input.c103
-rw-r--r--drivers/opus/silk/code_signs.c112
-rw-r--r--drivers/opus/silk/control.h142
-rw-r--r--drivers/opus/silk/control_SNR.c73
-rw-r--r--drivers/opus/silk/control_audio_bandwidth.c123
-rw-r--r--drivers/opus/silk/control_codec.c425
-rw-r--r--drivers/opus/silk/debug.c167
-rw-r--r--drivers/opus/silk/debug.h279
-rw-r--r--drivers/opus/silk/dec_API.c416
-rw-r--r--drivers/opus/silk/decode_core.c236
-rw-r--r--drivers/opus/silk/decode_frame.c126
-rw-r--r--drivers/opus/silk/decode_indices.c148
-rw-r--r--drivers/opus/silk/decode_parameters.c112
-rw-r--r--drivers/opus/silk/decode_pitch.c74
-rw-r--r--drivers/opus/silk/decode_pulses.c112
-rw-r--r--drivers/opus/silk/decoder_set_fs.c105
-rw-r--r--drivers/opus/silk/define.h235
-rw-r--r--drivers/opus/silk/enc_API.c560
-rw-r--r--drivers/opus/silk/encode_indices.c178
-rw-r--r--drivers/opus/silk/encode_pulses.c203
-rw-r--r--drivers/opus/silk/errors.h98
-rw-r--r--drivers/opus/silk/fixed/LTP_analysis_filter_FIX.c87
-rw-r--r--drivers/opus/silk/fixed/LTP_scale_ctrl_FIX.c50
-rw-r--r--drivers/opus/silk/fixed/apply_sine_window_FIX.c98
-rw-r--r--drivers/opus/silk/fixed/autocorr_FIX.c45
-rw-r--r--drivers/opus/silk/fixed/burg_modified_FIX.c272
-rw-r--r--drivers/opus/silk/fixed/corrMatrix_FIX.c155
-rw-r--r--drivers/opus/silk/fixed/encode_frame_FIX.c384
-rw-r--r--drivers/opus/silk/fixed/find_LPC_FIX.c148
-rw-r--r--drivers/opus/silk/fixed/find_LTP_FIX.c242
-rw-r--r--drivers/opus/silk/fixed/find_pitch_lags_FIX.c142
-rw-r--r--drivers/opus/silk/fixed/find_pred_coefs_FIX.c145
-rw-r--r--drivers/opus/silk/fixed/k2a_FIX.c50
-rw-r--r--drivers/opus/silk/fixed/k2a_Q16_FIX.c50
-rw-r--r--drivers/opus/silk/fixed/main_FIX.h272
-rw-r--r--drivers/opus/silk/fixed/mips/noise_shape_analysis_FIX_mipsr1.h336
-rw-r--r--drivers/opus/silk/fixed/mips/prefilter_FIX_mipsr1.h181
-rw-r--r--drivers/opus/silk/fixed/mips/warped_autocorrelation_FIX_mipsr1.h162
-rw-r--r--drivers/opus/silk/fixed/noise_shape_analysis_FIX.c448
-rw-r--r--drivers/opus/silk/fixed/pitch_analysis_core_FIX.c743
-rw-r--r--drivers/opus/silk/fixed/prefilter_FIX.c218
-rw-r--r--drivers/opus/silk/fixed/process_gains_FIX.c114
-rw-r--r--drivers/opus/silk/fixed/regularize_correlations_FIX.c44
-rw-r--r--drivers/opus/silk/fixed/residual_energy16_FIX.c100
-rw-r--r--drivers/opus/silk/fixed/residual_energy_FIX.c95
-rw-r--r--drivers/opus/silk/fixed/schur64_FIX.c89
-rw-r--r--drivers/opus/silk/fixed/schur_FIX.c103
-rw-r--r--drivers/opus/silk/fixed/solve_LS_FIX.c246
-rw-r--r--drivers/opus/silk/fixed/structs_FIX.h134
-rw-r--r--drivers/opus/silk/fixed/vector_ops_FIX.c99
-rw-r--r--drivers/opus/silk/fixed/warped_autocorrelation_FIX.c92
-rw-r--r--drivers/opus/silk/fixed/x86/burg_modified_FIX_sse.c372
-rw-r--r--drivers/opus/silk/fixed/x86/prefilter_FIX_sse.c157
-rw-r--r--drivers/opus/silk/fixed/x86/vector_ops_FIX_sse.c85
-rw-r--r--drivers/opus/silk/float/LPC_analysis_filter_FLP.c246
-rw-r--r--drivers/opus/silk/float/LPC_inv_pred_gain_FLP.c73
-rw-r--r--drivers/opus/silk/float/LTP_analysis_filter_FLP.c72
-rw-r--r--drivers/opus/silk/float/LTP_scale_ctrl_FLP.c49
-rw-r--r--drivers/opus/silk/float/SigProc_FLP.h204
-rw-r--r--drivers/opus/silk/float/apply_sine_window_FLP.c78
-rw-r--r--drivers/opus/silk/float/autocorrelation_FLP.c49
-rw-r--r--drivers/opus/silk/float/burg_modified_FLP.c183
-rw-r--r--drivers/opus/silk/float/bwexpander_FLP.c46
-rw-r--r--drivers/opus/silk/float/corrMatrix_FLP.c90
-rw-r--r--drivers/opus/silk/float/encode_frame_FLP.c369
-rw-r--r--drivers/opus/silk/float/energy_FLP.c57
-rw-r--r--drivers/opus/silk/float/find_LPC_FLP.c101
-rw-r--r--drivers/opus/silk/float/find_LTP_FLP.c129
-rw-r--r--drivers/opus/silk/float/find_pitch_lags_FLP.c129
-rw-r--r--drivers/opus/silk/float/find_pred_coefs_FLP.c115
-rw-r--r--drivers/opus/silk/float/inner_product_FLP.c57
-rw-r--r--drivers/opus/silk/float/k2a_FLP.c50
-rw-r--r--drivers/opus/silk/float/levinsondurbin_FLP.c78
-rw-r--r--drivers/opus/silk/float/main_FLP.h313
-rw-r--r--drivers/opus/silk/float/noise_shape_analysis_FLP.c362
-rw-r--r--drivers/opus/silk/float/pitch_analysis_core_FLP.c627
-rw-r--r--drivers/opus/silk/float/prefilter_FLP.c203
-rw-r--r--drivers/opus/silk/float/process_gains_FLP.c100
-rw-r--r--drivers/opus/silk/float/regularize_correlations_FLP.c45
-rw-r--r--drivers/opus/silk/float/residual_energy_FLP.c114
-rw-r--r--drivers/opus/silk/float/scale_copy_vector_FLP.c54
-rw-r--r--drivers/opus/silk/float/scale_vector_FLP.c53
-rw-r--r--drivers/opus/silk/float/schur_FLP.c67
-rw-r--r--drivers/opus/silk/float/solve_LS_FLP.c204
-rw-r--r--drivers/opus/silk/float/sort_FLP.c80
-rw-r--r--drivers/opus/silk/float/structs_FLP.h132
-rw-r--r--drivers/opus/silk/float/warped_autocorrelation_FLP.c70
-rw-r--r--drivers/opus/silk/float/wrappers_FLP.c199
-rw-r--r--drivers/opus/silk/gain_quant.c138
-rw-r--r--drivers/opus/silk/init_decoder.c53
-rw-r--r--drivers/opus/silk/init_encoder.c61
-rw-r--r--drivers/opus/silk/inner_prod_aligned.c44
-rw-r--r--drivers/opus/silk/interpolate.c48
-rw-r--r--drivers/opus/silk/lin2log.c43
-rw-r--r--drivers/opus/silk/log2lin.c55
-rw-r--r--drivers/opus/silk/macros.h150
-rw-r--r--drivers/opus/silk/main.h471
-rw-r--r--drivers/opus/silk/mips/NSQ_del_dec_mipsr1.h402
-rw-r--r--drivers/opus/silk/mips/macros_mipsr1.h92
-rw-r--r--drivers/opus/silk/mips/sigproc_fix_mipsr1.h65
-rw-r--r--drivers/opus/silk/pitch_est_defines.h88
-rw-r--r--drivers/opus/silk/pitch_est_tables.c96
-rw-r--r--drivers/opus/silk/process_NLSFs.c102
-rw-r--r--drivers/opus/silk/quant_LTP_gains.c126
-rw-r--r--drivers/opus/silk/resampler.c212
-rw-r--r--drivers/opus/silk/resampler_down2.c71
-rw-r--r--drivers/opus/silk/resampler_down2_3.c100
-rw-r--r--drivers/opus/silk/resampler_private.h88
-rw-r--r--drivers/opus/silk/resampler_private_AR2.c52
-rw-r--r--drivers/opus/silk/resampler_private_IIR_FIR.c104
-rw-r--r--drivers/opus/silk/resampler_private_down_FIR.c191
-rw-r--r--drivers/opus/silk/resampler_private_up2_HQ.c110
-rw-r--r--drivers/opus/silk/resampler_rom.c93
-rw-r--r--drivers/opus/silk/resampler_rom.h68
-rw-r--r--drivers/opus/silk/resampler_structs.h60
-rw-r--r--drivers/opus/silk/shell_coder.c148
-rw-r--r--drivers/opus/silk/sigm_Q15.c73
-rw-r--r--drivers/opus/silk/sort.c151
-rw-r--r--drivers/opus/silk/stereo_LR_to_MS.c226
-rw-r--r--drivers/opus/silk/stereo_MS_to_LR.c82
-rw-r--r--drivers/opus/silk/stereo_decode_pred.c70
-rw-r--r--drivers/opus/silk/stereo_encode_pred.c59
-rw-r--r--drivers/opus/silk/stereo_find_predictor.c76
-rw-r--r--drivers/opus/silk/stereo_quant_pred.c70
-rw-r--r--drivers/opus/silk/structs.h327
-rw-r--r--drivers/opus/silk/sum_sqr_shift.c83
-rw-r--r--drivers/opus/silk/table_LSF_cos.c67
-rw-r--r--drivers/opus/silk/tables.h122
-rw-r--r--drivers/opus/silk/tables_LTP.c293
-rw-r--r--drivers/opus/silk/tables_NLSF_CB_NB_MB.c156
-rw-r--r--drivers/opus/silk/tables_NLSF_CB_WB.c195
-rw-r--r--drivers/opus/silk/tables_gain.c60
-rw-r--r--drivers/opus/silk/tables_other.c135
-rw-r--r--drivers/opus/silk/tables_pitch_lag.c66
-rw-r--r--drivers/opus/silk/tables_pulses_per_block.c261
-rw-r--r--drivers/opus/silk/tuning_parameters.h171
-rw-r--r--drivers/opus/silk/typedef.h78
-rw-r--r--drivers/opus/silk/x86/NSQ_del_dec_sse.c854
-rw-r--r--drivers/opus/silk/x86/NSQ_sse.c717
-rw-r--r--drivers/opus/silk/x86/SigProc_FIX_sse.h91
-rw-r--r--drivers/opus/silk/x86/VAD_sse.c274
-rw-r--r--drivers/opus/silk/x86/VQ_WMat_EC_sse.c139
-rw-r--r--drivers/opus/silk/x86/main_sse.h273
-rw-r--r--drivers/opus/silk/x86/x86_silk_map.c171
-rw-r--r--drivers/opus/stream.c364
-rw-r--r--drivers/opus/tansig_table.h45
-rw-r--r--drivers/opus/wincerts.c168
-rw-r--r--drivers/opus/winerrno.h90
-rw-r--r--drivers/register_driver_types.cpp55
-rw-r--r--drivers/vorbis/COPYING28
-rw-r--r--drivers/vorbis/SCsub36
-rw-r--r--drivers/vorbis/analysis.c120
-rw-r--r--drivers/vorbis/audio_stream_ogg_vorbis.cpp430
-rw-r--r--drivers/vorbis/audio_stream_ogg_vorbis.h142
-rw-r--r--drivers/vorbis/backends.h144
-rw-r--r--drivers/vorbis/barkmel.c64
-rw-r--r--drivers/vorbis/bitrate.c253
-rw-r--r--drivers/vorbis/bitrate.h59
-rw-r--r--drivers/vorbis/block.c1047
-rw-r--r--drivers/vorbis/books/coupled/res_books_51.h12274
-rw-r--r--drivers/vorbis/books/coupled/res_books_stereo.h15783
-rw-r--r--drivers/vorbis/books/floor/floor_books.h1547
-rw-r--r--drivers/vorbis/books/uncoupled/res_books_uncoupled.h7758
-rw-r--r--drivers/vorbis/codebook.c490
-rw-r--r--drivers/vorbis/codebook.h118
-rw-r--r--drivers/vorbis/codec.h243
-rw-r--r--drivers/vorbis/codec_internal.h167
-rw-r--r--drivers/vorbis/envelope.c375
-rw-r--r--drivers/vorbis/envelope.h80
-rw-r--r--drivers/vorbis/floor0.c224
-rw-r--r--drivers/vorbis/floor1.c1087
-rw-r--r--drivers/vorbis/highlevel.h58
-rw-r--r--drivers/vorbis/info.c673
-rw-r--r--drivers/vorbis/lookup.c94
-rw-r--r--drivers/vorbis/lookup.h32
-rw-r--r--drivers/vorbis/lookup_data.h192
-rw-r--r--drivers/vorbis/lpc.c160
-rw-r--r--drivers/vorbis/lpc.h29
-rw-r--r--drivers/vorbis/lsp.c454
-rw-r--r--drivers/vorbis/lsp.h28
-rw-r--r--drivers/vorbis/mapping0.c810
-rw-r--r--drivers/vorbis/masking.h785
-rw-r--r--drivers/vorbis/mdct.c563
-rw-r--r--drivers/vorbis/mdct.h71
-rw-r--r--drivers/vorbis/misc.h58
-rw-r--r--drivers/vorbis/modes/floor_all.h260
-rw-r--r--drivers/vorbis/modes/psych_11.h51
-rw-r--r--drivers/vorbis/modes/psych_16.h133
-rw-r--r--drivers/vorbis/modes/psych_44.h642
-rw-r--r--drivers/vorbis/modes/psych_8.h101
-rw-r--r--drivers/vorbis/modes/residue_16.h163
-rw-r--r--drivers/vorbis/modes/residue_44.h292
-rw-r--r--drivers/vorbis/modes/residue_44p51.h451
-rw-r--r--drivers/vorbis/modes/residue_44u.h318
-rw-r--r--drivers/vorbis/modes/residue_8.h109
-rw-r--r--drivers/vorbis/modes/setup_11.h143
-rw-r--r--drivers/vorbis/modes/setup_16.h153
-rw-r--r--drivers/vorbis/modes/setup_22.h128
-rw-r--r--drivers/vorbis/modes/setup_32.h132
-rw-r--r--drivers/vorbis/modes/setup_44.h117
-rw-r--r--drivers/vorbis/modes/setup_44p51.h74
-rw-r--r--drivers/vorbis/modes/setup_44u.h74
-rw-r--r--drivers/vorbis/modes/setup_8.h149
-rw-r--r--drivers/vorbis/modes/setup_X.h225
-rw-r--r--drivers/vorbis/os.h191
-rw-r--r--drivers/vorbis/psy.c1206
-rw-r--r--drivers/vorbis/psy.h154
-rw-r--r--drivers/vorbis/psytune.c524
-rw-r--r--drivers/vorbis/registry.c45
-rw-r--r--drivers/vorbis/registry.h32
-rw-r--r--drivers/vorbis/res0.c890
-rw-r--r--drivers/vorbis/scales.h90
-rw-r--r--drivers/vorbis/sharedbook.c586
-rw-r--r--drivers/vorbis/smallft.c1255
-rw-r--r--drivers/vorbis/smallft.h34
-rw-r--r--drivers/vorbis/synthesis.c180
-rw-r--r--drivers/vorbis/tone.c54
-rw-r--r--drivers/vorbis/vorbisenc.c1224
-rw-r--r--drivers/vorbis/vorbisenc.h436
-rw-r--r--drivers/vorbis/vorbisfile.c2425
-rw-r--r--drivers/vorbis/vorbisfile.h206
-rw-r--r--drivers/vorbis/window.c2136
-rw-r--r--drivers/vorbis/window.h26
376 files changed, 0 insertions, 141661 deletions
diff --git a/drivers/SCsub b/drivers/SCsub
index 5effc6b2d4..26da90bfd1 100644
--- a/drivers/SCsub
+++ b/drivers/SCsub
@@ -4,7 +4,6 @@ env_drivers = env.Clone()
env.drivers_sources=[]
#env.add_source_files(env.drivers_sources,"*.cpp")
-env_drivers.Append(CPPPATH=["vorbis"])
Export('env_drivers')
@@ -32,12 +31,6 @@ if (env["builtin_zlib"]=="yes"):
SConscript("rtaudio/SCsub");
SConscript("nrex/SCsub");
SConscript("chibi/SCsub");
-if (env["vorbis"]=="yes" or env["theoralib"]=="yes" or env["opus"]=="yes"):
- SConscript("ogg/SCsub");
-if (env["vorbis"]=="yes"):
- SConscript("vorbis/SCsub");
-if (env["opus"]=="yes"):
- SConscript('opus/SCsub');
if (env["tools"]=="yes"):
SConscript("convex_decomp/SCsub");
diff --git a/drivers/ogg/COPYING b/drivers/ogg/COPYING
deleted file mode 100644
index 6111c6c5a6..0000000000
--- a/drivers/ogg/COPYING
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright (c) 2002, Xiph.org Foundation
-
-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.
diff --git a/drivers/ogg/SCsub b/drivers/ogg/SCsub
deleted file mode 100644
index 3ee1bb6408..0000000000
--- a/drivers/ogg/SCsub
+++ /dev/null
@@ -1,9 +0,0 @@
-Import('env')
-
-ogg_sources = [
-
- "ogg/bitwise.c",
- "ogg/framing.c",
-]
-
-env.drivers_sources+=ogg_sources
diff --git a/drivers/ogg/bitwise.c b/drivers/ogg/bitwise.c
deleted file mode 100644
index 145901d185..0000000000
--- a/drivers/ogg/bitwise.c
+++ /dev/null
@@ -1,1088 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE Ogg CONTAINER 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-2014 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: packing variable sized words into an octet stream
- last mod: $Id: bitwise.c 19149 2014-05-27 16:26:23Z giles $
-
- ********************************************************************/
-
-/* We're 'LSb' endian; if we write a word but read individual bits,
- then we'll read the lsb first */
-
-#include <string.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <ogg/ogg.h>
-
-#define BUFFER_INCREMENT 256
-
-static const unsigned long mask[]=
-{0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f,
- 0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff,
- 0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff,
- 0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff,
- 0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff,
- 0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff,
- 0x3fffffff,0x7fffffff,0xffffffff };
-
-static const unsigned int mask8B[]=
-{0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
-
-void oggpack_writeinit(oggpack_buffer *b){
- memset(b,0,sizeof(*b));
- b->ptr=b->buffer=_ogg_malloc(BUFFER_INCREMENT);
- b->buffer[0]='\0';
- b->storage=BUFFER_INCREMENT;
-}
-
-void oggpackB_writeinit(oggpack_buffer *b){
- oggpack_writeinit(b);
-}
-
-int oggpack_writecheck(oggpack_buffer *b){
- if(!b->ptr || !b->storage)return -1;
- return 0;
-}
-
-int oggpackB_writecheck(oggpack_buffer *b){
- return oggpack_writecheck(b);
-}
-
-void oggpack_writetrunc(oggpack_buffer *b,long bits){
- long bytes=bits>>3;
- if(b->ptr){
- bits-=bytes*8;
- b->ptr=b->buffer+bytes;
- b->endbit=bits;
- b->endbyte=bytes;
- *b->ptr&=mask[bits];
- }
-}
-
-void oggpackB_writetrunc(oggpack_buffer *b,long bits){
- long bytes=bits>>3;
- if(b->ptr){
- bits-=bytes*8;
- b->ptr=b->buffer+bytes;
- b->endbit=bits;
- b->endbyte=bytes;
- *b->ptr&=mask8B[bits];
- }
-}
-
-/* Takes only up to 32 bits. */
-void oggpack_write(oggpack_buffer *b,unsigned long value,int bits){
- if(bits<0 || bits>32) goto err;
- if(b->endbyte>=b->storage-4){
- void *ret;
- if(!b->ptr)return;
- if(b->storage>LONG_MAX-BUFFER_INCREMENT) goto err;
- ret=_ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT);
- if(!ret) goto err;
- b->buffer=ret;
- b->storage+=BUFFER_INCREMENT;
- b->ptr=b->buffer+b->endbyte;
- }
-
- value&=mask[bits];
- bits+=b->endbit;
-
- b->ptr[0]|=value<<b->endbit;
-
- if(bits>=8){
- b->ptr[1]=(unsigned char)(value>>(8-b->endbit));
- if(bits>=16){
- b->ptr[2]=(unsigned char)(value>>(16-b->endbit));
- if(bits>=24){
- b->ptr[3]=(unsigned char)(value>>(24-b->endbit));
- if(bits>=32){
- if(b->endbit)
- b->ptr[4]=(unsigned char)(value>>(32-b->endbit));
- else
- b->ptr[4]=0;
- }
- }
- }
- }
-
- b->endbyte+=bits/8;
- b->ptr+=bits/8;
- b->endbit=bits&7;
- return;
- err:
- oggpack_writeclear(b);
-}
-
-/* Takes only up to 32 bits. */
-void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits){
- if(bits<0 || bits>32) goto err;
- if(b->endbyte>=b->storage-4){
- void *ret;
- if(!b->ptr)return;
- if(b->storage>LONG_MAX-BUFFER_INCREMENT) goto err;
- ret=_ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT);
- if(!ret) goto err;
- b->buffer=ret;
- b->storage+=BUFFER_INCREMENT;
- b->ptr=b->buffer+b->endbyte;
- }
-
- value=(value&mask[bits])<<(32-bits);
- bits+=b->endbit;
-
- b->ptr[0]|=value>>(24+b->endbit);
-
- if(bits>=8){
- b->ptr[1]=(unsigned char)(value>>(16+b->endbit));
- if(bits>=16){
- b->ptr[2]=(unsigned char)(value>>(8+b->endbit));
- if(bits>=24){
- b->ptr[3]=(unsigned char)(value>>(b->endbit));
- if(bits>=32){
- if(b->endbit)
- b->ptr[4]=(unsigned char)(value<<(8-b->endbit));
- else
- b->ptr[4]=0;
- }
- }
- }
- }
-
- b->endbyte+=bits/8;
- b->ptr+=bits/8;
- b->endbit=bits&7;
- return;
- err:
- oggpack_writeclear(b);
-}
-
-void oggpack_writealign(oggpack_buffer *b){
- int bits=8-b->endbit;
- if(bits<8)
- oggpack_write(b,0,bits);
-}
-
-void oggpackB_writealign(oggpack_buffer *b){
- int bits=8-b->endbit;
- if(bits<8)
- oggpackB_write(b,0,bits);
-}
-
-static void oggpack_writecopy_helper(oggpack_buffer *b,
- void *source,
- long bits,
- void (*w)(oggpack_buffer *,
- unsigned long,
- int),
- int msb){
- unsigned char *ptr=(unsigned char *)source;
-
- long bytes=bits/8;
- long pbytes=(b->endbit+bits)/8;
- bits-=bytes*8;
-
- /* expand storage up-front */
- if(b->endbyte+pbytes>=b->storage){
- void *ret;
- if(!b->ptr) goto err;
- if(b->storage>b->endbyte+pbytes+BUFFER_INCREMENT) goto err;
- b->storage=b->endbyte+pbytes+BUFFER_INCREMENT;
- ret=_ogg_realloc(b->buffer,b->storage);
- if(!ret) goto err;
- b->buffer=ret;
- b->ptr=b->buffer+b->endbyte;
- }
-
- /* copy whole octets */
- if(b->endbit){
- int i;
- /* unaligned copy. Do it the hard way. */
- for(i=0;i<bytes;i++)
- w(b,(unsigned long)(ptr[i]),8);
- }else{
- /* aligned block copy */
- memmove(b->ptr,source,bytes);
- b->ptr+=bytes;
- b->endbyte+=bytes;
- *b->ptr=0;
- }
-
- /* copy trailing bits */
- if(bits){
- if(msb)
- w(b,(unsigned long)(ptr[bytes]>>(8-bits)),bits);
- else
- w(b,(unsigned long)(ptr[bytes]),bits);
- }
- return;
- err:
- oggpack_writeclear(b);
-}
-
-void oggpack_writecopy(oggpack_buffer *b,void *source,long bits){
- oggpack_writecopy_helper(b,source,bits,oggpack_write,0);
-}
-
-void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits){
- oggpack_writecopy_helper(b,source,bits,oggpackB_write,1);
-}
-
-void oggpack_reset(oggpack_buffer *b){
- if(!b->ptr)return;
- b->ptr=b->buffer;
- b->buffer[0]=0;
- b->endbit=b->endbyte=0;
-}
-
-void oggpackB_reset(oggpack_buffer *b){
- oggpack_reset(b);
-}
-
-void oggpack_writeclear(oggpack_buffer *b){
- if(b->buffer)_ogg_free(b->buffer);
- memset(b,0,sizeof(*b));
-}
-
-void oggpackB_writeclear(oggpack_buffer *b){
- oggpack_writeclear(b);
-}
-
-void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){
- memset(b,0,sizeof(*b));
- b->buffer=b->ptr=buf;
- b->storage=bytes;
-}
-
-void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){
- oggpack_readinit(b,buf,bytes);
-}
-
-/* Read in bits without advancing the bitptr; bits <= 32 */
-long oggpack_look(oggpack_buffer *b,int bits){
- unsigned long ret;
- unsigned long m;
-
- if(bits<0 || bits>32) return -1;
- m=mask[bits];
- bits+=b->endbit;
-
- if(b->endbyte >= b->storage-4){
- /* not the main path */
- if(b->endbyte > b->storage-((bits+7)>>3)) return -1;
- /* special case to avoid reading b->ptr[0], which might be past the end of
- the buffer; also skips some useless accounting */
- else if(!bits)return(0L);
- }
-
- ret=b->ptr[0]>>b->endbit;
- if(bits>8){
- ret|=b->ptr[1]<<(8-b->endbit);
- if(bits>16){
- ret|=b->ptr[2]<<(16-b->endbit);
- if(bits>24){
- ret|=b->ptr[3]<<(24-b->endbit);
- if(bits>32 && b->endbit)
- ret|=b->ptr[4]<<(32-b->endbit);
- }
- }
- }
- return(m&ret);
-}
-
-/* Read in bits without advancing the bitptr; bits <= 32 */
-long oggpackB_look(oggpack_buffer *b,int bits){
- unsigned long ret;
- int m=32-bits;
-
- if(m<0 || m>32) return -1;
- bits+=b->endbit;
-
- if(b->endbyte >= b->storage-4){
- /* not the main path */
- if(b->endbyte > b->storage-((bits+7)>>3)) return -1;
- /* special case to avoid reading b->ptr[0], which might be past the end of
- the buffer; also skips some useless accounting */
- else if(!bits)return(0L);
- }
-
- ret=b->ptr[0]<<(24+b->endbit);
- if(bits>8){
- ret|=b->ptr[1]<<(16+b->endbit);
- if(bits>16){
- ret|=b->ptr[2]<<(8+b->endbit);
- if(bits>24){
- ret|=b->ptr[3]<<(b->endbit);
- if(bits>32 && b->endbit)
- ret|=b->ptr[4]>>(8-b->endbit);
- }
- }
- }
- return ((ret&0xffffffff)>>(m>>1))>>((m+1)>>1);
-}
-
-long oggpack_look1(oggpack_buffer *b){
- if(b->endbyte>=b->storage)return(-1);
- return((b->ptr[0]>>b->endbit)&1);
-}
-
-long oggpackB_look1(oggpack_buffer *b){
- if(b->endbyte>=b->storage)return(-1);
- return((b->ptr[0]>>(7-b->endbit))&1);
-}
-
-void oggpack_adv(oggpack_buffer *b,int bits){
- bits+=b->endbit;
-
- if(b->endbyte > b->storage-((bits+7)>>3)) goto overflow;
-
- b->ptr+=bits/8;
- b->endbyte+=bits/8;
- b->endbit=bits&7;
- return;
-
- overflow:
- b->ptr=NULL;
- b->endbyte=b->storage;
- b->endbit=1;
-}
-
-void oggpackB_adv(oggpack_buffer *b,int bits){
- oggpack_adv(b,bits);
-}
-
-void oggpack_adv1(oggpack_buffer *b){
- if(++(b->endbit)>7){
- b->endbit=0;
- b->ptr++;
- b->endbyte++;
- }
-}
-
-void oggpackB_adv1(oggpack_buffer *b){
- oggpack_adv1(b);
-}
-
-/* bits <= 32 */
-long oggpack_read(oggpack_buffer *b,int bits){
- long ret;
- unsigned long m;
-
- if(bits<0 || bits>32) goto err;
- m=mask[bits];
- bits+=b->endbit;
-
- if(b->endbyte >= b->storage-4){
- /* not the main path */
- if(b->endbyte > b->storage-((bits+7)>>3)) goto overflow;
- /* special case to avoid reading b->ptr[0], which might be past the end of
- the buffer; also skips some useless accounting */
- else if(!bits)return(0L);
- }
-
- ret=b->ptr[0]>>b->endbit;
- if(bits>8){
- ret|=b->ptr[1]<<(8-b->endbit);
- if(bits>16){
- ret|=b->ptr[2]<<(16-b->endbit);
- if(bits>24){
- ret|=b->ptr[3]<<(24-b->endbit);
- if(bits>32 && b->endbit){
- ret|=b->ptr[4]<<(32-b->endbit);
- }
- }
- }
- }
- ret&=m;
- b->ptr+=bits/8;
- b->endbyte+=bits/8;
- b->endbit=bits&7;
- return ret;
-
- overflow:
- err:
- b->ptr=NULL;
- b->endbyte=b->storage;
- b->endbit=1;
- return -1L;
-}
-
-/* bits <= 32 */
-long oggpackB_read(oggpack_buffer *b,int bits){
- long ret;
- long m=32-bits;
-
- if(m<0 || m>32) goto err;
- bits+=b->endbit;
-
- if(b->endbyte+4>=b->storage){
- /* not the main path */
- if(b->endbyte > b->storage-((bits+7)>>3)) goto overflow;
- /* special case to avoid reading b->ptr[0], which might be past the end of
- the buffer; also skips some useless accounting */
- else if(!bits)return(0L);
- }
-
- ret=b->ptr[0]<<(24+b->endbit);
- if(bits>8){
- ret|=b->ptr[1]<<(16+b->endbit);
- if(bits>16){
- ret|=b->ptr[2]<<(8+b->endbit);
- if(bits>24){
- ret|=b->ptr[3]<<(b->endbit);
- if(bits>32 && b->endbit)
- ret|=b->ptr[4]>>(8-b->endbit);
- }
- }
- }
- ret=((ret&0xffffffffUL)>>(m>>1))>>((m+1)>>1);
-
- b->ptr+=bits/8;
- b->endbyte+=bits/8;
- b->endbit=bits&7;
- return ret;
-
- overflow:
- err:
- b->ptr=NULL;
- b->endbyte=b->storage;
- b->endbit=1;
- return -1L;
-}
-
-long oggpack_read1(oggpack_buffer *b){
- long ret;
-
- if(b->endbyte >= b->storage) goto overflow;
- ret=(b->ptr[0]>>b->endbit)&1;
-
- b->endbit++;
- if(b->endbit>7){
- b->endbit=0;
- b->ptr++;
- b->endbyte++;
- }
- return ret;
-
- overflow:
- b->ptr=NULL;
- b->endbyte=b->storage;
- b->endbit=1;
- return -1L;
-}
-
-long oggpackB_read1(oggpack_buffer *b){
- long ret;
-
- if(b->endbyte >= b->storage) goto overflow;
- ret=(b->ptr[0]>>(7-b->endbit))&1;
-
- b->endbit++;
- if(b->endbit>7){
- b->endbit=0;
- b->ptr++;
- b->endbyte++;
- }
- return ret;
-
- overflow:
- b->ptr=NULL;
- b->endbyte=b->storage;
- b->endbit=1;
- return -1L;
-}
-
-long oggpack_bytes(oggpack_buffer *b){
- return(b->endbyte+(b->endbit+7)/8);
-}
-
-long oggpack_bits(oggpack_buffer *b){
- return(b->endbyte*8+b->endbit);
-}
-
-long oggpackB_bytes(oggpack_buffer *b){
- return oggpack_bytes(b);
-}
-
-long oggpackB_bits(oggpack_buffer *b){
- return oggpack_bits(b);
-}
-
-unsigned char *oggpack_get_buffer(oggpack_buffer *b){
- return(b->buffer);
-}
-
-unsigned char *oggpackB_get_buffer(oggpack_buffer *b){
- return oggpack_get_buffer(b);
-}
-
-/* Self test of the bitwise routines; everything else is based on
- them, so they damned well better be solid. */
-
-#ifdef _V_SELFTEST
-#include <stdio.h>
-
-static int ilog(unsigned int v){
- int ret=0;
- while(v){
- ret++;
- v>>=1;
- }
- return(ret);
-}
-
-oggpack_buffer o;
-oggpack_buffer r;
-
-void report(char *in){
- fprintf(stderr,"%s",in);
- exit(1);
-}
-
-void cliptest(unsigned long *b,int vals,int bits,int *comp,int compsize){
- long bytes,i;
- unsigned char *buffer;
-
- oggpack_reset(&o);
- for(i=0;i<vals;i++)
- oggpack_write(&o,b[i],bits?bits:ilog(b[i]));
- buffer=oggpack_get_buffer(&o);
- bytes=oggpack_bytes(&o);
- if(bytes!=compsize)report("wrong number of bytes!\n");
- for(i=0;i<bytes;i++)if(buffer[i]!=comp[i]){
- for(i=0;i<bytes;i++)fprintf(stderr,"%x %x\n",(int)buffer[i],(int)comp[i]);
- report("wrote incorrect value!\n");
- }
- oggpack_readinit(&r,buffer,bytes);
- for(i=0;i<vals;i++){
- int tbit=bits?bits:ilog(b[i]);
- if(oggpack_look(&r,tbit)==-1)
- report("out of data!\n");
- if(oggpack_look(&r,tbit)!=(b[i]&mask[tbit]))
- report("looked at incorrect value!\n");
- if(tbit==1)
- if(oggpack_look1(&r)!=(b[i]&mask[tbit]))
- report("looked at single bit incorrect value!\n");
- if(tbit==1){
- if(oggpack_read1(&r)!=(b[i]&mask[tbit]))
- report("read incorrect single bit value!\n");
- }else{
- if(oggpack_read(&r,tbit)!=(b[i]&mask[tbit]))
- report("read incorrect value!\n");
- }
- }
- if(oggpack_bytes(&r)!=bytes)report("leftover bytes after read!\n");
-}
-
-void cliptestB(unsigned long *b,int vals,int bits,int *comp,int compsize){
- long bytes,i;
- unsigned char *buffer;
-
- oggpackB_reset(&o);
- for(i=0;i<vals;i++)
- oggpackB_write(&o,b[i],bits?bits:ilog(b[i]));
- buffer=oggpackB_get_buffer(&o);
- bytes=oggpackB_bytes(&o);
- if(bytes!=compsize)report("wrong number of bytes!\n");
- for(i=0;i<bytes;i++)if(buffer[i]!=comp[i]){
- for(i=0;i<bytes;i++)fprintf(stderr,"%x %x\n",(int)buffer[i],(int)comp[i]);
- report("wrote incorrect value!\n");
- }
- oggpackB_readinit(&r,buffer,bytes);
- for(i=0;i<vals;i++){
- int tbit=bits?bits:ilog(b[i]);
- if(oggpackB_look(&r,tbit)==-1)
- report("out of data!\n");
- if(oggpackB_look(&r,tbit)!=(b[i]&mask[tbit]))
- report("looked at incorrect value!\n");
- if(tbit==1)
- if(oggpackB_look1(&r)!=(b[i]&mask[tbit]))
- report("looked at single bit incorrect value!\n");
- if(tbit==1){
- if(oggpackB_read1(&r)!=(b[i]&mask[tbit]))
- report("read incorrect single bit value!\n");
- }else{
- if(oggpackB_read(&r,tbit)!=(b[i]&mask[tbit]))
- report("read incorrect value!\n");
- }
- }
- if(oggpackB_bytes(&r)!=bytes)report("leftover bytes after read!\n");
-}
-
-void copytest(int prefill, int copy){
- oggpack_buffer source_write;
- oggpack_buffer dest_write;
- oggpack_buffer source_read;
- oggpack_buffer dest_read;
- unsigned char *source;
- unsigned char *dest;
- long source_bytes,dest_bytes;
- int i;
-
- oggpack_writeinit(&source_write);
- oggpack_writeinit(&dest_write);
-
- for(i=0;i<(prefill+copy+7)/8;i++)
- oggpack_write(&source_write,(i^0x5a)&0xff,8);
- source=oggpack_get_buffer(&source_write);
- source_bytes=oggpack_bytes(&source_write);
-
- /* prefill */
- oggpack_writecopy(&dest_write,source,prefill);
-
- /* check buffers; verify end byte masking */
- dest=oggpack_get_buffer(&dest_write);
- dest_bytes=oggpack_bytes(&dest_write);
- if(dest_bytes!=(prefill+7)/8){
- fprintf(stderr,"wrong number of bytes after prefill! %ld!=%d\n",dest_bytes,(prefill+7)/8);
- exit(1);
- }
- oggpack_readinit(&source_read,source,source_bytes);
- oggpack_readinit(&dest_read,dest,dest_bytes);
-
- for(i=0;i<prefill;i+=8){
- int s=oggpack_read(&source_read,prefill-i<8?prefill-i:8);
- int d=oggpack_read(&dest_read,prefill-i<8?prefill-i:8);
- if(s!=d){
- fprintf(stderr,"prefill=%d mismatch! byte %d, %x!=%x\n",prefill,i/8,s,d);
- exit(1);
- }
- }
- if(prefill<dest_bytes){
- if(oggpack_read(&dest_read,dest_bytes-prefill)!=0){
- fprintf(stderr,"prefill=%d mismatch! trailing bits not zero\n",prefill);
- exit(1);
- }
- }
-
- /* second copy */
- oggpack_writecopy(&dest_write,source,copy);
-
- /* check buffers; verify end byte masking */
- dest=oggpack_get_buffer(&dest_write);
- dest_bytes=oggpack_bytes(&dest_write);
- if(dest_bytes!=(copy+prefill+7)/8){
- fprintf(stderr,"wrong number of bytes after prefill+copy! %ld!=%d\n",dest_bytes,(copy+prefill+7)/8);
- exit(1);
- }
- oggpack_readinit(&source_read,source,source_bytes);
- oggpack_readinit(&dest_read,dest,dest_bytes);
-
- for(i=0;i<prefill;i+=8){
- int s=oggpack_read(&source_read,prefill-i<8?prefill-i:8);
- int d=oggpack_read(&dest_read,prefill-i<8?prefill-i:8);
- if(s!=d){
- fprintf(stderr,"prefill=%d mismatch! byte %d, %x!=%x\n",prefill,i/8,s,d);
- exit(1);
- }
- }
-
- oggpack_readinit(&source_read,source,source_bytes);
- for(i=0;i<copy;i+=8){
- int s=oggpack_read(&source_read,copy-i<8?copy-i:8);
- int d=oggpack_read(&dest_read,copy-i<8?copy-i:8);
- if(s!=d){
- fprintf(stderr,"prefill=%d copy=%d mismatch! byte %d, %x!=%x\n",prefill,copy,i/8,s,d);
- exit(1);
- }
- }
-
- if(copy+prefill<dest_bytes){
- if(oggpack_read(&dest_read,dest_bytes-copy-prefill)!=0){
- fprintf(stderr,"prefill=%d copy=%d mismatch! trailing bits not zero\n",prefill,copy);
- exit(1);
- }
- }
-
- oggpack_writeclear(&source_write);
- oggpack_writeclear(&dest_write);
-
-
-}
-
-void copytestB(int prefill, int copy){
- oggpack_buffer source_write;
- oggpack_buffer dest_write;
- oggpack_buffer source_read;
- oggpack_buffer dest_read;
- unsigned char *source;
- unsigned char *dest;
- long source_bytes,dest_bytes;
- int i;
-
- oggpackB_writeinit(&source_write);
- oggpackB_writeinit(&dest_write);
-
- for(i=0;i<(prefill+copy+7)/8;i++)
- oggpackB_write(&source_write,(i^0x5a)&0xff,8);
- source=oggpackB_get_buffer(&source_write);
- source_bytes=oggpackB_bytes(&source_write);
-
- /* prefill */
- oggpackB_writecopy(&dest_write,source,prefill);
-
- /* check buffers; verify end byte masking */
- dest=oggpackB_get_buffer(&dest_write);
- dest_bytes=oggpackB_bytes(&dest_write);
- if(dest_bytes!=(prefill+7)/8){
- fprintf(stderr,"wrong number of bytes after prefill! %ld!=%d\n",dest_bytes,(prefill+7)/8);
- exit(1);
- }
- oggpackB_readinit(&source_read,source,source_bytes);
- oggpackB_readinit(&dest_read,dest,dest_bytes);
-
- for(i=0;i<prefill;i+=8){
- int s=oggpackB_read(&source_read,prefill-i<8?prefill-i:8);
- int d=oggpackB_read(&dest_read,prefill-i<8?prefill-i:8);
- if(s!=d){
- fprintf(stderr,"prefill=%d mismatch! byte %d, %x!=%x\n",prefill,i/8,s,d);
- exit(1);
- }
- }
- if(prefill<dest_bytes){
- if(oggpackB_read(&dest_read,dest_bytes-prefill)!=0){
- fprintf(stderr,"prefill=%d mismatch! trailing bits not zero\n",prefill);
- exit(1);
- }
- }
-
- /* second copy */
- oggpackB_writecopy(&dest_write,source,copy);
-
- /* check buffers; verify end byte masking */
- dest=oggpackB_get_buffer(&dest_write);
- dest_bytes=oggpackB_bytes(&dest_write);
- if(dest_bytes!=(copy+prefill+7)/8){
- fprintf(stderr,"wrong number of bytes after prefill+copy! %ld!=%d\n",dest_bytes,(copy+prefill+7)/8);
- exit(1);
- }
- oggpackB_readinit(&source_read,source,source_bytes);
- oggpackB_readinit(&dest_read,dest,dest_bytes);
-
- for(i=0;i<prefill;i+=8){
- int s=oggpackB_read(&source_read,prefill-i<8?prefill-i:8);
- int d=oggpackB_read(&dest_read,prefill-i<8?prefill-i:8);
- if(s!=d){
- fprintf(stderr,"prefill=%d mismatch! byte %d, %x!=%x\n",prefill,i/8,s,d);
- exit(1);
- }
- }
-
- oggpackB_readinit(&source_read,source,source_bytes);
- for(i=0;i<copy;i+=8){
- int s=oggpackB_read(&source_read,copy-i<8?copy-i:8);
- int d=oggpackB_read(&dest_read,copy-i<8?copy-i:8);
- if(s!=d){
- fprintf(stderr,"prefill=%d copy=%d mismatch! byte %d, %x!=%x\n",prefill,copy,i/8,s,d);
- exit(1);
- }
- }
-
- if(copy+prefill<dest_bytes){
- if(oggpackB_read(&dest_read,dest_bytes-copy-prefill)!=0){
- fprintf(stderr,"prefill=%d copy=%d mismatch! trailing bits not zero\n",prefill,copy);
- exit(1);
- }
- }
-
- oggpackB_writeclear(&source_write);
- oggpackB_writeclear(&dest_write);
-
-}
-
-int main(void){
- unsigned char *buffer;
- long bytes,i,j;
- static unsigned long testbuffer1[]=
- {18,12,103948,4325,543,76,432,52,3,65,4,56,32,42,34,21,1,23,32,546,456,7,
- 567,56,8,8,55,3,52,342,341,4,265,7,67,86,2199,21,7,1,5,1,4};
- int test1size=43;
-
- static unsigned long testbuffer2[]=
- {216531625L,1237861823,56732452,131,3212421,12325343,34547562,12313212,
- 1233432,534,5,346435231,14436467,7869299,76326614,167548585,
- 85525151,0,12321,1,349528352};
- int test2size=21;
-
- static unsigned long testbuffer3[]=
- {1,0,14,0,1,0,12,0,1,0,0,0,1,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,1,1,0,0,1,
- 0,1,30,1,1,1,0,0,1,0,0,0,12,0,11,0,1,0,0,1};
- int test3size=56;
-
- static unsigned long large[]=
- {2136531625L,2137861823,56732452,131,3212421,12325343,34547562,12313212,
- 1233432,534,5,2146435231,14436467,7869299,76326614,167548585,
- 85525151,0,12321,1,2146528352};
-
- int onesize=33;
- static int one[33]={146,25,44,151,195,15,153,176,233,131,196,65,85,172,47,40,
- 34,242,223,136,35,222,211,86,171,50,225,135,214,75,172,
- 223,4};
- static int oneB[33]={150,101,131,33,203,15,204,216,105,193,156,65,84,85,222,
- 8,139,145,227,126,34,55,244,171,85,100,39,195,173,18,
- 245,251,128};
-
- int twosize=6;
- static int two[6]={61,255,255,251,231,29};
- static int twoB[6]={247,63,255,253,249,120};
-
- int threesize=54;
- static int three[54]={169,2,232,252,91,132,156,36,89,13,123,176,144,32,254,
- 142,224,85,59,121,144,79,124,23,67,90,90,216,79,23,83,
- 58,135,196,61,55,129,183,54,101,100,170,37,127,126,10,
- 100,52,4,14,18,86,77,1};
- static int threeB[54]={206,128,42,153,57,8,183,251,13,89,36,30,32,144,183,
- 130,59,240,121,59,85,223,19,228,180,134,33,107,74,98,
- 233,253,196,135,63,2,110,114,50,155,90,127,37,170,104,
- 200,20,254,4,58,106,176,144,0};
-
- int foursize=38;
- static int four[38]={18,6,163,252,97,194,104,131,32,1,7,82,137,42,129,11,72,
- 132,60,220,112,8,196,109,64,179,86,9,137,195,208,122,169,
- 28,2,133,0,1};
- static int fourB[38]={36,48,102,83,243,24,52,7,4,35,132,10,145,21,2,93,2,41,
- 1,219,184,16,33,184,54,149,170,132,18,30,29,98,229,67,
- 129,10,4,32};
-
- int fivesize=45;
- static int five[45]={169,2,126,139,144,172,30,4,80,72,240,59,130,218,73,62,
- 241,24,210,44,4,20,0,248,116,49,135,100,110,130,181,169,
- 84,75,159,2,1,0,132,192,8,0,0,18,22};
- static int fiveB[45]={1,84,145,111,245,100,128,8,56,36,40,71,126,78,213,226,
- 124,105,12,0,133,128,0,162,233,242,67,152,77,205,77,
- 172,150,169,129,79,128,0,6,4,32,0,27,9,0};
-
- int sixsize=7;
- static int six[7]={17,177,170,242,169,19,148};
- static int sixB[7]={136,141,85,79,149,200,41};
-
- /* Test read/write together */
- /* Later we test against pregenerated bitstreams */
- oggpack_writeinit(&o);
-
- fprintf(stderr,"\nSmall preclipped packing (LSb): ");
- cliptest(testbuffer1,test1size,0,one,onesize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nNull bit call (LSb): ");
- cliptest(testbuffer3,test3size,0,two,twosize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nLarge preclipped packing (LSb): ");
- cliptest(testbuffer2,test2size,0,three,threesize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\n32 bit preclipped packing (LSb): ");
- oggpack_reset(&o);
- for(i=0;i<test2size;i++)
- oggpack_write(&o,large[i],32);
- buffer=oggpack_get_buffer(&o);
- bytes=oggpack_bytes(&o);
- oggpack_readinit(&r,buffer,bytes);
- for(i=0;i<test2size;i++){
- if(oggpack_look(&r,32)==-1)report("out of data. failed!");
- if(oggpack_look(&r,32)!=large[i]){
- fprintf(stderr,"%ld != %ld (%lx!=%lx):",oggpack_look(&r,32),large[i],
- oggpack_look(&r,32),large[i]);
- report("read incorrect value!\n");
- }
- oggpack_adv(&r,32);
- }
- if(oggpack_bytes(&r)!=bytes)report("leftover bytes after read!\n");
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nSmall unclipped packing (LSb): ");
- cliptest(testbuffer1,test1size,7,four,foursize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nLarge unclipped packing (LSb): ");
- cliptest(testbuffer2,test2size,17,five,fivesize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nSingle bit unclipped packing (LSb): ");
- cliptest(testbuffer3,test3size,1,six,sixsize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nTesting read past end (LSb): ");
- oggpack_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8);
- for(i=0;i<64;i++){
- if(oggpack_read(&r,1)!=0){
- fprintf(stderr,"failed; got -1 prematurely.\n");
- exit(1);
- }
- }
- if(oggpack_look(&r,1)!=-1 ||
- oggpack_read(&r,1)!=-1){
- fprintf(stderr,"failed; read past end without -1.\n");
- exit(1);
- }
- oggpack_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8);
- if(oggpack_read(&r,30)!=0 || oggpack_read(&r,16)!=0){
- fprintf(stderr,"failed 2; got -1 prematurely.\n");
- exit(1);
- }
-
- if(oggpack_look(&r,18)!=0 ||
- oggpack_look(&r,18)!=0){
- fprintf(stderr,"failed 3; got -1 prematurely.\n");
- exit(1);
- }
- if(oggpack_look(&r,19)!=-1 ||
- oggpack_look(&r,19)!=-1){
- fprintf(stderr,"failed; read past end without -1.\n");
- exit(1);
- }
- if(oggpack_look(&r,32)!=-1 ||
- oggpack_look(&r,32)!=-1){
- fprintf(stderr,"failed; read past end without -1.\n");
- exit(1);
- }
- oggpack_writeclear(&o);
- fprintf(stderr,"ok.");
-
- /* this is partly glassbox; we're mostly concerned about the allocation boundaries */
-
- fprintf(stderr,"\nTesting aligned writecopies (LSb): ");
- for(i=0;i<71;i++)
- for(j=0;j<5;j++)
- copytest(j*8,i);
- for(i=BUFFER_INCREMENT*8-71;i<BUFFER_INCREMENT*8+71;i++)
- for(j=0;j<5;j++)
- copytest(j*8,i);
- fprintf(stderr,"ok. ");
-
- fprintf(stderr,"\nTesting unaligned writecopies (LSb): ");
- for(i=0;i<71;i++)
- for(j=1;j<40;j++)
- if(j&0x7)
- copytest(j,i);
- for(i=BUFFER_INCREMENT*8-71;i<BUFFER_INCREMENT*8+71;i++)
- for(j=1;j<40;j++)
- if(j&0x7)
- copytest(j,i);
-
- fprintf(stderr,"ok. \n");
-
-
- /********** lazy, cut-n-paste retest with MSb packing ***********/
-
- /* Test read/write together */
- /* Later we test against pregenerated bitstreams */
- oggpackB_writeinit(&o);
-
- fprintf(stderr,"\nSmall preclipped packing (MSb): ");
- cliptestB(testbuffer1,test1size,0,oneB,onesize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nNull bit call (MSb): ");
- cliptestB(testbuffer3,test3size,0,twoB,twosize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nLarge preclipped packing (MSb): ");
- cliptestB(testbuffer2,test2size,0,threeB,threesize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\n32 bit preclipped packing (MSb): ");
- oggpackB_reset(&o);
- for(i=0;i<test2size;i++)
- oggpackB_write(&o,large[i],32);
- buffer=oggpackB_get_buffer(&o);
- bytes=oggpackB_bytes(&o);
- oggpackB_readinit(&r,buffer,bytes);
- for(i=0;i<test2size;i++){
- if(oggpackB_look(&r,32)==-1)report("out of data. failed!");
- if(oggpackB_look(&r,32)!=large[i]){
- fprintf(stderr,"%ld != %ld (%lx!=%lx):",oggpackB_look(&r,32),large[i],
- oggpackB_look(&r,32),large[i]);
- report("read incorrect value!\n");
- }
- oggpackB_adv(&r,32);
- }
- if(oggpackB_bytes(&r)!=bytes)report("leftover bytes after read!\n");
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nSmall unclipped packing (MSb): ");
- cliptestB(testbuffer1,test1size,7,fourB,foursize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nLarge unclipped packing (MSb): ");
- cliptestB(testbuffer2,test2size,17,fiveB,fivesize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nSingle bit unclipped packing (MSb): ");
- cliptestB(testbuffer3,test3size,1,sixB,sixsize);
- fprintf(stderr,"ok.");
-
- fprintf(stderr,"\nTesting read past end (MSb): ");
- oggpackB_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8);
- for(i=0;i<64;i++){
- if(oggpackB_read(&r,1)!=0){
- fprintf(stderr,"failed; got -1 prematurely.\n");
- exit(1);
- }
- }
- if(oggpackB_look(&r,1)!=-1 ||
- oggpackB_read(&r,1)!=-1){
- fprintf(stderr,"failed; read past end without -1.\n");
- exit(1);
- }
- oggpackB_readinit(&r,(unsigned char *)"\0\0\0\0\0\0\0\0",8);
- if(oggpackB_read(&r,30)!=0 || oggpackB_read(&r,16)!=0){
- fprintf(stderr,"failed 2; got -1 prematurely.\n");
- exit(1);
- }
-
- if(oggpackB_look(&r,18)!=0 ||
- oggpackB_look(&r,18)!=0){
- fprintf(stderr,"failed 3; got -1 prematurely.\n");
- exit(1);
- }
- if(oggpackB_look(&r,19)!=-1 ||
- oggpackB_look(&r,19)!=-1){
- fprintf(stderr,"failed; read past end without -1.\n");
- exit(1);
- }
- if(oggpackB_look(&r,32)!=-1 ||
- oggpackB_look(&r,32)!=-1){
- fprintf(stderr,"failed; read past end without -1.\n");
- exit(1);
- }
- fprintf(stderr,"ok.");
- oggpackB_writeclear(&o);
-
- /* this is partly glassbox; we're mostly concerned about the allocation boundaries */
-
- fprintf(stderr,"\nTesting aligned writecopies (MSb): ");
- for(i=0;i<71;i++)
- for(j=0;j<5;j++)
- copytestB(j*8,i);
- for(i=BUFFER_INCREMENT*8-71;i<BUFFER_INCREMENT*8+71;i++)
- for(j=0;j<5;j++)
- copytestB(j*8,i);
- fprintf(stderr,"ok. ");
-
- fprintf(stderr,"\nTesting unaligned writecopies (MSb): ");
- for(i=0;i<71;i++)
- for(j=1;j<40;j++)
- if(j&0x7)
- copytestB(j,i);
- for(i=BUFFER_INCREMENT*8-71;i<BUFFER_INCREMENT*8+71;i++)
- for(j=1;j<40;j++)
- if(j&0x7)
- copytestB(j,i);
-
- fprintf(stderr,"ok. \n\n");
-
- return(0);
-}
-#endif /* _V_SELFTEST */
-
-#undef BUFFER_INCREMENT
diff --git a/drivers/ogg/config_types.h b/drivers/ogg/config_types.h
deleted file mode 100644
index 5ea49b8abd..0000000000
--- a/drivers/ogg/config_types.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef __CONFIG_TYPES_H__
-#define __CONFIG_TYPES_H__
-
-#include "int_types.h"
-
-typedef int16_t ogg_int16_t;
-typedef uint16_t ogg_uint16_t;
-typedef int32_t ogg_int32_t;
-typedef uint32_t ogg_uint32_t;
-typedef int64_t ogg_int64_t;
-
-#endif
diff --git a/drivers/ogg/framing.c b/drivers/ogg/framing.c
deleted file mode 100644
index 3a2f0a6058..0000000000
--- a/drivers/ogg/framing.c
+++ /dev/null
@@ -1,2111 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE Ogg CONTAINER 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-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: code raw packets into framed OggSquish stream and
- decode Ogg streams back into raw packets
- last mod: $Id: framing.c 18758 2013-01-08 16:29:56Z tterribe $
-
- note: The CRC code is directly derived from public domain code by
- Ross Williams (ross@guest.adelaide.edu.au). See docs/framing.html
- for details.
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <limits.h>
-#include <string.h>
-#include <ogg/ogg.h>
-
-/* A complete description of Ogg framing exists in docs/framing.html */
-
-int ogg_page_version(const ogg_page *og){
- return((int)(og->header[4]));
-}
-
-int ogg_page_continued(const ogg_page *og){
- return((int)(og->header[5]&0x01));
-}
-
-int ogg_page_bos(const ogg_page *og){
- return((int)(og->header[5]&0x02));
-}
-
-int ogg_page_eos(const ogg_page *og){
- return((int)(og->header[5]&0x04));
-}
-
-ogg_int64_t ogg_page_granulepos(const ogg_page *og){
- unsigned char *page=og->header;
- ogg_int64_t granulepos=page[13]&(0xff);
- granulepos= (granulepos<<8)|(page[12]&0xff);
- granulepos= (granulepos<<8)|(page[11]&0xff);
- granulepos= (granulepos<<8)|(page[10]&0xff);
- granulepos= (granulepos<<8)|(page[9]&0xff);
- granulepos= (granulepos<<8)|(page[8]&0xff);
- granulepos= (granulepos<<8)|(page[7]&0xff);
- granulepos= (granulepos<<8)|(page[6]&0xff);
- return(granulepos);
-}
-
-int ogg_page_serialno(const ogg_page *og){
- return(og->header[14] |
- (og->header[15]<<8) |
- (og->header[16]<<16) |
- (og->header[17]<<24));
-}
-
-long ogg_page_pageno(const ogg_page *og){
- return(og->header[18] |
- (og->header[19]<<8) |
- (og->header[20]<<16) |
- (og->header[21]<<24));
-}
-
-
-
-/* returns the number of packets that are completed on this page (if
- the leading packet is begun on a previous page, but ends on this
- page, it's counted */
-
-/* NOTE:
- If a page consists of a packet begun on a previous page, and a new
- packet begun (but not completed) on this page, the return will be:
- ogg_page_packets(page) ==1,
- ogg_page_continued(page) !=0
-
- If a page happens to be a single packet that was begun on a
- previous page, and spans to the next page (in the case of a three or
- more page packet), the return will be:
- ogg_page_packets(page) ==0,
- ogg_page_continued(page) !=0
-*/
-
-int ogg_page_packets(const ogg_page *og){
- int i,n=og->header[26],count=0;
- for(i=0;i<n;i++)
- if(og->header[27+i]<255)count++;
- return(count);
-}
-
-
-#if 0
-/* helper to initialize lookup for direct-table CRC (illustrative; we
- use the static init below) */
-
-static ogg_uint32_t _ogg_crc_entry(unsigned long index){
- int i;
- unsigned long r;
-
- r = index << 24;
- for (i=0; i<8; i++)
- if (r & 0x80000000UL)
- r = (r << 1) ^ 0x04c11db7; /* The same as the ethernet generator
- polynomial, although we use an
- unreflected alg and an init/final
- of 0, not 0xffffffff */
- else
- r<<=1;
- return (r & 0xffffffffUL);
-}
-#endif
-
-static const ogg_uint32_t crc_lookup[256]={
- 0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9,
- 0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005,
- 0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,
- 0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd,
- 0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9,
- 0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75,
- 0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011,
- 0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd,
- 0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039,
- 0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5,
- 0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81,
- 0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d,
- 0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49,
- 0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95,
- 0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1,
- 0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d,
- 0x34867077,0x30476dc0,0x3d044b19,0x39c556ae,
- 0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072,
- 0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16,
- 0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca,
- 0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde,
- 0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02,
- 0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066,
- 0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba,
- 0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e,
- 0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692,
- 0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6,
- 0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a,
- 0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e,
- 0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2,
- 0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686,
- 0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a,
- 0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637,
- 0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb,
- 0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f,
- 0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53,
- 0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47,
- 0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b,
- 0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff,
- 0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623,
- 0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7,
- 0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b,
- 0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f,
- 0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3,
- 0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7,
- 0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b,
- 0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f,
- 0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3,
- 0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640,
- 0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c,
- 0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8,
- 0x68860bfd,0x6c47164a,0x61043093,0x65c52d24,
- 0x119b4be9,0x155a565e,0x18197087,0x1cd86d30,
- 0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec,
- 0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088,
- 0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654,
- 0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0,
- 0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c,
- 0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18,
- 0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4,
- 0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0,
- 0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c,
- 0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668,
- 0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4};
-
-/* init the encode/decode logical stream state */
-
-int ogg_stream_init(ogg_stream_state *os,int serialno){
- if(os){
- memset(os,0,sizeof(*os));
- os->body_storage=16*1024;
- os->lacing_storage=1024;
-
- os->body_data=_ogg_malloc(os->body_storage*sizeof(*os->body_data));
- os->lacing_vals=_ogg_malloc(os->lacing_storage*sizeof(*os->lacing_vals));
- os->granule_vals=_ogg_malloc(os->lacing_storage*sizeof(*os->granule_vals));
-
- if(!os->body_data || !os->lacing_vals || !os->granule_vals){
- ogg_stream_clear(os);
- return -1;
- }
-
- os->serialno=serialno;
-
- return(0);
- }
- return(-1);
-}
-
-/* async/delayed error detection for the ogg_stream_state */
-int ogg_stream_check(ogg_stream_state *os){
- if(!os || !os->body_data) return -1;
- return 0;
-}
-
-/* _clear does not free os, only the non-flat storage within */
-int ogg_stream_clear(ogg_stream_state *os){
- if(os){
- if(os->body_data)_ogg_free(os->body_data);
- if(os->lacing_vals)_ogg_free(os->lacing_vals);
- if(os->granule_vals)_ogg_free(os->granule_vals);
-
- memset(os,0,sizeof(*os));
- }
- return(0);
-}
-
-int ogg_stream_destroy(ogg_stream_state *os){
- if(os){
- ogg_stream_clear(os);
- _ogg_free(os);
- }
- return(0);
-}
-
-/* Helpers for ogg_stream_encode; this keeps the structure and
- what's happening fairly clear */
-
-static int _os_body_expand(ogg_stream_state *os,long needed){
- if(os->body_storage-needed<=os->body_fill){
- long body_storage;
- void *ret;
- if(os->body_storage>LONG_MAX-needed){
- ogg_stream_clear(os);
- return -1;
- }
- body_storage=os->body_storage+needed;
- if(body_storage<LONG_MAX-1024)body_storage+=1024;
- ret=_ogg_realloc(os->body_data,body_storage*sizeof(*os->body_data));
- if(!ret){
- ogg_stream_clear(os);
- return -1;
- }
- os->body_storage=body_storage;
- os->body_data=ret;
- }
- return 0;
-}
-
-static int _os_lacing_expand(ogg_stream_state *os,long needed){
- if(os->lacing_storage-needed<=os->lacing_fill){
- long lacing_storage;
- void *ret;
- if(os->lacing_storage>LONG_MAX-needed){
- ogg_stream_clear(os);
- return -1;
- }
- lacing_storage=os->lacing_storage+needed;
- if(lacing_storage<LONG_MAX-32)lacing_storage+=32;
- ret=_ogg_realloc(os->lacing_vals,lacing_storage*sizeof(*os->lacing_vals));
- if(!ret){
- ogg_stream_clear(os);
- return -1;
- }
- os->lacing_vals=ret;
- ret=_ogg_realloc(os->granule_vals,lacing_storage*
- sizeof(*os->granule_vals));
- if(!ret){
- ogg_stream_clear(os);
- return -1;
- }
- os->granule_vals=ret;
- os->lacing_storage=lacing_storage;
- }
- return 0;
-}
-
-/* checksum the page */
-/* Direct table CRC; note that this will be faster in the future if we
- perform the checksum simultaneously with other copies */
-
-void ogg_page_checksum_set(ogg_page *og){
- if(og){
- ogg_uint32_t crc_reg=0;
- int i;
-
- /* safety; needed for API behavior, but not framing code */
- og->header[22]=0;
- og->header[23]=0;
- og->header[24]=0;
- og->header[25]=0;
-
- for(i=0;i<og->header_len;i++)
- crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->header[i]];
- for(i=0;i<og->body_len;i++)
- crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->body[i]];
-
- og->header[22]=(unsigned char)(crc_reg&0xff);
- og->header[23]=(unsigned char)((crc_reg>>8)&0xff);
- og->header[24]=(unsigned char)((crc_reg>>16)&0xff);
- og->header[25]=(unsigned char)((crc_reg>>24)&0xff);
- }
-}
-
-/* submit data to the internal buffer of the framing engine */
-int ogg_stream_iovecin(ogg_stream_state *os, ogg_iovec_t *iov, int count,
- long e_o_s, ogg_int64_t granulepos){
-
- long bytes = 0, lacing_vals;
- int i;
-
- if(ogg_stream_check(os)) return -1;
- if(!iov) return 0;
-
- for (i = 0; i < count; ++i){
- if(iov[i].iov_len>LONG_MAX) return -1;
- if(bytes>LONG_MAX-(long)iov[i].iov_len) return -1;
- bytes += (long)iov[i].iov_len;
- }
- lacing_vals=bytes/255+1;
-
- if(os->body_returned){
- /* advance packet data according to the body_returned pointer. We
- had to keep it around to return a pointer into the buffer last
- call */
-
- os->body_fill-=os->body_returned;
- if(os->body_fill)
- memmove(os->body_data,os->body_data+os->body_returned,
- os->body_fill);
- os->body_returned=0;
- }
-
- /* make sure we have the buffer storage */
- if(_os_body_expand(os,bytes) || _os_lacing_expand(os,lacing_vals))
- return -1;
-
- /* Copy in the submitted packet. Yes, the copy is a waste; this is
- the liability of overly clean abstraction for the time being. It
- will actually be fairly easy to eliminate the extra copy in the
- future */
-
- for (i = 0; i < count; ++i) {
- memcpy(os->body_data+os->body_fill, iov[i].iov_base, iov[i].iov_len);
- os->body_fill += (int)iov[i].iov_len;
- }
-
- /* Store lacing vals for this packet */
- for(i=0;i<lacing_vals-1;i++){
- os->lacing_vals[os->lacing_fill+i]=255;
- os->granule_vals[os->lacing_fill+i]=os->granulepos;
- }
- os->lacing_vals[os->lacing_fill+i]=bytes%255;
- os->granulepos=os->granule_vals[os->lacing_fill+i]=granulepos;
-
- /* flag the first segment as the beginning of the packet */
- os->lacing_vals[os->lacing_fill]|= 0x100;
-
- os->lacing_fill+=lacing_vals;
-
- /* for the sake of completeness */
- os->packetno++;
-
- if(e_o_s)os->e_o_s=1;
-
- return(0);
-}
-
-int ogg_stream_packetin(ogg_stream_state *os,ogg_packet *op){
- ogg_iovec_t iov;
- iov.iov_base = op->packet;
- iov.iov_len = op->bytes;
- return ogg_stream_iovecin(os, &iov, 1, op->e_o_s, op->granulepos);
-}
-
-/* Conditionally flush a page; force==0 will only flush nominal-size
- pages, force==1 forces us to flush a page regardless of page size
- so long as there's any data available at all. */
-static int ogg_stream_flush_i(ogg_stream_state *os,ogg_page *og, int force, int nfill){
- int i;
- int vals=0;
- int maxvals=(os->lacing_fill>255?255:os->lacing_fill);
- int bytes=0;
- long acc=0;
- ogg_int64_t granule_pos=-1;
-
- if(ogg_stream_check(os)) return(0);
- if(maxvals==0) return(0);
-
- /* construct a page */
- /* decide how many segments to include */
-
- /* If this is the initial header case, the first page must only include
- the initial header packet */
- if(os->b_o_s==0){ /* 'initial header page' case */
- granule_pos=0;
- for(vals=0;vals<maxvals;vals++){
- if((os->lacing_vals[vals]&0x0ff)<255){
- vals++;
- break;
- }
- }
- }else{
-
- /* The extra packets_done, packet_just_done logic here attempts to do two things:
- 1) Don't unneccessarily span pages.
- 2) Unless necessary, don't flush pages if there are less than four packets on
- them; this expands page size to reduce unneccessary overhead if incoming packets
- are large.
- These are not necessary behaviors, just 'always better than naive flushing'
- without requiring an application to explicitly request a specific optimized
- behavior. We'll want an explicit behavior setup pathway eventually as well. */
-
- int packets_done=0;
- int packet_just_done=0;
- for(vals=0;vals<maxvals;vals++){
- if(acc>nfill && packet_just_done>=4){
- force=1;
- break;
- }
- acc+=os->lacing_vals[vals]&0x0ff;
- if((os->lacing_vals[vals]&0xff)<255){
- granule_pos=os->granule_vals[vals];
- packet_just_done=++packets_done;
- }else
- packet_just_done=0;
- }
- if(vals==255)force=1;
- }
-
- if(!force) return(0);
-
- /* construct the header in temp storage */
- memcpy(os->header,"OggS",4);
-
- /* stream structure version */
- os->header[4]=0x00;
-
- /* continued packet flag? */
- os->header[5]=0x00;
- if((os->lacing_vals[0]&0x100)==0)os->header[5]|=0x01;
- /* first page flag? */
- if(os->b_o_s==0)os->header[5]|=0x02;
- /* last page flag? */
- if(os->e_o_s && os->lacing_fill==vals)os->header[5]|=0x04;
- os->b_o_s=1;
-
- /* 64 bits of PCM position */
- for(i=6;i<14;i++){
- os->header[i]=(unsigned char)(granule_pos&0xff);
- granule_pos>>=8;
- }
-
- /* 32 bits of stream serial number */
- {
- long serialno=os->serialno;
- for(i=14;i<18;i++){
- os->header[i]=(unsigned char)(serialno&0xff);
- serialno>>=8;
- }
- }
-
- /* 32 bits of page counter (we have both counter and page header
- because this val can roll over) */
- if(os->pageno==-1)os->pageno=0; /* because someone called
- stream_reset; this would be a
- strange thing to do in an
- encode stream, but it has
- plausible uses */
- {
- long pageno=os->pageno++;
- for(i=18;i<22;i++){
- os->header[i]=(unsigned char)(pageno&0xff);
- pageno>>=8;
- }
- }
-
- /* zero for computation; filled in later */
- os->header[22]=0;
- os->header[23]=0;
- os->header[24]=0;
- os->header[25]=0;
-
- /* segment table */
- os->header[26]=(unsigned char)(vals&0xff);
- for(i=0;i<vals;i++)
- bytes+=os->header[i+27]=(unsigned char)(os->lacing_vals[i]&0xff);
-
- /* set pointers in the ogg_page struct */
- og->header=os->header;
- og->header_len=os->header_fill=vals+27;
- og->body=os->body_data+os->body_returned;
- og->body_len=bytes;
-
- /* advance the lacing data and set the body_returned pointer */
-
- os->lacing_fill-=vals;
- memmove(os->lacing_vals,os->lacing_vals+vals,os->lacing_fill*sizeof(*os->lacing_vals));
- memmove(os->granule_vals,os->granule_vals+vals,os->lacing_fill*sizeof(*os->granule_vals));
- os->body_returned+=bytes;
-
- /* calculate the checksum */
-
- ogg_page_checksum_set(og);
-
- /* done */
- return(1);
-}
-
-/* This will flush remaining packets into a page (returning nonzero),
- even if there is not enough data to trigger a flush normally
- (undersized page). If there are no packets or partial packets to
- flush, ogg_stream_flush returns 0. Note that ogg_stream_flush will
- try to flush a normal sized page like ogg_stream_pageout; a call to
- ogg_stream_flush does not guarantee that all packets have flushed.
- Only a return value of 0 from ogg_stream_flush indicates all packet
- data is flushed into pages.
-
- since ogg_stream_flush will flush the last page in a stream even if
- it's undersized, you almost certainly want to use ogg_stream_pageout
- (and *not* ogg_stream_flush) unless you specifically need to flush
- a page regardless of size in the middle of a stream. */
-
-int ogg_stream_flush(ogg_stream_state *os,ogg_page *og){
- return ogg_stream_flush_i(os,og,1,4096);
-}
-
-/* Like the above, but an argument is provided to adjust the nominal
- page size for applications which are smart enough to provide their
- own delay based flushing */
-
-int ogg_stream_flush_fill(ogg_stream_state *os,ogg_page *og, int nfill){
- return ogg_stream_flush_i(os,og,1,nfill);
-}
-
-/* This constructs pages from buffered packet segments. The pointers
-returned are to static buffers; do not free. The returned buffers are
-good only until the next call (using the same ogg_stream_state) */
-
-int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og){
- int force=0;
- if(ogg_stream_check(os)) return 0;
-
- if((os->e_o_s&&os->lacing_fill) || /* 'were done, now flush' case */
- (os->lacing_fill&&!os->b_o_s)) /* 'initial header page' case */
- force=1;
-
- return(ogg_stream_flush_i(os,og,force,4096));
-}
-
-/* Like the above, but an argument is provided to adjust the nominal
-page size for applications which are smart enough to provide their
-own delay based flushing */
-
-int ogg_stream_pageout_fill(ogg_stream_state *os, ogg_page *og, int nfill){
- int force=0;
- if(ogg_stream_check(os)) return 0;
-
- if((os->e_o_s&&os->lacing_fill) || /* 'were done, now flush' case */
- (os->lacing_fill&&!os->b_o_s)) /* 'initial header page' case */
- force=1;
-
- return(ogg_stream_flush_i(os,og,force,nfill));
-}
-
-int ogg_stream_eos(ogg_stream_state *os){
- if(ogg_stream_check(os)) return 1;
- return os->e_o_s;
-}
-
-/* DECODING PRIMITIVES: packet streaming layer **********************/
-
-/* This has two layers to place more of the multi-serialno and paging
- control in the application's hands. First, we expose a data buffer
- using ogg_sync_buffer(). The app either copies into the
- buffer, or passes it directly to read(), etc. We then call
- ogg_sync_wrote() to tell how many bytes we just added.
-
- Pages are returned (pointers into the buffer in ogg_sync_state)
- by ogg_sync_pageout(). The page is then submitted to
- ogg_stream_pagein() along with the appropriate
- ogg_stream_state* (ie, matching serialno). We then get raw
- packets out calling ogg_stream_packetout() with a
- ogg_stream_state. */
-
-/* initialize the struct to a known state */
-int ogg_sync_init(ogg_sync_state *oy){
- if(oy){
- oy->storage = -1; /* used as a readiness flag */
- memset(oy,0,sizeof(*oy));
- }
- return(0);
-}
-
-/* clear non-flat storage within */
-int ogg_sync_clear(ogg_sync_state *oy){
- if(oy){
- if(oy->data)_ogg_free(oy->data);
- memset(oy,0,sizeof(*oy));
- }
- return(0);
-}
-
-int ogg_sync_destroy(ogg_sync_state *oy){
- if(oy){
- ogg_sync_clear(oy);
- _ogg_free(oy);
- }
- return(0);
-}
-
-int ogg_sync_check(ogg_sync_state *oy){
- if(oy->storage<0) return -1;
- return 0;
-}
-
-char *ogg_sync_buffer(ogg_sync_state *oy, long size){
- if(ogg_sync_check(oy)) return NULL;
-
- /* first, clear out any space that has been previously returned */
- if(oy->returned){
- oy->fill-=oy->returned;
- if(oy->fill>0)
- memmove(oy->data,oy->data+oy->returned,oy->fill);
- oy->returned=0;
- }
-
- if(size>oy->storage-oy->fill){
- /* We need to extend the internal buffer */
- long newsize=size+oy->fill+4096; /* an extra page to be nice */
- void *ret;
-
- if(oy->data)
- ret=_ogg_realloc(oy->data,newsize);
- else
- ret=_ogg_malloc(newsize);
- if(!ret){
- ogg_sync_clear(oy);
- return NULL;
- }
- oy->data=ret;
- oy->storage=newsize;
- }
-
- /* expose a segment at least as large as requested at the fill mark */
- return((char *)oy->data+oy->fill);
-}
-
-int ogg_sync_wrote(ogg_sync_state *oy, long bytes){
- if(ogg_sync_check(oy))return -1;
- if(oy->fill+bytes>oy->storage)return -1;
- oy->fill+=bytes;
- return(0);
-}
-
-/* sync the stream. This is meant to be useful for finding page
- boundaries.
-
- return values for this:
- -n) skipped n bytes
- 0) page not ready; more data (no bytes skipped)
- n) page synced at current location; page length n bytes
-
-*/
-
-long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og){
- unsigned char *page=oy->data+oy->returned;
- unsigned char *next;
- long bytes=oy->fill-oy->returned;
-
- if(ogg_sync_check(oy))return 0;
-
- if(oy->headerbytes==0){
- int headerbytes,i;
- if(bytes<27)return(0); /* not enough for a header */
-
- /* verify capture pattern */
- if(memcmp(page,"OggS",4))goto sync_fail;
-
- headerbytes=page[26]+27;
- if(bytes<headerbytes)return(0); /* not enough for header + seg table */
-
- /* count up body length in the segment table */
-
- for(i=0;i<page[26];i++)
- oy->bodybytes+=page[27+i];
- oy->headerbytes=headerbytes;
- }
-
- if(oy->bodybytes+oy->headerbytes>bytes)return(0);
-
- /* The whole test page is buffered. Verify the checksum */
- {
- /* Grab the checksum bytes, set the header field to zero */
- char chksum[4];
- ogg_page log;
-
- memcpy(chksum,page+22,4);
- memset(page+22,0,4);
-
- /* set up a temp page struct and recompute the checksum */
- log.header=page;
- log.header_len=oy->headerbytes;
- log.body=page+oy->headerbytes;
- log.body_len=oy->bodybytes;
- ogg_page_checksum_set(&log);
-
- /* Compare */
- if(memcmp(chksum,page+22,4)){
- /* D'oh. Mismatch! Corrupt page (or miscapture and not a page
- at all) */
- /* replace the computed checksum with the one actually read in */
- memcpy(page+22,chksum,4);
-
- /* Bad checksum. Lose sync */
- goto sync_fail;
- }
- }
-
- /* yes, have a whole page all ready to go */
- {
- unsigned char *page=oy->data+oy->returned;
- long bytes;
-
- if(og){
- og->header=page;
- og->header_len=oy->headerbytes;
- og->body=page+oy->headerbytes;
- og->body_len=oy->bodybytes;
- }
-
- oy->unsynced=0;
- oy->returned+=(bytes=oy->headerbytes+oy->bodybytes);
- oy->headerbytes=0;
- oy->bodybytes=0;
- return(bytes);
- }
-
- sync_fail:
-
- oy->headerbytes=0;
- oy->bodybytes=0;
-
- /* search for possible capture */
- next=memchr(page+1,'O',bytes-1);
- if(!next)
- next=oy->data+oy->fill;
-
- oy->returned=(int)(next-oy->data);
- return((long)-(next-page));
-}
-
-/* sync the stream and get a page. Keep trying until we find a page.
- Suppress 'sync errors' after reporting the first.
-
- return values:
- -1) recapture (hole in data)
- 0) need more data
- 1) page returned
-
- Returns pointers into buffered data; invalidated by next call to
- _stream, _clear, _init, or _buffer */
-
-int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og){
-
- if(ogg_sync_check(oy))return 0;
-
- /* all we need to do is verify a page at the head of the stream
- buffer. If it doesn't verify, we look for the next potential
- frame */
-
- for(;;){
- long ret=ogg_sync_pageseek(oy,og);
- if(ret>0){
- /* have a page */
- return(1);
- }
- if(ret==0){
- /* need more data */
- return(0);
- }
-
- /* head did not start a synced page... skipped some bytes */
- if(!oy->unsynced){
- oy->unsynced=1;
- return(-1);
- }
-
- /* loop. keep looking */
-
- }
-}
-
-/* add the incoming page to the stream state; we decompose the page
- into packet segments here as well. */
-
-int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og){
- unsigned char *header=og->header;
- unsigned char *body=og->body;
- long bodysize=og->body_len;
- int segptr=0;
-
- int version=ogg_page_version(og);
- int continued=ogg_page_continued(og);
- int bos=ogg_page_bos(og);
- int eos=ogg_page_eos(og);
- ogg_int64_t granulepos=ogg_page_granulepos(og);
- int serialno=ogg_page_serialno(og);
- long pageno=ogg_page_pageno(og);
- int segments=header[26];
-
- if(ogg_stream_check(os)) return -1;
-
- /* clean up 'returned data' */
- {
- long lr=os->lacing_returned;
- long br=os->body_returned;
-
- /* body data */
- if(br){
- os->body_fill-=br;
- if(os->body_fill)
- memmove(os->body_data,os->body_data+br,os->body_fill);
- os->body_returned=0;
- }
-
- if(lr){
- /* segment table */
- if(os->lacing_fill-lr){
- memmove(os->lacing_vals,os->lacing_vals+lr,
- (os->lacing_fill-lr)*sizeof(*os->lacing_vals));
- memmove(os->granule_vals,os->granule_vals+lr,
- (os->lacing_fill-lr)*sizeof(*os->granule_vals));
- }
- os->lacing_fill-=lr;
- os->lacing_packet-=lr;
- os->lacing_returned=0;
- }
- }
-
- /* check the serial number */
- if(serialno!=os->serialno)return(-1);
- if(version>0)return(-1);
-
- if(_os_lacing_expand(os,segments+1)) return -1;
-
- /* are we in sequence? */
- if(pageno!=os->pageno){
- int i;
-
- /* unroll previous partial packet (if any) */
- for(i=os->lacing_packet;i<os->lacing_fill;i++)
- os->body_fill-=os->lacing_vals[i]&0xff;
- os->lacing_fill=os->lacing_packet;
-
- /* make a note of dropped data in segment table */
- if(os->pageno!=-1){
- os->lacing_vals[os->lacing_fill++]=0x400;
- os->lacing_packet++;
- }
- }
-
- /* are we a 'continued packet' page? If so, we may need to skip
- some segments */
- if(continued){
- if(os->lacing_fill<1 ||
- os->lacing_vals[os->lacing_fill-1]==0x400){
- bos=0;
- for(;segptr<segments;segptr++){
- int val=header[27+segptr];
- body+=val;
- bodysize-=val;
- if(val<255){
- segptr++;
- break;
- }
- }
- }
- }
-
- if(bodysize){
- if(_os_body_expand(os,bodysize)) return -1;
- memcpy(os->body_data+os->body_fill,body,bodysize);
- os->body_fill+=bodysize;
- }
-
- {
- int saved=-1;
- while(segptr<segments){
- int val=header[27+segptr];
- os->lacing_vals[os->lacing_fill]=val;
- os->granule_vals[os->lacing_fill]=-1;
-
- if(bos){
- os->lacing_vals[os->lacing_fill]|=0x100;
- bos=0;
- }
-
- if(val<255)saved=os->lacing_fill;
-
- os->lacing_fill++;
- segptr++;
-
- if(val<255)os->lacing_packet=os->lacing_fill;
- }
-
- /* set the granulepos on the last granuleval of the last full packet */
- if(saved!=-1){
- os->granule_vals[saved]=granulepos;
- }
-
- }
-
- if(eos){
- os->e_o_s=1;
- if(os->lacing_fill>0)
- os->lacing_vals[os->lacing_fill-1]|=0x200;
- }
-
- os->pageno=pageno+1;
-
- return(0);
-}
-
-/* clear things to an initial state. Good to call, eg, before seeking */
-int ogg_sync_reset(ogg_sync_state *oy){
- if(ogg_sync_check(oy))return -1;
-
- oy->fill=0;
- oy->returned=0;
- oy->unsynced=0;
- oy->headerbytes=0;
- oy->bodybytes=0;
- return(0);
-}
-
-int ogg_stream_reset(ogg_stream_state *os){
- if(ogg_stream_check(os)) return -1;
-
- os->body_fill=0;
- os->body_returned=0;
-
- os->lacing_fill=0;
- os->lacing_packet=0;
- os->lacing_returned=0;
-
- os->header_fill=0;
-
- os->e_o_s=0;
- os->b_o_s=0;
- os->pageno=-1;
- os->packetno=0;
- os->granulepos=0;
-
- return(0);
-}
-
-int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno){
- if(ogg_stream_check(os)) return -1;
- ogg_stream_reset(os);
- os->serialno=serialno;
- return(0);
-}
-
-static int _packetout(ogg_stream_state *os,ogg_packet *op,int adv){
-
- /* The last part of decode. We have the stream broken into packet
- segments. Now we need to group them into packets (or return the
- out of sync markers) */
-
- int ptr=os->lacing_returned;
-
- if(os->lacing_packet<=ptr)return(0);
-
- if(os->lacing_vals[ptr]&0x400){
- /* we need to tell the codec there's a gap; it might need to
- handle previous packet dependencies. */
- os->lacing_returned++;
- os->packetno++;
- return(-1);
- }
-
- if(!op && !adv)return(1); /* just using peek as an inexpensive way
- to ask if there's a whole packet
- waiting */
-
- /* Gather the whole packet. We'll have no holes or a partial packet */
- {
- int size=os->lacing_vals[ptr]&0xff;
- long bytes=size;
- int eos=os->lacing_vals[ptr]&0x200; /* last packet of the stream? */
- int bos=os->lacing_vals[ptr]&0x100; /* first packet of the stream? */
-
- while(size==255){
- int val=os->lacing_vals[++ptr];
- size=val&0xff;
- if(val&0x200)eos=0x200;
- bytes+=size;
- }
-
- if(op){
- op->e_o_s=eos;
- op->b_o_s=bos;
- op->packet=os->body_data+os->body_returned;
- op->packetno=os->packetno;
- op->granulepos=os->granule_vals[ptr];
- op->bytes=bytes;
- }
-
- if(adv){
- os->body_returned+=bytes;
- os->lacing_returned=ptr+1;
- os->packetno++;
- }
- }
- return(1);
-}
-
-int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op){
- if(ogg_stream_check(os)) return 0;
- return _packetout(os,op,1);
-}
-
-int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op){
- if(ogg_stream_check(os)) return 0;
- return _packetout(os,op,0);
-}
-
-void ogg_packet_clear(ogg_packet *op) {
- _ogg_free(op->packet);
- memset(op, 0, sizeof(*op));
-}
-
-#ifdef _V_SELFTEST
-#include <stdio.h>
-
-ogg_stream_state os_en, os_de;
-ogg_sync_state oy;
-
-void checkpacket(ogg_packet *op,long len, int no, long pos){
- long j;
- static int sequence=0;
- static int lastno=0;
-
- if(op->bytes!=len){
- fprintf(stderr,"incorrect packet length (%ld != %ld)!\n",op->bytes,len);
- exit(1);
- }
- if(op->granulepos!=pos){
- fprintf(stderr,"incorrect packet granpos (%ld != %ld)!\n",(long)op->granulepos,pos);
- exit(1);
- }
-
- /* packet number just follows sequence/gap; adjust the input number
- for that */
- if(no==0){
- sequence=0;
- }else{
- sequence++;
- if(no>lastno+1)
- sequence++;
- }
- lastno=no;
- if(op->packetno!=sequence){
- fprintf(stderr,"incorrect packet sequence %ld != %d\n",
- (long)(op->packetno),sequence);
- exit(1);
- }
-
- /* Test data */
- for(j=0;j<op->bytes;j++)
- if(op->packet[j]!=((j+no)&0xff)){
- fprintf(stderr,"body data mismatch (1) at pos %ld: %x!=%lx!\n\n",
- j,op->packet[j],(j+no)&0xff);
- exit(1);
- }
-}
-
-void check_page(unsigned char *data,const int *header,ogg_page *og){
- long j;
- /* Test data */
- for(j=0;j<og->body_len;j++)
- if(og->body[j]!=data[j]){
- fprintf(stderr,"body data mismatch (2) at pos %ld: %x!=%x!\n\n",
- j,data[j],og->body[j]);
- exit(1);
- }
-
- /* Test header */
- for(j=0;j<og->header_len;j++){
- if(og->header[j]!=header[j]){
- fprintf(stderr,"header content mismatch at pos %ld:\n",j);
- for(j=0;j<header[26]+27;j++)
- fprintf(stderr," (%ld)%02x:%02x",j,header[j],og->header[j]);
- fprintf(stderr,"\n");
- exit(1);
- }
- }
- if(og->header_len!=header[26]+27){
- fprintf(stderr,"header length incorrect! (%ld!=%d)\n",
- og->header_len,header[26]+27);
- exit(1);
- }
-}
-
-void print_header(ogg_page *og){
- int j;
- fprintf(stderr,"\nHEADER:\n");
- fprintf(stderr," capture: %c %c %c %c version: %d flags: %x\n",
- og->header[0],og->header[1],og->header[2],og->header[3],
- (int)og->header[4],(int)og->header[5]);
-
- fprintf(stderr," granulepos: %d serialno: %d pageno: %ld\n",
- (og->header[9]<<24)|(og->header[8]<<16)|
- (og->header[7]<<8)|og->header[6],
- (og->header[17]<<24)|(og->header[16]<<16)|
- (og->header[15]<<8)|og->header[14],
- ((long)(og->header[21])<<24)|(og->header[20]<<16)|
- (og->header[19]<<8)|og->header[18]);
-
- fprintf(stderr," checksum: %02x:%02x:%02x:%02x\n segments: %d (",
- (int)og->header[22],(int)og->header[23],
- (int)og->header[24],(int)og->header[25],
- (int)og->header[26]);
-
- for(j=27;j<og->header_len;j++)
- fprintf(stderr,"%d ",(int)og->header[j]);
- fprintf(stderr,")\n\n");
-}
-
-void copy_page(ogg_page *og){
- unsigned char *temp=_ogg_malloc(og->header_len);
- memcpy(temp,og->header,og->header_len);
- og->header=temp;
-
- temp=_ogg_malloc(og->body_len);
- memcpy(temp,og->body,og->body_len);
- og->body=temp;
-}
-
-void free_page(ogg_page *og){
- _ogg_free (og->header);
- _ogg_free (og->body);
-}
-
-void error(void){
- fprintf(stderr,"error!\n");
- exit(1);
-}
-
-/* 17 only */
-const int head1_0[] = {0x4f,0x67,0x67,0x53,0,0x06,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,0,0,0,0,
- 0x15,0xed,0xec,0x91,
- 1,
- 17};
-
-/* 17, 254, 255, 256, 500, 510, 600 byte, pad */
-const int head1_1[] = {0x4f,0x67,0x67,0x53,0,0x02,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,0,0,0,0,
- 0x59,0x10,0x6c,0x2c,
- 1,
- 17};
-const int head2_1[] = {0x4f,0x67,0x67,0x53,0,0x04,
- 0x07,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,1,0,0,0,
- 0x89,0x33,0x85,0xce,
- 13,
- 254,255,0,255,1,255,245,255,255,0,
- 255,255,90};
-
-/* nil packets; beginning,middle,end */
-const int head1_2[] = {0x4f,0x67,0x67,0x53,0,0x02,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,0,0,0,0,
- 0xff,0x7b,0x23,0x17,
- 1,
- 0};
-const int head2_2[] = {0x4f,0x67,0x67,0x53,0,0x04,
- 0x07,0x28,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,1,0,0,0,
- 0x5c,0x3f,0x66,0xcb,
- 17,
- 17,254,255,0,0,255,1,0,255,245,255,255,0,
- 255,255,90,0};
-
-/* large initial packet */
-const int head1_3[] = {0x4f,0x67,0x67,0x53,0,0x02,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,0,0,0,0,
- 0x01,0x27,0x31,0xaa,
- 18,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,10};
-
-const int head2_3[] = {0x4f,0x67,0x67,0x53,0,0x04,
- 0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,1,0,0,0,
- 0x7f,0x4e,0x8a,0xd2,
- 4,
- 255,4,255,0};
-
-
-/* continuing packet test */
-const int head1_4[] = {0x4f,0x67,0x67,0x53,0,0x02,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,0,0,0,0,
- 0xff,0x7b,0x23,0x17,
- 1,
- 0};
-
-const int head2_4[] = {0x4f,0x67,0x67,0x53,0,0x00,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x01,0x02,0x03,0x04,1,0,0,0,
- 0xf8,0x3c,0x19,0x79,
- 255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255};
-
-const int head3_4[] = {0x4f,0x67,0x67,0x53,0,0x05,
- 0x07,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,2,0,0,0,
- 0x38,0xe6,0xb6,0x28,
- 6,
- 255,220,255,4,255,0};
-
-
-/* spill expansion test */
-const int head1_4b[] = {0x4f,0x67,0x67,0x53,0,0x02,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,0,0,0,0,
- 0xff,0x7b,0x23,0x17,
- 1,
- 0};
-
-const int head2_4b[] = {0x4f,0x67,0x67,0x53,0,0x00,
- 0x07,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,1,0,0,0,
- 0xce,0x8f,0x17,0x1a,
- 23,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,255,10,255,4,255,0,0};
-
-
-const int head3_4b[] = {0x4f,0x67,0x67,0x53,0,0x04,
- 0x07,0x14,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,2,0,0,0,
- 0x9b,0xb2,0x50,0xa1,
- 1,
- 0};
-
-/* page with the 255 segment limit */
-const int head1_5[] = {0x4f,0x67,0x67,0x53,0,0x02,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,0,0,0,0,
- 0xff,0x7b,0x23,0x17,
- 1,
- 0};
-
-const int head2_5[] = {0x4f,0x67,0x67,0x53,0,0x00,
- 0x07,0xfc,0x03,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,1,0,0,0,
- 0xed,0x2a,0x2e,0xa7,
- 255,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10};
-
-const int head3_5[] = {0x4f,0x67,0x67,0x53,0,0x04,
- 0x07,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,2,0,0,0,
- 0x6c,0x3b,0x82,0x3d,
- 1,
- 50};
-
-
-/* packet that overspans over an entire page */
-const int head1_6[] = {0x4f,0x67,0x67,0x53,0,0x02,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,0,0,0,0,
- 0xff,0x7b,0x23,0x17,
- 1,
- 0};
-
-const int head2_6[] = {0x4f,0x67,0x67,0x53,0,0x00,
- 0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,1,0,0,0,
- 0x68,0x22,0x7c,0x3d,
- 255,
- 100,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255};
-
-const int head3_6[] = {0x4f,0x67,0x67,0x53,0,0x01,
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
- 0x01,0x02,0x03,0x04,2,0,0,0,
- 0xf4,0x87,0xba,0xf3,
- 255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255};
-
-const int head4_6[] = {0x4f,0x67,0x67,0x53,0,0x05,
- 0x07,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,3,0,0,0,
- 0xf7,0x2f,0x6c,0x60,
- 5,
- 254,255,4,255,0};
-
-/* packet that overspans over an entire page */
-const int head1_7[] = {0x4f,0x67,0x67,0x53,0,0x02,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,0,0,0,0,
- 0xff,0x7b,0x23,0x17,
- 1,
- 0};
-
-const int head2_7[] = {0x4f,0x67,0x67,0x53,0,0x00,
- 0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,1,0,0,0,
- 0x68,0x22,0x7c,0x3d,
- 255,
- 100,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255,255,255,
- 255,255,255,255,255,255};
-
-const int head3_7[] = {0x4f,0x67,0x67,0x53,0,0x05,
- 0x07,0x08,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x01,0x02,0x03,0x04,2,0,0,0,
- 0xd4,0xe0,0x60,0xe5,
- 1,
- 0};
-
-void test_pack(const int *pl, const int **headers, int byteskip,
- int pageskip, int packetskip){
- unsigned char *data=_ogg_malloc(1024*1024); /* for scripted test cases only */
- long inptr=0;
- long outptr=0;
- long deptr=0;
- long depacket=0;
- long granule_pos=7,pageno=0;
- int i,j,packets,pageout=pageskip;
- int eosflag=0;
- int bosflag=0;
-
- int byteskipcount=0;
-
- ogg_stream_reset(&os_en);
- ogg_stream_reset(&os_de);
- ogg_sync_reset(&oy);
-
- for(packets=0;packets<packetskip;packets++)
- depacket+=pl[packets];
-
- for(packets=0;;packets++)if(pl[packets]==-1)break;
-
- for(i=0;i<packets;i++){
- /* construct a test packet */
- ogg_packet op;
- int len=pl[i];
-
- op.packet=data+inptr;
- op.bytes=len;
- op.e_o_s=(pl[i+1]<0?1:0);
- op.granulepos=granule_pos;
-
- granule_pos+=1024;
-
- for(j=0;j<len;j++)data[inptr++]=i+j;
-
- /* submit the test packet */
- ogg_stream_packetin(&os_en,&op);
-
- /* retrieve any finished pages */
- {
- ogg_page og;
-
- while(ogg_stream_pageout(&os_en,&og)){
- /* We have a page. Check it carefully */
-
- fprintf(stderr,"%ld, ",pageno);
-
- if(headers[pageno]==NULL){
- fprintf(stderr,"coded too many pages!\n");
- exit(1);
- }
-
- check_page(data+outptr,headers[pageno],&og);
-
- outptr+=og.body_len;
- pageno++;
- if(pageskip){
- bosflag=1;
- pageskip--;
- deptr+=og.body_len;
- }
-
- /* have a complete page; submit it to sync/decode */
-
- {
- ogg_page og_de;
- ogg_packet op_de,op_de2;
- char *buf=ogg_sync_buffer(&oy,og.header_len+og.body_len);
- char *next=buf;
- byteskipcount+=og.header_len;
- if(byteskipcount>byteskip){
- memcpy(next,og.header,byteskipcount-byteskip);
- next+=byteskipcount-byteskip;
- byteskipcount=byteskip;
- }
-
- byteskipcount+=og.body_len;
- if(byteskipcount>byteskip){
- memcpy(next,og.body,byteskipcount-byteskip);
- next+=byteskipcount-byteskip;
- byteskipcount=byteskip;
- }
-
- ogg_sync_wrote(&oy,next-buf);
-
- while(1){
- int ret=ogg_sync_pageout(&oy,&og_de);
- if(ret==0)break;
- if(ret<0)continue;
- /* got a page. Happy happy. Verify that it's good. */
-
- fprintf(stderr,"(%d), ",pageout);
-
- check_page(data+deptr,headers[pageout],&og_de);
- deptr+=og_de.body_len;
- pageout++;
-
- /* submit it to deconstitution */
- ogg_stream_pagein(&os_de,&og_de);
-
- /* packets out? */
- while(ogg_stream_packetpeek(&os_de,&op_de2)>0){
- ogg_stream_packetpeek(&os_de,NULL);
- ogg_stream_packetout(&os_de,&op_de); /* just catching them all */
-
- /* verify peek and out match */
- if(memcmp(&op_de,&op_de2,sizeof(op_de))){
- fprintf(stderr,"packetout != packetpeek! pos=%ld\n",
- depacket);
- exit(1);
- }
-
- /* verify the packet! */
- /* check data */
- if(memcmp(data+depacket,op_de.packet,op_de.bytes)){
- fprintf(stderr,"packet data mismatch in decode! pos=%ld\n",
- depacket);
- exit(1);
- }
- /* check bos flag */
- if(bosflag==0 && op_de.b_o_s==0){
- fprintf(stderr,"b_o_s flag not set on packet!\n");
- exit(1);
- }
- if(bosflag && op_de.b_o_s){
- fprintf(stderr,"b_o_s flag incorrectly set on packet!\n");
- exit(1);
- }
- bosflag=1;
- depacket+=op_de.bytes;
-
- /* check eos flag */
- if(eosflag){
- fprintf(stderr,"Multiple decoded packets with eos flag!\n");
- exit(1);
- }
-
- if(op_de.e_o_s)eosflag=1;
-
- /* check granulepos flag */
- if(op_de.granulepos!=-1){
- fprintf(stderr," granule:%ld ",(long)op_de.granulepos);
- }
- }
- }
- }
- }
- }
- }
- _ogg_free(data);
- if(headers[pageno]!=NULL){
- fprintf(stderr,"did not write last page!\n");
- exit(1);
- }
- if(headers[pageout]!=NULL){
- fprintf(stderr,"did not decode last page!\n");
- exit(1);
- }
- if(inptr!=outptr){
- fprintf(stderr,"encoded page data incomplete!\n");
- exit(1);
- }
- if(inptr!=deptr){
- fprintf(stderr,"decoded page data incomplete!\n");
- exit(1);
- }
- if(inptr!=depacket){
- fprintf(stderr,"decoded packet data incomplete!\n");
- exit(1);
- }
- if(!eosflag){
- fprintf(stderr,"Never got a packet with EOS set!\n");
- exit(1);
- }
- fprintf(stderr,"ok.\n");
-}
-
-int main(void){
-
- ogg_stream_init(&os_en,0x04030201);
- ogg_stream_init(&os_de,0x04030201);
- ogg_sync_init(&oy);
-
- /* Exercise each code path in the framing code. Also verify that
- the checksums are working. */
-
- {
- /* 17 only */
- const int packets[]={17, -1};
- const int *headret[]={head1_0,NULL};
-
- fprintf(stderr,"testing single page encoding... ");
- test_pack(packets,headret,0,0,0);
- }
-
- {
- /* 17, 254, 255, 256, 500, 510, 600 byte, pad */
- const int packets[]={17, 254, 255, 256, 500, 510, 600, -1};
- const int *headret[]={head1_1,head2_1,NULL};
-
- fprintf(stderr,"testing basic page encoding... ");
- test_pack(packets,headret,0,0,0);
- }
-
- {
- /* nil packets; beginning,middle,end */
- const int packets[]={0,17, 254, 255, 0, 256, 0, 500, 510, 600, 0, -1};
- const int *headret[]={head1_2,head2_2,NULL};
-
- fprintf(stderr,"testing basic nil packets... ");
- test_pack(packets,headret,0,0,0);
- }
-
- {
- /* large initial packet */
- const int packets[]={4345,259,255,-1};
- const int *headret[]={head1_3,head2_3,NULL};
-
- fprintf(stderr,"testing initial-packet lacing > 4k... ");
- test_pack(packets,headret,0,0,0);
- }
-
- {
- /* continuing packet test; with page spill expansion, we have to
- overflow the lacing table. */
- const int packets[]={0,65500,259,255,-1};
- const int *headret[]={head1_4,head2_4,head3_4,NULL};
-
- fprintf(stderr,"testing single packet page span... ");
- test_pack(packets,headret,0,0,0);
- }
-
- {
- /* spill expand packet test */
- const int packets[]={0,4345,259,255,0,0,-1};
- const int *headret[]={head1_4b,head2_4b,head3_4b,NULL};
-
- fprintf(stderr,"testing page spill expansion... ");
- test_pack(packets,headret,0,0,0);
- }
-
- /* page with the 255 segment limit */
- {
-
- const int packets[]={0,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,50,-1};
- const int *headret[]={head1_5,head2_5,head3_5,NULL};
-
- fprintf(stderr,"testing max packet segments... ");
- test_pack(packets,headret,0,0,0);
- }
-
- {
- /* packet that overspans over an entire page */
- const int packets[]={0,100,130049,259,255,-1};
- const int *headret[]={head1_6,head2_6,head3_6,head4_6,NULL};
-
- fprintf(stderr,"testing very large packets... ");
- test_pack(packets,headret,0,0,0);
- }
-
- {
- /* test for the libogg 1.1.1 resync in large continuation bug
- found by Josh Coalson) */
- const int packets[]={0,100,130049,259,255,-1};
- const int *headret[]={head1_6,head2_6,head3_6,head4_6,NULL};
-
- fprintf(stderr,"testing continuation resync in very large packets... ");
- test_pack(packets,headret,100,2,3);
- }
-
- {
- /* term only page. why not? */
- const int packets[]={0,100,64770,-1};
- const int *headret[]={head1_7,head2_7,head3_7,NULL};
-
- fprintf(stderr,"testing zero data page (1 nil packet)... ");
- test_pack(packets,headret,0,0,0);
- }
-
-
-
- {
- /* build a bunch of pages for testing */
- unsigned char *data=_ogg_malloc(1024*1024);
- int pl[]={0, 1,1,98,4079, 1,1,2954,2057, 76,34,912,0,234,1000,1000, 1000,300,-1};
- int inptr=0,i,j;
- ogg_page og[5];
-
- ogg_stream_reset(&os_en);
-
- for(i=0;pl[i]!=-1;i++){
- ogg_packet op;
- int len=pl[i];
-
- op.packet=data+inptr;
- op.bytes=len;
- op.e_o_s=(pl[i+1]<0?1:0);
- op.granulepos=(i+1)*1000;
-
- for(j=0;j<len;j++)data[inptr++]=i+j;
- ogg_stream_packetin(&os_en,&op);
- }
-
- _ogg_free(data);
-
- /* retrieve finished pages */
- for(i=0;i<5;i++){
- if(ogg_stream_pageout(&os_en,&og[i])==0){
- fprintf(stderr,"Too few pages output building sync tests!\n");
- exit(1);
- }
- copy_page(&og[i]);
- }
-
- /* Test lost pages on pagein/packetout: no rollback */
- {
- ogg_page temp;
- ogg_packet test;
-
- fprintf(stderr,"Testing loss of pages... ");
-
- ogg_sync_reset(&oy);
- ogg_stream_reset(&os_de);
- for(i=0;i<5;i++){
- memcpy(ogg_sync_buffer(&oy,og[i].header_len),og[i].header,
- og[i].header_len);
- ogg_sync_wrote(&oy,og[i].header_len);
- memcpy(ogg_sync_buffer(&oy,og[i].body_len),og[i].body,og[i].body_len);
- ogg_sync_wrote(&oy,og[i].body_len);
- }
-
- ogg_sync_pageout(&oy,&temp);
- ogg_stream_pagein(&os_de,&temp);
- ogg_sync_pageout(&oy,&temp);
- ogg_stream_pagein(&os_de,&temp);
- ogg_sync_pageout(&oy,&temp);
- /* skip */
- ogg_sync_pageout(&oy,&temp);
- ogg_stream_pagein(&os_de,&temp);
-
- /* do we get the expected results/packets? */
-
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,0,0,0);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,1,1,-1);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,1,2,-1);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,98,3,-1);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,4079,4,5000);
- if(ogg_stream_packetout(&os_de,&test)!=-1){
- fprintf(stderr,"Error: loss of page did not return error\n");
- exit(1);
- }
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,76,9,-1);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,34,10,-1);
- fprintf(stderr,"ok.\n");
- }
-
- /* Test lost pages on pagein/packetout: rollback with continuation */
- {
- ogg_page temp;
- ogg_packet test;
-
- fprintf(stderr,"Testing loss of pages (rollback required)... ");
-
- ogg_sync_reset(&oy);
- ogg_stream_reset(&os_de);
- for(i=0;i<5;i++){
- memcpy(ogg_sync_buffer(&oy,og[i].header_len),og[i].header,
- og[i].header_len);
- ogg_sync_wrote(&oy,og[i].header_len);
- memcpy(ogg_sync_buffer(&oy,og[i].body_len),og[i].body,og[i].body_len);
- ogg_sync_wrote(&oy,og[i].body_len);
- }
-
- ogg_sync_pageout(&oy,&temp);
- ogg_stream_pagein(&os_de,&temp);
- ogg_sync_pageout(&oy,&temp);
- ogg_stream_pagein(&os_de,&temp);
- ogg_sync_pageout(&oy,&temp);
- ogg_stream_pagein(&os_de,&temp);
- ogg_sync_pageout(&oy,&temp);
- /* skip */
- ogg_sync_pageout(&oy,&temp);
- ogg_stream_pagein(&os_de,&temp);
-
- /* do we get the expected results/packets? */
-
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,0,0,0);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,1,1,-1);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,1,2,-1);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,98,3,-1);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,4079,4,5000);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,1,5,-1);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,1,6,-1);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,2954,7,-1);
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,2057,8,9000);
- if(ogg_stream_packetout(&os_de,&test)!=-1){
- fprintf(stderr,"Error: loss of page did not return error\n");
- exit(1);
- }
- if(ogg_stream_packetout(&os_de,&test)!=1)error();
- checkpacket(&test,300,17,18000);
- fprintf(stderr,"ok.\n");
- }
-
- /* the rest only test sync */
- {
- ogg_page og_de;
- /* Test fractional page inputs: incomplete capture */
- fprintf(stderr,"Testing sync on partial inputs... ");
- ogg_sync_reset(&oy);
- memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
- 3);
- ogg_sync_wrote(&oy,3);
- if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
- /* Test fractional page inputs: incomplete fixed header */
- memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+3,
- 20);
- ogg_sync_wrote(&oy,20);
- if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
- /* Test fractional page inputs: incomplete header */
- memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+23,
- 5);
- ogg_sync_wrote(&oy,5);
- if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
- /* Test fractional page inputs: incomplete body */
-
- memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+28,
- og[1].header_len-28);
- ogg_sync_wrote(&oy,og[1].header_len-28);
- if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
- memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,1000);
- ogg_sync_wrote(&oy,1000);
- if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
- memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body+1000,
- og[1].body_len-1000);
- ogg_sync_wrote(&oy,og[1].body_len-1000);
- if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
- fprintf(stderr,"ok.\n");
- }
-
- /* Test fractional page inputs: page + incomplete capture */
- {
- ogg_page og_de;
- fprintf(stderr,"Testing sync on 1+partial inputs... ");
- ogg_sync_reset(&oy);
-
- memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
- og[1].header_len);
- ogg_sync_wrote(&oy,og[1].header_len);
-
- memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
- og[1].body_len);
- ogg_sync_wrote(&oy,og[1].body_len);
-
- memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
- 20);
- ogg_sync_wrote(&oy,20);
- if(ogg_sync_pageout(&oy,&og_de)<=0)error();
- if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
- memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header+20,
- og[1].header_len-20);
- ogg_sync_wrote(&oy,og[1].header_len-20);
- memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
- og[1].body_len);
- ogg_sync_wrote(&oy,og[1].body_len);
- if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
- fprintf(stderr,"ok.\n");
- }
-
- /* Test recapture: garbage + page */
- {
- ogg_page og_de;
- fprintf(stderr,"Testing search for capture... ");
- ogg_sync_reset(&oy);
-
- /* 'garbage' */
- memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
- og[1].body_len);
- ogg_sync_wrote(&oy,og[1].body_len);
-
- memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
- og[1].header_len);
- ogg_sync_wrote(&oy,og[1].header_len);
-
- memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
- og[1].body_len);
- ogg_sync_wrote(&oy,og[1].body_len);
-
- memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header,
- 20);
- ogg_sync_wrote(&oy,20);
- if(ogg_sync_pageout(&oy,&og_de)>0)error();
- if(ogg_sync_pageout(&oy,&og_de)<=0)error();
- if(ogg_sync_pageout(&oy,&og_de)>0)error();
-
- memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header+20,
- og[2].header_len-20);
- ogg_sync_wrote(&oy,og[2].header_len-20);
- memcpy(ogg_sync_buffer(&oy,og[2].body_len),og[2].body,
- og[2].body_len);
- ogg_sync_wrote(&oy,og[2].body_len);
- if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
- fprintf(stderr,"ok.\n");
- }
-
- /* Test recapture: page + garbage + page */
- {
- ogg_page og_de;
- fprintf(stderr,"Testing recapture... ");
- ogg_sync_reset(&oy);
-
- memcpy(ogg_sync_buffer(&oy,og[1].header_len),og[1].header,
- og[1].header_len);
- ogg_sync_wrote(&oy,og[1].header_len);
-
- memcpy(ogg_sync_buffer(&oy,og[1].body_len),og[1].body,
- og[1].body_len);
- ogg_sync_wrote(&oy,og[1].body_len);
-
- memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header,
- og[2].header_len);
- ogg_sync_wrote(&oy,og[2].header_len);
-
- memcpy(ogg_sync_buffer(&oy,og[2].header_len),og[2].header,
- og[2].header_len);
- ogg_sync_wrote(&oy,og[2].header_len);
-
- if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
- memcpy(ogg_sync_buffer(&oy,og[2].body_len),og[2].body,
- og[2].body_len-5);
- ogg_sync_wrote(&oy,og[2].body_len-5);
-
- memcpy(ogg_sync_buffer(&oy,og[3].header_len),og[3].header,
- og[3].header_len);
- ogg_sync_wrote(&oy,og[3].header_len);
-
- memcpy(ogg_sync_buffer(&oy,og[3].body_len),og[3].body,
- og[3].body_len);
- ogg_sync_wrote(&oy,og[3].body_len);
-
- if(ogg_sync_pageout(&oy,&og_de)>0)error();
- if(ogg_sync_pageout(&oy,&og_de)<=0)error();
-
- fprintf(stderr,"ok.\n");
- }
-
- /* Free page data that was previously copied */
- {
- for(i=0;i<5;i++){
- free_page(&og[i]);
- }
- }
- }
-
- return(0);
-}
-
-#endif
diff --git a/drivers/ogg/ogg.h b/drivers/ogg/ogg.h
deleted file mode 100644
index cea4ebed75..0000000000
--- a/drivers/ogg/ogg.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: toplevel libogg include
- last mod: $Id: ogg.h 18044 2011-08-01 17:55:20Z gmaxwell $
-
- ********************************************************************/
-#ifndef _OGG_H
-#define _OGG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stddef.h>
-#include <ogg/os_types.h>
-
-typedef struct {
- void *iov_base;
- size_t iov_len;
-} ogg_iovec_t;
-
-typedef struct {
- long endbyte;
- int endbit;
-
- unsigned char *buffer;
- unsigned char *ptr;
- long storage;
-} oggpack_buffer;
-
-/* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/
-
-typedef struct {
- unsigned char *header;
- long header_len;
- unsigned char *body;
- long body_len;
-} ogg_page;
-
-/* ogg_stream_state contains the current encode/decode state of a logical
- Ogg bitstream **********************************************************/
-
-typedef struct {
- unsigned char *body_data; /* bytes from packet bodies */
- long body_storage; /* storage elements allocated */
- long body_fill; /* elements stored; fill mark */
- long body_returned; /* elements of fill returned */
-
-
- int *lacing_vals; /* The values that will go to the segment table */
- ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact
- this way, but it is simple coupled to the
- lacing fifo */
- long lacing_storage;
- long lacing_fill;
- long lacing_packet;
- long lacing_returned;
-
- unsigned char header[282]; /* working space for header encode */
- int header_fill;
-
- int e_o_s; /* set when we have buffered the last packet in the
- logical bitstream */
- int b_o_s; /* set after we've written the initial page
- of a logical bitstream */
- long serialno;
- long pageno;
- ogg_int64_t packetno; /* sequence number for decode; the framing
- knows where there's a hole in the data,
- but we need coupling so that the codec
- (which is in a separate abstraction
- layer) also knows about the gap */
- ogg_int64_t granulepos;
-
-} ogg_stream_state;
-
-/* ogg_packet is used to encapsulate the data and metadata belonging
- to a single raw Ogg/Vorbis packet *************************************/
-
-typedef struct {
- unsigned char *packet;
- long bytes;
- long b_o_s;
- long e_o_s;
-
- ogg_int64_t granulepos;
-
- ogg_int64_t packetno; /* sequence number for decode; the framing
- knows where there's a hole in the data,
- but we need coupling so that the codec
- (which is in a separate abstraction
- layer) also knows about the gap */
-} ogg_packet;
-
-typedef struct {
- unsigned char *data;
- int storage;
- int fill;
- int returned;
-
- int unsynced;
- int headerbytes;
- int bodybytes;
-} ogg_sync_state;
-
-/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
-
-extern void oggpack_writeinit(oggpack_buffer *b);
-extern int oggpack_writecheck(oggpack_buffer *b);
-extern void oggpack_writetrunc(oggpack_buffer *b,long bits);
-extern void oggpack_writealign(oggpack_buffer *b);
-extern void oggpack_writecopy(oggpack_buffer *b,void *source,long bits);
-extern void oggpack_reset(oggpack_buffer *b);
-extern void oggpack_writeclear(oggpack_buffer *b);
-extern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
-extern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits);
-extern long oggpack_look(oggpack_buffer *b,int bits);
-extern long oggpack_look1(oggpack_buffer *b);
-extern void oggpack_adv(oggpack_buffer *b,int bits);
-extern void oggpack_adv1(oggpack_buffer *b);
-extern long oggpack_read(oggpack_buffer *b,int bits);
-extern long oggpack_read1(oggpack_buffer *b);
-extern long oggpack_bytes(oggpack_buffer *b);
-extern long oggpack_bits(oggpack_buffer *b);
-extern unsigned char *oggpack_get_buffer(oggpack_buffer *b);
-
-extern void oggpackB_writeinit(oggpack_buffer *b);
-extern int oggpackB_writecheck(oggpack_buffer *b);
-extern void oggpackB_writetrunc(oggpack_buffer *b,long bits);
-extern void oggpackB_writealign(oggpack_buffer *b);
-extern void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits);
-extern void oggpackB_reset(oggpack_buffer *b);
-extern void oggpackB_writeclear(oggpack_buffer *b);
-extern void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
-extern void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits);
-extern long oggpackB_look(oggpack_buffer *b,int bits);
-extern long oggpackB_look1(oggpack_buffer *b);
-extern void oggpackB_adv(oggpack_buffer *b,int bits);
-extern void oggpackB_adv1(oggpack_buffer *b);
-extern long oggpackB_read(oggpack_buffer *b,int bits);
-extern long oggpackB_read1(oggpack_buffer *b);
-extern long oggpackB_bytes(oggpack_buffer *b);
-extern long oggpackB_bits(oggpack_buffer *b);
-extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b);
-
-/* Ogg BITSTREAM PRIMITIVES: encoding **************************/
-
-extern int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op);
-extern int ogg_stream_iovecin(ogg_stream_state *os, ogg_iovec_t *iov,
- int count, long e_o_s, ogg_int64_t granulepos);
-extern int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og);
-extern int ogg_stream_pageout_fill(ogg_stream_state *os, ogg_page *og, int nfill);
-extern int ogg_stream_flush(ogg_stream_state *os, ogg_page *og);
-extern int ogg_stream_flush_fill(ogg_stream_state *os, ogg_page *og, int nfill);
-
-/* Ogg BITSTREAM PRIMITIVES: decoding **************************/
-
-extern int ogg_sync_init(ogg_sync_state *oy);
-extern int ogg_sync_clear(ogg_sync_state *oy);
-extern int ogg_sync_reset(ogg_sync_state *oy);
-extern int ogg_sync_destroy(ogg_sync_state *oy);
-extern int ogg_sync_check(ogg_sync_state *oy);
-
-extern char *ogg_sync_buffer(ogg_sync_state *oy, long size);
-extern int ogg_sync_wrote(ogg_sync_state *oy, long bytes);
-extern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
-extern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
-extern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
-extern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
-extern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
-
-/* Ogg BITSTREAM PRIMITIVES: general ***************************/
-
-extern int ogg_stream_init(ogg_stream_state *os,int serialno);
-extern int ogg_stream_clear(ogg_stream_state *os);
-extern int ogg_stream_reset(ogg_stream_state *os);
-extern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno);
-extern int ogg_stream_destroy(ogg_stream_state *os);
-extern int ogg_stream_check(ogg_stream_state *os);
-extern int ogg_stream_eos(ogg_stream_state *os);
-
-extern void ogg_page_checksum_set(ogg_page *og);
-
-extern int ogg_page_version(const ogg_page *og);
-extern int ogg_page_continued(const ogg_page *og);
-extern int ogg_page_bos(const ogg_page *og);
-extern int ogg_page_eos(const ogg_page *og);
-extern ogg_int64_t ogg_page_granulepos(const ogg_page *og);
-extern int ogg_page_serialno(const ogg_page *og);
-extern long ogg_page_pageno(const ogg_page *og);
-extern int ogg_page_packets(const ogg_page *og);
-
-extern void ogg_packet_clear(ogg_packet *op);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _OGG_H */
diff --git a/drivers/ogg/os_types.h b/drivers/ogg/os_types.h
deleted file mode 100644
index 8bf82107e5..0000000000
--- a/drivers/ogg/os_types.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/********************************************************************
- * *
- * 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-2002 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: #ifdef jail to whip a few platforms into the UNIX ideal.
- last mod: $Id: os_types.h 19098 2014-02-26 19:06:45Z giles $
-
- ********************************************************************/
-#ifndef _OS_TYPES_H
-#define _OS_TYPES_H
-
-/* make it easy on the folks that want to compile the libs with a
- different malloc than stdlib */
-#define _ogg_malloc malloc
-#define _ogg_calloc calloc
-#define _ogg_realloc realloc
-#define _ogg_free free
-
-#if defined(_WIN32)
-
-# if defined(__CYGWIN__)
-# include <stdint.h>
- typedef int16_t ogg_int16_t;
- typedef uint16_t ogg_uint16_t;
- typedef int32_t ogg_int32_t;
- typedef uint32_t ogg_uint32_t;
- typedef int64_t ogg_int64_t;
- typedef uint64_t ogg_uint64_t;
-# elif defined(__MINGW32__)
-# include <sys/types.h>
- typedef short ogg_int16_t;
- typedef unsigned short ogg_uint16_t;
- typedef int ogg_int32_t;
- typedef unsigned int ogg_uint32_t;
- typedef long long ogg_int64_t;
- typedef unsigned long long ogg_uint64_t;
-# elif defined(__MWERKS__)
- typedef long long ogg_int64_t;
- typedef int ogg_int32_t;
- typedef unsigned int ogg_uint32_t;
- typedef short ogg_int16_t;
- typedef unsigned short ogg_uint16_t;
-# else
- /* MSVC/Borland */
- typedef __int64 ogg_int64_t;
- typedef __int32 ogg_int32_t;
- typedef unsigned __int32 ogg_uint32_t;
- typedef __int16 ogg_int16_t;
- typedef unsigned __int16 ogg_uint16_t;
-# endif
-
-#elif defined(__MACOS__)
-
-# include <sys/types.h>
- typedef SInt16 ogg_int16_t;
- typedef UInt16 ogg_uint16_t;
- typedef SInt32 ogg_int32_t;
- typedef UInt32 ogg_uint32_t;
- typedef SInt64 ogg_int64_t;
-
-#elif (defined(__APPLE__) && defined(__MACH__)) /* MacOS X Framework build */
-
-# include <inttypes.h>
- typedef int16_t ogg_int16_t;
- typedef uint16_t ogg_uint16_t;
- typedef int32_t ogg_int32_t;
- typedef uint32_t ogg_uint32_t;
- typedef int64_t ogg_int64_t;
-
-#elif defined(__HAIKU__)
-
- /* Haiku */
-# include <sys/types.h>
- typedef short ogg_int16_t;
- typedef unsigned short ogg_uint16_t;
- typedef int ogg_int32_t;
- typedef unsigned int ogg_uint32_t;
- typedef long long ogg_int64_t;
-
-#elif defined(__BEOS__)
-
- /* Be */
-# include <inttypes.h>
- typedef int16_t ogg_int16_t;
- typedef uint16_t ogg_uint16_t;
- typedef int32_t ogg_int32_t;
- typedef uint32_t ogg_uint32_t;
- typedef int64_t ogg_int64_t;
-
-#elif defined (__EMX__)
-
- /* OS/2 GCC */
- typedef short ogg_int16_t;
- typedef unsigned short ogg_uint16_t;
- typedef int ogg_int32_t;
- typedef unsigned int ogg_uint32_t;
- typedef long long ogg_int64_t;
-
-#elif defined (DJGPP)
-
- /* DJGPP */
- typedef short ogg_int16_t;
- typedef int ogg_int32_t;
- typedef unsigned int ogg_uint32_t;
- typedef long long ogg_int64_t;
-
-#elif defined(R5900)
-
- /* PS2 EE */
- typedef long ogg_int64_t;
- typedef int ogg_int32_t;
- typedef unsigned ogg_uint32_t;
- typedef short ogg_int16_t;
-
-#elif defined(__SYMBIAN32__)
-
- /* Symbian GCC */
- typedef signed short ogg_int16_t;
- typedef unsigned short ogg_uint16_t;
- typedef signed int ogg_int32_t;
- typedef unsigned int ogg_uint32_t;
- typedef long long int ogg_int64_t;
-
-#elif defined(__TMS320C6X__)
-
- /* TI C64x compiler */
- typedef signed short ogg_int16_t;
- typedef unsigned short ogg_uint16_t;
- typedef signed int ogg_int32_t;
- typedef unsigned int ogg_uint32_t;
- typedef long long int ogg_int64_t;
-
-#else
-
-# include <ogg/config_types.h>
-
-#endif
-
-#endif /* _OS_TYPES_H */
diff --git a/drivers/opus/COPYING b/drivers/opus/COPYING
deleted file mode 100644
index 7b53d665df..0000000000
--- a/drivers/opus/COPYING
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright (c) 1994-2013 Xiph.Org Foundation and contributors
-
-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.
diff --git a/drivers/opus/SCsub b/drivers/opus/SCsub
deleted file mode 100644
index bed8b496fc..0000000000
--- a/drivers/opus/SCsub
+++ /dev/null
@@ -1,196 +0,0 @@
-Import('env')
-
-opus_sources = [
- "opus/audio_stream_opus.cpp",
-]
-
-opus_sources_silk=[]
-
-opus_sources_lib = [
- "opus/silk/tables_other.c",
- "opus/silk/sum_sqr_shift.c",
- "opus/silk/PLC.c",
- "opus/silk/dec_API.c",
- "opus/silk/decode_pulses.c",
- "opus/silk/inner_prod_aligned.c",
- "opus/silk/init_encoder.c",
- "opus/silk/interpolate.c",
- "opus/silk/stereo_encode_pred.c",
- "opus/silk/decode_frame.c",
- "opus/silk/NLSF_del_dec_quant.c",
- "opus/silk/VAD.c",
- "opus/silk/resampler_private_AR2.c",
- "opus/silk/NLSF_unpack.c",
- "opus/silk/resampler_down2.c",
- "opus/silk/sort.c",
- "opus/silk/resampler_private_IIR_FIR.c",
- "opus/silk/resampler_down2_3.c",
- "opus/silk/resampler_private_up2_HQ.c",
- "opus/silk/tables_gain.c",
- "opus/silk/stereo_find_predictor.c",
- "opus/silk/stereo_quant_pred.c",
- "opus/silk/NLSF_stabilize.c",
- "opus/silk/ana_filt_bank_1.c",
- "opus/silk/check_control_input.c",
- "opus/silk/bwexpander.c",
- "opus/silk/A2NLSF.c",
- "opus/silk/LPC_inv_pred_gain.c",
- "opus/silk/log2lin.c",
- "opus/silk/process_NLSFs.c",
- "opus/silk/sigm_Q15.c",
- "opus/silk/VQ_WMat_EC.c",
- "opus/silk/quant_LTP_gains.c",
- "opus/silk/resampler_private_down_FIR.c",
- "opus/silk/NLSF_decode.c",
- "opus/silk/control_codec.c",
- "opus/silk/NLSF_VQ_weights_laroia.c",
- "opus/silk/decode_pitch.c",
- "opus/silk/stereo_decode_pred.c",
- "opus/silk/tables_pulses_per_block.c",
- "opus/silk/init_decoder.c",
- "opus/silk/table_LSF_cos.c",
- "opus/silk/decode_core.c",
- "opus/silk/code_signs.c",
- "opus/silk/enc_API.c",
- "opus/silk/tables_LTP.c",
- "opus/silk/pitch_est_tables.c",
- "opus/silk/biquad_alt.c",
- "opus/silk/encode_indices.c",
- "opus/silk/tables_NLSF_CB_WB.c",
- "opus/silk/debug.c",
- "opus/silk/decode_parameters.c",
- "opus/silk/tables_pitch_lag.c",
- "opus/silk/NLSF2A.c",
- "opus/silk/resampler.c",
- "opus/silk/decode_indices.c",
- "opus/silk/NLSF_VQ.c",
- "opus/silk/bwexpander_32.c",
- "opus/silk/tables_NLSF_CB_NB_MB.c",
- "opus/silk/encode_pulses.c",
- "opus/silk/NSQ_del_dec.c",
- "opus/silk/control_SNR.c",
- "opus/silk/shell_coder.c",
- "opus/silk/NLSF_encode.c",
- "opus/silk/stereo_MS_to_LR.c",
- "opus/silk/stereo_LR_to_MS.c",
- "opus/silk/HP_variable_cutoff.c",
- "opus/silk/LPC_analysis_filter.c",
- "opus/silk/CNG.c",
- "opus/silk/decoder_set_fs.c",
- "opus/silk/resampler_rom.c",
- "opus/silk/control_audio_bandwidth.c",
- "opus/silk/lin2log.c",
- "opus/silk/LP_variable_cutoff.c",
- "opus/silk/NSQ.c",
- "opus/silk/gain_quant.c",
- "opus/celt/laplace.c",
- "opus/celt/vq.c",
- "opus/celt/quant_bands.c",
- "opus/celt/kiss_fft.c",
- "opus/celt/entcode.c",
- "opus/celt/entenc.c",
- "opus/celt/celt_lpc.c",
- "opus/celt/pitch.c",
- "opus/celt/rate.c",
- "opus/celt/mathops.c",
- #"opus/celt/arm/armcpu.c",
- #"opus/celt/arm/celt_neon_intr.c",
- #"opus/celt/arm/celt_ne10_mdct.c",
- #"opus/celt/arm/celt_ne10_fft.c",
- #"opus/celt/arm/arm_celt_map.c",
- "opus/celt/celt_encoder.c",
- "opus/celt/celt.c",
- "opus/celt/bands.c",
- "opus/celt/cwrs.c",
- "opus/celt/entdec.c",
- "opus/celt/celt_decoder.c",
- "opus/celt/mdct.c",
- "opus/celt/modes.c",
- "opus/repacketizer.c",
- "opus/mlp_data.c",
- "opus/opus_multistream.c",
- "opus/opusfile.c",
- "opus/opus_encoder.c",
- "opus/analysis.c",
- "opus/mlp.c",
- "opus/info.c",
- "opus/stream.c",
- "opus/opus_decoder.c",
- "opus/internal.c",
- "opus/wincerts.c",
- "opus/opus.c",
- "opus/opus_multistream_encoder.c",
- "opus/http.c",
- "opus/opus_multistream_decoder.c"
-]
-
-if("opus_fixed_point" in env and env.opus_fixed_point=="yes"):
- env.Append(CFLAGS=["-DOPUS_FIXED_POINT"])
- opus_sources_silk = [
- "opus/silk/fixed/schur64_FIX.c",
- "opus/silk/fixed/residual_energy16_FIX.c",
- "opus/silk/fixed/encode_frame_FIX.c",
- "opus/silk/fixed/regularize_correlations_FIX.c",
- "opus/silk/fixed/apply_sine_window_FIX.c",
- "opus/silk/fixed/solve_LS_FIX.c",
- "opus/silk/fixed/schur_FIX.c",
- "opus/silk/fixed/pitch_analysis_core_FIX.c",
- "opus/silk/fixed/noise_shape_analysis_FIX.c",
- "opus/silk/fixed/find_LTP_FIX.c",
- "opus/silk/fixed/vector_ops_FIX.c",
- "opus/silk/fixed/autocorr_FIX.c",
- "opus/silk/fixed/warped_autocorrelation_FIX.c",
- "opus/silk/fixed/find_pitch_lags_FIX.c",
- "opus/silk/fixed/k2a_Q16_FIX.c",
- "opus/silk/fixed/LTP_scale_ctrl_FIX.c",
- "opus/silk/fixed/corrMatrix_FIX.c",
- "opus/silk/fixed/prefilter_FIX.c",
- "opus/silk/fixed/find_LPC_FIX.c",
- "opus/silk/fixed/residual_energy_FIX.c",
- "opus/silk/fixed/process_gains_FIX.c",
- "opus/silk/fixed/LTP_analysis_filter_FIX.c",
- "opus/silk/fixed/k2a_FIX.c",
- "opus/silk/fixed/burg_modified_FIX.c",
- "opus/silk/fixed/find_pred_coefs_FIX.c"
- ]
-else:
- opus_sources_silk = [
- "opus/silk/float/LTP_scale_ctrl_FLP.c",
- "opus/silk/float/regularize_correlations_FLP.c",
- "opus/silk/float/corrMatrix_FLP.c",
- "opus/silk/float/LPC_analysis_filter_FLP.c",
- "opus/silk/float/levinsondurbin_FLP.c",
- "opus/silk/float/schur_FLP.c",
- "opus/silk/float/scale_vector_FLP.c",
- "opus/silk/float/apply_sine_window_FLP.c",
- "opus/silk/float/pitch_analysis_core_FLP.c",
- "opus/silk/float/wrappers_FLP.c",
- "opus/silk/float/bwexpander_FLP.c",
- "opus/silk/float/warped_autocorrelation_FLP.c",
- "opus/silk/float/solve_LS_FLP.c",
- "opus/silk/float/find_LPC_FLP.c",
- "opus/silk/float/autocorrelation_FLP.c",
- "opus/silk/float/find_pred_coefs_FLP.c",
- "opus/silk/float/find_pitch_lags_FLP.c",
- "opus/silk/float/burg_modified_FLP.c",
- "opus/silk/float/find_LTP_FLP.c",
- "opus/silk/float/energy_FLP.c",
- "opus/silk/float/sort_FLP.c",
- "opus/silk/float/LPC_inv_pred_gain_FLP.c",
- "opus/silk/float/k2a_FLP.c",
- "opus/silk/float/noise_shape_analysis_FLP.c",
- "opus/silk/float/inner_product_FLP.c",
- "opus/silk/float/process_gains_FLP.c",
- "opus/silk/float/encode_frame_FLP.c",
- "opus/silk/float/scale_copy_vector_FLP.c",
- "opus/silk/float/residual_energy_FLP.c",
- "opus/silk/float/LTP_analysis_filter_FLP.c",
- "opus/silk/float/prefilter_FLP.c"
- ]
-
-
-env.drivers_sources+=opus_sources_silk
-env.drivers_sources+=opus_sources_lib
-env.drivers_sources+=opus_sources
-
-Export('env')
diff --git a/drivers/opus/analysis.c b/drivers/opus/analysis.c
deleted file mode 100644
index 6a0cd30113..0000000000
--- a/drivers/opus/analysis.c
+++ /dev/null
@@ -1,672 +0,0 @@
-/* Copyright (c) 2011 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/kiss_fft.h"
-#include "opus/celt/celt.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/arch.h"
-#include "opus/celt/quant_bands.h"
-#include <stdio.h>
-#include "opus/analysis.h"
-#include "opus/mlp.h"
-#include "opus/celt/stack_alloc.h"
-
-#ifndef M_PI
-#define M_PI 3.141592653
-#endif
-
-static const float dct_table[128] = {
- 0.250000f, 0.250000f, 0.250000f, 0.250000f, 0.250000f, 0.250000f, 0.250000f, 0.250000f,
- 0.250000f, 0.250000f, 0.250000f, 0.250000f, 0.250000f, 0.250000f, 0.250000f, 0.250000f,
- 0.351851f, 0.338330f, 0.311806f, 0.273300f, 0.224292f, 0.166664f, 0.102631f, 0.034654f,
- -0.034654f,-0.102631f,-0.166664f,-0.224292f,-0.273300f,-0.311806f,-0.338330f,-0.351851f,
- 0.346760f, 0.293969f, 0.196424f, 0.068975f,-0.068975f,-0.196424f,-0.293969f,-0.346760f,
- -0.346760f,-0.293969f,-0.196424f,-0.068975f, 0.068975f, 0.196424f, 0.293969f, 0.346760f,
- 0.338330f, 0.224292f, 0.034654f,-0.166664f,-0.311806f,-0.351851f,-0.273300f,-0.102631f,
- 0.102631f, 0.273300f, 0.351851f, 0.311806f, 0.166664f,-0.034654f,-0.224292f,-0.338330f,
- 0.326641f, 0.135299f,-0.135299f,-0.326641f,-0.326641f,-0.135299f, 0.135299f, 0.326641f,
- 0.326641f, 0.135299f,-0.135299f,-0.326641f,-0.326641f,-0.135299f, 0.135299f, 0.326641f,
- 0.311806f, 0.034654f,-0.273300f,-0.338330f,-0.102631f, 0.224292f, 0.351851f, 0.166664f,
- -0.166664f,-0.351851f,-0.224292f, 0.102631f, 0.338330f, 0.273300f,-0.034654f,-0.311806f,
- 0.293969f,-0.068975f,-0.346760f,-0.196424f, 0.196424f, 0.346760f, 0.068975f,-0.293969f,
- -0.293969f, 0.068975f, 0.346760f, 0.196424f,-0.196424f,-0.346760f,-0.068975f, 0.293969f,
- 0.273300f,-0.166664f,-0.338330f, 0.034654f, 0.351851f, 0.102631f,-0.311806f,-0.224292f,
- 0.224292f, 0.311806f,-0.102631f,-0.351851f,-0.034654f, 0.338330f, 0.166664f,-0.273300f,
-};
-
-static const float analysis_window[240] = {
- 0.000043f, 0.000171f, 0.000385f, 0.000685f, 0.001071f, 0.001541f, 0.002098f, 0.002739f,
- 0.003466f, 0.004278f, 0.005174f, 0.006156f, 0.007222f, 0.008373f, 0.009607f, 0.010926f,
- 0.012329f, 0.013815f, 0.015385f, 0.017037f, 0.018772f, 0.020590f, 0.022490f, 0.024472f,
- 0.026535f, 0.028679f, 0.030904f, 0.033210f, 0.035595f, 0.038060f, 0.040604f, 0.043227f,
- 0.045928f, 0.048707f, 0.051564f, 0.054497f, 0.057506f, 0.060591f, 0.063752f, 0.066987f,
- 0.070297f, 0.073680f, 0.077136f, 0.080665f, 0.084265f, 0.087937f, 0.091679f, 0.095492f,
- 0.099373f, 0.103323f, 0.107342f, 0.111427f, 0.115579f, 0.119797f, 0.124080f, 0.128428f,
- 0.132839f, 0.137313f, 0.141849f, 0.146447f, 0.151105f, 0.155823f, 0.160600f, 0.165435f,
- 0.170327f, 0.175276f, 0.180280f, 0.185340f, 0.190453f, 0.195619f, 0.200838f, 0.206107f,
- 0.211427f, 0.216797f, 0.222215f, 0.227680f, 0.233193f, 0.238751f, 0.244353f, 0.250000f,
- 0.255689f, 0.261421f, 0.267193f, 0.273005f, 0.278856f, 0.284744f, 0.290670f, 0.296632f,
- 0.302628f, 0.308658f, 0.314721f, 0.320816f, 0.326941f, 0.333097f, 0.339280f, 0.345492f,
- 0.351729f, 0.357992f, 0.364280f, 0.370590f, 0.376923f, 0.383277f, 0.389651f, 0.396044f,
- 0.402455f, 0.408882f, 0.415325f, 0.421783f, 0.428254f, 0.434737f, 0.441231f, 0.447736f,
- 0.454249f, 0.460770f, 0.467298f, 0.473832f, 0.480370f, 0.486912f, 0.493455f, 0.500000f,
- 0.506545f, 0.513088f, 0.519630f, 0.526168f, 0.532702f, 0.539230f, 0.545751f, 0.552264f,
- 0.558769f, 0.565263f, 0.571746f, 0.578217f, 0.584675f, 0.591118f, 0.597545f, 0.603956f,
- 0.610349f, 0.616723f, 0.623077f, 0.629410f, 0.635720f, 0.642008f, 0.648271f, 0.654508f,
- 0.660720f, 0.666903f, 0.673059f, 0.679184f, 0.685279f, 0.691342f, 0.697372f, 0.703368f,
- 0.709330f, 0.715256f, 0.721144f, 0.726995f, 0.732807f, 0.738579f, 0.744311f, 0.750000f,
- 0.755647f, 0.761249f, 0.766807f, 0.772320f, 0.777785f, 0.783203f, 0.788573f, 0.793893f,
- 0.799162f, 0.804381f, 0.809547f, 0.814660f, 0.819720f, 0.824724f, 0.829673f, 0.834565f,
- 0.839400f, 0.844177f, 0.848895f, 0.853553f, 0.858151f, 0.862687f, 0.867161f, 0.871572f,
- 0.875920f, 0.880203f, 0.884421f, 0.888573f, 0.892658f, 0.896677f, 0.900627f, 0.904508f,
- 0.908321f, 0.912063f, 0.915735f, 0.919335f, 0.922864f, 0.926320f, 0.929703f, 0.933013f,
- 0.936248f, 0.939409f, 0.942494f, 0.945503f, 0.948436f, 0.951293f, 0.954072f, 0.956773f,
- 0.959396f, 0.961940f, 0.964405f, 0.966790f, 0.969096f, 0.971321f, 0.973465f, 0.975528f,
- 0.977510f, 0.979410f, 0.981228f, 0.982963f, 0.984615f, 0.986185f, 0.987671f, 0.989074f,
- 0.990393f, 0.991627f, 0.992778f, 0.993844f, 0.994826f, 0.995722f, 0.996534f, 0.997261f,
- 0.997902f, 0.998459f, 0.998929f, 0.999315f, 0.999615f, 0.999829f, 0.999957f, 1.000000f,
-};
-
-static const int tbands[NB_TBANDS+1] = {
- 2, 4, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 68, 80, 96, 120
-};
-
-static const int extra_bands[NB_TOT_BANDS+1] = {
- 1, 2, 4, 6, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 68, 80, 96, 120, 160, 200
-};
-
-/*static const float tweight[NB_TBANDS+1] = {
- .3, .4, .5, .6, .7, .8, .9, 1., 1., 1., 1., 1., 1., 1., .8, .7, .6, .5
-};*/
-
-#define NB_TONAL_SKIP_BANDS 9
-
-#define cA 0.43157974f
-#define cB 0.67848403f
-#define cC 0.08595542f
-#define cE ((float)M_PI/2)
-static OPUS_INLINE float fast_atan2f(float y, float x) {
- float x2, y2;
- /* Should avoid underflow on the values we'll get */
- if (ABS16(x)+ABS16(y)<1e-9f)
- {
- x*=1e12f;
- y*=1e12f;
- }
- x2 = x*x;
- y2 = y*y;
- if(x2<y2){
- float den = (y2 + cB*x2) * (y2 + cC*x2);
- if (den!=0)
- return -x*y*(y2 + cA*x2) / den + (y<0 ? -cE : cE);
- else
- return (y<0 ? -cE : cE);
- }else{
- float den = (x2 + cB*y2) * (x2 + cC*y2);
- if (den!=0)
- return x*y*(x2 + cA*y2) / den + (y<0 ? -cE : cE) - (x*y<0 ? -cE : cE);
- else
- return (y<0 ? -cE : cE) - (x*y<0 ? -cE : cE);
- }
-}
-
-void tonality_analysis_init(TonalityAnalysisState *tonal)
-{
- /* Initialize reusable fields. */
- tonal->arch = opus_select_arch();
- /* Clear remaining fields. */
- tonality_analysis_reset(tonal);
-}
-
-void tonality_analysis_reset(TonalityAnalysisState *tonal)
-{
- /* Clear non-reusable fields. */
- char *start = (char*)&tonal->TONALITY_ANALYSIS_RESET_START;
- OPUS_CLEAR(start, sizeof(TonalityAnalysisState) - (start - (char*)tonal));
-}
-
-void tonality_get_info(TonalityAnalysisState *tonal, AnalysisInfo *info_out, int len)
-{
- int pos;
- int curr_lookahead;
- float psum;
- int i;
-
- pos = tonal->read_pos;
- curr_lookahead = tonal->write_pos-tonal->read_pos;
- if (curr_lookahead<0)
- curr_lookahead += DETECT_SIZE;
-
- if (len > 480 && pos != tonal->write_pos)
- {
- pos++;
- if (pos==DETECT_SIZE)
- pos=0;
- }
- if (pos == tonal->write_pos)
- pos--;
- if (pos<0)
- pos = DETECT_SIZE-1;
- OPUS_COPY(info_out, &tonal->info[pos], 1);
- tonal->read_subframe += len/120;
- while (tonal->read_subframe>=4)
- {
- tonal->read_subframe -= 4;
- tonal->read_pos++;
- }
- if (tonal->read_pos>=DETECT_SIZE)
- tonal->read_pos-=DETECT_SIZE;
-
- /* Compensate for the delay in the features themselves.
- FIXME: Need a better estimate the 10 I just made up */
- curr_lookahead = IMAX(curr_lookahead-10, 0);
-
- psum=0;
- /* Summing the probability of transition patterns that involve music at
- time (DETECT_SIZE-curr_lookahead-1) */
- for (i=0;i<DETECT_SIZE-curr_lookahead;i++)
- psum += tonal->pmusic[i];
- for (;i<DETECT_SIZE;i++)
- psum += tonal->pspeech[i];
- psum = psum*tonal->music_confidence + (1-psum)*tonal->speech_confidence;
- /*printf("%f %f %f\n", psum, info_out->music_prob, info_out->tonality);*/
-
- info_out->music_prob = psum;
-}
-
-static void tonality_analysis(TonalityAnalysisState *tonal, const CELTMode *celt_mode, const void *x, int len, int offset, int c1, int c2, int C, int lsb_depth, downmix_func downmix)
-{
- int i, b;
- const kiss_fft_state *kfft;
- VARDECL(kiss_fft_cpx, in);
- VARDECL(kiss_fft_cpx, out);
- int N = 480, N2=240;
- float * OPUS_RESTRICT A = tonal->angle;
- float * OPUS_RESTRICT dA = tonal->d_angle;
- float * OPUS_RESTRICT d2A = tonal->d2_angle;
- VARDECL(float, tonality);
- VARDECL(float, noisiness);
- float band_tonality[NB_TBANDS];
- float logE[NB_TBANDS];
- float BFCC[8];
- float features[25];
- float frame_tonality;
- float max_frame_tonality;
- /*float tw_sum=0;*/
- float frame_noisiness;
- const float pi4 = (float)(M_PI*M_PI*M_PI*M_PI);
- float slope=0;
- float frame_stationarity;
- float relativeE;
- float frame_probs[2];
- float alpha, alphaE, alphaE2;
- float frame_loudness;
- float bandwidth_mask;
- int bandwidth=0;
- float maxE = 0;
- float noise_floor;
- int remaining;
- AnalysisInfo *info;
- SAVE_STACK;
-
- tonal->last_transition++;
- alpha = 1.f/IMIN(20, 1+tonal->count);
- alphaE = 1.f/IMIN(50, 1+tonal->count);
- alphaE2 = 1.f/IMIN(1000, 1+tonal->count);
-
- if (tonal->count<4)
- tonal->music_prob = .5;
- kfft = celt_mode->mdct.kfft[0];
- if (tonal->count==0)
- tonal->mem_fill = 240;
- downmix(x, &tonal->inmem[tonal->mem_fill], IMIN(len, ANALYSIS_BUF_SIZE-tonal->mem_fill), offset, c1, c2, C);
- if (tonal->mem_fill+len < ANALYSIS_BUF_SIZE)
- {
- tonal->mem_fill += len;
- /* Don't have enough to update the analysis */
- RESTORE_STACK;
- return;
- }
- info = &tonal->info[tonal->write_pos++];
- if (tonal->write_pos>=DETECT_SIZE)
- tonal->write_pos-=DETECT_SIZE;
-
- ALLOC(in, 480, kiss_fft_cpx);
- ALLOC(out, 480, kiss_fft_cpx);
- ALLOC(tonality, 240, float);
- ALLOC(noisiness, 240, float);
- for (i=0;i<N2;i++)
- {
- float w = analysis_window[i];
- in[i].r = (kiss_fft_scalar)(w*tonal->inmem[i]);
- in[i].i = (kiss_fft_scalar)(w*tonal->inmem[N2+i]);
- in[N-i-1].r = (kiss_fft_scalar)(w*tonal->inmem[N-i-1]);
- in[N-i-1].i = (kiss_fft_scalar)(w*tonal->inmem[N+N2-i-1]);
- }
- OPUS_MOVE(tonal->inmem, tonal->inmem+ANALYSIS_BUF_SIZE-240, 240);
- remaining = len - (ANALYSIS_BUF_SIZE-tonal->mem_fill);
- downmix(x, &tonal->inmem[240], remaining, offset+ANALYSIS_BUF_SIZE-tonal->mem_fill, c1, c2, C);
- tonal->mem_fill = 240 + remaining;
- opus_fft(kfft, in, out, tonal->arch);
-#ifndef OPUS_FIXED_POINT
- /* If there's any NaN on the input, the entire output will be NaN, so we only need to check one value. */
- if (celt_isnan(out[0].r))
- {
- info->valid = 0;
- RESTORE_STACK;
- return;
- }
-#endif
-
- for (i=1;i<N2;i++)
- {
- float X1r, X2r, X1i, X2i;
- float angle, d_angle, d2_angle;
- float angle2, d_angle2, d2_angle2;
- float mod1, mod2, avg_mod;
- X1r = (float)out[i].r+out[N-i].r;
- X1i = (float)out[i].i-out[N-i].i;
- X2r = (float)out[i].i+out[N-i].i;
- X2i = (float)out[N-i].r-out[i].r;
-
- angle = (float)(.5f/M_PI)*fast_atan2f(X1i, X1r);
- d_angle = angle - A[i];
- d2_angle = d_angle - dA[i];
-
- angle2 = (float)(.5f/M_PI)*fast_atan2f(X2i, X2r);
- d_angle2 = angle2 - angle;
- d2_angle2 = d_angle2 - d_angle;
-
- mod1 = d2_angle - (float)floor(.5+d2_angle);
- noisiness[i] = ABS16(mod1);
- mod1 *= mod1;
- mod1 *= mod1;
-
- mod2 = d2_angle2 - (float)floor(.5+d2_angle2);
- noisiness[i] += ABS16(mod2);
- mod2 *= mod2;
- mod2 *= mod2;
-
- avg_mod = .25f*(d2A[i]+2.f*mod1+mod2);
- tonality[i] = 1.f/(1.f+40.f*16.f*pi4*avg_mod)-.015f;
-
- A[i] = angle2;
- dA[i] = d_angle2;
- d2A[i] = mod2;
- }
-
- frame_tonality = 0;
- max_frame_tonality = 0;
- /*tw_sum = 0;*/
- info->activity = 0;
- frame_noisiness = 0;
- frame_stationarity = 0;
- if (!tonal->count)
- {
- for (b=0;b<NB_TBANDS;b++)
- {
- tonal->lowE[b] = 1e10;
- tonal->highE[b] = -1e10;
- }
- }
- relativeE = 0;
- frame_loudness = 0;
- for (b=0;b<NB_TBANDS;b++)
- {
- float E=0, tE=0, nE=0;
- float L1, L2;
- float stationarity;
- for (i=tbands[b];i<tbands[b+1];i++)
- {
- float binE = out[i].r*(float)out[i].r + out[N-i].r*(float)out[N-i].r
- + out[i].i*(float)out[i].i + out[N-i].i*(float)out[N-i].i;
-#ifdef OPUS_FIXED_POINT
- /* FIXME: It's probably best to change the BFCC filter initial state instead */
- binE *= 5.55e-17f;
-#endif
- E += binE;
- tE += binE*tonality[i];
- nE += binE*2.f*(.5f-noisiness[i]);
- }
-#ifndef OPUS_FIXED_POINT
- /* Check for extreme band energies that could cause NaNs later. */
- if (!(E<1e9f) || celt_isnan(E))
- {
- info->valid = 0;
- RESTORE_STACK;
- return;
- }
-#endif
-
- tonal->E[tonal->E_count][b] = E;
- frame_noisiness += nE/(1e-15f+E);
-
- frame_loudness += (float)sqrt(E+1e-10f);
- logE[b] = (float)log(E+1e-10f);
- tonal->lowE[b] = MIN32(logE[b], tonal->lowE[b]+.01f);
- tonal->highE[b] = MAX32(logE[b], tonal->highE[b]-.1f);
- if (tonal->highE[b] < tonal->lowE[b]+1.f)
- {
- tonal->highE[b]+=.5f;
- tonal->lowE[b]-=.5f;
- }
- relativeE += (logE[b]-tonal->lowE[b])/(1e-15f+tonal->highE[b]-tonal->lowE[b]);
-
- L1=L2=0;
- for (i=0;i<NB_FRAMES;i++)
- {
- L1 += (float)sqrt(tonal->E[i][b]);
- L2 += tonal->E[i][b];
- }
-
- stationarity = MIN16(0.99f,L1/(float)sqrt(1e-15+NB_FRAMES*L2));
- stationarity *= stationarity;
- stationarity *= stationarity;
- frame_stationarity += stationarity;
- /*band_tonality[b] = tE/(1e-15+E)*/;
- band_tonality[b] = MAX16(tE/(1e-15f+E), stationarity*tonal->prev_band_tonality[b]);
-#if 0
- if (b>=NB_TONAL_SKIP_BANDS)
- {
- frame_tonality += tweight[b]*band_tonality[b];
- tw_sum += tweight[b];
- }
-#else
- frame_tonality += band_tonality[b];
- if (b>=NB_TBANDS-NB_TONAL_SKIP_BANDS)
- frame_tonality -= band_tonality[b-NB_TBANDS+NB_TONAL_SKIP_BANDS];
-#endif
- max_frame_tonality = MAX16(max_frame_tonality, (1.f+.03f*(b-NB_TBANDS))*frame_tonality);
- slope += band_tonality[b]*(b-8);
- /*printf("%f %f ", band_tonality[b], stationarity);*/
- tonal->prev_band_tonality[b] = band_tonality[b];
- }
-
- bandwidth_mask = 0;
- bandwidth = 0;
- maxE = 0;
- noise_floor = 5.7e-4f/(1<<(IMAX(0,lsb_depth-8)));
-#ifdef OPUS_FIXED_POINT
- noise_floor *= 1<<(15+SIG_SHIFT);
-#endif
- noise_floor *= noise_floor;
- for (b=0;b<NB_TOT_BANDS;b++)
- {
- float E=0;
- int band_start, band_end;
- /* Keep a margin of 300 Hz for aliasing */
- band_start = extra_bands[b];
- band_end = extra_bands[b+1];
- for (i=band_start;i<band_end;i++)
- {
- float binE = out[i].r*(float)out[i].r + out[N-i].r*(float)out[N-i].r
- + out[i].i*(float)out[i].i + out[N-i].i*(float)out[N-i].i;
- E += binE;
- }
- maxE = MAX32(maxE, E);
- tonal->meanE[b] = MAX32((1-alphaE2)*tonal->meanE[b], E);
- E = MAX32(E, tonal->meanE[b]);
- /* Use a simple follower with 13 dB/Bark slope for spreading function */
- bandwidth_mask = MAX32(.05f*bandwidth_mask, E);
- /* Consider the band "active" only if all these conditions are met:
- 1) less than 10 dB below the simple follower
- 2) less than 90 dB below the peak band (maximal masking possible considering
- both the ATH and the loudness-dependent slope of the spreading function)
- 3) above the PCM quantization noise floor
- */
- if (E>.1*bandwidth_mask && E*1e9f > maxE && E > noise_floor*(band_end-band_start))
- bandwidth = b;
- }
- if (tonal->count<=2)
- bandwidth = 20;
- frame_loudness = 20*(float)log10(frame_loudness);
- tonal->Etracker = MAX32(tonal->Etracker-.03f, frame_loudness);
- tonal->lowECount *= (1-alphaE);
- if (frame_loudness < tonal->Etracker-30)
- tonal->lowECount += alphaE;
-
- for (i=0;i<8;i++)
- {
- float sum=0;
- for (b=0;b<16;b++)
- sum += dct_table[i*16+b]*logE[b];
- BFCC[i] = sum;
- }
-
- frame_stationarity /= NB_TBANDS;
- relativeE /= NB_TBANDS;
- if (tonal->count<10)
- relativeE = .5;
- frame_noisiness /= NB_TBANDS;
-#if 1
- info->activity = frame_noisiness + (1-frame_noisiness)*relativeE;
-#else
- info->activity = .5*(1+frame_noisiness-frame_stationarity);
-#endif
- frame_tonality = (max_frame_tonality/(NB_TBANDS-NB_TONAL_SKIP_BANDS));
- frame_tonality = MAX16(frame_tonality, tonal->prev_tonality*.8f);
- tonal->prev_tonality = frame_tonality;
-
- slope /= 8*8;
- info->tonality_slope = slope;
-
- tonal->E_count = (tonal->E_count+1)%NB_FRAMES;
- tonal->count++;
- info->tonality = frame_tonality;
-
- for (i=0;i<4;i++)
- features[i] = -0.12299f*(BFCC[i]+tonal->mem[i+24]) + 0.49195f*(tonal->mem[i]+tonal->mem[i+16]) + 0.69693f*tonal->mem[i+8] - 1.4349f*tonal->cmean[i];
-
- for (i=0;i<4;i++)
- tonal->cmean[i] = (1-alpha)*tonal->cmean[i] + alpha*BFCC[i];
-
- for (i=0;i<4;i++)
- features[4+i] = 0.63246f*(BFCC[i]-tonal->mem[i+24]) + 0.31623f*(tonal->mem[i]-tonal->mem[i+16]);
- for (i=0;i<3;i++)
- features[8+i] = 0.53452f*(BFCC[i]+tonal->mem[i+24]) - 0.26726f*(tonal->mem[i]+tonal->mem[i+16]) -0.53452f*tonal->mem[i+8];
-
- if (tonal->count > 5)
- {
- for (i=0;i<9;i++)
- tonal->std[i] = (1-alpha)*tonal->std[i] + alpha*features[i]*features[i];
- }
-
- for (i=0;i<8;i++)
- {
- tonal->mem[i+24] = tonal->mem[i+16];
- tonal->mem[i+16] = tonal->mem[i+8];
- tonal->mem[i+8] = tonal->mem[i];
- tonal->mem[i] = BFCC[i];
- }
- for (i=0;i<9;i++)
- features[11+i] = (float)sqrt(tonal->std[i]);
- features[20] = info->tonality;
- features[21] = info->activity;
- features[22] = frame_stationarity;
- features[23] = info->tonality_slope;
- features[24] = tonal->lowECount;
-
-#ifndef DISABLE_FLOAT_API
- mlp_process(&net, features, frame_probs);
- frame_probs[0] = .5f*(frame_probs[0]+1);
- /* Curve fitting between the MLP probability and the actual probability */
- frame_probs[0] = .01f + 1.21f*frame_probs[0]*frame_probs[0] - .23f*(float)pow(frame_probs[0], 10);
- /* Probability of active audio (as opposed to silence) */
- frame_probs[1] = .5f*frame_probs[1]+.5f;
- /* Consider that silence has a 50-50 probability. */
- frame_probs[0] = frame_probs[1]*frame_probs[0] + (1-frame_probs[1])*.5f;
-
- /*printf("%f %f ", frame_probs[0], frame_probs[1]);*/
- {
- /* Probability of state transition */
- float tau;
- /* Represents independence of the MLP probabilities, where
- beta=1 means fully independent. */
- float beta;
- /* Denormalized probability of speech (p0) and music (p1) after update */
- float p0, p1;
- /* Probabilities for "all speech" and "all music" */
- float s0, m0;
- /* Probability sum for renormalisation */
- float psum;
- /* Instantaneous probability of speech and music, with beta pre-applied. */
- float speech0;
- float music0;
-
- /* One transition every 3 minutes of active audio */
- tau = .00005f*frame_probs[1];
- beta = .05f;
- if (1) {
- /* Adapt beta based on how "unexpected" the new prob is */
- float p, q;
- p = MAX16(.05f,MIN16(.95f,frame_probs[0]));
- q = MAX16(.05f,MIN16(.95f,tonal->music_prob));
- beta = .01f+.05f*ABS16(p-q)/(p*(1-q)+q*(1-p));
- }
- /* p0 and p1 are the probabilities of speech and music at this frame
- using only information from previous frame and applying the
- state transition model */
- p0 = (1-tonal->music_prob)*(1-tau) + tonal->music_prob *tau;
- p1 = tonal->music_prob *(1-tau) + (1-tonal->music_prob)*tau;
- /* We apply the current probability with exponent beta to work around
- the fact that the probability estimates aren't independent. */
- p0 *= (float)pow(1-frame_probs[0], beta);
- p1 *= (float)pow(frame_probs[0], beta);
- /* Normalise the probabilities to get the Marokv probability of music. */
- tonal->music_prob = p1/(p0+p1);
- info->music_prob = tonal->music_prob;
-
- /* This chunk of code deals with delayed decision. */
- psum=1e-20f;
- /* Instantaneous probability of speech and music, with beta pre-applied. */
- speech0 = (float)pow(1-frame_probs[0], beta);
- music0 = (float)pow(frame_probs[0], beta);
- if (tonal->count==1)
- {
- tonal->pspeech[0]=.5;
- tonal->pmusic [0]=.5;
- }
- /* Updated probability of having only speech (s0) or only music (m0),
- before considering the new observation. */
- s0 = tonal->pspeech[0] + tonal->pspeech[1];
- m0 = tonal->pmusic [0] + tonal->pmusic [1];
- /* Updates s0 and m0 with instantaneous probability. */
- tonal->pspeech[0] = s0*(1-tau)*speech0;
- tonal->pmusic [0] = m0*(1-tau)*music0;
- /* Propagate the transition probabilities */
- for (i=1;i<DETECT_SIZE-1;i++)
- {
- tonal->pspeech[i] = tonal->pspeech[i+1]*speech0;
- tonal->pmusic [i] = tonal->pmusic [i+1]*music0;
- }
- /* Probability that the latest frame is speech, when all the previous ones were music. */
- tonal->pspeech[DETECT_SIZE-1] = m0*tau*speech0;
- /* Probability that the latest frame is music, when all the previous ones were speech. */
- tonal->pmusic [DETECT_SIZE-1] = s0*tau*music0;
-
- /* Renormalise probabilities to 1 */
- for (i=0;i<DETECT_SIZE;i++)
- psum += tonal->pspeech[i] + tonal->pmusic[i];
- psum = 1.f/psum;
- for (i=0;i<DETECT_SIZE;i++)
- {
- tonal->pspeech[i] *= psum;
- tonal->pmusic [i] *= psum;
- }
- psum = tonal->pmusic[0];
- for (i=1;i<DETECT_SIZE;i++)
- psum += tonal->pspeech[i];
-
- /* Estimate our confidence in the speech/music decisions */
- if (frame_probs[1]>.75)
- {
- if (tonal->music_prob>.9)
- {
- float adapt;
- adapt = 1.f/(++tonal->music_confidence_count);
- tonal->music_confidence_count = IMIN(tonal->music_confidence_count, 500);
- tonal->music_confidence += adapt*MAX16(-.2f,frame_probs[0]-tonal->music_confidence);
- }
- if (tonal->music_prob<.1)
- {
- float adapt;
- adapt = 1.f/(++tonal->speech_confidence_count);
- tonal->speech_confidence_count = IMIN(tonal->speech_confidence_count, 500);
- tonal->speech_confidence += adapt*MIN16(.2f,frame_probs[0]-tonal->speech_confidence);
- }
- } else {
- if (tonal->music_confidence_count==0)
- tonal->music_confidence = .9f;
- if (tonal->speech_confidence_count==0)
- tonal->speech_confidence = .1f;
- }
- }
- if (tonal->last_music != (tonal->music_prob>.5f))
- tonal->last_transition=0;
- tonal->last_music = tonal->music_prob>.5f;
-#else
- info->music_prob = 0;
-#endif
- /*for (i=0;i<25;i++)
- printf("%f ", features[i]);
- printf("\n");*/
-
- info->bandwidth = bandwidth;
- /*printf("%d %d\n", info->bandwidth, info->opus_bandwidth);*/
- info->noisiness = frame_noisiness;
- info->valid = 1;
- RESTORE_STACK;
-}
-
-void run_analysis(TonalityAnalysisState *analysis, const CELTMode *celt_mode, const void *analysis_pcm,
- int analysis_frame_size, int frame_size, int c1, int c2, int C, opus_int32 Fs,
- int lsb_depth, downmix_func downmix, AnalysisInfo *analysis_info)
-{
- int offset;
- int pcm_len;
-
- if (analysis_pcm != NULL)
- {
- /* Avoid overflow/wrap-around of the analysis buffer */
- analysis_frame_size = IMIN((DETECT_SIZE-5)*Fs/100, analysis_frame_size);
-
- pcm_len = analysis_frame_size - analysis->analysis_offset;
- offset = analysis->analysis_offset;
- do {
- tonality_analysis(analysis, celt_mode, analysis_pcm, IMIN(480, pcm_len), offset, c1, c2, C, lsb_depth, downmix);
- offset += 480;
- pcm_len -= 480;
- } while (pcm_len>0);
- analysis->analysis_offset = analysis_frame_size;
-
- analysis->analysis_offset -= frame_size;
- }
-
- analysis_info->valid = 0;
- tonality_get_info(analysis, analysis_info, frame_size);
-}
diff --git a/drivers/opus/analysis.h b/drivers/opus/analysis.h
deleted file mode 100644
index 9d81164e25..0000000000
--- a/drivers/opus/analysis.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Copyright (c) 2011 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 ANALYSIS_H
-#define ANALYSIS_H
-
-#include "opus/celt/celt.h"
-#include "opus/opus_private.h"
-
-#define NB_FRAMES 8
-#define NB_TBANDS 18
-#define NB_TOT_BANDS 21
-#define ANALYSIS_BUF_SIZE 720 /* 15 ms at 48 kHz */
-
-#define DETECT_SIZE 200
-
-typedef struct {
- int arch;
-#define TONALITY_ANALYSIS_RESET_START angle
- float angle[240];
- float d_angle[240];
- float d2_angle[240];
- opus_val32 inmem[ANALYSIS_BUF_SIZE];
- int mem_fill; /* number of usable samples in the buffer */
- float prev_band_tonality[NB_TBANDS];
- float prev_tonality;
- float E[NB_FRAMES][NB_TBANDS];
- float lowE[NB_TBANDS];
- float highE[NB_TBANDS];
- float meanE[NB_TOT_BANDS];
- float mem[32];
- float cmean[8];
- float std[9];
- float music_prob;
- float Etracker;
- float lowECount;
- int E_count;
- int last_music;
- int last_transition;
- int count;
- float subframe_mem[3];
- int analysis_offset;
- /** Probability of having speech for time i to DETECT_SIZE-1 (and music before).
- pspeech[0] is the probability that all frames in the window are speech. */
- float pspeech[DETECT_SIZE];
- /** Probability of having music for time i to DETECT_SIZE-1 (and speech before).
- pmusic[0] is the probability that all frames in the window are music. */
- float pmusic[DETECT_SIZE];
- float speech_confidence;
- float music_confidence;
- int speech_confidence_count;
- int music_confidence_count;
- int write_pos;
- int read_pos;
- int read_subframe;
- AnalysisInfo info[DETECT_SIZE];
-} TonalityAnalysisState;
-
-/** Initialize a TonalityAnalysisState struct.
- *
- * This performs some possibly slow initialization steps which should
- * not be repeated every analysis step. No allocated memory is retained
- * by the state struct, so no cleanup call is required.
- */
-void tonality_analysis_init(TonalityAnalysisState *analysis);
-
-/** Reset a TonalityAnalysisState stuct.
- *
- * Call this when there's a discontinuity in the data.
- */
-void tonality_analysis_reset(TonalityAnalysisState *analysis);
-
-void tonality_get_info(TonalityAnalysisState *tonal, AnalysisInfo *info_out, int len);
-
-void run_analysis(TonalityAnalysisState *analysis, const CELTMode *celt_mode, const void *analysis_pcm,
- int analysis_frame_size, int frame_size, int c1, int c2, int C, opus_int32 Fs,
- int lsb_depth, downmix_func downmix, AnalysisInfo *analysis_info);
-
-#endif
diff --git a/drivers/opus/audio_stream_opus.cpp b/drivers/opus/audio_stream_opus.cpp
deleted file mode 100644
index ab53fee0c9..0000000000
--- a/drivers/opus/audio_stream_opus.cpp
+++ /dev/null
@@ -1,376 +0,0 @@
-/*************************************************************************/
-/* audio_stream_opus.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
-/* */
-/* Author: George Marques <george@gmarqu.es> */
-/* */
-/* 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "audio_stream_opus.h"
-
-const float AudioStreamPlaybackOpus::osrate=48000.0f;
-
-int AudioStreamPlaybackOpus::_op_read_func(void *_stream, unsigned char *_ptr, int _nbytes) {
- FileAccess *fa=(FileAccess*)_stream;
-
- if(fa->eof_reached())
- return 0;
-
- uint8_t *dst = (uint8_t*)_ptr;
-
- int read = fa->get_buffer(dst, _nbytes);
-
- return read;
-}
-
-int AudioStreamPlaybackOpus::_op_seek_func(void *_stream, opus_int64 _offset, int _whence){
-
-#ifdef SEEK_SET
- FileAccess *fa=(FileAccess*)_stream;
-
- switch (_whence) {
- case SEEK_SET: {
- fa->seek(_offset);
- } break;
- case SEEK_CUR: {
- fa->seek(fa->get_pos()+_offset);
- } break;
- case SEEK_END: {
- fa->seek_end(_offset);
- } break;
- default: {
- ERR_PRINT("BUG, wtf was whence set to?\n");
- }
- }
- int ret=fa->eof_reached()?-1:0;
- return ret;
-#else
- return -1; // no seeking
-#endif
-}
-
-int AudioStreamPlaybackOpus::_op_close_func(void *_stream) {
- if (!_stream)
- return 0;
- FileAccess *fa=(FileAccess*)_stream;
- if (fa->is_open())
- fa->close();
- return 0;
-}
-
-opus_int64 AudioStreamPlaybackOpus::_op_tell_func(void *_stream) {
- FileAccess *_fa = (FileAccess*)_stream;
- return (opus_int64)_fa->get_pos();
-}
-
-void AudioStreamPlaybackOpus::_clear_stream() {
- if(!stream_loaded)
- return;
-
- op_free(opus_file);
- _close_file();
-
- stream_loaded=false;
- stream_channels=1;
- playing=false;
-}
-
-void AudioStreamPlaybackOpus::_close_file() {
- if (f) {
- memdelete(f);
- f=NULL;
- }
-}
-
-Error AudioStreamPlaybackOpus::_load_stream() {
-
- ERR_FAIL_COND_V(!stream_valid,ERR_UNCONFIGURED);
-
- _clear_stream();
- if (file=="")
- return ERR_INVALID_DATA;
-
- Error err;
- f=FileAccess::open(file,FileAccess::READ,&err);
-
- if (err) {
- ERR_FAIL_COND_V( err, err );
- }
-
- int _err = 0;
-
- opus_file = op_open_callbacks(f,&_op_callbacks,NULL,0,&_err);
-
- switch (_err) {
- case OP_EREAD: { // - Can't read the file.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_CANT_READ );
- } break;
- case OP_EVERSION: // - Unrecognized version number.
- case OP_ENOTFORMAT: // - Stream is not Opus data.
- case OP_EIMPL : { // - Stream used non-implemented feature.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_UNRECOGNIZED );
- } break;
- case OP_EBADLINK: // - Failed to find old data after seeking.
- case OP_EBADTIMESTAMP: // - Timestamp failed the validity checks.
- case OP_EBADHEADER: { // - Invalid or mising Opus bitstream header.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_CORRUPT );
- } break;
- case OP_EFAULT: { // - Internal logic fault; indicates a bug or heap/stack corruption.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_BUG );
- } break;
- }
- repeats=0;
- stream_loaded=true;
-
-
- return OK;
-}
-
-AudioStreamPlaybackOpus::AudioStreamPlaybackOpus() {
- loops=false;
- playing=false;
- f = NULL;
- stream_loaded=false;
- stream_valid=false;
- repeats=0;
- paused=true;
- stream_channels=0;
- current_section=0;
- length=0;
- loop_restart_time=0;
- pre_skip=0;
-
- _op_callbacks.read = _op_read_func;
- _op_callbacks.seek = _op_seek_func;
- _op_callbacks.tell = _op_tell_func;
- _op_callbacks.close = _op_close_func;
-}
-
-Error AudioStreamPlaybackOpus::set_file(const String &p_file) {
- file=p_file;
- stream_valid=false;
- Error err;
- f=FileAccess::open(file,FileAccess::READ,&err);
-
- if (err) {
- ERR_FAIL_COND_V( err, err );
- }
-
- int _err;
-
- opus_file = op_open_callbacks(f,&_op_callbacks,NULL,0,&_err);
-
- switch (_err) {
- case OP_EREAD: { // - Can't read the file.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_CANT_READ );
- } break;
- case OP_EVERSION: // - Unrecognized version number.
- case OP_ENOTFORMAT: // - Stream is not Opus data.
- case OP_EIMPL : { // - Stream used non-implemented feature.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_UNRECOGNIZED );
- } break;
- case OP_EBADLINK: // - Failed to find old data after seeking.
- case OP_EBADTIMESTAMP: // - Timestamp failed the validity checks.
- case OP_EBADHEADER: { // - Invalid or mising Opus bitstream header.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_CORRUPT );
- } break;
- case OP_EFAULT: { // - Internal logic fault; indicates a bug or heap/stack corruption.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_BUG );
- } break;
- }
-
- const OpusHead *oinfo = op_head(opus_file,-1);
-
- stream_channels=oinfo->channel_count;
- pre_skip=oinfo->pre_skip;
- frames_mixed=pre_skip;
- ogg_int64_t len = op_pcm_total(opus_file,-1);
- if(len < 0) {
- length = 0;
- } else {
- length=(len/osrate);
- }
-
- op_free(opus_file);
- memdelete(f);
- f=NULL;
- stream_valid=true;
-
-
- return OK;
-}
-
-void AudioStreamPlaybackOpus::play(float p_from) {
- if (playing)
- stop();
-
- if (_load_stream()!=OK)
- return;
-
- frames_mixed=pre_skip;
- playing=true;
- if (p_from>0) {
- seek_pos(p_from);
- }
-}
-
-void AudioStreamPlaybackOpus::stop() {
- _clear_stream();
- playing=false;
-}
-
-void AudioStreamPlaybackOpus::seek_pos(float p_time) {
- if(!playing) return;
- ogg_int64_t pcm_offset = (ogg_int64_t)(p_time * osrate);
- bool ok = op_pcm_seek(opus_file,pcm_offset)==0;
- if(!ok) {
- ERR_PRINT("Seek time over stream size.");
- return;
- }
- frames_mixed=osrate*p_time;
-}
-
-int AudioStreamPlaybackOpus::mix(int16_t* p_bufer,int p_frames) {
- if (!playing)
- return 0;
-
- int total=p_frames;
-
- while (true) {
-
- int todo = p_frames;
-
- if (todo==0 || todo<MIN_MIX) {
- break;
- }
-
- int ret=op_read(opus_file,(opus_int16*)p_bufer,todo*stream_channels,&current_section);
- if (ret<0) {
- playing = false;
- ERR_EXPLAIN("Error reading Opus File: "+file);
- ERR_BREAK(ret<0);
- } else if (ret==0) { // end of song, reload?
- op_free(opus_file);
-
- _close_file();
-
- f=FileAccess::open(file,FileAccess::READ);
-
- int errv = 0;
- opus_file = op_open_callbacks(f,&_op_callbacks,NULL,0,&errv);
- if (errv!=0) {
- playing=false;
- break; // :(
- }
-
- if (!has_loop()) {
- playing=false;
- repeats=1;
- break;
- }
-
- if (loop_restart_time) {
- bool ok = op_pcm_seek(opus_file, (loop_restart_time*osrate)+pre_skip)==0;
- if (!ok) {
- playing=false;
- ERR_PRINT("loop restart time rejected")
- }
-
- frames_mixed=(loop_restart_time*osrate)+pre_skip;
- } else {
- frames_mixed=pre_skip;
- }
- repeats++;
- continue;
-
- }
-
- stream_channels=op_head(opus_file,current_section)->channel_count;
-
- frames_mixed+=ret;
-
- p_bufer+=ret*stream_channels;
- p_frames-=ret;
-
- }
-
- return total-p_frames;
-}
-
-float AudioStreamPlaybackOpus::get_length() const {
- if(!stream_loaded) {
- if(const_cast<AudioStreamPlaybackOpus*>(this)->_load_stream() != OK)
- return 0;
- }
- return length;
-}
-
-float AudioStreamPlaybackOpus::get_pos() const {
-
- int32_t frames = int32_t(frames_mixed);
- if (frames < 0)
- frames=0;
- return double(frames) / osrate;
-}
-
-int AudioStreamPlaybackOpus::get_minimum_buffer_size() const {
- return MIN_MIX;
-}
-
-AudioStreamPlaybackOpus::~AudioStreamPlaybackOpus() {
- _clear_stream();
-}
-
-RES ResourceFormatLoaderAudioStreamOpus::load(const String &p_path, const String& p_original_path, Error *r_error) {
- if (r_error)
- *r_error=OK;
-
- AudioStreamOpus *opus_stream = memnew(AudioStreamOpus);
- opus_stream->set_file(p_path);
- return Ref<AudioStreamOpus>(opus_stream);
-}
-
-void ResourceFormatLoaderAudioStreamOpus::get_recognized_extensions(List<String> *p_extensions) const {
-
- p_extensions->push_back("opus");
-}
-String ResourceFormatLoaderAudioStreamOpus::get_resource_type(const String &p_path) const {
-
- if (p_path.extension().to_lower()=="opus")
- return "AudioStreamOpus";
- return "";
-}
-
-bool ResourceFormatLoaderAudioStreamOpus::handles_type(const String& p_type) const {
- return (p_type=="AudioStream" || p_type=="AudioStreamOpus");
-}
diff --git a/drivers/opus/audio_stream_opus.h b/drivers/opus/audio_stream_opus.h
deleted file mode 100644
index fc5531470d..0000000000
--- a/drivers/opus/audio_stream_opus.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*************************************************************************/
-/* audio_stream_opus.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
-/* */
-/* Author: George Marques <george@gmarqu.es> */
-/* */
-/* 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-
-#ifndef AUDIO_STREAM_OPUS_H
-#define AUDIO_STREAM_OPUS_H
-
-#include "scene/resources/audio_stream.h"
-#include "opus/opusfile.h"
-#include "opus/internal.h"
-#include "os/file_access.h"
-#include "io/resource_loader.h"
-
-class AudioStreamPlaybackOpus : public AudioStreamPlayback {
-
- OBJ_TYPE(AudioStreamPlaybackOpus,AudioStreamPlayback)
-
- enum {
- MIN_MIX=1024
- };
-
- FileAccess *f;
-
- OpusFileCallbacks _op_callbacks;
- float length;
- static int _op_read_func(void *_stream, unsigned char *_ptr, int _nbytes);
- static int _op_seek_func(void *_stream, opus_int64 _offset, int _whence);
- static int _op_close_func(void *_stream);
- static opus_int64 _op_tell_func(void *_stream);
- static const float osrate;
-
- String file;
- int64_t frames_mixed;
-
- bool stream_loaded;
- volatile bool playing;
- OggOpusFile *opus_file;
- int stream_channels;
- int current_section;
- int pre_skip;
-
- bool paused;
- bool loops;
- int repeats;
-
- Error _load_stream();
- void _clear_stream();
- void _close_file();
-
- bool stream_valid;
- float loop_restart_time;
-
-public:
- Error set_file(const String& p_file);
-
- virtual void play(float p_from=0);
- virtual void stop();
- virtual bool is_playing() const { return playing; }
-
- virtual void set_loop_restart_time(float p_time) { loop_restart_time=p_time; }
-
- virtual void set_paused(bool p_paused) { paused=p_paused; }
- virtual bool is_paused() const { return paused; }
-
- virtual void set_loop(bool p_enable) { loops=p_enable; }
- virtual bool has_loop() const {return loops; }
-
- virtual float get_length() const;
-
- virtual String get_stream_name() const { return ""; }
-
- virtual int get_loop_count() const { return repeats; }
-
- virtual float get_pos() const;
- virtual void seek_pos(float p_time);
-
- virtual int get_channels() const { return stream_channels; }
- virtual int get_mix_rate() const { return osrate; }
-
- virtual int get_minimum_buffer_size() const;
-
- virtual int mix(int16_t* p_bufer,int p_frames);
-
- AudioStreamPlaybackOpus();
- ~AudioStreamPlaybackOpus();
-};
-
-
-class AudioStreamOpus: public AudioStream {
-
- OBJ_TYPE(AudioStreamOpus,AudioStream)
-
- String file;
-public:
-
- Ref<AudioStreamPlayback> instance_playback() {
- Ref<AudioStreamPlaybackOpus> pb = memnew( AudioStreamPlaybackOpus );
- pb->set_file(file);
- return pb;
- }
-
- void set_file(const String& p_file) { file=p_file; }
-
-};
-
-class ResourceFormatLoaderAudioStreamOpus: public ResourceFormatLoader {
-public:
- virtual RES load(const String &p_path,const String& p_original_path="",Error *r_error=NULL);
- virtual void get_recognized_extensions(List<String> *p_extensions) const;
- virtual bool handles_type(const String& p_type) const;
- virtual String get_resource_type(const String &p_path) const;
-};
-
-#endif // AUDIO_STREAM_OPUS_H
diff --git a/drivers/opus/celt/_kiss_fft_guts.h b/drivers/opus/celt/_kiss_fft_guts.h
deleted file mode 100644
index a41f9a1a05..0000000000
--- a/drivers/opus/celt/_kiss_fft_guts.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/*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.
-
- 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 KISS_FFT_GUTS_H
-#define KISS_FFT_GUTS_H
-
-#define MIN(a,b) ((a)<(b) ? (a):(b))
-#define MAX(a,b) ((a)>(b) ? (a):(b))
-
-/* 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 "opus/celt/kiss_fft.h"
-
-/*
- 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 OPUS_FIXED_POINT
-#include "opus/celt/arch.h"
-
-
-#define SAMP_MAX 2147483647
-#define TWID_MAX 32767
-#define TRIG_UPSCALE 1
-
-#define SAMP_MIN -SAMP_MAX
-
-
-# define S_MUL(a,b) MULT16_32_Q15(b, a)
-
-# define C_MUL(m,a,b) \
- do{ (m).r = SUB32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \
- (m).i = ADD32(S_MUL((a).r,(b).i) , S_MUL((a).i,(b).r)); }while(0)
-
-# define C_MULC(m,a,b) \
- do{ (m).r = ADD32(S_MUL((a).r,(b).r) , S_MUL((a).i,(b).i)); \
- (m).i = SUB32(S_MUL((a).i,(b).r) , S_MUL((a).r,(b).i)); }while(0)
-
-# define C_MULBYSCALAR( c, s ) \
- do{ (c).r = S_MUL( (c).r , s ) ;\
- (c).i = S_MUL( (c).i , s ) ; }while(0)
-
-# define DIVSCALAR(x,k) \
- (x) = S_MUL( x, (TWID_MAX-((k)>>1))/(k)+1 )
-
-# define C_FIXDIV(c,div) \
- do { DIVSCALAR( (c).r , div); \
- DIVSCALAR( (c).i , div); }while (0)
-
-#define C_ADD( res, a,b)\
- do {(res).r=ADD32((a).r,(b).r); (res).i=ADD32((a).i,(b).i); \
- }while(0)
-#define C_SUB( res, a,b)\
- do {(res).r=SUB32((a).r,(b).r); (res).i=SUB32((a).i,(b).i); \
- }while(0)
-#define C_ADDTO( res , a)\
- do {(res).r = ADD32((res).r, (a).r); (res).i = ADD32((res).i,(a).i);\
- }while(0)
-
-#define C_SUBFROM( res , a)\
- do {(res).r = ADD32((res).r,(a).r); (res).i = SUB32((res).i,(a).i); \
- }while(0)
-
-#if defined(OPUS_ARM_INLINE_ASM)
-#include "opus/celt/arm/kiss_fft_armv4.h"
-#endif
-
-#if defined(OPUS_ARM_INLINE_EDSP)
-#include "opus/celt/arm/kiss_fft_armv5e.h"
-#endif
-#if defined(MIPSr1_ASM)
-#include "opus/celt/mips/kiss_fft_mipsr1.h"
-#endif
-
-#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_MULC(m,a,b) \
- do{ (m).r = (a).r*(b).r + (a).i*(b).i;\
- (m).i = (a).i*(b).r - (a).r*(b).i; }while(0)
-
-#define C_MUL4(m,a,b) C_MUL(m,a,b)
-
-# 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
-
-#ifndef C_ADD
-#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)
-#endif /* C_ADD defined */
-
-#ifdef OPUS_FIXED_POINT
-/*# define KISS_FFT_COS(phase) TRIG_UPSCALE*floor(MIN(32767,MAX(-32767,.5+32768 * cos (phase))))
-# define KISS_FFT_SIN(phase) TRIG_UPSCALE*floor(MIN(32767,MAX(-32767,.5+32768 * sin (phase))))*/
-# define KISS_FFT_COS(phase) floor(.5+TWID_MAX*cos (phase))
-# define KISS_FFT_SIN(phase) floor(.5+TWID_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(.5f))
-#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)*.5f)
-#endif
-
-#define kf_cexp(x,phase) \
- do{ \
- (x)->r = KISS_FFT_COS(phase);\
- (x)->i = KISS_FFT_SIN(phase);\
- }while(0)
-
-#define kf_cexp2(x,phase) \
- do{ \
- (x)->r = TRIG_UPSCALE*celt_cos_norm((phase));\
- (x)->i = TRIG_UPSCALE*celt_cos_norm((phase)-32768);\
-}while(0)
-
-#endif /* KISS_FFT_GUTS_H */
diff --git a/drivers/opus/celt/arch.h b/drivers/opus/celt/arch.h
deleted file mode 100644
index 7fb036e9fe..0000000000
--- a/drivers/opus/celt/arch.h
+++ /dev/null
@@ -1,241 +0,0 @@
-/* Copyright (c) 2003-2008 Jean-Marc Valin
- Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/**
- @file arch.h
- @brief Various architecture definitions for CELT
-*/
-/*
- 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.
-
- 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 ARCH_H
-#define ARCH_H
-
-#include "opus/opus_types.h"
-#include "opus/opus_defines.h"
-
-# if !defined(__GNUC_PREREQ)
-# if defined(__GNUC__)&&defined(__GNUC_MINOR__)
-# define __GNUC_PREREQ(_maj,_min) \
- ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min))
-# else
-# define __GNUC_PREREQ(_maj,_min) 0
-# endif
-# endif
-
-#define CELT_SIG_SCALE 32768.f
-
-#define celt_fatal(str) _celt_fatal(str, __FILE__, __LINE__);
-#ifdef ENABLE_ASSERTIONS
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef __GNUC__
-__attribute__((noreturn))
-#endif
-static OPUS_INLINE void _celt_fatal(const char *str, const char *file, int line)
-{
- fprintf (stderr, "Fatal (internal) error in %s, line %d: %s\n", file, line, str);
- abort();
-}
-#define celt_assert(cond) {if (!(cond)) {celt_fatal("assertion failed: " #cond);}}
-#define celt_assert2(cond, message) {if (!(cond)) {celt_fatal("assertion failed: " #cond "\n" message);}}
-#else
-#define celt_assert(cond)
-#define celt_assert2(cond, message)
-#endif
-
-#define IMUL32(a,b) ((a)*(b))
-
-#define MIN16(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum 16-bit value. */
-#define MAX16(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 16-bit value. */
-#define MIN32(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum 32-bit value. */
-#define MAX32(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 32-bit value. */
-#define IMIN(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum int value. */
-#define IMAX(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum int value. */
-#define UADD32(a,b) ((a)+(b))
-#define USUB32(a,b) ((a)-(b))
-
-#define PRINT_MIPS(file)
-
-#ifdef OPUS_FIXED_POINT
-
-typedef opus_int16 opus_val16;
-typedef opus_int32 opus_val32;
-
-typedef opus_val32 celt_sig;
-typedef opus_val16 celt_norm;
-typedef opus_val32 celt_ener;
-
-#define Q15ONE 32767
-
-#define SIG_SHIFT 12
-
-#define NORM_SCALING 16384
-
-#define DB_SHIFT 10
-
-#define EPSILON 1
-#define VERY_SMALL 0
-#define VERY_LARGE16 ((opus_val16)32767)
-#define Q15_ONE ((opus_val16)32767)
-
-#define SCALEIN(a) (a)
-#define SCALEOUT(a) (a)
-
-#define ABS16(x) ((x) < 0 ? (-(x)) : (x))
-#define ABS32(x) ((x) < 0 ? (-(x)) : (x))
-
-static OPUS_INLINE opus_int16 SAT16(opus_int32 x) {
- return x > 32767 ? 32767 : x < -32768 ? -32768 : (opus_int16)x;
-}
-
-#ifdef FIXED_DEBUG
-#include "opus/celt/fixed_debug.h"
-#else
-
-#include "opus/celt/fixed_generic.h"
-
-#ifdef OPUS_ARM_INLINE_EDSP
-#include "opus/celt/arm/fixed_armv5e.h"
-#elif defined (OPUS_ARM_INLINE_ASM)
-#include "opus/celt/arm/fixed_armv4.h"
-#elif defined (BFIN_ASM)
-#include "fixed_bfin.h"
-#elif defined (TI_C5X_ASM)
-#include "fixed_c5x.h"
-#elif defined (TI_C6X_ASM)
-#include "fixed_c6x.h"
-#endif
-
-#endif
-
-#else /* FIXED_POINT */
-
-typedef float opus_val16;
-typedef float opus_val32;
-
-typedef float celt_sig;
-typedef float celt_norm;
-typedef float celt_ener;
-
-#ifdef FLOAT_APPROX
-/* This code should reliably detect NaN/inf even when -ffast-math is used.
- Assumes IEEE 754 format. */
-static OPUS_INLINE int celt_isnan(float x)
-{
- union {float f; opus_uint32 i;} in;
- in.f = x;
- return ((in.i>>23)&0xFF)==0xFF && (in.i&0x007FFFFF)!=0;
-}
-#else
-#ifdef __FAST_MATH__
-#error Cannot build libopus with -ffast-math unless FLOAT_APPROX is defined. This could result in crashes on extreme (e.g. NaN) input
-#endif
-#define celt_isnan(x) ((x)!=(x))
-#endif
-
-#define Q15ONE 1.0f
-
-#define NORM_SCALING 1.f
-
-#define EPSILON 1e-15f
-#define VERY_SMALL 1e-30f
-#define VERY_LARGE16 1e15f
-#define Q15_ONE ((opus_val16)1.f)
-
-/* This appears to be the same speed as C99's fabsf() but it's more portable. */
-#define ABS16(x) ((float)fabs(x))
-#define ABS32(x) ((float)fabs(x))
-
-#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 PSHR32(a,shift) (a)
-#define VSHR32(a,shift) (a)
-
-#define PSHR(a,shift) (a)
-#define SHR(a,shift) (a)
-#define SHL(a,shift) (a)
-#define SATURATE(x,a) (x)
-#define SATURATE16(x) (x)
-
-#define ROUND16(a,shift) (a)
-#define HALF16(x) (.5f*(x))
-#define HALF32(x) (.5f*(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 MULT16_16_16(a,b) ((a)*(b))
-#define MULT16_16(a,b) ((opus_val32)(a)*(opus_val32)(b))
-#define MAC16_16(c,a,b) ((c)+(opus_val32)(a)*(opus_val32)(b))
-
-#define MULT16_32_Q15(a,b) ((a)*(b))
-#define MULT16_32_Q16(a,b) ((a)*(b))
-
-#define MULT32_32_Q31(a,b) ((a)*(b))
-
-#define MAC16_32_Q15(c,a,b) ((c)+(a)*(b))
-#define MAC16_32_Q16(c,a,b) ((c)+(a)*(b))
-
-#define MULT16_16_Q11_32(a,b) ((a)*(b))
-#define MULT16_16_Q11(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 MULT16_16_P13(a,b) ((a)*(b))
-#define MULT16_16_P14(a,b) ((a)*(b))
-#define MULT16_32_P16(a,b) ((a)*(b))
-
-#define DIV32_16(a,b) (((opus_val32)(a))/(opus_val16)(b))
-#define DIV32(a,b) (((opus_val32)(a))/(opus_val32)(b))
-
-#define SCALEIN(a) ((a)*CELT_SIG_SCALE)
-#define SCALEOUT(a) ((a)*(1/CELT_SIG_SCALE))
-
-#define SIG2WORD16(x) (x)
-
-#endif /* !FIXED_POINT */
-
-#ifndef GLOBAL_STACK_SIZE
-#ifdef OPUS_FIXED_POINT
-#define GLOBAL_STACK_SIZE 100000
-#else
-#define GLOBAL_STACK_SIZE 100000
-#endif
-#endif
-
-#endif /* ARCH_H */
diff --git a/drivers/opus/celt/arm/arm2gnu.pl b/drivers/opus/celt/arm/arm2gnu.pl
deleted file mode 100755
index 6c922ac819..0000000000
--- a/drivers/opus/celt/arm/arm2gnu.pl
+++ /dev/null
@@ -1,353 +0,0 @@
-#!/usr/bin/perl
-# Copyright (C) 2002-2013 Xiph.org Foundation
-#
-# 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.
-#
-# 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.
-
-my $bigend; # little/big endian
-my $nxstack;
-my $apple = 0;
-my $symprefix = "";
-
-$nxstack = 0;
-
-eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
- if $running_under_some_shell;
-
-while ($ARGV[0] =~ /^-/) {
- $_ = shift;
- last if /^--$/;
- if (/^-n$/) {
- $nflag++;
- next;
- }
- if (/^--apple$/) {
- $apple = 1;
- $symprefix = "_";
- next;
- }
- die "I don't recognize this switch: $_\\n";
-}
-$printit++ unless $nflag;
-
-$\ = "\n"; # automatically add newline on print
-$n=0;
-
-$thumb = 0; # ARM mode by default, not Thumb.
-@proc_stack = ();
-
-printf (" .syntax unified\n");
-
-LINE:
-while (<>) {
-
- # For ADRLs we need to add a new line after the substituted one.
- $addPadding = 0;
-
- # First, we do not dare to touch *anything* inside double quotes, do we?
- # Second, if you want a dollar character in the string,
- # insert two of them -- that's how ARM C and assembler treat strings.
- s/^([A-Za-z_]\w*)[ \t]+DCB[ \t]*\"/$1: .ascii \"/ && do { s/\$\$/\$/g; next };
- s/\bDCB\b[ \t]*\"/.ascii \"/ && do { s/\$\$/\$/g; next };
- s/^(\S+)\s+RN\s+(\S+)/$1 .req r$2/ && do { s/\$\$/\$/g; next };
- # If there's nothing on a line but a comment, don't try to apply any further
- # substitutions (this is a cheap hack to avoid mucking up the license header)
- s/^([ \t]*);/$1@/ && do { s/\$\$/\$/g; next };
- # If substituted -- leave immediately !
-
- s/@/,:/;
- s/;/@/;
- while ( /@.*'/ ) {
- s/(@.*)'/$1/g;
- }
- s/\{FALSE\}/0/g;
- s/\{TRUE\}/1/g;
- s/\{(\w\w\w\w+)\}/$1/g;
- s/\bINCLUDE[ \t]*([^ \t\n]+)/.include \"$1\"/;
- s/\bGET[ \t]*([^ \t\n]+)/.include \"${ my $x=$1; $x =~ s|\.s|-gnu.S|; \$x }\"/;
- s/\bIMPORT\b/.extern/;
- s/\bEXPORT\b\s*/.global $symprefix/;
- s/^(\s+)\[/$1IF/;
- s/^(\s+)\|/$1ELSE/;
- s/^(\s+)\]/$1ENDIF/;
- s/IF *:DEF:/ .ifdef/;
- s/IF *:LNOT: *:DEF:/ .ifndef/;
- s/ELSE/ .else/;
- s/ENDIF/ .endif/;
-
- if( /\bIF\b/ ) {
- s/\bIF\b/ .if/;
- s/=/==/;
- }
- if ( $n == 2) {
- s/\$/\\/g;
- }
- if ($n == 1) {
- s/\$//g;
- s/label//g;
- $n = 2;
- }
- if ( /MACRO/ ) {
- s/MACRO *\n/.macro/;
- $n=1;
- }
- if ( /\bMEND\b/ ) {
- s/\bMEND\b/.endm/;
- $n=0;
- }
-
- # ".rdata" doesn't work in 'as' version 2.13.2, as it is ".rodata" there.
- #
- if ( /\bAREA\b/ ) {
- my $align;
- $align = "2";
- if ( /ALIGN=(\d+)/ ) {
- $align = $1;
- }
- if ( /CODE/ ) {
- $nxstack = 1;
- }
- s/^(.+)CODE(.+)READONLY(.*)/ .text/;
- s/^(.+)DATA(.+)READONLY(.*)/ .section .rdata/;
- s/^(.+)\|\|\.data\|\|(.+)/ .data/;
- s/^(.+)\|\|\.bss\|\|(.+)/ .bss/;
- s/$/; .p2align $align/;
- # Enable NEON instructions but don't produce a binary that requires
- # ARMv7. RVCT does not have equivalent directives, so we just do this
- # for all CODE areas.
- if ( /.text/ ) {
- # Separating .arch, .fpu, etc., by semicolons does not work (gas
- # thinks the semicolon is part of the arch name, even when there's
- # whitespace separating them). Sadly this means our line numbers
- # won't match the original source file (we could use the .line
- # directive, which is documented to be obsolete, but then gdb will
- # show the wrong line in the translated source file).
- s/$/; .arch armv7-a\n .fpu neon\n .object_arch armv4t/ unless ($apple);
- }
- }
-
- s/\|\|\.constdata\$(\d+)\|\|/.L_CONST$1/; # ||.constdata$3||
- s/\|\|\.bss\$(\d+)\|\|/.L_BSS$1/; # ||.bss$2||
- s/\|\|\.data\$(\d+)\|\|/.L_DATA$1/; # ||.data$2||
- s/\|\|([a-zA-Z0-9_]+)\@([a-zA-Z0-9_]+)\|\|/@ $&/;
- s/^(\s+)\%(\s)/ .space $1/;
-
- s/\|(.+)\.(\d+)\|/\.$1_$2/; # |L80.123| -> .L80_123
- s/\bCODE32\b/.code 32/ && do {$thumb = 0};
- s/\bCODE16\b/.code 16/ && do {$thumb = 1};
- if (/\bPROC\b/)
- {
- my $prefix;
- my $proc;
- /^([A-Za-z_\.]\w+)\b/;
- $proc = $1;
- $prefix = "";
- if ($proc)
- {
- $prefix = $prefix.sprintf("\t.type\t%s, %%function; ",$proc) unless ($apple);
- # Make sure we $prefix isn't empty here (for the $apple case).
- # We handle mangling the label here, make sure it doesn't match
- # the label handling below (if $prefix would be empty).
- $prefix = "; ";
- push(@proc_stack, $proc);
- s/^[A-Za-z_\.]\w+/$symprefix$&:/;
- }
- $prefix = $prefix."\t.thumb_func; " if ($thumb);
- s/\bPROC\b/@ $&/;
- $_ = $prefix.$_;
- }
- s/^(\s*)(S|Q|SH|U|UQ|UH)ASX\b/$1$2ADDSUBX/;
- s/^(\s*)(S|Q|SH|U|UQ|UH)SAX\b/$1$2SUBADDX/;
- if (/\bENDP\b/)
- {
- my $proc;
- s/\bENDP\b/@ $&/;
- $proc = pop(@proc_stack);
- $_ = "\t.size $proc, .-$proc".$_ if ($proc && !$apple);
- }
- s/\bSUBT\b/@ $&/;
- s/\bDATA\b/@ $&/; # DATA directive is deprecated -- Asm guide, p.7-25
- s/\bKEEP\b/@ $&/;
- s/\bEXPORTAS\b/@ $&/;
- s/\|\|(.)+\bEQU\b/@ $&/;
- s/\|\|([\w\$]+)\|\|/$1/;
- s/\bENTRY\b/@ $&/;
- s/\bASSERT\b/@ $&/;
- s/\bGBLL\b/@ $&/;
- s/\bGBLA\b/@ $&/;
- s/^\W+OPT\b/@ $&/;
- s/:OR:/|/g;
- s/:SHL:/<</g;
- s/:SHR:/>>/g;
- s/:AND:/&/g;
- s/:LAND:/&&/g;
- s/CPSR/cpsr/;
- s/SPSR/spsr/;
- s/ALIGN$/.balign 4/;
- s/ALIGN\s+([0-9x]+)$/.balign $1/;
- s/psr_cxsf/psr_all/;
- s/LTORG/.ltorg/;
- s/^([A-Za-z_]\w*)[ \t]+EQU/ .set $1,/;
- s/^([A-Za-z_]\w*)[ \t]+SETL/ .set $1,/;
- s/^([A-Za-z_]\w*)[ \t]+SETA/ .set $1,/;
- s/^([A-Za-z_]\w*)[ \t]+\*/ .set $1,/;
-
- # {PC} + 0xdeadfeed --> . + 0xdeadfeed
- s/\{PC\} \+/ \. +/;
-
- # Single hex constant on the line !
- #
- # >>> NOTE <<<
- # Double-precision floats in gcc are always mixed-endian, which means
- # bytes in two words are little-endian, but words are big-endian.
- # So, 0x0000deadfeed0000 would be stored as 0x0000dead at low address
- # and 0xfeed0000 at high address.
- #
- s/\bDCFD\b[ \t]+0x([a-fA-F0-9]{8})([a-fA-F0-9]{8})/.long 0x$1, 0x$2/;
- # Only decimal constants on the line, no hex !
- s/\bDCFD\b[ \t]+([0-9\.\-]+)/.double $1/;
-
- # Single hex constant on the line !
-# s/\bDCFS\b[ \t]+0x([a-f0-9]{8})([a-f0-9]{8})/.long 0x$1, 0x$2/;
- # Only decimal constants on the line, no hex !
-# s/\bDCFS\b[ \t]+([0-9\.\-]+)/.double $1/;
- s/\bDCFS[ \t]+0x/.word 0x/;
- s/\bDCFS\b/.float/;
-
- s/^([A-Za-z_]\w*)[ \t]+DCD/$1 .word/;
- s/\bDCD\b/.word/;
- s/^([A-Za-z_]\w*)[ \t]+DCW/$1 .short/;
- s/\bDCW\b/.short/;
- s/^([A-Za-z_]\w*)[ \t]+DCB/$1 .byte/;
- s/\bDCB\b/.byte/;
- s/^([A-Za-z_]\w*)[ \t]+\%/.comm $1,/;
- s/^[A-Za-z_\.]\w+/$&:/;
- s/^(\d+)/$1:/;
- s/\%(\d+)/$1b_or_f/;
- s/\%[Bb](\d+)/$1b/;
- s/\%[Ff](\d+)/$1f/;
- s/\%[Ff][Tt](\d+)/$1f/;
- s/&([\dA-Fa-f]+)/0x$1/;
- if ( /\b2_[01]+\b/ ) {
- s/\b2_([01]+)\b/conv$1&&&&/g;
- while ( /[01][01][01][01]&&&&/ ) {
- s/0000&&&&/&&&&0/g;
- s/0001&&&&/&&&&1/g;
- s/0010&&&&/&&&&2/g;
- s/0011&&&&/&&&&3/g;
- s/0100&&&&/&&&&4/g;
- s/0101&&&&/&&&&5/g;
- s/0110&&&&/&&&&6/g;
- s/0111&&&&/&&&&7/g;
- s/1000&&&&/&&&&8/g;
- s/1001&&&&/&&&&9/g;
- s/1010&&&&/&&&&A/g;
- s/1011&&&&/&&&&B/g;
- s/1100&&&&/&&&&C/g;
- s/1101&&&&/&&&&D/g;
- s/1110&&&&/&&&&E/g;
- s/1111&&&&/&&&&F/g;
- }
- s/000&&&&/&&&&0/g;
- s/001&&&&/&&&&1/g;
- s/010&&&&/&&&&2/g;
- s/011&&&&/&&&&3/g;
- s/100&&&&/&&&&4/g;
- s/101&&&&/&&&&5/g;
- s/110&&&&/&&&&6/g;
- s/111&&&&/&&&&7/g;
- s/00&&&&/&&&&0/g;
- s/01&&&&/&&&&1/g;
- s/10&&&&/&&&&2/g;
- s/11&&&&/&&&&3/g;
- s/0&&&&/&&&&0/g;
- s/1&&&&/&&&&1/g;
- s/conv&&&&/0x/g;
- }
-
- if ( /commandline/)
- {
- if( /-bigend/)
- {
- $bigend=1;
- }
- }
-
- if ( /\bDCDU\b/ )
- {
- my $cmd=$_;
- my $value;
- my $prefix;
- my $w1;
- my $w2;
- my $w3;
- my $w4;
-
- s/\s+DCDU\b/@ $&/;
-
- $cmd =~ /\bDCDU\b\s+0x(\d+)/;
- $value = $1;
- $value =~ /(\w\w)(\w\w)(\w\w)(\w\w)/;
- $w1 = $1;
- $w2 = $2;
- $w3 = $3;
- $w4 = $4;
-
- if( $bigend ne "")
- {
- # big endian
- $prefix = "\t.byte\t0x".$w1.";".
- "\t.byte\t0x".$w2.";".
- "\t.byte\t0x".$w3.";".
- "\t.byte\t0x".$w4."; ";
- }
- else
- {
- # little endian
- $prefix = "\t.byte\t0x".$w4.";".
- "\t.byte\t0x".$w3.";".
- "\t.byte\t0x".$w2.";".
- "\t.byte\t0x".$w1."; ";
- }
- $_=$prefix.$_;
- }
-
- if ( /\badrl\b/i )
- {
- s/\badrl\s+(\w+)\s*,\s*(\w+)/ldr $1,=$2/i;
- $addPadding = 1;
- }
- s/\bEND\b/@ END/;
-} continue {
- printf ("%s", $_) if $printit;
- if ($addPadding != 0)
- {
- printf (" mov r0,r0\n");
- $addPadding = 0;
- }
-}
-#If we had a code section, mark that this object doesn't need an executable
-# stack.
-if ($nxstack && !$apple) {
- printf (" .section\t.note.GNU-stack,\"\",\%\%progbits\n");
-}
diff --git a/drivers/opus/celt/arm/arm_celt_map.c b/drivers/opus/celt/arm/arm_celt_map.c
deleted file mode 100644
index 92c83c1763..0000000000
--- a/drivers/opus/celt/arm/arm_celt_map.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/* Copyright (c) 2010 Xiph.Org Foundation
- * Copyright (c) 2013 Parrot */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/pitch.h"
-#include "opus/celt/kiss_fft.h"
-#include "opus/celt/mdct.h"
-
-#if defined(OPUS_HAVE_RTCD)
-
-# if defined(FIXED_POINT)
-opus_val32 (*const CELT_PITCH_XCORR_IMPL[OPUS_ARCHMASK+1])(const opus_val16 *,
- const opus_val16 *, opus_val32 *, int , int) = {
- celt_pitch_xcorr_c, /* ARMv4 */
- MAY_HAVE_EDSP(celt_pitch_xcorr), /* EDSP */
- MAY_HAVE_MEDIA(celt_pitch_xcorr), /* Media */
- MAY_HAVE_NEON(celt_pitch_xcorr) /* NEON */
-};
-# else /* !FIXED_POINT */
-# if defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
-void (*const CELT_PITCH_XCORR_IMPL[OPUS_ARCHMASK+1])(const opus_val16 *,
- const opus_val16 *, opus_val32 *, int, int) = {
- celt_pitch_xcorr_c, /* ARMv4 */
- celt_pitch_xcorr_c, /* EDSP */
- celt_pitch_xcorr_c, /* Media */
- celt_pitch_xcorr_float_neon /* Neon */
-};
-# endif
-# endif /* FIXED_POINT */
-
-# if defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
-# if defined(HAVE_ARM_NE10)
-# if defined(CUSTOM_MODES)
-int (*const OPUS_FFT_ALLOC_ARCH_IMPL[OPUS_ARCHMASK+1])(kiss_fft_state *st) = {
- opus_fft_alloc_arch_c, /* ARMv4 */
- opus_fft_alloc_arch_c, /* EDSP */
- opus_fft_alloc_arch_c, /* Media */
- opus_fft_alloc_arm_neon /* Neon with NE10 library support */
-};
-
-void (*const OPUS_FFT_FREE_ARCH_IMPL[OPUS_ARCHMASK+1])(kiss_fft_state *st) = {
- opus_fft_free_arch_c, /* ARMv4 */
- opus_fft_free_arch_c, /* EDSP */
- opus_fft_free_arch_c, /* Media */
- opus_fft_free_arm_neon /* Neon with NE10 */
-};
-# endif /* CUSTOM_MODES */
-
-void (*const OPUS_FFT[OPUS_ARCHMASK+1])(const kiss_fft_state *cfg,
- const kiss_fft_cpx *fin,
- kiss_fft_cpx *fout) = {
- opus_fft_c, /* ARMv4 */
- opus_fft_c, /* EDSP */
- opus_fft_c, /* Media */
- opus_fft_neon /* Neon with NE10 */
-};
-
-void (*const OPUS_IFFT[OPUS_ARCHMASK+1])(const kiss_fft_state *cfg,
- const kiss_fft_cpx *fin,
- kiss_fft_cpx *fout) = {
- opus_ifft_c, /* ARMv4 */
- opus_ifft_c, /* EDSP */
- opus_ifft_c, /* Media */
- opus_ifft_neon /* Neon with NE10 */
-};
-
-void (*const CLT_MDCT_FORWARD_IMPL[OPUS_ARCHMASK+1])(const mdct_lookup *l,
- kiss_fft_scalar *in,
- kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 *window,
- int overlap, int shift,
- int stride, int arch) = {
- clt_mdct_forward_c, /* ARMv4 */
- clt_mdct_forward_c, /* EDSP */
- clt_mdct_forward_c, /* Media */
- clt_mdct_forward_neon /* Neon with NE10 */
-};
-
-void (*const CLT_MDCT_BACKWARD_IMPL[OPUS_ARCHMASK+1])(const mdct_lookup *l,
- kiss_fft_scalar *in,
- kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 *window,
- int overlap, int shift,
- int stride, int arch) = {
- clt_mdct_backward_c, /* ARMv4 */
- clt_mdct_backward_c, /* EDSP */
- clt_mdct_backward_c, /* Media */
- clt_mdct_backward_neon /* Neon with NE10 */
-};
-
-# endif /* HAVE_ARM_NE10 */
-# endif /* OPUS_ARM_MAY_HAVE_NEON_INTR */
-
-#endif /* OPUS_HAVE_RTCD */
diff --git a/drivers/opus/celt/arm/armcpu.c b/drivers/opus/celt/arm/armcpu.c
deleted file mode 100644
index ac8ad2ec14..0000000000
--- a/drivers/opus/celt/arm/armcpu.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/* Copyright (c) 2010 Xiph.Org Foundation
- * Copyright (c) 2013 Parrot */
-/*
- 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.
-
- 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.
-*/
-
-/* Original code from libtheora modified to suit to Opus */
-#include "opus/opus_config.h"
-
-#ifdef OPUS_HAVE_RTCD
-
-#include "opus/celt/arm/armcpu.h"
-#include "opus/celt/cpu_support.h"
-#include "opus/celt/os_support.h"
-#include "opus/opus_types.h"
-
-#define OPUS_CPU_ARM_V4 (1)
-#define OPUS_CPU_ARM_EDSP (1<<1)
-#define OPUS_CPU_ARM_MEDIA (1<<2)
-#define OPUS_CPU_ARM_NEON (1<<3)
-
-#if defined(_MSC_VER)
-/*For GetExceptionCode() and EXCEPTION_ILLEGAL_INSTRUCTION.*/
-# define WIN32_LEAN_AND_MEAN
-# define WIN32_EXTRA_LEAN
-# include <windows.h>
-
-static OPUS_INLINE opus_uint32 opus_cpu_capabilities(void){
- opus_uint32 flags;
- flags=0;
- /* MSVC has no OPUS_INLINE __asm support for ARM, but it does let you __emit
- * instructions via their assembled hex code.
- * All of these instructions should be essentially nops. */
-# if defined(OPUS_ARM_MAY_HAVE_EDSP)
- __try{
- /*PLD [r13]*/
- __emit(0xF5DDF000);
- flags|=OPUS_CPU_ARM_EDSP;
- }
- __except(GetExceptionCode()==EXCEPTION_ILLEGAL_INSTRUCTION){
- /*Ignore exception.*/
- }
-# if defined(OPUS_ARM_MAY_HAVE_MEDIA)
- __try{
- /*SHADD8 r3,r3,r3*/
- __emit(0xE6333F93);
- flags|=OPUS_CPU_ARM_MEDIA;
- }
- __except(GetExceptionCode()==EXCEPTION_ILLEGAL_INSTRUCTION){
- /*Ignore exception.*/
- }
-# if defined(OPUS_ARM_MAY_HAVE_NEON) || defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
- __try{
- /*VORR q0,q0,q0*/
- __emit(0xF2200150);
- flags|=OPUS_CPU_ARM_NEON;
- }
- __except(GetExceptionCode()==EXCEPTION_ILLEGAL_INSTRUCTION){
- /*Ignore exception.*/
- }
-# endif
-# endif
-# endif
- return flags;
-}
-
-#elif defined(__linux__)
-/* Linux based */
-opus_uint32 opus_cpu_capabilities(void)
-{
- opus_uint32 flags = 0;
- FILE *cpuinfo;
-
- /* Reading /proc/self/auxv would be easier, but that doesn't work reliably on
- * Android */
- cpuinfo = fopen("/proc/cpuinfo", "r");
-
- if(cpuinfo != NULL)
- {
- /* 512 should be enough for anybody (it's even enough for all the flags that
- * x86 has accumulated... so far). */
- char buf[512];
-
- while(fgets(buf, 512, cpuinfo) != NULL)
- {
-# if defined(OPUS_ARM_MAY_HAVE_EDSP) || defined(OPUS_ARM_MAY_HAVE_NEON) || defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
- /* Search for edsp and neon flag */
- if(memcmp(buf, "Features", 8) == 0)
- {
- char *p;
-# if defined(OPUS_ARM_MAY_HAVE_EDSP)
- p = strstr(buf, " edsp");
- if(p != NULL && (p[5] == ' ' || p[5] == '\n'))
- flags |= OPUS_CPU_ARM_EDSP;
-# endif
-
-# if defined(OPUS_ARM_MAY_HAVE_NEON) || defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
- p = strstr(buf, " neon");
- if(p != NULL && (p[5] == ' ' || p[5] == '\n'))
- flags |= OPUS_CPU_ARM_NEON;
-# endif
- }
-# endif
-
-# if defined(OPUS_ARM_MAY_HAVE_MEDIA)
- /* Search for media capabilities (>= ARMv6) */
- if(memcmp(buf, "CPU architecture:", 17) == 0)
- {
- int version;
- version = atoi(buf+17);
-
- if(version >= 6)
- flags |= OPUS_CPU_ARM_MEDIA;
- }
-# endif
- }
-
- fclose(cpuinfo);
- }
- return flags;
-}
-#else
-/* The feature registers which can tell us what the processor supports are
- * accessible in priveleged modes only, so we can't have a general user-space
- * detection method like on x86.*/
-# error "Configured to use ARM asm but no CPU detection method available for " \
- "your platform. Reconfigure with --disable-rtcd (or send patches)."
-#endif
-
-int opus_select_arch(void)
-{
- opus_uint32 flags = opus_cpu_capabilities();
- int arch = 0;
-
- if(!(flags & OPUS_CPU_ARM_EDSP))
- return arch;
- arch++;
-
- if(!(flags & OPUS_CPU_ARM_MEDIA))
- return arch;
- arch++;
-
- if(!(flags & OPUS_CPU_ARM_NEON))
- return arch;
- arch++;
-
- return arch;
-}
-
-#endif
diff --git a/drivers/opus/celt/arm/armcpu.h b/drivers/opus/celt/arm/armcpu.h
deleted file mode 100644
index ac5744606e..0000000000
--- a/drivers/opus/celt/arm/armcpu.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (c) 2010 Xiph.Org Foundation
- * Copyright (c) 2013 Parrot */
-/*
- 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.
-
- 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.
-*/
-
-#if !defined(ARMCPU_H)
-# define ARMCPU_H
-
-# if defined(OPUS_ARM_MAY_HAVE_EDSP)
-# define MAY_HAVE_EDSP(name) name ## _edsp
-# else
-# define MAY_HAVE_EDSP(name) name ## _c
-# endif
-
-# if defined(OPUS_ARM_MAY_HAVE_MEDIA)
-# define MAY_HAVE_MEDIA(name) name ## _media
-# else
-# define MAY_HAVE_MEDIA(name) MAY_HAVE_EDSP(name)
-# endif
-
-# if defined(OPUS_ARM_MAY_HAVE_NEON)
-# define MAY_HAVE_NEON(name) name ## _neon
-# else
-# define MAY_HAVE_NEON(name) MAY_HAVE_MEDIA(name)
-# endif
-
-# if defined(OPUS_ARM_PRESUME_EDSP)
-# define PRESUME_EDSP(name) name ## _edsp
-# else
-# define PRESUME_EDSP(name) name ## _c
-# endif
-
-# if defined(OPUS_ARM_PRESUME_MEDIA)
-# define PRESUME_MEDIA(name) name ## _media
-# else
-# define PRESUME_MEDIA(name) PRESUME_EDSP(name)
-# endif
-
-# if defined(OPUS_ARM_PRESUME_NEON)
-# define PRESUME_NEON(name) name ## _neon
-# else
-# define PRESUME_NEON(name) PRESUME_MEDIA(name)
-# endif
-
-# if defined(OPUS_HAVE_RTCD)
-int opus_select_arch(void);
-# endif
-
-#endif
diff --git a/drivers/opus/celt/arm/armopts.s.in b/drivers/opus/celt/arm/armopts.s.in
deleted file mode 100644
index 3d8aaf2754..0000000000
--- a/drivers/opus/celt/arm/armopts.s.in
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 2013 Mozilla Corporation */
-/*
- 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.
-
- 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.
-*/
-
-; Set the following to 1 if we have EDSP instructions
-; (LDRD/STRD, etc., ARMv5E and later).
-OPUS_ARM_MAY_HAVE_EDSP * @OPUS_ARM_MAY_HAVE_EDSP@
-
-; Set the following to 1 if we have ARMv6 media instructions.
-OPUS_ARM_MAY_HAVE_MEDIA * @OPUS_ARM_MAY_HAVE_MEDIA@
-
-; Set the following to 1 if we have NEON (some ARMv7)
-OPUS_ARM_MAY_HAVE_NEON * @OPUS_ARM_MAY_HAVE_NEON@
-
-END
diff --git a/drivers/opus/celt/arm/celt_ne10_fft.c b/drivers/opus/celt/arm/celt_ne10_fft.c
deleted file mode 100644
index e57d23ee1d..0000000000
--- a/drivers/opus/celt/arm/celt_ne10_fft.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/* Copyright (c) 2015 Xiph.Org Foundation
- Written by Viswanath Puttagunta */
-/**
- @file celt_ne10_fft.c
- @brief ARM Neon optimizations for fft using NE10 library
- */
-
-/*
- 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.
-
- 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 SKIP_CONFIG_H
-#include "opus/opus_config.h"
-#endif
-
-#include <NE10_init.h>
-#include <NE10_dsp.h>
-#include "opus/celt/os_support.h"
-#include "opus/celt/kiss_fft.h"
-#include "opus/celt/stack_alloc.h"
-
-#if !defined(FIXED_POINT)
-# define NE10_FFT_ALLOC_C2C_TYPE_NEON ne10_fft_alloc_c2c_float32_neon
-# define NE10_FFT_CFG_TYPE_T ne10_fft_cfg_float32_t
-# define NE10_FFT_STATE_TYPE_T ne10_fft_state_float32_t
-# define NE10_FFT_DESTROY_C2C_TYPE ne10_fft_destroy_c2c_float32
-# define NE10_FFT_CPX_TYPE_T ne10_fft_cpx_float32_t
-# define NE10_FFT_C2C_1D_TYPE_NEON ne10_fft_c2c_1d_float32_neon
-#else
-# define NE10_FFT_ALLOC_C2C_TYPE_NEON(nfft) ne10_fft_alloc_c2c_int32_neon(nfft)
-# define NE10_FFT_CFG_TYPE_T ne10_fft_cfg_int32_t
-# define NE10_FFT_STATE_TYPE_T ne10_fft_state_int32_t
-# define NE10_FFT_DESTROY_C2C_TYPE ne10_fft_destroy_c2c_int32
-# define NE10_FFT_DESTROY_C2C_TYPE ne10_fft_destroy_c2c_int32
-# define NE10_FFT_CPX_TYPE_T ne10_fft_cpx_int32_t
-# define NE10_FFT_C2C_1D_TYPE_NEON ne10_fft_c2c_1d_int32_neon
-#endif
-
-#if defined(CUSTOM_MODES)
-
-/* nfft lengths in NE10 that support scaled fft */
-# define NE10_FFTSCALED_SUPPORT_MAX 4
-static const int ne10_fft_scaled_support[NE10_FFTSCALED_SUPPORT_MAX] = {
- 480, 240, 120, 60
-};
-
-int opus_fft_alloc_arm_neon(kiss_fft_state *st)
-{
- int i;
- size_t memneeded = sizeof(struct arch_fft_state);
-
- st->arch_fft = (arch_fft_state *)opus_alloc(memneeded);
- if (!st->arch_fft)
- return -1;
-
- for (i = 0; i < NE10_FFTSCALED_SUPPORT_MAX; i++) {
- if(st->nfft == ne10_fft_scaled_support[i])
- break;
- }
- if (i == NE10_FFTSCALED_SUPPORT_MAX) {
- /* This nfft length (scaled fft) is not supported in NE10 */
- st->arch_fft->is_supported = 0;
- st->arch_fft->priv = NULL;
- }
- else {
- st->arch_fft->is_supported = 1;
- st->arch_fft->priv = (void *)NE10_FFT_ALLOC_C2C_TYPE_NEON(st->nfft);
- if (st->arch_fft->priv == NULL) {
- return -1;
- }
- }
- return 0;
-}
-
-void opus_fft_free_arm_neon(kiss_fft_state *st)
-{
- NE10_FFT_CFG_TYPE_T cfg;
-
- if (!st->arch_fft)
- return;
-
- cfg = (NE10_FFT_CFG_TYPE_T)st->arch_fft->priv;
- if (cfg)
- NE10_FFT_DESTROY_C2C_TYPE(cfg);
- opus_free(st->arch_fft);
-}
-#endif
-
-void opus_fft_neon(const kiss_fft_state *st,
- const kiss_fft_cpx *fin,
- kiss_fft_cpx *fout)
-{
- NE10_FFT_STATE_TYPE_T state;
- NE10_FFT_CFG_TYPE_T cfg = &state;
- VARDECL(NE10_FFT_CPX_TYPE_T, buffer);
- SAVE_STACK;
- ALLOC(buffer, st->nfft, NE10_FFT_CPX_TYPE_T);
-
- if (!st->arch_fft->is_supported) {
- /* This nfft length (scaled fft) not supported in NE10 */
- opus_fft_c(st, fin, fout);
- }
- else {
- memcpy((void *)cfg, st->arch_fft->priv, sizeof(NE10_FFT_STATE_TYPE_T));
- state.buffer = (NE10_FFT_CPX_TYPE_T *)&buffer[0];
-#if !defined(FIXED_POINT)
- state.is_forward_scaled = 1;
-
- NE10_FFT_C2C_1D_TYPE_NEON((NE10_FFT_CPX_TYPE_T *)fout,
- (NE10_FFT_CPX_TYPE_T *)fin,
- cfg, 0);
-#else
- NE10_FFT_C2C_1D_TYPE_NEON((NE10_FFT_CPX_TYPE_T *)fout,
- (NE10_FFT_CPX_TYPE_T *)fin,
- cfg, 0, 1);
-#endif
- }
- RESTORE_STACK;
-}
-
-void opus_ifft_neon(const kiss_fft_state *st,
- const kiss_fft_cpx *fin,
- kiss_fft_cpx *fout)
-{
- NE10_FFT_STATE_TYPE_T state;
- NE10_FFT_CFG_TYPE_T cfg = &state;
- VARDECL(NE10_FFT_CPX_TYPE_T, buffer);
- SAVE_STACK;
- ALLOC(buffer, st->nfft, NE10_FFT_CPX_TYPE_T);
-
- if (!st->arch_fft->is_supported) {
- /* This nfft length (scaled fft) not supported in NE10 */
- opus_ifft_c(st, fin, fout);
- }
- else {
- memcpy((void *)cfg, st->arch_fft->priv, sizeof(NE10_FFT_STATE_TYPE_T));
- state.buffer = (NE10_FFT_CPX_TYPE_T *)&buffer[0];
-#if !defined(FIXED_POINT)
- state.is_backward_scaled = 0;
-
- NE10_FFT_C2C_1D_TYPE_NEON((NE10_FFT_CPX_TYPE_T *)fout,
- (NE10_FFT_CPX_TYPE_T *)fin,
- cfg, 1);
-#else
- NE10_FFT_C2C_1D_TYPE_NEON((NE10_FFT_CPX_TYPE_T *)fout,
- (NE10_FFT_CPX_TYPE_T *)fin,
- cfg, 1, 0);
-#endif
- }
- RESTORE_STACK;
-}
diff --git a/drivers/opus/celt/arm/celt_ne10_mdct.c b/drivers/opus/celt/arm/celt_ne10_mdct.c
deleted file mode 100644
index eb407b674f..0000000000
--- a/drivers/opus/celt/arm/celt_ne10_mdct.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/* Copyright (c) 2015 Xiph.Org Foundation
- Written by Viswanath Puttagunta */
-/**
- @file celt_ne10_mdct.c
- @brief ARM Neon optimizations for mdct using NE10 library
- */
-
-/*
- 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.
-
- 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 SKIP_CONFIG_H
-#include "opus/opus_config.h"
-#endif
-
-#include "opus/celt/kiss_fft.h"
-#include "opus/celt/_kiss_fft_guts.h"
-#include "opus/celt/mdct.h"
-#include "opus/celt/stack_alloc.h"
-
-void clt_mdct_forward_neon(const mdct_lookup *l,
- kiss_fft_scalar *in,
- kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 *window,
- int overlap, int shift, int stride, int arch)
-{
- int i;
- int N, N2, N4;
- VARDECL(kiss_fft_scalar, f);
- VARDECL(kiss_fft_cpx, f2);
- const kiss_fft_state *st = l->kfft[shift];
- const kiss_twiddle_scalar *trig;
-
- SAVE_STACK;
-
- N = l->n;
- trig = l->trig;
- for (i=0;i<shift;i++)
- {
- N >>= 1;
- trig += N;
- }
- N2 = N>>1;
- N4 = N>>2;
-
- ALLOC(f, N2, kiss_fft_scalar);
- ALLOC(f2, N4, kiss_fft_cpx);
-
- /* Consider the input to be composed of four blocks: [a, b, c, d] */
- /* Window, shuffle, fold */
- {
- /* Temp pointers to make it really clear to the compiler what we're doing */
- const kiss_fft_scalar * OPUS_RESTRICT xp1 = in+(overlap>>1);
- const kiss_fft_scalar * OPUS_RESTRICT xp2 = in+N2-1+(overlap>>1);
- kiss_fft_scalar * OPUS_RESTRICT yp = f;
- const opus_val16 * OPUS_RESTRICT wp1 = window+(overlap>>1);
- const opus_val16 * OPUS_RESTRICT wp2 = window+(overlap>>1)-1;
- for(i=0;i<((overlap+3)>>2);i++)
- {
- /* Real part arranged as -d-cR, Imag part arranged as -b+aR*/
- *yp++ = MULT16_32_Q15(*wp2, xp1[N2]) + MULT16_32_Q15(*wp1,*xp2);
- *yp++ = MULT16_32_Q15(*wp1, *xp1) - MULT16_32_Q15(*wp2, xp2[-N2]);
- xp1+=2;
- xp2-=2;
- wp1+=2;
- wp2-=2;
- }
- wp1 = window;
- wp2 = window+overlap-1;
- for(;i<N4-((overlap+3)>>2);i++)
- {
- /* Real part arranged as a-bR, Imag part arranged as -c-dR */
- *yp++ = *xp2;
- *yp++ = *xp1;
- xp1+=2;
- xp2-=2;
- }
- for(;i<N4;i++)
- {
- /* Real part arranged as a-bR, Imag part arranged as -c-dR */
- *yp++ = -MULT16_32_Q15(*wp1, xp1[-N2]) + MULT16_32_Q15(*wp2, *xp2);
- *yp++ = MULT16_32_Q15(*wp2, *xp1) + MULT16_32_Q15(*wp1, xp2[N2]);
- xp1+=2;
- xp2-=2;
- wp1+=2;
- wp2-=2;
- }
- }
- /* Pre-rotation */
- {
- kiss_fft_scalar * OPUS_RESTRICT yp = f;
- const kiss_twiddle_scalar *t = &trig[0];
- for(i=0;i<N4;i++)
- {
- kiss_fft_cpx yc;
- kiss_twiddle_scalar t0, t1;
- kiss_fft_scalar re, im, yr, yi;
- t0 = t[i];
- t1 = t[N4+i];
- re = *yp++;
- im = *yp++;
- yr = S_MUL(re,t0) - S_MUL(im,t1);
- yi = S_MUL(im,t0) + S_MUL(re,t1);
- yc.r = yr;
- yc.i = yi;
- f2[i] = yc;
- }
- }
-
- opus_fft(st, f2, (kiss_fft_cpx *)f, arch);
-
- /* Post-rotate */
- {
- /* Temp pointers to make it really clear to the compiler what we're doing */
- const kiss_fft_cpx * OPUS_RESTRICT fp = (kiss_fft_cpx *)f;
- kiss_fft_scalar * OPUS_RESTRICT yp1 = out;
- kiss_fft_scalar * OPUS_RESTRICT yp2 = out+stride*(N2-1);
- const kiss_twiddle_scalar *t = &trig[0];
- /* Temp pointers to make it really clear to the compiler what we're doing */
- for(i=0;i<N4;i++)
- {
- kiss_fft_scalar yr, yi;
- yr = S_MUL(fp->i,t[N4+i]) - S_MUL(fp->r,t[i]);
- yi = S_MUL(fp->r,t[N4+i]) + S_MUL(fp->i,t[i]);
- *yp1 = yr;
- *yp2 = yi;
- fp++;
- yp1 += 2*stride;
- yp2 -= 2*stride;
- }
- }
- RESTORE_STACK;
-}
-
-void clt_mdct_backward_neon(const mdct_lookup *l,
- kiss_fft_scalar *in,
- kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 * OPUS_RESTRICT window,
- int overlap, int shift, int stride, int arch)
-{
- int i;
- int N, N2, N4;
- VARDECL(kiss_fft_scalar, f);
- const kiss_twiddle_scalar *trig;
- const kiss_fft_state *st = l->kfft[shift];
-
- N = l->n;
- trig = l->trig;
- for (i=0;i<shift;i++)
- {
- N >>= 1;
- trig += N;
- }
- N2 = N>>1;
- N4 = N>>2;
-
- ALLOC(f, N2, kiss_fft_scalar);
-
- /* Pre-rotate */
- {
- /* Temp pointers to make it really clear to the compiler what we're doing */
- const kiss_fft_scalar * OPUS_RESTRICT xp1 = in;
- const kiss_fft_scalar * OPUS_RESTRICT xp2 = in+stride*(N2-1);
- kiss_fft_scalar * OPUS_RESTRICT yp = f;
- const kiss_twiddle_scalar * OPUS_RESTRICT t = &trig[0];
- for(i=0;i<N4;i++)
- {
- kiss_fft_scalar yr, yi;
- yr = S_MUL(*xp2, t[i]) + S_MUL(*xp1, t[N4+i]);
- yi = S_MUL(*xp1, t[i]) - S_MUL(*xp2, t[N4+i]);
- yp[2*i] = yr;
- yp[2*i+1] = yi;
- xp1+=2*stride;
- xp2-=2*stride;
- }
- }
-
- opus_ifft(st, (kiss_fft_cpx *)f, (kiss_fft_cpx*)(out+(overlap>>1)), arch);
-
- /* Post-rotate and de-shuffle from both ends of the buffer at once to make
- it in-place. */
- {
- kiss_fft_scalar * yp0 = out+(overlap>>1);
- kiss_fft_scalar * yp1 = out+(overlap>>1)+N2-2;
- const kiss_twiddle_scalar *t = &trig[0];
- /* Loop to (N4+1)>>1 to handle odd N4. When N4 is odd, the
- middle pair will be computed twice. */
- for(i=0;i<(N4+1)>>1;i++)
- {
- kiss_fft_scalar re, im, yr, yi;
- kiss_twiddle_scalar t0, t1;
- re = yp0[0];
- im = yp0[1];
- t0 = t[i];
- t1 = t[N4+i];
- /* We'd scale up by 2 here, but instead it's done when mixing the windows */
- yr = S_MUL(re,t0) + S_MUL(im,t1);
- yi = S_MUL(re,t1) - S_MUL(im,t0);
- re = yp1[0];
- im = yp1[1];
- yp0[0] = yr;
- yp1[1] = yi;
-
- t0 = t[(N4-i-1)];
- t1 = t[(N2-i-1)];
- /* We'd scale up by 2 here, but instead it's done when mixing the windows */
- yr = S_MUL(re,t0) + S_MUL(im,t1);
- yi = S_MUL(re,t1) - S_MUL(im,t0);
- yp1[0] = yr;
- yp0[1] = yi;
- yp0 += 2;
- yp1 -= 2;
- }
- }
-
- /* Mirror on both sides for TDAC */
- {
- kiss_fft_scalar * OPUS_RESTRICT xp1 = out+overlap-1;
- kiss_fft_scalar * OPUS_RESTRICT yp1 = out;
- const opus_val16 * OPUS_RESTRICT wp1 = window;
- const opus_val16 * OPUS_RESTRICT wp2 = window+overlap-1;
-
- for(i = 0; i < overlap/2; i++)
- {
- kiss_fft_scalar x1, x2;
- x1 = *xp1;
- x2 = *yp1;
- *yp1++ = MULT16_32_Q15(*wp2, x2) - MULT16_32_Q15(*wp1, x1);
- *xp1-- = MULT16_32_Q15(*wp1, x2) + MULT16_32_Q15(*wp2, x1);
- wp1++;
- wp2--;
- }
- }
- RESTORE_STACK;
-}
diff --git a/drivers/opus/celt/arm/celt_neon_intr.c b/drivers/opus/celt/arm/celt_neon_intr.c
deleted file mode 100644
index 82b6958644..0000000000
--- a/drivers/opus/celt/arm/celt_neon_intr.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* Copyright (c) 2014-2015 Xiph.Org Foundation
- Written by Viswanath Puttagunta */
-/**
- @file celt_neon_intr.c
- @brief ARM Neon Intrinsic optimizations for celt
- */
-
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <arm_neon.h>
-#include "opus/celt/pitch.h"
-
-#if !defined(FIXED_POINT)
-/*
- * Function: xcorr_kernel_neon_float
- * ---------------------------------
- * Computes 4 correlation values and stores them in sum[4]
- */
-static void xcorr_kernel_neon_float(const float32_t *x, const float32_t *y,
- float32_t sum[4], int len) {
- float32x4_t YY[3];
- float32x4_t YEXT[3];
- float32x4_t XX[2];
- float32x2_t XX_2;
- float32x4_t SUMM;
- const float32_t *xi = x;
- const float32_t *yi = y;
-
- celt_assert(len>0);
-
- YY[0] = vld1q_f32(yi);
- SUMM = vdupq_n_f32(0);
-
- /* Consume 8 elements in x vector and 12 elements in y
- * vector. However, the 12'th element never really gets
- * touched in this loop. So, if len == 8, then we only
- * must access y[0] to y[10]. y[11] must not be accessed
- * hence make sure len > 8 and not len >= 8
- */
- while (len > 8) {
- yi += 4;
- YY[1] = vld1q_f32(yi);
- yi += 4;
- YY[2] = vld1q_f32(yi);
-
- XX[0] = vld1q_f32(xi);
- xi += 4;
- XX[1] = vld1q_f32(xi);
- xi += 4;
-
- SUMM = vmlaq_lane_f32(SUMM, YY[0], vget_low_f32(XX[0]), 0);
- YEXT[0] = vextq_f32(YY[0], YY[1], 1);
- SUMM = vmlaq_lane_f32(SUMM, YEXT[0], vget_low_f32(XX[0]), 1);
- YEXT[1] = vextq_f32(YY[0], YY[1], 2);
- SUMM = vmlaq_lane_f32(SUMM, YEXT[1], vget_high_f32(XX[0]), 0);
- YEXT[2] = vextq_f32(YY[0], YY[1], 3);
- SUMM = vmlaq_lane_f32(SUMM, YEXT[2], vget_high_f32(XX[0]), 1);
-
- SUMM = vmlaq_lane_f32(SUMM, YY[1], vget_low_f32(XX[1]), 0);
- YEXT[0] = vextq_f32(YY[1], YY[2], 1);
- SUMM = vmlaq_lane_f32(SUMM, YEXT[0], vget_low_f32(XX[1]), 1);
- YEXT[1] = vextq_f32(YY[1], YY[2], 2);
- SUMM = vmlaq_lane_f32(SUMM, YEXT[1], vget_high_f32(XX[1]), 0);
- YEXT[2] = vextq_f32(YY[1], YY[2], 3);
- SUMM = vmlaq_lane_f32(SUMM, YEXT[2], vget_high_f32(XX[1]), 1);
-
- YY[0] = YY[2];
- len -= 8;
- }
-
- /* Consume 4 elements in x vector and 8 elements in y
- * vector. However, the 8'th element in y never really gets
- * touched in this loop. So, if len == 4, then we only
- * must access y[0] to y[6]. y[7] must not be accessed
- * hence make sure len>4 and not len>=4
- */
- if (len > 4) {
- yi += 4;
- YY[1] = vld1q_f32(yi);
-
- XX[0] = vld1q_f32(xi);
- xi += 4;
-
- SUMM = vmlaq_lane_f32(SUMM, YY[0], vget_low_f32(XX[0]), 0);
- YEXT[0] = vextq_f32(YY[0], YY[1], 1);
- SUMM = vmlaq_lane_f32(SUMM, YEXT[0], vget_low_f32(XX[0]), 1);
- YEXT[1] = vextq_f32(YY[0], YY[1], 2);
- SUMM = vmlaq_lane_f32(SUMM, YEXT[1], vget_high_f32(XX[0]), 0);
- YEXT[2] = vextq_f32(YY[0], YY[1], 3);
- SUMM = vmlaq_lane_f32(SUMM, YEXT[2], vget_high_f32(XX[0]), 1);
-
- YY[0] = YY[1];
- len -= 4;
- }
-
- while (--len > 0) {
- XX_2 = vld1_dup_f32(xi++);
- SUMM = vmlaq_lane_f32(SUMM, YY[0], XX_2, 0);
- YY[0]= vld1q_f32(++yi);
- }
-
- XX_2 = vld1_dup_f32(xi);
- SUMM = vmlaq_lane_f32(SUMM, YY[0], XX_2, 0);
-
- vst1q_f32(sum, SUMM);
-}
-
-/*
- * Function: xcorr_kernel_neon_float_process1
- * ---------------------------------
- * Computes single correlation values and stores in *sum
- */
-static void xcorr_kernel_neon_float_process1(const float32_t *x,
- const float32_t *y, float32_t *sum, int len) {
- float32x4_t XX[4];
- float32x4_t YY[4];
- float32x2_t XX_2;
- float32x2_t YY_2;
- float32x4_t SUMM;
- float32x2_t SUMM_2[2];
- const float32_t *xi = x;
- const float32_t *yi = y;
-
- SUMM = vdupq_n_f32(0);
-
- /* Work on 16 values per iteration */
- while (len >= 16) {
- XX[0] = vld1q_f32(xi);
- xi += 4;
- XX[1] = vld1q_f32(xi);
- xi += 4;
- XX[2] = vld1q_f32(xi);
- xi += 4;
- XX[3] = vld1q_f32(xi);
- xi += 4;
-
- YY[0] = vld1q_f32(yi);
- yi += 4;
- YY[1] = vld1q_f32(yi);
- yi += 4;
- YY[2] = vld1q_f32(yi);
- yi += 4;
- YY[3] = vld1q_f32(yi);
- yi += 4;
-
- SUMM = vmlaq_f32(SUMM, YY[0], XX[0]);
- SUMM = vmlaq_f32(SUMM, YY[1], XX[1]);
- SUMM = vmlaq_f32(SUMM, YY[2], XX[2]);
- SUMM = vmlaq_f32(SUMM, YY[3], XX[3]);
- len -= 16;
- }
-
- /* Work on 8 values */
- if (len >= 8) {
- XX[0] = vld1q_f32(xi);
- xi += 4;
- XX[1] = vld1q_f32(xi);
- xi += 4;
-
- YY[0] = vld1q_f32(yi);
- yi += 4;
- YY[1] = vld1q_f32(yi);
- yi += 4;
-
- SUMM = vmlaq_f32(SUMM, YY[0], XX[0]);
- SUMM = vmlaq_f32(SUMM, YY[1], XX[1]);
- len -= 8;
- }
-
- /* Work on 4 values */
- if (len >= 4) {
- XX[0] = vld1q_f32(xi);
- xi += 4;
- YY[0] = vld1q_f32(yi);
- yi += 4;
- SUMM = vmlaq_f32(SUMM, YY[0], XX[0]);
- len -= 4;
- }
-
- /* Start accumulating results */
- SUMM_2[0] = vget_low_f32(SUMM);
- if (len >= 2) {
- /* While at it, consume 2 more values if available */
- XX_2 = vld1_f32(xi);
- xi += 2;
- YY_2 = vld1_f32(yi);
- yi += 2;
- SUMM_2[0] = vmla_f32(SUMM_2[0], YY_2, XX_2);
- len -= 2;
- }
- SUMM_2[1] = vget_high_f32(SUMM);
- SUMM_2[0] = vadd_f32(SUMM_2[0], SUMM_2[1]);
- SUMM_2[0] = vpadd_f32(SUMM_2[0], SUMM_2[0]);
- /* Ok, now we have result accumulated in SUMM_2[0].0 */
-
- if (len > 0) {
- /* Case when you have one value left */
- XX_2 = vld1_dup_f32(xi);
- YY_2 = vld1_dup_f32(yi);
- SUMM_2[0] = vmla_f32(SUMM_2[0], XX_2, YY_2);
- }
-
- vst1_lane_f32(sum, SUMM_2[0], 0);
-}
-
-void celt_pitch_xcorr_float_neon(const opus_val16 *_x, const opus_val16 *_y,
- opus_val32 *xcorr, int len, int max_pitch) {
- int i;
- celt_assert(max_pitch > 0);
- celt_assert((((unsigned char *)_x-(unsigned char *)NULL)&3)==0);
-
- for (i = 0; i < (max_pitch-3); i += 4) {
- xcorr_kernel_neon_float((const float32_t *)_x, (const float32_t *)_y+i,
- (float32_t *)xcorr+i, len);
- }
-
- /* In case max_pitch isn't multiple of 4
- * compute single correlation value per iteration
- */
- for (; i < max_pitch; i++) {
- xcorr_kernel_neon_float_process1((const float32_t *)_x,
- (const float32_t *)_y+i, (float32_t *)xcorr+i, len);
- }
-}
-#endif
diff --git a/drivers/opus/celt/arm/celt_pitch_xcorr_arm-gnu.S b/drivers/opus/celt/arm/celt_pitch_xcorr_arm-gnu.S
deleted file mode 100644
index 5b2ee55a10..0000000000
--- a/drivers/opus/celt/arm/celt_pitch_xcorr_arm-gnu.S
+++ /dev/null
@@ -1,551 +0,0 @@
- .syntax unified
-@ Copyright (c) 2007-2008 CSIRO
-@ Copyright (c) 2007-2009 Xiph.Org Foundation
-@ Copyright (c) 2013 Parrot
-@ Written by Aurélien Zanelli
-@
-@ 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.
-@
-@ 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.
-
- .text; .p2align 2; .arch armv7-a
- .fpu neon
- .object_arch armv4t
-
- .include "celt/arm/armopts-gnu.S"
-
- .if OPUS_ARM_MAY_HAVE_EDSP
- .global celt_pitch_xcorr_edsp
- .endif
-
- .if OPUS_ARM_MAY_HAVE_NEON
- .global celt_pitch_xcorr_neon
- .endif
-
- .if OPUS_ARM_MAY_HAVE_NEON
-
-@ Compute sum[k]=sum(x[j]*y[j+k],j=0...len-1), k=0...3
-; xcorr_kernel_neon: @ PROC
-xcorr_kernel_neon_start:
- @ input:
- @ r3 = int len
- @ r4 = opus_val16 *x
- @ r5 = opus_val16 *y
- @ q0 = opus_val32 sum[4]
- @ output:
- @ q0 = opus_val32 sum[4]
- @ preserved: r0-r3, r6-r11, d2, q4-q7, q9-q15
- @ internal usage:
- @ r12 = int j
- @ d3 = y_3|y_2|y_1|y_0
- @ q2 = y_B|y_A|y_9|y_8|y_7|y_6|y_5|y_4
- @ q3 = x_7|x_6|x_5|x_4|x_3|x_2|x_1|x_0
- @ q8 = scratch
- @
- @ Load y[0...3]
- @ This requires len>0 to always be valid (which we assert in the C code).
- VLD1.16 {d5}, [r5]!
- SUBS r12, r3, #8
- BLE xcorr_kernel_neon_process4
-@ Process 8 samples at a time.
-@ This loop loads one y value more than we actually need. Therefore we have to
-@ stop as soon as there are 8 or fewer samples left (instead of 7), to avoid
-@ reading past the end of the array.
-xcorr_kernel_neon_process8:
- @ This loop has 19 total instructions (10 cycles to issue, minimum), with
- @ - 2 cycles of ARM insrtuctions,
- @ - 10 cycles of load/store/byte permute instructions, and
- @ - 9 cycles of data processing instructions.
- @ On a Cortex A8, we dual-issue the maximum amount (9 cycles) between the
- @ latter two categories, meaning the whole loop should run in 10 cycles per
- @ iteration, barring cache misses.
- @
- @ Load x[0...7]
- VLD1.16 {d6, d7}, [r4]!
- @ Unlike VMOV, VAND is a data processsing instruction (and doesn't get
- @ assembled to VMOV, like VORR would), so it dual-issues with the prior VLD1.
- VAND d3, d5, d5
- SUBS r12, r12, #8
- @ Load y[4...11]
- VLD1.16 {d4, d5}, [r5]!
- VMLAL.S16 q0, d3, d6[0]
- VEXT.16 d16, d3, d4, #1
- VMLAL.S16 q0, d4, d7[0]
- VEXT.16 d17, d4, d5, #1
- VMLAL.S16 q0, d16, d6[1]
- VEXT.16 d16, d3, d4, #2
- VMLAL.S16 q0, d17, d7[1]
- VEXT.16 d17, d4, d5, #2
- VMLAL.S16 q0, d16, d6[2]
- VEXT.16 d16, d3, d4, #3
- VMLAL.S16 q0, d17, d7[2]
- VEXT.16 d17, d4, d5, #3
- VMLAL.S16 q0, d16, d6[3]
- VMLAL.S16 q0, d17, d7[3]
- BGT xcorr_kernel_neon_process8
-@ Process 4 samples here if we have > 4 left (still reading one extra y value).
-xcorr_kernel_neon_process4:
- ADDS r12, r12, #4
- BLE xcorr_kernel_neon_process2
- @ Load x[0...3]
- VLD1.16 d6, [r4]!
- @ Use VAND since it's a data processing instruction again.
- VAND d4, d5, d5
- SUB r12, r12, #4
- @ Load y[4...7]
- VLD1.16 d5, [r5]!
- VMLAL.S16 q0, d4, d6[0]
- VEXT.16 d16, d4, d5, #1
- VMLAL.S16 q0, d16, d6[1]
- VEXT.16 d16, d4, d5, #2
- VMLAL.S16 q0, d16, d6[2]
- VEXT.16 d16, d4, d5, #3
- VMLAL.S16 q0, d16, d6[3]
-@ Process 2 samples here if we have > 2 left (still reading one extra y value).
-xcorr_kernel_neon_process2:
- ADDS r12, r12, #2
- BLE xcorr_kernel_neon_process1
- @ Load x[0...1]
- VLD2.16 {d6[],d7[]}, [r4]!
- @ Use VAND since it's a data processing instruction again.
- VAND d4, d5, d5
- SUB r12, r12, #2
- @ Load y[4...5]
- VLD1.32 {d5[]}, [r5]!
- VMLAL.S16 q0, d4, d6
- VEXT.16 d16, d4, d5, #1
- @ Replace bottom copy of {y5,y4} in d5 with {y3,y2} from d4, using VSRI
- @ instead of VEXT, since it's a data-processing instruction.
- VSRI.64 d5, d4, #32
- VMLAL.S16 q0, d16, d7
-@ Process 1 sample using the extra y value we loaded above.
-xcorr_kernel_neon_process1:
- @ Load next *x
- VLD1.16 {d6[]}, [r4]!
- ADDS r12, r12, #1
- @ y[0...3] are left in d5 from prior iteration(s) (if any)
- VMLAL.S16 q0, d5, d6
- MOVLE pc, lr
-@ Now process 1 last sample, not reading ahead.
- @ Load last *y
- VLD1.16 {d4[]}, [r5]!
- VSRI.64 d4, d5, #16
- @ Load last *x
- VLD1.16 {d6[]}, [r4]!
- VMLAL.S16 q0, d4, d6
- MOV pc, lr
- .size xcorr_kernel_neon, .-xcorr_kernel_neon @ ENDP
-
-@ opus_val32 celt_pitch_xcorr_neon(opus_val16 *_x, opus_val16 *_y,
-@ opus_val32 *xcorr, int len, int max_pitch)
-; celt_pitch_xcorr_neon: @ PROC
- @ input:
- @ r0 = opus_val16 *_x
- @ r1 = opus_val16 *_y
- @ r2 = opus_val32 *xcorr
- @ r3 = int len
- @ output:
- @ r0 = int maxcorr
- @ internal usage:
- @ r4 = opus_val16 *x (for xcorr_kernel_neon())
- @ r5 = opus_val16 *y (for xcorr_kernel_neon())
- @ r6 = int max_pitch
- @ r12 = int j
- @ q15 = int maxcorr[4] (q15 is not used by xcorr_kernel_neon())
- STMFD sp!, {r4-r6, lr}
- LDR r6, [sp, #16]
- VMOV.S32 q15, #1
- @ if (max_pitch < 4) goto celt_pitch_xcorr_neon_process4_done
- SUBS r6, r6, #4
- BLT celt_pitch_xcorr_neon_process4_done
-celt_pitch_xcorr_neon_process4:
- @ xcorr_kernel_neon parameters:
- @ r3 = len, r4 = _x, r5 = _y, q0 = {0, 0, 0, 0}
- MOV r4, r0
- MOV r5, r1
- VEOR q0, q0, q0
- @ xcorr_kernel_neon only modifies r4, r5, r12, and q0...q3.
- @ So we don't save/restore any other registers.
- BL xcorr_kernel_neon_start
- SUBS r6, r6, #4
- VST1.32 {q0}, [r2]!
- @ _y += 4
- ADD r1, r1, #8
- VMAX.S32 q15, q15, q0
- @ if (max_pitch < 4) goto celt_pitch_xcorr_neon_process4_done
- BGE celt_pitch_xcorr_neon_process4
-@ We have less than 4 sums left to compute.
-celt_pitch_xcorr_neon_process4_done:
- ADDS r6, r6, #4
- @ Reduce maxcorr to a single value
- VMAX.S32 d30, d30, d31
- VPMAX.S32 d30, d30, d30
- @ if (max_pitch <= 0) goto celt_pitch_xcorr_neon_done
- BLE celt_pitch_xcorr_neon_done
-@ Now compute each remaining sum one at a time.
-celt_pitch_xcorr_neon_process_remaining:
- MOV r4, r0
- MOV r5, r1
- VMOV.I32 q0, #0
- SUBS r12, r3, #8
- BLT celt_pitch_xcorr_neon_process_remaining4
-@ Sum terms 8 at a time.
-celt_pitch_xcorr_neon_process_remaining_loop8:
- @ Load x[0...7]
- VLD1.16 {q1}, [r4]!
- @ Load y[0...7]
- VLD1.16 {q2}, [r5]!
- SUBS r12, r12, #8
- VMLAL.S16 q0, d4, d2
- VMLAL.S16 q0, d5, d3
- BGE celt_pitch_xcorr_neon_process_remaining_loop8
-@ Sum terms 4 at a time.
-celt_pitch_xcorr_neon_process_remaining4:
- ADDS r12, r12, #4
- BLT celt_pitch_xcorr_neon_process_remaining4_done
- @ Load x[0...3]
- VLD1.16 {d2}, [r4]!
- @ Load y[0...3]
- VLD1.16 {d3}, [r5]!
- SUB r12, r12, #4
- VMLAL.S16 q0, d3, d2
-celt_pitch_xcorr_neon_process_remaining4_done:
- @ Reduce the sum to a single value.
- VADD.S32 d0, d0, d1
- VPADDL.S32 d0, d0
- ADDS r12, r12, #4
- BLE celt_pitch_xcorr_neon_process_remaining_loop_done
-@ Sum terms 1 at a time.
-celt_pitch_xcorr_neon_process_remaining_loop1:
- VLD1.16 {d2[]}, [r4]!
- VLD1.16 {d3[]}, [r5]!
- SUBS r12, r12, #1
- VMLAL.S16 q0, d2, d3
- BGT celt_pitch_xcorr_neon_process_remaining_loop1
-celt_pitch_xcorr_neon_process_remaining_loop_done:
- VST1.32 {d0[0]}, [r2]!
- VMAX.S32 d30, d30, d0
- SUBS r6, r6, #1
- @ _y++
- ADD r1, r1, #2
- @ if (--max_pitch > 0) goto celt_pitch_xcorr_neon_process_remaining
- BGT celt_pitch_xcorr_neon_process_remaining
-celt_pitch_xcorr_neon_done:
- VMOV.32 r0, d30[0]
- LDMFD sp!, {r4-r6, pc}
- .size celt_pitch_xcorr_neon, .-celt_pitch_xcorr_neon @ ENDP
-
- .endif
-
- .if OPUS_ARM_MAY_HAVE_EDSP
-
-@ This will get used on ARMv7 devices without NEON, so it has been optimized
-@ to take advantage of dual-issuing where possible.
-; xcorr_kernel_edsp: @ PROC
-xcorr_kernel_edsp_start:
- @ input:
- @ r3 = int len
- @ r4 = opus_val16 *_x (must be 32-bit aligned)
- @ r5 = opus_val16 *_y (must be 32-bit aligned)
- @ r6...r9 = opus_val32 sum[4]
- @ output:
- @ r6...r9 = opus_val32 sum[4]
- @ preserved: r0-r5
- @ internal usage
- @ r2 = int j
- @ r12,r14 = opus_val16 x[4]
- @ r10,r11 = opus_val16 y[4]
- STMFD sp!, {r2,r4,r5,lr}
- LDR r10, [r5], #4 @ Load y[0...1]
- SUBS r2, r3, #4 @ j = len-4
- LDR r11, [r5], #4 @ Load y[2...3]
- BLE xcorr_kernel_edsp_process4_done
- LDR r12, [r4], #4 @ Load x[0...1]
- @ Stall
-xcorr_kernel_edsp_process4:
- @ The multiplies must issue from pipeline 0, and can't dual-issue with each
- @ other. Every other instruction here dual-issues with a multiply, and is
- @ thus "free". There should be no stalls in the body of the loop.
- SMLABB r6, r12, r10, r6 @ sum[0] = MAC16_16(sum[0],x_0,y_0)
- LDR r14, [r4], #4 @ Load x[2...3]
- SMLABT r7, r12, r10, r7 @ sum[1] = MAC16_16(sum[1],x_0,y_1)
- SUBS r2, r2, #4 @ j-=4
- SMLABB r8, r12, r11, r8 @ sum[2] = MAC16_16(sum[2],x_0,y_2)
- SMLABT r9, r12, r11, r9 @ sum[3] = MAC16_16(sum[3],x_0,y_3)
- SMLATT r6, r12, r10, r6 @ sum[0] = MAC16_16(sum[0],x_1,y_1)
- LDR r10, [r5], #4 @ Load y[4...5]
- SMLATB r7, r12, r11, r7 @ sum[1] = MAC16_16(sum[1],x_1,y_2)
- SMLATT r8, r12, r11, r8 @ sum[2] = MAC16_16(sum[2],x_1,y_3)
- SMLATB r9, r12, r10, r9 @ sum[3] = MAC16_16(sum[3],x_1,y_4)
- LDRGT r12, [r4], #4 @ Load x[0...1]
- SMLABB r6, r14, r11, r6 @ sum[0] = MAC16_16(sum[0],x_2,y_2)
- SMLABT r7, r14, r11, r7 @ sum[1] = MAC16_16(sum[1],x_2,y_3)
- SMLABB r8, r14, r10, r8 @ sum[2] = MAC16_16(sum[2],x_2,y_4)
- SMLABT r9, r14, r10, r9 @ sum[3] = MAC16_16(sum[3],x_2,y_5)
- SMLATT r6, r14, r11, r6 @ sum[0] = MAC16_16(sum[0],x_3,y_3)
- LDR r11, [r5], #4 @ Load y[6...7]
- SMLATB r7, r14, r10, r7 @ sum[1] = MAC16_16(sum[1],x_3,y_4)
- SMLATT r8, r14, r10, r8 @ sum[2] = MAC16_16(sum[2],x_3,y_5)
- SMLATB r9, r14, r11, r9 @ sum[3] = MAC16_16(sum[3],x_3,y_6)
- BGT xcorr_kernel_edsp_process4
-xcorr_kernel_edsp_process4_done:
- ADDS r2, r2, #4
- BLE xcorr_kernel_edsp_done
- LDRH r12, [r4], #2 @ r12 = *x++
- SUBS r2, r2, #1 @ j--
- @ Stall
- SMLABB r6, r12, r10, r6 @ sum[0] = MAC16_16(sum[0],x,y_0)
- LDRHGT r14, [r4], #2 @ r14 = *x++
- SMLABT r7, r12, r10, r7 @ sum[1] = MAC16_16(sum[1],x,y_1)
- SMLABB r8, r12, r11, r8 @ sum[2] = MAC16_16(sum[2],x,y_2)
- SMLABT r9, r12, r11, r9 @ sum[3] = MAC16_16(sum[3],x,y_3)
- BLE xcorr_kernel_edsp_done
- SMLABT r6, r14, r10, r6 @ sum[0] = MAC16_16(sum[0],x,y_1)
- SUBS r2, r2, #1 @ j--
- SMLABB r7, r14, r11, r7 @ sum[1] = MAC16_16(sum[1],x,y_2)
- LDRH r10, [r5], #2 @ r10 = y_4 = *y++
- SMLABT r8, r14, r11, r8 @ sum[2] = MAC16_16(sum[2],x,y_3)
- LDRHGT r12, [r4], #2 @ r12 = *x++
- SMLABB r9, r14, r10, r9 @ sum[3] = MAC16_16(sum[3],x,y_4)
- BLE xcorr_kernel_edsp_done
- SMLABB r6, r12, r11, r6 @ sum[0] = MAC16_16(sum[0],tmp,y_2)
- CMP r2, #1 @ j--
- SMLABT r7, r12, r11, r7 @ sum[1] = MAC16_16(sum[1],tmp,y_3)
- LDRH r2, [r5], #2 @ r2 = y_5 = *y++
- SMLABB r8, r12, r10, r8 @ sum[2] = MAC16_16(sum[2],tmp,y_4)
- LDRHGT r14, [r4] @ r14 = *x
- SMLABB r9, r12, r2, r9 @ sum[3] = MAC16_16(sum[3],tmp,y_5)
- BLE xcorr_kernel_edsp_done
- SMLABT r6, r14, r11, r6 @ sum[0] = MAC16_16(sum[0],tmp,y_3)
- LDRH r11, [r5] @ r11 = y_6 = *y
- SMLABB r7, r14, r10, r7 @ sum[1] = MAC16_16(sum[1],tmp,y_4)
- SMLABB r8, r14, r2, r8 @ sum[2] = MAC16_16(sum[2],tmp,y_5)
- SMLABB r9, r14, r11, r9 @ sum[3] = MAC16_16(sum[3],tmp,y_6)
-xcorr_kernel_edsp_done:
- LDMFD sp!, {r2,r4,r5,pc}
- .size xcorr_kernel_edsp, .-xcorr_kernel_edsp @ ENDP
-
-; celt_pitch_xcorr_edsp: @ PROC
- @ input:
- @ r0 = opus_val16 *_x (must be 32-bit aligned)
- @ r1 = opus_val16 *_y (only needs to be 16-bit aligned)
- @ r2 = opus_val32 *xcorr
- @ r3 = int len
- @ output:
- @ r0 = maxcorr
- @ internal usage
- @ r4 = opus_val16 *x
- @ r5 = opus_val16 *y
- @ r6 = opus_val32 sum0
- @ r7 = opus_val32 sum1
- @ r8 = opus_val32 sum2
- @ r9 = opus_val32 sum3
- @ r1 = int max_pitch
- @ r12 = int j
- STMFD sp!, {r4-r11, lr}
- MOV r5, r1
- LDR r1, [sp, #36]
- MOV r4, r0
- TST r5, #3
- @ maxcorr = 1
- MOV r0, #1
- BEQ celt_pitch_xcorr_edsp_process1u_done
-@ Compute one sum at the start to make y 32-bit aligned.
- SUBS r12, r3, #4
- @ r14 = sum = 0
- MOV r14, #0
- LDRH r8, [r5], #2
- BLE celt_pitch_xcorr_edsp_process1u_loop4_done
- LDR r6, [r4], #4
- MOV r8, r8, LSL #16
-celt_pitch_xcorr_edsp_process1u_loop4:
- LDR r9, [r5], #4
- SMLABT r14, r6, r8, r14 @ sum = MAC16_16(sum, x_0, y_0)
- LDR r7, [r4], #4
- SMLATB r14, r6, r9, r14 @ sum = MAC16_16(sum, x_1, y_1)
- LDR r8, [r5], #4
- SMLABT r14, r7, r9, r14 @ sum = MAC16_16(sum, x_2, y_2)
- SUBS r12, r12, #4 @ j-=4
- SMLATB r14, r7, r8, r14 @ sum = MAC16_16(sum, x_3, y_3)
- LDRGT r6, [r4], #4
- BGT celt_pitch_xcorr_edsp_process1u_loop4
- MOV r8, r8, LSR #16
-celt_pitch_xcorr_edsp_process1u_loop4_done:
- ADDS r12, r12, #4
-celt_pitch_xcorr_edsp_process1u_loop1:
- LDRHGE r6, [r4], #2
- @ Stall
- SMLABBGE r14, r6, r8, r14 @ sum = MAC16_16(sum, *x, *y)
- SUBSGE r12, r12, #1
- LDRHGT r8, [r5], #2
- BGT celt_pitch_xcorr_edsp_process1u_loop1
- @ Restore _x
- SUB r4, r4, r3, LSL #1
- @ Restore and advance _y
- SUB r5, r5, r3, LSL #1
- @ maxcorr = max(maxcorr, sum)
- CMP r0, r14
- ADD r5, r5, #2
- MOVLT r0, r14
- SUBS r1, r1, #1
- @ xcorr[i] = sum
- STR r14, [r2], #4
- BLE celt_pitch_xcorr_edsp_done
-celt_pitch_xcorr_edsp_process1u_done:
- @ if (max_pitch < 4) goto celt_pitch_xcorr_edsp_process2
- SUBS r1, r1, #4
- BLT celt_pitch_xcorr_edsp_process2
-celt_pitch_xcorr_edsp_process4:
- @ xcorr_kernel_edsp parameters:
- @ r3 = len, r4 = _x, r5 = _y, r6...r9 = sum[4] = {0, 0, 0, 0}
- MOV r6, #0
- MOV r7, #0
- MOV r8, #0
- MOV r9, #0
- BL xcorr_kernel_edsp_start @ xcorr_kernel_edsp(_x, _y+i, xcorr+i, len)
- @ maxcorr = max(maxcorr, sum0, sum1, sum2, sum3)
- CMP r0, r6
- @ _y+=4
- ADD r5, r5, #8
- MOVLT r0, r6
- CMP r0, r7
- MOVLT r0, r7
- CMP r0, r8
- MOVLT r0, r8
- CMP r0, r9
- MOVLT r0, r9
- STMIA r2!, {r6-r9}
- SUBS r1, r1, #4
- BGE celt_pitch_xcorr_edsp_process4
-celt_pitch_xcorr_edsp_process2:
- ADDS r1, r1, #2
- BLT celt_pitch_xcorr_edsp_process1a
- SUBS r12, r3, #4
- @ {r10, r11} = {sum0, sum1} = {0, 0}
- MOV r10, #0
- MOV r11, #0
- LDR r8, [r5], #4
- BLE celt_pitch_xcorr_edsp_process2_loop_done
- LDR r6, [r4], #4
- LDR r9, [r5], #4
-celt_pitch_xcorr_edsp_process2_loop4:
- SMLABB r10, r6, r8, r10 @ sum0 = MAC16_16(sum0, x_0, y_0)
- LDR r7, [r4], #4
- SMLABT r11, r6, r8, r11 @ sum1 = MAC16_16(sum1, x_0, y_1)
- SUBS r12, r12, #4 @ j-=4
- SMLATT r10, r6, r8, r10 @ sum0 = MAC16_16(sum0, x_1, y_1)
- LDR r8, [r5], #4
- SMLATB r11, r6, r9, r11 @ sum1 = MAC16_16(sum1, x_1, y_2)
- LDRGT r6, [r4], #4
- SMLABB r10, r7, r9, r10 @ sum0 = MAC16_16(sum0, x_2, y_2)
- SMLABT r11, r7, r9, r11 @ sum1 = MAC16_16(sum1, x_2, y_3)
- SMLATT r10, r7, r9, r10 @ sum0 = MAC16_16(sum0, x_3, y_3)
- LDRGT r9, [r5], #4
- SMLATB r11, r7, r8, r11 @ sum1 = MAC16_16(sum1, x_3, y_4)
- BGT celt_pitch_xcorr_edsp_process2_loop4
-celt_pitch_xcorr_edsp_process2_loop_done:
- ADDS r12, r12, #2
- BLE celt_pitch_xcorr_edsp_process2_1
- LDR r6, [r4], #4
- @ Stall
- SMLABB r10, r6, r8, r10 @ sum0 = MAC16_16(sum0, x_0, y_0)
- LDR r9, [r5], #4
- SMLABT r11, r6, r8, r11 @ sum1 = MAC16_16(sum1, x_0, y_1)
- SUB r12, r12, #2
- SMLATT r10, r6, r8, r10 @ sum0 = MAC16_16(sum0, x_1, y_1)
- MOV r8, r9
- SMLATB r11, r6, r9, r11 @ sum1 = MAC16_16(sum1, x_1, y_2)
-celt_pitch_xcorr_edsp_process2_1:
- LDRH r6, [r4], #2
- ADDS r12, r12, #1
- @ Stall
- SMLABB r10, r6, r8, r10 @ sum0 = MAC16_16(sum0, x_0, y_0)
- LDRHGT r7, [r4], #2
- SMLABT r11, r6, r8, r11 @ sum1 = MAC16_16(sum1, x_0, y_1)
- BLE celt_pitch_xcorr_edsp_process2_done
- LDRH r9, [r5], #2
- SMLABT r10, r7, r8, r10 @ sum0 = MAC16_16(sum0, x_0, y_1)
- SMLABB r11, r7, r9, r11 @ sum1 = MAC16_16(sum1, x_0, y_2)
-celt_pitch_xcorr_edsp_process2_done:
- @ Restore _x
- SUB r4, r4, r3, LSL #1
- @ Restore and advance _y
- SUB r5, r5, r3, LSL #1
- @ maxcorr = max(maxcorr, sum0)
- CMP r0, r10
- ADD r5, r5, #2
- MOVLT r0, r10
- SUB r1, r1, #2
- @ maxcorr = max(maxcorr, sum1)
- CMP r0, r11
- @ xcorr[i] = sum
- STR r10, [r2], #4
- MOVLT r0, r11
- STR r11, [r2], #4
-celt_pitch_xcorr_edsp_process1a:
- ADDS r1, r1, #1
- BLT celt_pitch_xcorr_edsp_done
- SUBS r12, r3, #4
- @ r14 = sum = 0
- MOV r14, #0
- BLT celt_pitch_xcorr_edsp_process1a_loop_done
- LDR r6, [r4], #4
- LDR r8, [r5], #4
- LDR r7, [r4], #4
- LDR r9, [r5], #4
-celt_pitch_xcorr_edsp_process1a_loop4:
- SMLABB r14, r6, r8, r14 @ sum = MAC16_16(sum, x_0, y_0)
- SUBS r12, r12, #4 @ j-=4
- SMLATT r14, r6, r8, r14 @ sum = MAC16_16(sum, x_1, y_1)
- LDRGE r6, [r4], #4
- SMLABB r14, r7, r9, r14 @ sum = MAC16_16(sum, x_2, y_2)
- LDRGE r8, [r5], #4
- SMLATT r14, r7, r9, r14 @ sum = MAC16_16(sum, x_3, y_3)
- LDRGE r7, [r4], #4
- LDRGE r9, [r5], #4
- BGE celt_pitch_xcorr_edsp_process1a_loop4
-celt_pitch_xcorr_edsp_process1a_loop_done:
- ADDS r12, r12, #2
- LDRGE r6, [r4], #4
- LDRGE r8, [r5], #4
- @ Stall
- SMLABBGE r14, r6, r8, r14 @ sum = MAC16_16(sum, x_0, y_0)
- SUBGE r12, r12, #2
- SMLATTGE r14, r6, r8, r14 @ sum = MAC16_16(sum, x_1, y_1)
- ADDS r12, r12, #1
- LDRHGE r6, [r4], #2
- LDRHGE r8, [r5], #2
- @ Stall
- SMLABBGE r14, r6, r8, r14 @ sum = MAC16_16(sum, *x, *y)
- @ maxcorr = max(maxcorr, sum)
- CMP r0, r14
- @ xcorr[i] = sum
- STR r14, [r2], #4
- MOVLT r0, r14
-celt_pitch_xcorr_edsp_done:
- LDMFD sp!, {r4-r11, pc}
- .size celt_pitch_xcorr_edsp, .-celt_pitch_xcorr_edsp @ ENDP
-
- .endif
-
-@ END:
- .section .note.GNU-stack,"",%progbits
diff --git a/drivers/opus/celt/arm/celt_pitch_xcorr_arm.s b/drivers/opus/celt/arm/celt_pitch_xcorr_arm.s
deleted file mode 100644
index f96e0a88bb..0000000000
--- a/drivers/opus/celt/arm/celt_pitch_xcorr_arm.s
+++ /dev/null
@@ -1,547 +0,0 @@
-; Copyright (c) 2007-2008 CSIRO
-; Copyright (c) 2007-2009 Xiph.Org Foundation
-; Copyright (c) 2013 Parrot
-; Written by Aurélien Zanelli
-;
-; 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.
-;
-; 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.
-
- AREA |.text|, CODE, READONLY
-
- GET celt/arm/armopts.s
-
-IF OPUS_ARM_MAY_HAVE_EDSP
- EXPORT celt_pitch_xcorr_edsp
-ENDIF
-
-IF OPUS_ARM_MAY_HAVE_NEON
- EXPORT celt_pitch_xcorr_neon
-ENDIF
-
-IF OPUS_ARM_MAY_HAVE_NEON
-
-; Compute sum[k]=sum(x[j]*y[j+k],j=0...len-1), k=0...3
-xcorr_kernel_neon PROC
-xcorr_kernel_neon_start
- ; input:
- ; r3 = int len
- ; r4 = opus_val16 *x
- ; r5 = opus_val16 *y
- ; q0 = opus_val32 sum[4]
- ; output:
- ; q0 = opus_val32 sum[4]
- ; preserved: r0-r3, r6-r11, d2, q4-q7, q9-q15
- ; internal usage:
- ; r12 = int j
- ; d3 = y_3|y_2|y_1|y_0
- ; q2 = y_B|y_A|y_9|y_8|y_7|y_6|y_5|y_4
- ; q3 = x_7|x_6|x_5|x_4|x_3|x_2|x_1|x_0
- ; q8 = scratch
- ;
- ; Load y[0...3]
- ; This requires len>0 to always be valid (which we assert in the C code).
- VLD1.16 {d5}, [r5]!
- SUBS r12, r3, #8
- BLE xcorr_kernel_neon_process4
-; Process 8 samples at a time.
-; This loop loads one y value more than we actually need. Therefore we have to
-; stop as soon as there are 8 or fewer samples left (instead of 7), to avoid
-; reading past the end of the array.
-xcorr_kernel_neon_process8
- ; This loop has 19 total instructions (10 cycles to issue, minimum), with
- ; - 2 cycles of ARM insrtuctions,
- ; - 10 cycles of load/store/byte permute instructions, and
- ; - 9 cycles of data processing instructions.
- ; On a Cortex A8, we dual-issue the maximum amount (9 cycles) between the
- ; latter two categories, meaning the whole loop should run in 10 cycles per
- ; iteration, barring cache misses.
- ;
- ; Load x[0...7]
- VLD1.16 {d6, d7}, [r4]!
- ; Unlike VMOV, VAND is a data processsing instruction (and doesn't get
- ; assembled to VMOV, like VORR would), so it dual-issues with the prior VLD1.
- VAND d3, d5, d5
- SUBS r12, r12, #8
- ; Load y[4...11]
- VLD1.16 {d4, d5}, [r5]!
- VMLAL.S16 q0, d3, d6[0]
- VEXT.16 d16, d3, d4, #1
- VMLAL.S16 q0, d4, d7[0]
- VEXT.16 d17, d4, d5, #1
- VMLAL.S16 q0, d16, d6[1]
- VEXT.16 d16, d3, d4, #2
- VMLAL.S16 q0, d17, d7[1]
- VEXT.16 d17, d4, d5, #2
- VMLAL.S16 q0, d16, d6[2]
- VEXT.16 d16, d3, d4, #3
- VMLAL.S16 q0, d17, d7[2]
- VEXT.16 d17, d4, d5, #3
- VMLAL.S16 q0, d16, d6[3]
- VMLAL.S16 q0, d17, d7[3]
- BGT xcorr_kernel_neon_process8
-; Process 4 samples here if we have > 4 left (still reading one extra y value).
-xcorr_kernel_neon_process4
- ADDS r12, r12, #4
- BLE xcorr_kernel_neon_process2
- ; Load x[0...3]
- VLD1.16 d6, [r4]!
- ; Use VAND since it's a data processing instruction again.
- VAND d4, d5, d5
- SUB r12, r12, #4
- ; Load y[4...7]
- VLD1.16 d5, [r5]!
- VMLAL.S16 q0, d4, d6[0]
- VEXT.16 d16, d4, d5, #1
- VMLAL.S16 q0, d16, d6[1]
- VEXT.16 d16, d4, d5, #2
- VMLAL.S16 q0, d16, d6[2]
- VEXT.16 d16, d4, d5, #3
- VMLAL.S16 q0, d16, d6[3]
-; Process 2 samples here if we have > 2 left (still reading one extra y value).
-xcorr_kernel_neon_process2
- ADDS r12, r12, #2
- BLE xcorr_kernel_neon_process1
- ; Load x[0...1]
- VLD2.16 {d6[],d7[]}, [r4]!
- ; Use VAND since it's a data processing instruction again.
- VAND d4, d5, d5
- SUB r12, r12, #2
- ; Load y[4...5]
- VLD1.32 {d5[]}, [r5]!
- VMLAL.S16 q0, d4, d6
- VEXT.16 d16, d4, d5, #1
- ; Replace bottom copy of {y5,y4} in d5 with {y3,y2} from d4, using VSRI
- ; instead of VEXT, since it's a data-processing instruction.
- VSRI.64 d5, d4, #32
- VMLAL.S16 q0, d16, d7
-; Process 1 sample using the extra y value we loaded above.
-xcorr_kernel_neon_process1
- ; Load next *x
- VLD1.16 {d6[]}, [r4]!
- ADDS r12, r12, #1
- ; y[0...3] are left in d5 from prior iteration(s) (if any)
- VMLAL.S16 q0, d5, d6
- MOVLE pc, lr
-; Now process 1 last sample, not reading ahead.
- ; Load last *y
- VLD1.16 {d4[]}, [r5]!
- VSRI.64 d4, d5, #16
- ; Load last *x
- VLD1.16 {d6[]}, [r4]!
- VMLAL.S16 q0, d4, d6
- MOV pc, lr
- ENDP
-
-; opus_val32 celt_pitch_xcorr_neon(opus_val16 *_x, opus_val16 *_y,
-; opus_val32 *xcorr, int len, int max_pitch)
-celt_pitch_xcorr_neon PROC
- ; input:
- ; r0 = opus_val16 *_x
- ; r1 = opus_val16 *_y
- ; r2 = opus_val32 *xcorr
- ; r3 = int len
- ; output:
- ; r0 = int maxcorr
- ; internal usage:
- ; r4 = opus_val16 *x (for xcorr_kernel_neon())
- ; r5 = opus_val16 *y (for xcorr_kernel_neon())
- ; r6 = int max_pitch
- ; r12 = int j
- ; q15 = int maxcorr[4] (q15 is not used by xcorr_kernel_neon())
- STMFD sp!, {r4-r6, lr}
- LDR r6, [sp, #16]
- VMOV.S32 q15, #1
- ; if (max_pitch < 4) goto celt_pitch_xcorr_neon_process4_done
- SUBS r6, r6, #4
- BLT celt_pitch_xcorr_neon_process4_done
-celt_pitch_xcorr_neon_process4
- ; xcorr_kernel_neon parameters:
- ; r3 = len, r4 = _x, r5 = _y, q0 = {0, 0, 0, 0}
- MOV r4, r0
- MOV r5, r1
- VEOR q0, q0, q0
- ; xcorr_kernel_neon only modifies r4, r5, r12, and q0...q3.
- ; So we don't save/restore any other registers.
- BL xcorr_kernel_neon_start
- SUBS r6, r6, #4
- VST1.32 {q0}, [r2]!
- ; _y += 4
- ADD r1, r1, #8
- VMAX.S32 q15, q15, q0
- ; if (max_pitch < 4) goto celt_pitch_xcorr_neon_process4_done
- BGE celt_pitch_xcorr_neon_process4
-; We have less than 4 sums left to compute.
-celt_pitch_xcorr_neon_process4_done
- ADDS r6, r6, #4
- ; Reduce maxcorr to a single value
- VMAX.S32 d30, d30, d31
- VPMAX.S32 d30, d30, d30
- ; if (max_pitch <= 0) goto celt_pitch_xcorr_neon_done
- BLE celt_pitch_xcorr_neon_done
-; Now compute each remaining sum one at a time.
-celt_pitch_xcorr_neon_process_remaining
- MOV r4, r0
- MOV r5, r1
- VMOV.I32 q0, #0
- SUBS r12, r3, #8
- BLT celt_pitch_xcorr_neon_process_remaining4
-; Sum terms 8 at a time.
-celt_pitch_xcorr_neon_process_remaining_loop8
- ; Load x[0...7]
- VLD1.16 {q1}, [r4]!
- ; Load y[0...7]
- VLD1.16 {q2}, [r5]!
- SUBS r12, r12, #8
- VMLAL.S16 q0, d4, d2
- VMLAL.S16 q0, d5, d3
- BGE celt_pitch_xcorr_neon_process_remaining_loop8
-; Sum terms 4 at a time.
-celt_pitch_xcorr_neon_process_remaining4
- ADDS r12, r12, #4
- BLT celt_pitch_xcorr_neon_process_remaining4_done
- ; Load x[0...3]
- VLD1.16 {d2}, [r4]!
- ; Load y[0...3]
- VLD1.16 {d3}, [r5]!
- SUB r12, r12, #4
- VMLAL.S16 q0, d3, d2
-celt_pitch_xcorr_neon_process_remaining4_done
- ; Reduce the sum to a single value.
- VADD.S32 d0, d0, d1
- VPADDL.S32 d0, d0
- ADDS r12, r12, #4
- BLE celt_pitch_xcorr_neon_process_remaining_loop_done
-; Sum terms 1 at a time.
-celt_pitch_xcorr_neon_process_remaining_loop1
- VLD1.16 {d2[]}, [r4]!
- VLD1.16 {d3[]}, [r5]!
- SUBS r12, r12, #1
- VMLAL.S16 q0, d2, d3
- BGT celt_pitch_xcorr_neon_process_remaining_loop1
-celt_pitch_xcorr_neon_process_remaining_loop_done
- VST1.32 {d0[0]}, [r2]!
- VMAX.S32 d30, d30, d0
- SUBS r6, r6, #1
- ; _y++
- ADD r1, r1, #2
- ; if (--max_pitch > 0) goto celt_pitch_xcorr_neon_process_remaining
- BGT celt_pitch_xcorr_neon_process_remaining
-celt_pitch_xcorr_neon_done
- VMOV.32 r0, d30[0]
- LDMFD sp!, {r4-r6, pc}
- ENDP
-
-ENDIF
-
-IF OPUS_ARM_MAY_HAVE_EDSP
-
-; This will get used on ARMv7 devices without NEON, so it has been optimized
-; to take advantage of dual-issuing where possible.
-xcorr_kernel_edsp PROC
-xcorr_kernel_edsp_start
- ; input:
- ; r3 = int len
- ; r4 = opus_val16 *_x (must be 32-bit aligned)
- ; r5 = opus_val16 *_y (must be 32-bit aligned)
- ; r6...r9 = opus_val32 sum[4]
- ; output:
- ; r6...r9 = opus_val32 sum[4]
- ; preserved: r0-r5
- ; internal usage
- ; r2 = int j
- ; r12,r14 = opus_val16 x[4]
- ; r10,r11 = opus_val16 y[4]
- STMFD sp!, {r2,r4,r5,lr}
- LDR r10, [r5], #4 ; Load y[0...1]
- SUBS r2, r3, #4 ; j = len-4
- LDR r11, [r5], #4 ; Load y[2...3]
- BLE xcorr_kernel_edsp_process4_done
- LDR r12, [r4], #4 ; Load x[0...1]
- ; Stall
-xcorr_kernel_edsp_process4
- ; The multiplies must issue from pipeline 0, and can't dual-issue with each
- ; other. Every other instruction here dual-issues with a multiply, and is
- ; thus "free". There should be no stalls in the body of the loop.
- SMLABB r6, r12, r10, r6 ; sum[0] = MAC16_16(sum[0],x_0,y_0)
- LDR r14, [r4], #4 ; Load x[2...3]
- SMLABT r7, r12, r10, r7 ; sum[1] = MAC16_16(sum[1],x_0,y_1)
- SUBS r2, r2, #4 ; j-=4
- SMLABB r8, r12, r11, r8 ; sum[2] = MAC16_16(sum[2],x_0,y_2)
- SMLABT r9, r12, r11, r9 ; sum[3] = MAC16_16(sum[3],x_0,y_3)
- SMLATT r6, r12, r10, r6 ; sum[0] = MAC16_16(sum[0],x_1,y_1)
- LDR r10, [r5], #4 ; Load y[4...5]
- SMLATB r7, r12, r11, r7 ; sum[1] = MAC16_16(sum[1],x_1,y_2)
- SMLATT r8, r12, r11, r8 ; sum[2] = MAC16_16(sum[2],x_1,y_3)
- SMLATB r9, r12, r10, r9 ; sum[3] = MAC16_16(sum[3],x_1,y_4)
- LDRGT r12, [r4], #4 ; Load x[0...1]
- SMLABB r6, r14, r11, r6 ; sum[0] = MAC16_16(sum[0],x_2,y_2)
- SMLABT r7, r14, r11, r7 ; sum[1] = MAC16_16(sum[1],x_2,y_3)
- SMLABB r8, r14, r10, r8 ; sum[2] = MAC16_16(sum[2],x_2,y_4)
- SMLABT r9, r14, r10, r9 ; sum[3] = MAC16_16(sum[3],x_2,y_5)
- SMLATT r6, r14, r11, r6 ; sum[0] = MAC16_16(sum[0],x_3,y_3)
- LDR r11, [r5], #4 ; Load y[6...7]
- SMLATB r7, r14, r10, r7 ; sum[1] = MAC16_16(sum[1],x_3,y_4)
- SMLATT r8, r14, r10, r8 ; sum[2] = MAC16_16(sum[2],x_3,y_5)
- SMLATB r9, r14, r11, r9 ; sum[3] = MAC16_16(sum[3],x_3,y_6)
- BGT xcorr_kernel_edsp_process4
-xcorr_kernel_edsp_process4_done
- ADDS r2, r2, #4
- BLE xcorr_kernel_edsp_done
- LDRH r12, [r4], #2 ; r12 = *x++
- SUBS r2, r2, #1 ; j--
- ; Stall
- SMLABB r6, r12, r10, r6 ; sum[0] = MAC16_16(sum[0],x,y_0)
- LDRHGT r14, [r4], #2 ; r14 = *x++
- SMLABT r7, r12, r10, r7 ; sum[1] = MAC16_16(sum[1],x,y_1)
- SMLABB r8, r12, r11, r8 ; sum[2] = MAC16_16(sum[2],x,y_2)
- SMLABT r9, r12, r11, r9 ; sum[3] = MAC16_16(sum[3],x,y_3)
- BLE xcorr_kernel_edsp_done
- SMLABT r6, r14, r10, r6 ; sum[0] = MAC16_16(sum[0],x,y_1)
- SUBS r2, r2, #1 ; j--
- SMLABB r7, r14, r11, r7 ; sum[1] = MAC16_16(sum[1],x,y_2)
- LDRH r10, [r5], #2 ; r10 = y_4 = *y++
- SMLABT r8, r14, r11, r8 ; sum[2] = MAC16_16(sum[2],x,y_3)
- LDRHGT r12, [r4], #2 ; r12 = *x++
- SMLABB r9, r14, r10, r9 ; sum[3] = MAC16_16(sum[3],x,y_4)
- BLE xcorr_kernel_edsp_done
- SMLABB r6, r12, r11, r6 ; sum[0] = MAC16_16(sum[0],tmp,y_2)
- CMP r2, #1 ; j--
- SMLABT r7, r12, r11, r7 ; sum[1] = MAC16_16(sum[1],tmp,y_3)
- LDRH r2, [r5], #2 ; r2 = y_5 = *y++
- SMLABB r8, r12, r10, r8 ; sum[2] = MAC16_16(sum[2],tmp,y_4)
- LDRHGT r14, [r4] ; r14 = *x
- SMLABB r9, r12, r2, r9 ; sum[3] = MAC16_16(sum[3],tmp,y_5)
- BLE xcorr_kernel_edsp_done
- SMLABT r6, r14, r11, r6 ; sum[0] = MAC16_16(sum[0],tmp,y_3)
- LDRH r11, [r5] ; r11 = y_6 = *y
- SMLABB r7, r14, r10, r7 ; sum[1] = MAC16_16(sum[1],tmp,y_4)
- SMLABB r8, r14, r2, r8 ; sum[2] = MAC16_16(sum[2],tmp,y_5)
- SMLABB r9, r14, r11, r9 ; sum[3] = MAC16_16(sum[3],tmp,y_6)
-xcorr_kernel_edsp_done
- LDMFD sp!, {r2,r4,r5,pc}
- ENDP
-
-celt_pitch_xcorr_edsp PROC
- ; input:
- ; r0 = opus_val16 *_x (must be 32-bit aligned)
- ; r1 = opus_val16 *_y (only needs to be 16-bit aligned)
- ; r2 = opus_val32 *xcorr
- ; r3 = int len
- ; output:
- ; r0 = maxcorr
- ; internal usage
- ; r4 = opus_val16 *x
- ; r5 = opus_val16 *y
- ; r6 = opus_val32 sum0
- ; r7 = opus_val32 sum1
- ; r8 = opus_val32 sum2
- ; r9 = opus_val32 sum3
- ; r1 = int max_pitch
- ; r12 = int j
- STMFD sp!, {r4-r11, lr}
- MOV r5, r1
- LDR r1, [sp, #36]
- MOV r4, r0
- TST r5, #3
- ; maxcorr = 1
- MOV r0, #1
- BEQ celt_pitch_xcorr_edsp_process1u_done
-; Compute one sum at the start to make y 32-bit aligned.
- SUBS r12, r3, #4
- ; r14 = sum = 0
- MOV r14, #0
- LDRH r8, [r5], #2
- BLE celt_pitch_xcorr_edsp_process1u_loop4_done
- LDR r6, [r4], #4
- MOV r8, r8, LSL #16
-celt_pitch_xcorr_edsp_process1u_loop4
- LDR r9, [r5], #4
- SMLABT r14, r6, r8, r14 ; sum = MAC16_16(sum, x_0, y_0)
- LDR r7, [r4], #4
- SMLATB r14, r6, r9, r14 ; sum = MAC16_16(sum, x_1, y_1)
- LDR r8, [r5], #4
- SMLABT r14, r7, r9, r14 ; sum = MAC16_16(sum, x_2, y_2)
- SUBS r12, r12, #4 ; j-=4
- SMLATB r14, r7, r8, r14 ; sum = MAC16_16(sum, x_3, y_3)
- LDRGT r6, [r4], #4
- BGT celt_pitch_xcorr_edsp_process1u_loop4
- MOV r8, r8, LSR #16
-celt_pitch_xcorr_edsp_process1u_loop4_done
- ADDS r12, r12, #4
-celt_pitch_xcorr_edsp_process1u_loop1
- LDRHGE r6, [r4], #2
- ; Stall
- SMLABBGE r14, r6, r8, r14 ; sum = MAC16_16(sum, *x, *y)
- SUBSGE r12, r12, #1
- LDRHGT r8, [r5], #2
- BGT celt_pitch_xcorr_edsp_process1u_loop1
- ; Restore _x
- SUB r4, r4, r3, LSL #1
- ; Restore and advance _y
- SUB r5, r5, r3, LSL #1
- ; maxcorr = max(maxcorr, sum)
- CMP r0, r14
- ADD r5, r5, #2
- MOVLT r0, r14
- SUBS r1, r1, #1
- ; xcorr[i] = sum
- STR r14, [r2], #4
- BLE celt_pitch_xcorr_edsp_done
-celt_pitch_xcorr_edsp_process1u_done
- ; if (max_pitch < 4) goto celt_pitch_xcorr_edsp_process2
- SUBS r1, r1, #4
- BLT celt_pitch_xcorr_edsp_process2
-celt_pitch_xcorr_edsp_process4
- ; xcorr_kernel_edsp parameters:
- ; r3 = len, r4 = _x, r5 = _y, r6...r9 = sum[4] = {0, 0, 0, 0}
- MOV r6, #0
- MOV r7, #0
- MOV r8, #0
- MOV r9, #0
- BL xcorr_kernel_edsp_start ; xcorr_kernel_edsp(_x, _y+i, xcorr+i, len)
- ; maxcorr = max(maxcorr, sum0, sum1, sum2, sum3)
- CMP r0, r6
- ; _y+=4
- ADD r5, r5, #8
- MOVLT r0, r6
- CMP r0, r7
- MOVLT r0, r7
- CMP r0, r8
- MOVLT r0, r8
- CMP r0, r9
- MOVLT r0, r9
- STMIA r2!, {r6-r9}
- SUBS r1, r1, #4
- BGE celt_pitch_xcorr_edsp_process4
-celt_pitch_xcorr_edsp_process2
- ADDS r1, r1, #2
- BLT celt_pitch_xcorr_edsp_process1a
- SUBS r12, r3, #4
- ; {r10, r11} = {sum0, sum1} = {0, 0}
- MOV r10, #0
- MOV r11, #0
- LDR r8, [r5], #4
- BLE celt_pitch_xcorr_edsp_process2_loop_done
- LDR r6, [r4], #4
- LDR r9, [r5], #4
-celt_pitch_xcorr_edsp_process2_loop4
- SMLABB r10, r6, r8, r10 ; sum0 = MAC16_16(sum0, x_0, y_0)
- LDR r7, [r4], #4
- SMLABT r11, r6, r8, r11 ; sum1 = MAC16_16(sum1, x_0, y_1)
- SUBS r12, r12, #4 ; j-=4
- SMLATT r10, r6, r8, r10 ; sum0 = MAC16_16(sum0, x_1, y_1)
- LDR r8, [r5], #4
- SMLATB r11, r6, r9, r11 ; sum1 = MAC16_16(sum1, x_1, y_2)
- LDRGT r6, [r4], #4
- SMLABB r10, r7, r9, r10 ; sum0 = MAC16_16(sum0, x_2, y_2)
- SMLABT r11, r7, r9, r11 ; sum1 = MAC16_16(sum1, x_2, y_3)
- SMLATT r10, r7, r9, r10 ; sum0 = MAC16_16(sum0, x_3, y_3)
- LDRGT r9, [r5], #4
- SMLATB r11, r7, r8, r11 ; sum1 = MAC16_16(sum1, x_3, y_4)
- BGT celt_pitch_xcorr_edsp_process2_loop4
-celt_pitch_xcorr_edsp_process2_loop_done
- ADDS r12, r12, #2
- BLE celt_pitch_xcorr_edsp_process2_1
- LDR r6, [r4], #4
- ; Stall
- SMLABB r10, r6, r8, r10 ; sum0 = MAC16_16(sum0, x_0, y_0)
- LDR r9, [r5], #4
- SMLABT r11, r6, r8, r11 ; sum1 = MAC16_16(sum1, x_0, y_1)
- SUB r12, r12, #2
- SMLATT r10, r6, r8, r10 ; sum0 = MAC16_16(sum0, x_1, y_1)
- MOV r8, r9
- SMLATB r11, r6, r9, r11 ; sum1 = MAC16_16(sum1, x_1, y_2)
-celt_pitch_xcorr_edsp_process2_1
- LDRH r6, [r4], #2
- ADDS r12, r12, #1
- ; Stall
- SMLABB r10, r6, r8, r10 ; sum0 = MAC16_16(sum0, x_0, y_0)
- LDRHGT r7, [r4], #2
- SMLABT r11, r6, r8, r11 ; sum1 = MAC16_16(sum1, x_0, y_1)
- BLE celt_pitch_xcorr_edsp_process2_done
- LDRH r9, [r5], #2
- SMLABT r10, r7, r8, r10 ; sum0 = MAC16_16(sum0, x_0, y_1)
- SMLABB r11, r7, r9, r11 ; sum1 = MAC16_16(sum1, x_0, y_2)
-celt_pitch_xcorr_edsp_process2_done
- ; Restore _x
- SUB r4, r4, r3, LSL #1
- ; Restore and advance _y
- SUB r5, r5, r3, LSL #1
- ; maxcorr = max(maxcorr, sum0)
- CMP r0, r10
- ADD r5, r5, #2
- MOVLT r0, r10
- SUB r1, r1, #2
- ; maxcorr = max(maxcorr, sum1)
- CMP r0, r11
- ; xcorr[i] = sum
- STR r10, [r2], #4
- MOVLT r0, r11
- STR r11, [r2], #4
-celt_pitch_xcorr_edsp_process1a
- ADDS r1, r1, #1
- BLT celt_pitch_xcorr_edsp_done
- SUBS r12, r3, #4
- ; r14 = sum = 0
- MOV r14, #0
- BLT celt_pitch_xcorr_edsp_process1a_loop_done
- LDR r6, [r4], #4
- LDR r8, [r5], #4
- LDR r7, [r4], #4
- LDR r9, [r5], #4
-celt_pitch_xcorr_edsp_process1a_loop4
- SMLABB r14, r6, r8, r14 ; sum = MAC16_16(sum, x_0, y_0)
- SUBS r12, r12, #4 ; j-=4
- SMLATT r14, r6, r8, r14 ; sum = MAC16_16(sum, x_1, y_1)
- LDRGE r6, [r4], #4
- SMLABB r14, r7, r9, r14 ; sum = MAC16_16(sum, x_2, y_2)
- LDRGE r8, [r5], #4
- SMLATT r14, r7, r9, r14 ; sum = MAC16_16(sum, x_3, y_3)
- LDRGE r7, [r4], #4
- LDRGE r9, [r5], #4
- BGE celt_pitch_xcorr_edsp_process1a_loop4
-celt_pitch_xcorr_edsp_process1a_loop_done
- ADDS r12, r12, #2
- LDRGE r6, [r4], #4
- LDRGE r8, [r5], #4
- ; Stall
- SMLABBGE r14, r6, r8, r14 ; sum = MAC16_16(sum, x_0, y_0)
- SUBGE r12, r12, #2
- SMLATTGE r14, r6, r8, r14 ; sum = MAC16_16(sum, x_1, y_1)
- ADDS r12, r12, #1
- LDRHGE r6, [r4], #2
- LDRHGE r8, [r5], #2
- ; Stall
- SMLABBGE r14, r6, r8, r14 ; sum = MAC16_16(sum, *x, *y)
- ; maxcorr = max(maxcorr, sum)
- CMP r0, r14
- ; xcorr[i] = sum
- STR r14, [r2], #4
- MOVLT r0, r14
-celt_pitch_xcorr_edsp_done
- LDMFD sp!, {r4-r11, pc}
- ENDP
-
-ENDIF
-
-END
diff --git a/drivers/opus/celt/arm/fft_arm.h b/drivers/opus/celt/arm/fft_arm.h
deleted file mode 100644
index c99458b4af..0000000000
--- a/drivers/opus/celt/arm/fft_arm.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) 2015 Xiph.Org Foundation
- Written by Viswanath Puttagunta */
-/**
- @file fft_arm.h
- @brief ARM Neon Intrinsic optimizations for fft using NE10 library
- */
-
-/*
- 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.
-
- 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.
-*/
-
-
-#if !defined(FFT_ARM_H)
-#define FFT_ARM_H
-
-#include "opus/opus_config.h"
-#include "opus/celt/kiss_fft.h"
-
-#if defined(HAVE_ARM_NE10)
-
-int opus_fft_alloc_arm_neon(kiss_fft_state *st);
-void opus_fft_free_arm_neon(kiss_fft_state *st);
-
-void opus_fft_neon(const kiss_fft_state *st,
- const kiss_fft_cpx *fin,
- kiss_fft_cpx *fout);
-
-void opus_ifft_neon(const kiss_fft_state *st,
- const kiss_fft_cpx *fin,
- kiss_fft_cpx *fout);
-
-#if !defined(OPUS_HAVE_RTCD)
-#define OVERRIDE_OPUS_FFT (1)
-
-#define opus_fft_alloc_arch(_st, arch) \
- ((void)(arch), opus_fft_alloc_arm_neon(_st))
-
-#define opus_fft_free_arch(_st, arch) \
- ((void)(arch), opus_fft_free_arm_neon(_st))
-
-#define opus_fft(_st, _fin, _fout, arch) \
- ((void)(arch), opus_fft_neon(_st, _fin, _fout))
-
-#define opus_ifft(_st, _fin, _fout, arch) \
- ((void)(arch), opus_ifft_neon(_st, _fin, _fout))
-
-#endif /* OPUS_HAVE_RTCD */
-
-#endif /* HAVE_ARM_NE10 */
-
-#endif
diff --git a/drivers/opus/celt/arm/fixed_armv4.h b/drivers/opus/celt/arm/fixed_armv4.h
deleted file mode 100644
index efb3b1896a..0000000000
--- a/drivers/opus/celt/arm/fixed_armv4.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (C) 2013 Xiph.Org Foundation and contributors */
-/*
- 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.
-
- 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 FIXED_ARMv4_H
-#define FIXED_ARMv4_H
-
-/** 16x32 multiplication, followed by a 16-bit shift right. Results fits in 32 bits */
-#undef MULT16_32_Q16
-static OPUS_INLINE opus_val32 MULT16_32_Q16_armv4(opus_val16 a, opus_val32 b)
-{
- unsigned rd_lo;
- int rd_hi;
- __asm__(
- "#MULT16_32_Q16\n\t"
- "smull %0, %1, %2, %3\n\t"
- : "=&r"(rd_lo), "=&r"(rd_hi)
- : "%r"(b),"r"(a<<16)
- );
- return rd_hi;
-}
-#define MULT16_32_Q16(a, b) (MULT16_32_Q16_armv4(a, b))
-
-
-/** 16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits */
-#undef MULT16_32_Q15
-static OPUS_INLINE opus_val32 MULT16_32_Q15_armv4(opus_val16 a, opus_val32 b)
-{
- unsigned rd_lo;
- int rd_hi;
- __asm__(
- "#MULT16_32_Q15\n\t"
- "smull %0, %1, %2, %3\n\t"
- : "=&r"(rd_lo), "=&r"(rd_hi)
- : "%r"(b), "r"(a<<16)
- );
- /*We intentionally don't OR in the high bit of rd_lo for speed.*/
- return rd_hi<<1;
-}
-#define MULT16_32_Q15(a, b) (MULT16_32_Q15_armv4(a, b))
-
-
-/** 16x32 multiply, followed by a 15-bit shift right and 32-bit add.
- b must fit in 31 bits.
- Result fits in 32 bits. */
-#undef MAC16_32_Q15
-#define MAC16_32_Q15(c, a, b) ADD32(c, MULT16_32_Q15(a, b))
-
-/** 16x32 multiply, followed by a 16-bit shift right and 32-bit add.
- Result fits in 32 bits. */
-#undef MAC16_32_Q16
-#define MAC16_32_Q16(c, a, b) ADD32(c, MULT16_32_Q16(a, b))
-
-/** 32x32 multiplication, followed by a 31-bit shift right. Results fits in 32 bits */
-#undef MULT32_32_Q31
-#define MULT32_32_Q31(a,b) (opus_val32)((((opus_int64)(a)) * ((opus_int64)(b)))>>31)
-
-#endif
diff --git a/drivers/opus/celt/arm/fixed_armv5e.h b/drivers/opus/celt/arm/fixed_armv5e.h
deleted file mode 100644
index 2db23262e8..0000000000
--- a/drivers/opus/celt/arm/fixed_armv5e.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* Copyright (C) 2007-2009 Xiph.Org Foundation
- Copyright (C) 2003-2008 Jean-Marc Valin
- Copyright (C) 2007-2008 CSIRO
- Copyright (C) 2013 Parrot */
-/*
- 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.
-
- 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 FIXED_ARMv5E_H
-#define FIXED_ARMv5E_H
-
-#include "opus/celt/arm/fixed_armv4.h"
-
-/** 16x32 multiplication, followed by a 16-bit shift right. Results fits in 32 bits */
-#undef MULT16_32_Q16
-static OPUS_INLINE opus_val32 MULT16_32_Q16_armv5e(opus_val16 a, opus_val32 b)
-{
- int res;
- __asm__(
- "#MULT16_32_Q16\n\t"
- "smulwb %0, %1, %2\n\t"
- : "=r"(res)
- : "r"(b),"r"(a)
- );
- return res;
-}
-#define MULT16_32_Q16(a, b) (MULT16_32_Q16_armv5e(a, b))
-
-
-/** 16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits */
-#undef MULT16_32_Q15
-static OPUS_INLINE opus_val32 MULT16_32_Q15_armv5e(opus_val16 a, opus_val32 b)
-{
- int res;
- __asm__(
- "#MULT16_32_Q15\n\t"
- "smulwb %0, %1, %2\n\t"
- : "=r"(res)
- : "r"(b), "r"(a)
- );
- return res<<1;
-}
-#define MULT16_32_Q15(a, b) (MULT16_32_Q15_armv5e(a, b))
-
-
-/** 16x32 multiply, followed by a 15-bit shift right and 32-bit add.
- b must fit in 31 bits.
- Result fits in 32 bits. */
-#undef MAC16_32_Q15
-static OPUS_INLINE opus_val32 MAC16_32_Q15_armv5e(opus_val32 c, opus_val16 a,
- opus_val32 b)
-{
- int res;
- __asm__(
- "#MAC16_32_Q15\n\t"
- "smlawb %0, %1, %2, %3;\n"
- : "=r"(res)
- : "r"(b<<1), "r"(a), "r"(c)
- );
- return res;
-}
-#define MAC16_32_Q15(c, a, b) (MAC16_32_Q15_armv5e(c, a, b))
-
-/** 16x32 multiply, followed by a 16-bit shift right and 32-bit add.
- Result fits in 32 bits. */
-#undef MAC16_32_Q16
-static OPUS_INLINE opus_val32 MAC16_32_Q16_armv5e(opus_val32 c, opus_val16 a,
- opus_val32 b)
-{
- int res;
- __asm__(
- "#MAC16_32_Q16\n\t"
- "smlawb %0, %1, %2, %3;\n"
- : "=r"(res)
- : "r"(b), "r"(a), "r"(c)
- );
- return res;
-}
-#define MAC16_32_Q16(c, a, b) (MAC16_32_Q16_armv5e(c, a, b))
-
-/** 16x16 multiply-add where the result fits in 32 bits */
-#undef MAC16_16
-static OPUS_INLINE opus_val32 MAC16_16_armv5e(opus_val32 c, opus_val16 a,
- opus_val16 b)
-{
- int res;
- __asm__(
- "#MAC16_16\n\t"
- "smlabb %0, %1, %2, %3;\n"
- : "=r"(res)
- : "r"(a), "r"(b), "r"(c)
- );
- return res;
-}
-#define MAC16_16(c, a, b) (MAC16_16_armv5e(c, a, b))
-
-/** 16x16 multiplication where the result fits in 32 bits */
-#undef MULT16_16
-static OPUS_INLINE opus_val32 MULT16_16_armv5e(opus_val16 a, opus_val16 b)
-{
- int res;
- __asm__(
- "#MULT16_16\n\t"
- "smulbb %0, %1, %2;\n"
- : "=r"(res)
- : "r"(a), "r"(b)
- );
- return res;
-}
-#define MULT16_16(a, b) (MULT16_16_armv5e(a, b))
-
-#ifdef OPUS_ARM_INLINE_MEDIA
-
-#undef SIG2WORD16
-static OPUS_INLINE opus_val16 SIG2WORD16_armv6(opus_val32 x)
-{
- celt_sig res;
- __asm__(
- "#SIG2WORD16\n\t"
- "ssat %0, #16, %1, ASR #12\n\t"
- : "=r"(res)
- : "r"(x+2048)
- );
- return EXTRACT16(res);
-}
-#define SIG2WORD16(x) (SIG2WORD16_armv6(x))
-
-#endif /* OPUS_ARM_INLINE_MEDIA */
-
-#endif
diff --git a/drivers/opus/celt/arm/kiss_fft_armv4.h b/drivers/opus/celt/arm/kiss_fft_armv4.h
deleted file mode 100644
index 0f5617324d..0000000000
--- a/drivers/opus/celt/arm/kiss_fft_armv4.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*Copyright (c) 2013, Xiph.Org Foundation and contributors.
-
- 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.
-
- 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 KISS_FFT_ARMv4_H
-#define KISS_FFT_ARMv4_H
-
-#if !defined(KISS_FFT_GUTS_H)
-#error "This file should only be included from _kiss_fft_guts.h"
-#endif
-
-#ifdef OPUS_FIXED_POINT
-
-#undef C_MUL
-#define C_MUL(m,a,b) \
- do{ \
- int br__; \
- int bi__; \
- int tt__; \
- __asm__ __volatile__( \
- "#C_MUL\n\t" \
- "ldrsh %[br], [%[bp], #0]\n\t" \
- "ldm %[ap], {r0,r1}\n\t" \
- "ldrsh %[bi], [%[bp], #2]\n\t" \
- "smull %[tt], %[mi], r1, %[br]\n\t" \
- "smlal %[tt], %[mi], r0, %[bi]\n\t" \
- "rsb %[bi], %[bi], #0\n\t" \
- "smull %[br], %[mr], r0, %[br]\n\t" \
- "mov %[tt], %[tt], lsr #15\n\t" \
- "smlal %[br], %[mr], r1, %[bi]\n\t" \
- "orr %[mi], %[tt], %[mi], lsl #17\n\t" \
- "mov %[br], %[br], lsr #15\n\t" \
- "orr %[mr], %[br], %[mr], lsl #17\n\t" \
- : [mr]"=r"((m).r), [mi]"=r"((m).i), \
- [br]"=&r"(br__), [bi]"=r"(bi__), [tt]"=r"(tt__) \
- : [ap]"r"(&(a)), [bp]"r"(&(b)) \
- : "r0", "r1" \
- ); \
- } \
- while(0)
-
-#undef C_MUL4
-#define C_MUL4(m,a,b) \
- do{ \
- int br__; \
- int bi__; \
- int tt__; \
- __asm__ __volatile__( \
- "#C_MUL4\n\t" \
- "ldrsh %[br], [%[bp], #0]\n\t" \
- "ldm %[ap], {r0,r1}\n\t" \
- "ldrsh %[bi], [%[bp], #2]\n\t" \
- "smull %[tt], %[mi], r1, %[br]\n\t" \
- "smlal %[tt], %[mi], r0, %[bi]\n\t" \
- "rsb %[bi], %[bi], #0\n\t" \
- "smull %[br], %[mr], r0, %[br]\n\t" \
- "mov %[tt], %[tt], lsr #17\n\t" \
- "smlal %[br], %[mr], r1, %[bi]\n\t" \
- "orr %[mi], %[tt], %[mi], lsl #15\n\t" \
- "mov %[br], %[br], lsr #17\n\t" \
- "orr %[mr], %[br], %[mr], lsl #15\n\t" \
- : [mr]"=r"((m).r), [mi]"=r"((m).i), \
- [br]"=&r"(br__), [bi]"=r"(bi__), [tt]"=r"(tt__) \
- : [ap]"r"(&(a)), [bp]"r"(&(b)) \
- : "r0", "r1" \
- ); \
- } \
- while(0)
-
-#undef C_MULC
-#define C_MULC(m,a,b) \
- do{ \
- int br__; \
- int bi__; \
- int tt__; \
- __asm__ __volatile__( \
- "#C_MULC\n\t" \
- "ldrsh %[br], [%[bp], #0]\n\t" \
- "ldm %[ap], {r0,r1}\n\t" \
- "ldrsh %[bi], [%[bp], #2]\n\t" \
- "smull %[tt], %[mr], r0, %[br]\n\t" \
- "smlal %[tt], %[mr], r1, %[bi]\n\t" \
- "rsb %[bi], %[bi], #0\n\t" \
- "smull %[br], %[mi], r1, %[br]\n\t" \
- "mov %[tt], %[tt], lsr #15\n\t" \
- "smlal %[br], %[mi], r0, %[bi]\n\t" \
- "orr %[mr], %[tt], %[mr], lsl #17\n\t" \
- "mov %[br], %[br], lsr #15\n\t" \
- "orr %[mi], %[br], %[mi], lsl #17\n\t" \
- : [mr]"=r"((m).r), [mi]"=r"((m).i), \
- [br]"=&r"(br__), [bi]"=r"(bi__), [tt]"=r"(tt__) \
- : [ap]"r"(&(a)), [bp]"r"(&(b)) \
- : "r0", "r1" \
- ); \
- } \
- while(0)
-
-#endif /* FIXED_POINT */
-
-#endif /* KISS_FFT_ARMv4_H */
diff --git a/drivers/opus/celt/arm/kiss_fft_armv5e.h b/drivers/opus/celt/arm/kiss_fft_armv5e.h
deleted file mode 100644
index 0ab75fbc58..0000000000
--- a/drivers/opus/celt/arm/kiss_fft_armv5e.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*Copyright (c) 2013, Xiph.Org Foundation and contributors.
-
- 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.
-
- 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 KISS_FFT_ARMv5E_H
-#define KISS_FFT_ARMv5E_H
-
-#if !defined(KISS_FFT_GUTS_H)
-#error "This file should only be included from _kiss_fft_guts.h"
-#endif
-
-#ifdef OPUS_FIXED_POINT
-
-#if defined(__thumb__)||defined(__thumb2__)
-#define LDRD_CONS "Q"
-#else
-#define LDRD_CONS "Uq"
-#endif
-
-#undef C_MUL
-#define C_MUL(m,a,b) \
- do{ \
- int mr1__; \
- int mr2__; \
- int mi__; \
- long long aval__; \
- int bval__; \
- __asm__( \
- "#C_MUL\n\t" \
- "ldrd %[aval], %H[aval], %[ap]\n\t" \
- "ldr %[bval], %[bp]\n\t" \
- "smulwb %[mi], %H[aval], %[bval]\n\t" \
- "smulwb %[mr1], %[aval], %[bval]\n\t" \
- "smulwt %[mr2], %H[aval], %[bval]\n\t" \
- "smlawt %[mi], %[aval], %[bval], %[mi]\n\t" \
- : [mr1]"=r"(mr1__), [mr2]"=r"(mr2__), [mi]"=r"(mi__), \
- [aval]"=&r"(aval__), [bval]"=r"(bval__) \
- : [ap]LDRD_CONS(a), [bp]"m"(b) \
- ); \
- (m).r = SHL32(SUB32(mr1__, mr2__), 1); \
- (m).i = SHL32(mi__, 1); \
- } \
- while(0)
-
-#undef C_MUL4
-#define C_MUL4(m,a,b) \
- do{ \
- int mr1__; \
- int mr2__; \
- int mi__; \
- long long aval__; \
- int bval__; \
- __asm__( \
- "#C_MUL4\n\t" \
- "ldrd %[aval], %H[aval], %[ap]\n\t" \
- "ldr %[bval], %[bp]\n\t" \
- "smulwb %[mi], %H[aval], %[bval]\n\t" \
- "smulwb %[mr1], %[aval], %[bval]\n\t" \
- "smulwt %[mr2], %H[aval], %[bval]\n\t" \
- "smlawt %[mi], %[aval], %[bval], %[mi]\n\t" \
- : [mr1]"=r"(mr1__), [mr2]"=r"(mr2__), [mi]"=r"(mi__), \
- [aval]"=&r"(aval__), [bval]"=r"(bval__) \
- : [ap]LDRD_CONS(a), [bp]"m"(b) \
- ); \
- (m).r = SHR32(SUB32(mr1__, mr2__), 1); \
- (m).i = SHR32(mi__, 1); \
- } \
- while(0)
-
-#undef C_MULC
-#define C_MULC(m,a,b) \
- do{ \
- int mr__; \
- int mi1__; \
- int mi2__; \
- long long aval__; \
- int bval__; \
- __asm__( \
- "#C_MULC\n\t" \
- "ldrd %[aval], %H[aval], %[ap]\n\t" \
- "ldr %[bval], %[bp]\n\t" \
- "smulwb %[mr], %[aval], %[bval]\n\t" \
- "smulwb %[mi1], %H[aval], %[bval]\n\t" \
- "smulwt %[mi2], %[aval], %[bval]\n\t" \
- "smlawt %[mr], %H[aval], %[bval], %[mr]\n\t" \
- : [mr]"=r"(mr__), [mi1]"=r"(mi1__), [mi2]"=r"(mi2__), \
- [aval]"=&r"(aval__), [bval]"=r"(bval__) \
- : [ap]LDRD_CONS(a), [bp]"m"(b) \
- ); \
- (m).r = SHL32(mr__, 1); \
- (m).i = SHL32(SUB32(mi1__, mi2__), 1); \
- } \
- while(0)
-
-#endif /* FIXED_POINT */
-
-#endif /* KISS_FFT_GUTS_H */
diff --git a/drivers/opus/celt/arm/mdct_arm.h b/drivers/opus/celt/arm/mdct_arm.h
deleted file mode 100644
index faf3c8acab..0000000000
--- a/drivers/opus/celt/arm/mdct_arm.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (c) 2015 Xiph.Org Foundation
- Written by Viswanath Puttagunta */
-/**
- @file arm_mdct.h
- @brief ARM Neon Intrinsic optimizations for mdct using NE10 library
- */
-
-/*
- 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.
-
- 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.
-*/
-
-#if !defined(MDCT_ARM_H)
-#define MDCT_ARM_H
-
-#include "opus/opus_config.h"
-#include "opus/celt/mdct.h"
-
-#if defined(HAVE_ARM_NE10)
-/** Compute a forward MDCT and scale by 4/N, trashes the input array */
-void clt_mdct_forward_neon(const mdct_lookup *l, kiss_fft_scalar *in,
- kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 *window, int overlap,
- int shift, int stride, int arch);
-
-void clt_mdct_backward_neon(const mdct_lookup *l, kiss_fft_scalar *in,
- kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 *window, int overlap,
- int shift, int stride, int arch);
-
-#if !defined(OPUS_HAVE_RTCD)
-#define OVERRIDE_OPUS_MDCT (1)
-#define clt_mdct_forward(_l, _in, _out, _window, _int, _shift, _stride, _arch) \
- clt_mdct_forward_neon(_l, _in, _out, _window, _int, _shift, _stride, _arch)
-#define clt_mdct_backward(_l, _in, _out, _window, _int, _shift, _stride, _arch) \
- clt_mdct_backward_neon(_l, _in, _out, _window, _int, _shift, _stride, _arch)
-#endif /* OPUS_HAVE_RTCD */
-#endif /* HAVE_ARM_NE10 */
-
-#endif
diff --git a/drivers/opus/celt/arm/pitch_arm.h b/drivers/opus/celt/arm/pitch_arm.h
deleted file mode 100644
index 996fbc7fd9..0000000000
--- a/drivers/opus/celt/arm/pitch_arm.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Copyright (c) 2010 Xiph.Org Foundation
- * Copyright (c) 2013 Parrot */
-/*
- 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.
-
- 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.
-*/
-
-#if !defined(PITCH_ARM_H)
-# define PITCH_ARM_H
-
-# include "opus/celt/arm/armcpu.h"
-
-# if defined(FIXED_POINT)
-
-# if defined(OPUS_ARM_MAY_HAVE_NEON)
-opus_val32 celt_pitch_xcorr_neon(const opus_val16 *_x, const opus_val16 *_y,
- opus_val32 *xcorr, int len, int max_pitch);
-# endif
-
-# if defined(OPUS_ARM_MAY_HAVE_MEDIA)
-# define celt_pitch_xcorr_media MAY_HAVE_EDSP(celt_pitch_xcorr)
-# endif
-
-# if defined(OPUS_ARM_MAY_HAVE_EDSP)
-opus_val32 celt_pitch_xcorr_edsp(const opus_val16 *_x, const opus_val16 *_y,
- opus_val32 *xcorr, int len, int max_pitch);
-# endif
-
-# if !defined(OPUS_HAVE_RTCD)
-# define OVERRIDE_PITCH_XCORR (1)
-# define celt_pitch_xcorr(_x, _y, xcorr, len, max_pitch, arch) \
- ((void)(arch),PRESUME_NEON(celt_pitch_xcorr)(_x, _y, xcorr, len, max_pitch))
-# endif
-
-#else /* Start !FIXED_POINT */
-/* Float case */
-#if defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
-void celt_pitch_xcorr_float_neon(const opus_val16 *_x, const opus_val16 *_y,
- opus_val32 *xcorr, int len, int max_pitch);
-#if !defined(OPUS_HAVE_RTCD) || defined(OPUS_ARM_PRESUME_NEON_INTR)
-#define OVERRIDE_PITCH_XCORR (1)
-# define celt_pitch_xcorr(_x, _y, xcorr, len, max_pitch, arch) \
- ((void)(arch),celt_pitch_xcorr_float_neon(_x, _y, xcorr, len, max_pitch))
-#endif
-#endif
-
-#endif /* end !FIXED_POINT */
-#endif
diff --git a/drivers/opus/celt/bands.c b/drivers/opus/celt/bands.c
deleted file mode 100644
index bdd87dd327..0000000000
--- a/drivers/opus/celt/bands.c
+++ /dev/null
@@ -1,1526 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Copyright (c) 2008-2009 Gregory Maxwell
- Written by Jean-Marc Valin and Gregory Maxwell */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <math.h>
-#include "opus/celt/bands.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/vq.h"
-#include "opus/celt/cwrs.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/os_support.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/rate.h"
-#include "opus/celt/quant_bands.h"
-#include "opus/celt/pitch.h"
-
-int hysteresis_decision(opus_val16 val, const opus_val16 *thresholds, const opus_val16 *hysteresis, int N, int prev)
-{
- int i;
- for (i=0;i<N;i++)
- {
- if (val < thresholds[i])
- break;
- }
- if (i>prev && val < thresholds[prev]+hysteresis[prev])
- i=prev;
- if (i<prev && val > thresholds[prev-1]-hysteresis[prev-1])
- i=prev;
- return i;
-}
-
-opus_uint32 celt_lcg_rand(opus_uint32 seed)
-{
- return 1664525 * seed + 1013904223;
-}
-
-/* This is a cos() approximation designed to be bit-exact on any platform. Bit exactness
- with this approximation is important because it has an impact on the bit allocation */
-static opus_int16 bitexact_cos(opus_int16 x)
-{
- opus_int32 tmp;
- opus_int16 x2;
- tmp = (4096+((opus_int32)(x)*(x)))>>13;
- celt_assert(tmp<=32767);
- x2 = tmp;
- x2 = (32767-x2) + FRAC_MUL16(x2, (-7651 + FRAC_MUL16(x2, (8277 + FRAC_MUL16(-626, x2)))));
- celt_assert(x2<=32766);
- return 1+x2;
-}
-
-static int bitexact_log2tan(int isin,int icos)
-{
- int lc;
- int ls;
- lc=EC_ILOG(icos);
- ls=EC_ILOG(isin);
- icos<<=15-lc;
- isin<<=15-ls;
- return (ls-lc)*(1<<11)
- +FRAC_MUL16(isin, FRAC_MUL16(isin, -2597) + 7932)
- -FRAC_MUL16(icos, FRAC_MUL16(icos, -2597) + 7932);
-}
-
-#ifdef OPUS_FIXED_POINT
-/* Compute the amplitude (sqrt energy) in each of the bands */
-void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bandE, int end, int C, int LM)
-{
- int i, c, N;
- const opus_int16 *eBands = m->eBands;
- N = m->shortMdctSize<<LM;
- c=0; do {
- for (i=0;i<end;i++)
- {
- int j;
- opus_val32 maxval=0;
- opus_val32 sum = 0;
-
- maxval = celt_maxabs32(&X[c*N+(eBands[i]<<LM)], (eBands[i+1]-eBands[i])<<LM);
- if (maxval > 0)
- {
- int shift = celt_ilog2(maxval) - 14 + (((m->logN[i]>>BITRES)+LM+1)>>1);
- j=eBands[i]<<LM;
- if (shift>0)
- {
- do {
- sum = MAC16_16(sum, EXTRACT16(SHR32(X[j+c*N],shift)),
- EXTRACT16(SHR32(X[j+c*N],shift)));
- } while (++j<eBands[i+1]<<LM);
- } else {
- do {
- sum = MAC16_16(sum, EXTRACT16(SHL32(X[j+c*N],-shift)),
- EXTRACT16(SHL32(X[j+c*N],-shift)));
- } while (++j<eBands[i+1]<<LM);
- }
- /* We're adding one here to ensure the normalized band isn't larger than unity norm */
- bandE[i+c*m->nbEBands] = EPSILON+VSHR32(EXTEND32(celt_sqrt(sum)),-shift);
- } else {
- bandE[i+c*m->nbEBands] = EPSILON;
- }
- /*printf ("%f ", bandE[i+c*m->nbEBands]);*/
- }
- } while (++c<C);
- /*printf ("\n");*/
-}
-
-/* Normalise each band such that the energy is one. */
-void normalise_bands(const CELTMode *m, const celt_sig * OPUS_RESTRICT freq, celt_norm * OPUS_RESTRICT X, const celt_ener *bandE, int end, int C, int M)
-{
- int i, c, N;
- const opus_int16 *eBands = m->eBands;
- N = M*m->shortMdctSize;
- c=0; do {
- i=0; do {
- opus_val16 g;
- int j,shift;
- opus_val16 E;
- shift = celt_zlog2(bandE[i+c*m->nbEBands])-13;
- E = VSHR32(bandE[i+c*m->nbEBands], shift);
- g = EXTRACT16(celt_rcp(SHL32(E,3)));
- j=M*eBands[i]; do {
- X[j+c*N] = MULT16_16_Q15(VSHR32(freq[j+c*N],shift-1),g);
- } while (++j<M*eBands[i+1]);
- } while (++i<end);
- } while (++c<C);
-}
-
-#else /* FIXED_POINT */
-/* Compute the amplitude (sqrt energy) in each of the bands */
-void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bandE, int end, int C, int LM)
-{
- int i, c, N;
- const opus_int16 *eBands = m->eBands;
- N = m->shortMdctSize<<LM;
- c=0; do {
- for (i=0;i<end;i++)
- {
- opus_val32 sum;
- sum = 1e-27f + celt_inner_prod_c(&X[c*N+(eBands[i]<<LM)], &X[c*N+(eBands[i]<<LM)], (eBands[i+1]-eBands[i])<<LM);
- bandE[i+c*m->nbEBands] = celt_sqrt(sum);
- /*printf ("%f ", bandE[i+c*m->nbEBands]);*/
- }
- } while (++c<C);
- /*printf ("\n");*/
-}
-
-/* Normalise each band such that the energy is one. */
-void normalise_bands(const CELTMode *m, const celt_sig * OPUS_RESTRICT freq, celt_norm * OPUS_RESTRICT X, const celt_ener *bandE, int end, int C, int M)
-{
- int i, c, N;
- const opus_int16 *eBands = m->eBands;
- N = M*m->shortMdctSize;
- c=0; do {
- for (i=0;i<end;i++)
- {
- int j;
- opus_val16 g = 1.f/(1e-27f+bandE[i+c*m->nbEBands]);
- for (j=M*eBands[i];j<M*eBands[i+1];j++)
- X[j+c*N] = freq[j+c*N]*g;
- }
- } while (++c<C);
-}
-
-#endif /* FIXED_POINT */
-
-/* De-normalise the energy to produce the synthesis from the unit-energy bands */
-void denormalise_bands(const CELTMode *m, const celt_norm * OPUS_RESTRICT X,
- celt_sig * OPUS_RESTRICT freq, const opus_val16 *bandLogE, int start,
- int end, int M, int downsample, int silence)
-{
- int i, N;
- int bound;
- celt_sig * OPUS_RESTRICT f;
- const celt_norm * OPUS_RESTRICT x;
- const opus_int16 *eBands = m->eBands;
- N = M*m->shortMdctSize;
- bound = M*eBands[end];
- if (downsample!=1)
- bound = IMIN(bound, N/downsample);
- if (silence)
- {
- bound = 0;
- start = end = 0;
- }
- f = freq;
- x = X+M*eBands[start];
- for (i=0;i<M*eBands[start];i++)
- *f++ = 0;
- for (i=start;i<end;i++)
- {
- int j, band_end;
- opus_val16 g;
- opus_val16 lg;
-#ifdef OPUS_FIXED_POINT
- int shift;
-#endif
- j=M*eBands[i];
- band_end = M*eBands[i+1];
- lg = ADD16(bandLogE[i], SHL16((opus_val16)eMeans[i],6));
-#ifndef OPUS_FIXED_POINT
- g = celt_exp2(lg);
-#else
- /* Handle the integer part of the log energy */
- shift = 16-(lg>>DB_SHIFT);
- if (shift>31)
- {
- shift=0;
- g=0;
- } else {
- /* Handle the fractional part. */
- g = celt_exp2_frac(lg&((1<<DB_SHIFT)-1));
- }
- /* Handle extreme gains with negative shift. */
- if (shift<0)
- {
- /* For shift < -2 we'd be likely to overflow, so we're capping
- the gain here. This shouldn't happen unless the bitstream is
- already corrupted. */
- if (shift < -2)
- {
- g = 32767;
- shift = -2;
- }
- do {
- *f++ = SHL32(MULT16_16(*x++, g), -shift);
- } while (++j<band_end);
- } else
-#endif
- /* Be careful of the fixed-point "else" just above when changing this code */
- do {
- *f++ = SHR32(MULT16_16(*x++, g), shift);
- } while (++j<band_end);
- }
- celt_assert(start <= end);
- OPUS_CLEAR(&freq[bound], N-bound);
-}
-
-/* This prevents energy collapse for transients with multiple short MDCTs */
-void anti_collapse(const CELTMode *m, celt_norm *X_, unsigned char *collapse_masks, int LM, int C, int size,
- int start, int end, const opus_val16 *logE, const opus_val16 *prev1logE,
- const opus_val16 *prev2logE, const int *pulses, opus_uint32 seed, int arch)
-{
- int c, i, j, k;
- for (i=start;i<end;i++)
- {
- int N0;
- opus_val16 thresh, sqrt_1;
- int depth;
-#ifdef OPUS_FIXED_POINT
- int shift;
- opus_val32 thresh32;
-#endif
-
- N0 = m->eBands[i+1]-m->eBands[i];
- /* depth in 1/8 bits */
- celt_assert(pulses[i]>=0);
- depth = celt_udiv(1+pulses[i], (m->eBands[i+1]-m->eBands[i]))>>LM;
-
-#ifdef OPUS_FIXED_POINT
- thresh32 = SHR32(celt_exp2(-SHL16(depth, 10-BITRES)),1);
- thresh = MULT16_32_Q15(QCONST16(0.5f, 15), MIN32(32767,thresh32));
- {
- opus_val32 t;
- t = N0<<LM;
- shift = celt_ilog2(t)>>1;
- t = SHL32(t, (7-shift)<<1);
- sqrt_1 = celt_rsqrt_norm(t);
- }
-#else
- thresh = .5f*celt_exp2(-.125f*depth);
- sqrt_1 = celt_rsqrt(N0<<LM);
-#endif
-
- c=0; do
- {
- celt_norm *X;
- opus_val16 prev1;
- opus_val16 prev2;
- opus_val32 Ediff;
- opus_val16 r;
- int renormalize=0;
- prev1 = prev1logE[c*m->nbEBands+i];
- prev2 = prev2logE[c*m->nbEBands+i];
- if (C==1)
- {
- prev1 = MAX16(prev1,prev1logE[m->nbEBands+i]);
- prev2 = MAX16(prev2,prev2logE[m->nbEBands+i]);
- }
- Ediff = EXTEND32(logE[c*m->nbEBands+i])-EXTEND32(MIN16(prev1,prev2));
- Ediff = MAX32(0, Ediff);
-
-#ifdef OPUS_FIXED_POINT
- if (Ediff < 16384)
- {
- opus_val32 r32 = SHR32(celt_exp2(-EXTRACT16(Ediff)),1);
- r = 2*MIN16(16383,r32);
- } else {
- r = 0;
- }
- if (LM==3)
- r = MULT16_16_Q14(23170, MIN32(23169, r));
- r = SHR16(MIN16(thresh, r),1);
- r = SHR32(MULT16_16_Q15(sqrt_1, r),shift);
-#else
- /* r needs to be multiplied by 2 or 2*sqrt(2) depending on LM because
- short blocks don't have the same energy as long */
- r = 2.f*celt_exp2(-Ediff);
- if (LM==3)
- r *= 1.41421356f;
- r = MIN16(thresh, r);
- r = r*sqrt_1;
-#endif
- X = X_+c*size+(m->eBands[i]<<LM);
- for (k=0;k<1<<LM;k++)
- {
- /* Detect collapse */
- if (!(collapse_masks[i*C+c]&1<<k))
- {
- /* Fill with noise */
- for (j=0;j<N0;j++)
- {
- seed = celt_lcg_rand(seed);
- X[(j<<LM)+k] = (seed&0x8000 ? r : -r);
- }
- renormalize = 1;
- }
- }
- /* We just added some energy, so we need to renormalise */
- if (renormalize)
- renormalise_vector(X, N0<<LM, Q15ONE, arch);
- } while (++c<C);
- }
-}
-
-static void intensity_stereo(const CELTMode *m, celt_norm * OPUS_RESTRICT X, const celt_norm * OPUS_RESTRICT Y, const celt_ener *bandE, int bandID, int N)
-{
- int i = bandID;
- int j;
- opus_val16 a1, a2;
- opus_val16 left, right;
- opus_val16 norm;
-#ifdef OPUS_FIXED_POINT
- int shift = celt_zlog2(MAX32(bandE[i], bandE[i+m->nbEBands]))-13;
-#endif
- left = VSHR32(bandE[i],shift);
- right = VSHR32(bandE[i+m->nbEBands],shift);
- norm = EPSILON + celt_sqrt(EPSILON+MULT16_16(left,left)+MULT16_16(right,right));
- a1 = DIV32_16(SHL32(EXTEND32(left),14),norm);
- a2 = DIV32_16(SHL32(EXTEND32(right),14),norm);
- for (j=0;j<N;j++)
- {
- celt_norm r, l;
- l = X[j];
- r = Y[j];
- X[j] = EXTRACT16(SHR32(MAC16_16(MULT16_16(a1, l), a2, r), 14));
- /* Side is not encoded, no need to calculate */
- }
-}
-
-static void stereo_split(celt_norm * OPUS_RESTRICT X, celt_norm * OPUS_RESTRICT Y, int N)
-{
- int j;
- for (j=0;j<N;j++)
- {
- opus_val32 r, l;
- l = MULT16_16(QCONST16(.70710678f, 15), X[j]);
- r = MULT16_16(QCONST16(.70710678f, 15), Y[j]);
- X[j] = EXTRACT16(SHR32(ADD32(l, r), 15));
- Y[j] = EXTRACT16(SHR32(SUB32(r, l), 15));
- }
-}
-
-static void stereo_merge(celt_norm * OPUS_RESTRICT X, celt_norm * OPUS_RESTRICT Y, opus_val16 mid, int N, int arch)
-{
- int j;
- opus_val32 xp=0, side=0;
- opus_val32 El, Er;
- opus_val16 mid2;
-#ifdef OPUS_FIXED_POINT
- int kl, kr;
-#endif
- opus_val32 t, lgain, rgain;
-
- /* Compute the norm of X+Y and X-Y as |X|^2 + |Y|^2 +/- sum(xy) */
- dual_inner_prod(Y, X, Y, N, &xp, &side, arch);
- /* Compensating for the mid normalization */
- xp = MULT16_32_Q15(mid, xp);
- /* mid and side are in Q15, not Q14 like X and Y */
- mid2 = SHR32(mid, 1);
- El = MULT16_16(mid2, mid2) + side - 2*xp;
- Er = MULT16_16(mid2, mid2) + side + 2*xp;
- if (Er < QCONST32(6e-4f, 28) || El < QCONST32(6e-4f, 28))
- {
- OPUS_COPY(Y, X, N);
- return;
- }
-
-#ifdef OPUS_FIXED_POINT
- kl = celt_ilog2(El)>>1;
- kr = celt_ilog2(Er)>>1;
-#endif
- t = VSHR32(El, (kl-7)<<1);
- lgain = celt_rsqrt_norm(t);
- t = VSHR32(Er, (kr-7)<<1);
- rgain = celt_rsqrt_norm(t);
-
-#ifdef OPUS_FIXED_POINT
- if (kl < 7)
- kl = 7;
- if (kr < 7)
- kr = 7;
-#endif
-
- for (j=0;j<N;j++)
- {
- celt_norm r, l;
- /* Apply mid scaling (side is already scaled) */
- l = MULT16_16_P15(mid, X[j]);
- r = Y[j];
- X[j] = EXTRACT16(PSHR32(MULT16_16(lgain, SUB16(l,r)), kl+1));
- Y[j] = EXTRACT16(PSHR32(MULT16_16(rgain, ADD16(l,r)), kr+1));
- }
-}
-
-/* Decide whether we should spread the pulses in the current frame */
-int spreading_decision(const CELTMode *m, const celt_norm *X, int *average,
- int last_decision, int *hf_average, int *tapset_decision, int update_hf,
- int end, int C, int M)
-{
- int i, c, N0;
- int sum = 0, nbBands=0;
- const opus_int16 * OPUS_RESTRICT eBands = m->eBands;
- int decision;
- int hf_sum=0;
-
- celt_assert(end>0);
-
- N0 = M*m->shortMdctSize;
-
- if (M*(eBands[end]-eBands[end-1]) <= 8)
- return SPREAD_NONE;
- c=0; do {
- for (i=0;i<end;i++)
- {
- int j, N, tmp=0;
- int tcount[3] = {0,0,0};
- const celt_norm * OPUS_RESTRICT x = X+M*eBands[i]+c*N0;
- N = M*(eBands[i+1]-eBands[i]);
- if (N<=8)
- continue;
- /* Compute rough CDF of |x[j]| */
- for (j=0;j<N;j++)
- {
- opus_val32 x2N; /* Q13 */
-
- x2N = MULT16_16(MULT16_16_Q15(x[j], x[j]), N);
- if (x2N < QCONST16(0.25f,13))
- tcount[0]++;
- if (x2N < QCONST16(0.0625f,13))
- tcount[1]++;
- if (x2N < QCONST16(0.015625f,13))
- tcount[2]++;
- }
-
- /* Only include four last bands (8 kHz and up) */
- if (i>m->nbEBands-4)
- hf_sum += celt_udiv(32*(tcount[1]+tcount[0]), N);
- tmp = (2*tcount[2] >= N) + (2*tcount[1] >= N) + (2*tcount[0] >= N);
- sum += tmp*256;
- nbBands++;
- }
- } while (++c<C);
-
- if (update_hf)
- {
- if (hf_sum)
- hf_sum = celt_udiv(hf_sum, C*(4-m->nbEBands+end));
- *hf_average = (*hf_average+hf_sum)>>1;
- hf_sum = *hf_average;
- if (*tapset_decision==2)
- hf_sum += 4;
- else if (*tapset_decision==0)
- hf_sum -= 4;
- if (hf_sum > 22)
- *tapset_decision=2;
- else if (hf_sum > 18)
- *tapset_decision=1;
- else
- *tapset_decision=0;
- }
- /*printf("%d %d %d\n", hf_sum, *hf_average, *tapset_decision);*/
- celt_assert(nbBands>0); /* end has to be non-zero */
- celt_assert(sum>=0);
- sum = celt_udiv(sum, nbBands);
- /* Recursive averaging */
- sum = (sum+*average)>>1;
- *average = sum;
- /* Hysteresis */
- sum = (3*sum + (((3-last_decision)<<7) + 64) + 2)>>2;
- if (sum < 80)
- {
- decision = SPREAD_AGGRESSIVE;
- } else if (sum < 256)
- {
- decision = SPREAD_NORMAL;
- } else if (sum < 384)
- {
- decision = SPREAD_LIGHT;
- } else {
- decision = SPREAD_NONE;
- }
-#ifdef FUZZING
- decision = rand()&0x3;
- *tapset_decision=rand()%3;
-#endif
- return decision;
-}
-
-/* Indexing table for converting from natural Hadamard to ordery Hadamard
- This is essentially a bit-reversed Gray, on top of which we've added
- an inversion of the order because we want the DC at the end rather than
- the beginning. The lines are for N=2, 4, 8, 16 */
-static const int ordery_table[] = {
- 1, 0,
- 3, 0, 2, 1,
- 7, 0, 4, 3, 6, 1, 5, 2,
- 15, 0, 8, 7, 12, 3, 11, 4, 14, 1, 9, 6, 13, 2, 10, 5,
-};
-
-static void deinterleave_hadamard(celt_norm *X, int N0, int stride, int hadamard)
-{
- int i,j;
- VARDECL(celt_norm, tmp);
- int N;
- SAVE_STACK;
- N = N0*stride;
- ALLOC(tmp, N, celt_norm);
- celt_assert(stride>0);
- if (hadamard)
- {
- const int *ordery = ordery_table+stride-2;
- for (i=0;i<stride;i++)
- {
- for (j=0;j<N0;j++)
- tmp[ordery[i]*N0+j] = X[j*stride+i];
- }
- } else {
- for (i=0;i<stride;i++)
- for (j=0;j<N0;j++)
- tmp[i*N0+j] = X[j*stride+i];
- }
- OPUS_COPY(X, tmp, N);
- RESTORE_STACK;
-}
-
-static void interleave_hadamard(celt_norm *X, int N0, int stride, int hadamard)
-{
- int i,j;
- VARDECL(celt_norm, tmp);
- int N;
- SAVE_STACK;
- N = N0*stride;
- ALLOC(tmp, N, celt_norm);
- if (hadamard)
- {
- const int *ordery = ordery_table+stride-2;
- for (i=0;i<stride;i++)
- for (j=0;j<N0;j++)
- tmp[j*stride+i] = X[ordery[i]*N0+j];
- } else {
- for (i=0;i<stride;i++)
- for (j=0;j<N0;j++)
- tmp[j*stride+i] = X[i*N0+j];
- }
- OPUS_COPY(X, tmp, N);
- RESTORE_STACK;
-}
-
-void haar1(celt_norm *X, int N0, int stride)
-{
- int i, j;
- N0 >>= 1;
- for (i=0;i<stride;i++)
- for (j=0;j<N0;j++)
- {
- opus_val32 tmp1, tmp2;
- tmp1 = MULT16_16(QCONST16(.70710678f,15), X[stride*2*j+i]);
- tmp2 = MULT16_16(QCONST16(.70710678f,15), X[stride*(2*j+1)+i]);
- X[stride*2*j+i] = EXTRACT16(PSHR32(ADD32(tmp1, tmp2), 15));
- X[stride*(2*j+1)+i] = EXTRACT16(PSHR32(SUB32(tmp1, tmp2), 15));
- }
-}
-
-static int compute_qn(int N, int b, int offset, int pulse_cap, int stereo)
-{
- static const opus_int16 exp2_table8[8] =
- {16384, 17866, 19483, 21247, 23170, 25267, 27554, 30048};
- int qn, qb;
- int N2 = 2*N-1;
- if (stereo && N==2)
- N2--;
- /* The upper limit ensures that in a stereo split with itheta==16384, we'll
- always have enough bits left over to code at least one pulse in the
- side; otherwise it would collapse, since it doesn't get folded. */
- qb = celt_sudiv(b+N2*offset, N2);
- qb = IMIN(b-pulse_cap-(4<<BITRES), qb);
-
- qb = IMIN(8<<BITRES, qb);
-
- if (qb<(1<<BITRES>>1)) {
- qn = 1;
- } else {
- qn = exp2_table8[qb&0x7]>>(14-(qb>>BITRES));
- qn = (qn+1)>>1<<1;
- }
- celt_assert(qn <= 256);
- return qn;
-}
-
-struct band_ctx {
- int encode;
- const CELTMode *m;
- int i;
- int intensity;
- int spread;
- int tf_change;
- ec_ctx *ec;
- opus_int32 remaining_bits;
- const celt_ener *bandE;
- opus_uint32 seed;
- int arch;
-};
-
-struct split_ctx {
- int inv;
- int imid;
- int iside;
- int delta;
- int itheta;
- int qalloc;
-};
-
-static void compute_theta(struct band_ctx *ctx, struct split_ctx *sctx,
- celt_norm *X, celt_norm *Y, int N, int *b, int B, int B0,
- int LM,
- int stereo, int *fill)
-{
- int qn;
- int itheta=0;
- int delta;
- int imid, iside;
- int qalloc;
- int pulse_cap;
- int offset;
- opus_int32 tell;
- int inv=0;
- int encode;
- const CELTMode *m;
- int i;
- int intensity;
- ec_ctx *ec;
- const celt_ener *bandE;
-
- encode = ctx->encode;
- m = ctx->m;
- i = ctx->i;
- intensity = ctx->intensity;
- ec = ctx->ec;
- bandE = ctx->bandE;
-
- /* Decide on the resolution to give to the split parameter theta */
- pulse_cap = m->logN[i]+LM*(1<<BITRES);
- offset = (pulse_cap>>1) - (stereo&&N==2 ? QTHETA_OFFSET_TWOPHASE : QTHETA_OFFSET);
- qn = compute_qn(N, *b, offset, pulse_cap, stereo);
- if (stereo && i>=intensity)
- qn = 1;
- if (encode)
- {
- /* theta is the atan() of the ratio between the (normalized)
- side and mid. With just that parameter, we can re-scale both
- mid and side because we know that 1) they have unit norm and
- 2) they are orthogonal. */
- itheta = stereo_itheta(X, Y, stereo, N, ctx->arch);
- }
- tell = ec_tell_frac(ec);
- if (qn!=1)
- {
- if (encode)
- itheta = (itheta*qn+8192)>>14;
-
- /* Entropy coding of the angle. We use a uniform pdf for the
- time split, a step for stereo, and a triangular one for the rest. */
- if (stereo && N>2)
- {
- int p0 = 3;
- int x = itheta;
- int x0 = qn/2;
- int ft = p0*(x0+1) + x0;
- /* Use a probability of p0 up to itheta=8192 and then use 1 after */
- if (encode)
- {
- ec_encode(ec,x<=x0?p0*x:(x-1-x0)+(x0+1)*p0,x<=x0?p0*(x+1):(x-x0)+(x0+1)*p0,ft);
- } else {
- int fs;
- fs=ec_decode(ec,ft);
- if (fs<(x0+1)*p0)
- x=fs/p0;
- else
- x=x0+1+(fs-(x0+1)*p0);
- ec_dec_update(ec,x<=x0?p0*x:(x-1-x0)+(x0+1)*p0,x<=x0?p0*(x+1):(x-x0)+(x0+1)*p0,ft);
- itheta = x;
- }
- } else if (B0>1 || stereo) {
- /* Uniform pdf */
- if (encode)
- ec_enc_uint(ec, itheta, qn+1);
- else
- itheta = ec_dec_uint(ec, qn+1);
- } else {
- int fs=1, ft;
- ft = ((qn>>1)+1)*((qn>>1)+1);
- if (encode)
- {
- int fl;
-
- fs = itheta <= (qn>>1) ? itheta + 1 : qn + 1 - itheta;
- fl = itheta <= (qn>>1) ? itheta*(itheta + 1)>>1 :
- ft - ((qn + 1 - itheta)*(qn + 2 - itheta)>>1);
-
- ec_encode(ec, fl, fl+fs, ft);
- } else {
- /* Triangular pdf */
- int fl=0;
- int fm;
- fm = ec_decode(ec, ft);
-
- if (fm < ((qn>>1)*((qn>>1) + 1)>>1))
- {
- itheta = (isqrt32(8*(opus_uint32)fm + 1) - 1)>>1;
- fs = itheta + 1;
- fl = itheta*(itheta + 1)>>1;
- }
- else
- {
- itheta = (2*(qn + 1)
- - isqrt32(8*(opus_uint32)(ft - fm - 1) + 1))>>1;
- fs = qn + 1 - itheta;
- fl = ft - ((qn + 1 - itheta)*(qn + 2 - itheta)>>1);
- }
-
- ec_dec_update(ec, fl, fl+fs, ft);
- }
- }
- celt_assert(itheta>=0);
- itheta = celt_udiv((opus_int32)itheta*16384, qn);
- if (encode && stereo)
- {
- if (itheta==0)
- intensity_stereo(m, X, Y, bandE, i, N);
- else
- stereo_split(X, Y, N);
- }
- /* NOTE: Renormalising X and Y *may* help fixed-point a bit at very high rate.
- Let's do that at higher complexity */
- } else if (stereo) {
- if (encode)
- {
- inv = itheta > 8192;
- if (inv)
- {
- int j;
- for (j=0;j<N;j++)
- Y[j] = -Y[j];
- }
- intensity_stereo(m, X, Y, bandE, i, N);
- }
- if (*b>2<<BITRES && ctx->remaining_bits > 2<<BITRES)
- {
- if (encode)
- ec_enc_bit_logp(ec, inv, 2);
- else
- inv = ec_dec_bit_logp(ec, 2);
- } else
- inv = 0;
- itheta = 0;
- }
- qalloc = ec_tell_frac(ec) - tell;
- *b -= qalloc;
-
- if (itheta == 0)
- {
- imid = 32767;
- iside = 0;
- *fill &= (1<<B)-1;
- delta = -16384;
- } else if (itheta == 16384)
- {
- imid = 0;
- iside = 32767;
- *fill &= ((1<<B)-1)<<B;
- delta = 16384;
- } else {
- imid = bitexact_cos((opus_int16)itheta);
- iside = bitexact_cos((opus_int16)(16384-itheta));
- /* This is the mid vs side allocation that minimizes squared error
- in that band. */
- delta = FRAC_MUL16((N-1)<<7,bitexact_log2tan(iside,imid));
- }
-
- sctx->inv = inv;
- sctx->imid = imid;
- sctx->iside = iside;
- sctx->delta = delta;
- sctx->itheta = itheta;
- sctx->qalloc = qalloc;
-}
-static unsigned quant_band_n1(struct band_ctx *ctx, celt_norm *X, celt_norm *Y, int b,
- celt_norm *lowband_out)
-{
-#ifdef RESYNTH
- int resynth = 1;
-#else
- int resynth = !ctx->encode;
-#endif
- int c;
- int stereo;
- celt_norm *x = X;
- int encode;
- ec_ctx *ec;
-
- encode = ctx->encode;
- ec = ctx->ec;
-
- stereo = Y != NULL;
- c=0; do {
- int sign=0;
- if (ctx->remaining_bits>=1<<BITRES)
- {
- if (encode)
- {
- sign = x[0]<0;
- ec_enc_bits(ec, sign, 1);
- } else {
- sign = ec_dec_bits(ec, 1);
- }
- ctx->remaining_bits -= 1<<BITRES;
- b-=1<<BITRES;
- }
- if (resynth)
- x[0] = sign ? -NORM_SCALING : NORM_SCALING;
- x = Y;
- } while (++c<1+stereo);
- if (lowband_out)
- lowband_out[0] = SHR16(X[0],4);
- return 1;
-}
-
-/* This function is responsible for encoding and decoding a mono partition.
- It can split the band in two and transmit the energy difference with
- the two half-bands. It can be called recursively so bands can end up being
- split in 8 parts. */
-static unsigned quant_partition(struct band_ctx *ctx, celt_norm *X,
- int N, int b, int B, celt_norm *lowband,
- int LM,
- opus_val16 gain, int fill)
-{
- const unsigned char *cache;
- int q;
- int curr_bits;
- int imid=0, iside=0;
- int B0=B;
- opus_val16 mid=0, side=0;
- unsigned cm=0;
-#ifdef RESYNTH
- int resynth = 1;
-#else
- int resynth = !ctx->encode;
-#endif
- celt_norm *Y=NULL;
- int encode;
- const CELTMode *m;
- int i;
- int spread;
- ec_ctx *ec;
-
- encode = ctx->encode;
- m = ctx->m;
- i = ctx->i;
- spread = ctx->spread;
- ec = ctx->ec;
-
- /* If we need 1.5 more bit than we can produce, split the band in two. */
- cache = m->cache.bits + m->cache.index[(LM+1)*m->nbEBands+i];
- if (LM != -1 && b > cache[cache[0]]+12 && N>2)
- {
- int mbits, sbits, delta;
- int itheta;
- int qalloc;
- struct split_ctx sctx;
- celt_norm *next_lowband2=NULL;
- opus_int32 rebalance;
-
- N >>= 1;
- Y = X+N;
- LM -= 1;
- if (B==1)
- fill = (fill&1)|(fill<<1);
- B = (B+1)>>1;
-
- compute_theta(ctx, &sctx, X, Y, N, &b, B, B0,
- LM, 0, &fill);
- imid = sctx.imid;
- iside = sctx.iside;
- delta = sctx.delta;
- itheta = sctx.itheta;
- qalloc = sctx.qalloc;
-#ifdef OPUS_FIXED_POINT
- mid = imid;
- side = iside;
-#else
- mid = (1.f/32768)*imid;
- side = (1.f/32768)*iside;
-#endif
-
- /* Give more bits to low-energy MDCTs than they would otherwise deserve */
- if (B0>1 && (itheta&0x3fff))
- {
- if (itheta > 8192)
- /* Rough approximation for pre-echo masking */
- delta -= delta>>(4-LM);
- else
- /* Corresponds to a forward-masking slope of 1.5 dB per 10 ms */
- delta = IMIN(0, delta + (N<<BITRES>>(5-LM)));
- }
- mbits = IMAX(0, IMIN(b, (b-delta)/2));
- sbits = b-mbits;
- ctx->remaining_bits -= qalloc;
-
- if (lowband)
- next_lowband2 = lowband+N; /* >32-bit split case */
-
- rebalance = ctx->remaining_bits;
- if (mbits >= sbits)
- {
- cm = quant_partition(ctx, X, N, mbits, B,
- lowband, LM,
- MULT16_16_P15(gain,mid), fill);
- rebalance = mbits - (rebalance-ctx->remaining_bits);
- if (rebalance > 3<<BITRES && itheta!=0)
- sbits += rebalance - (3<<BITRES);
- cm |= quant_partition(ctx, Y, N, sbits, B,
- next_lowband2, LM,
- MULT16_16_P15(gain,side), fill>>B)<<(B0>>1);
- } else {
- cm = quant_partition(ctx, Y, N, sbits, B,
- next_lowband2, LM,
- MULT16_16_P15(gain,side), fill>>B)<<(B0>>1);
- rebalance = sbits - (rebalance-ctx->remaining_bits);
- if (rebalance > 3<<BITRES && itheta!=16384)
- mbits += rebalance - (3<<BITRES);
- cm |= quant_partition(ctx, X, N, mbits, B,
- lowband, LM,
- MULT16_16_P15(gain,mid), fill);
- }
- } else {
- /* This is the basic no-split case */
- q = bits2pulses(m, i, LM, b);
- curr_bits = pulses2bits(m, i, LM, q);
- ctx->remaining_bits -= curr_bits;
-
- /* Ensures we can never bust the budget */
- while (ctx->remaining_bits < 0 && q > 0)
- {
- ctx->remaining_bits += curr_bits;
- q--;
- curr_bits = pulses2bits(m, i, LM, q);
- ctx->remaining_bits -= curr_bits;
- }
-
- if (q!=0)
- {
- int K = get_pulses(q);
-
- /* Finally do the actual quantization */
- if (encode)
- {
- cm = alg_quant(X, N, K, spread, B, ec
-#ifdef RESYNTH
- , gain
-#endif
- );
- } else {
- cm = alg_unquant(X, N, K, spread, B, ec, gain);
- }
- } else {
- /* If there's no pulse, fill the band anyway */
- int j;
- if (resynth)
- {
- unsigned cm_mask;
- /* B can be as large as 16, so this shift might overflow an int on a
- 16-bit platform; use a long to get defined behavior.*/
- cm_mask = (unsigned)(1UL<<B)-1;
- fill &= cm_mask;
- if (!fill)
- {
- OPUS_CLEAR(X, N);
- } else {
- if (lowband == NULL)
- {
- /* Noise */
- for (j=0;j<N;j++)
- {
- ctx->seed = celt_lcg_rand(ctx->seed);
- X[j] = (celt_norm)((opus_int32)ctx->seed>>20);
- }
- cm = cm_mask;
- } else {
- /* Folded spectrum */
- for (j=0;j<N;j++)
- {
- opus_val16 tmp;
- ctx->seed = celt_lcg_rand(ctx->seed);
- /* About 48 dB below the "normal" folding level */
- tmp = QCONST16(1.0f/256, 10);
- tmp = (ctx->seed)&0x8000 ? tmp : -tmp;
- X[j] = lowband[j]+tmp;
- }
- cm = fill;
- }
- renormalise_vector(X, N, gain, ctx->arch);
- }
- }
- }
- }
-
- return cm;
-}
-
-
-/* This function is responsible for encoding and decoding a band for the mono case. */
-static unsigned quant_band(struct band_ctx *ctx, celt_norm *X,
- int N, int b, int B, celt_norm *lowband,
- int LM, celt_norm *lowband_out,
- opus_val16 gain, celt_norm *lowband_scratch, int fill)
-{
- int N0=N;
- int N_B=N;
- int N_B0;
- int B0=B;
- int time_divide=0;
- int recombine=0;
- int longBlocks;
- unsigned cm=0;
-#ifdef RESYNTH
- int resynth = 1;
-#else
- int resynth = !ctx->encode;
-#endif
- int k;
- int encode;
- int tf_change;
-
- encode = ctx->encode;
- tf_change = ctx->tf_change;
-
- longBlocks = B0==1;
-
- N_B = celt_udiv(N_B, B);
-
- /* Special case for one sample */
- if (N==1)
- {
- return quant_band_n1(ctx, X, NULL, b, lowband_out);
- }
-
- if (tf_change>0)
- recombine = tf_change;
- /* Band recombining to increase frequency resolution */
-
- if (lowband_scratch && lowband && (recombine || ((N_B&1) == 0 && tf_change<0) || B0>1))
- {
- OPUS_COPY(lowband_scratch, lowband, N);
- lowband = lowband_scratch;
- }
-
- for (k=0;k<recombine;k++)
- {
- static const unsigned char bit_interleave_table[16]={
- 0,1,1,1,2,3,3,3,2,3,3,3,2,3,3,3
- };
- if (encode)
- haar1(X, N>>k, 1<<k);
- if (lowband)
- haar1(lowband, N>>k, 1<<k);
- fill = bit_interleave_table[fill&0xF]|bit_interleave_table[fill>>4]<<2;
- }
- B>>=recombine;
- N_B<<=recombine;
-
- /* Increasing the time resolution */
- while ((N_B&1) == 0 && tf_change<0)
- {
- if (encode)
- haar1(X, N_B, B);
- if (lowband)
- haar1(lowband, N_B, B);
- fill |= fill<<B;
- B <<= 1;
- N_B >>= 1;
- time_divide++;
- tf_change++;
- }
- B0=B;
- N_B0 = N_B;
-
- /* Reorganize the samples in time order instead of frequency order */
- if (B0>1)
- {
- if (encode)
- deinterleave_hadamard(X, N_B>>recombine, B0<<recombine, longBlocks);
- if (lowband)
- deinterleave_hadamard(lowband, N_B>>recombine, B0<<recombine, longBlocks);
- }
-
- cm = quant_partition(ctx, X, N, b, B, lowband,
- LM, gain, fill);
-
- /* This code is used by the decoder and by the resynthesis-enabled encoder */
- if (resynth)
- {
- /* Undo the sample reorganization going from time order to frequency order */
- if (B0>1)
- interleave_hadamard(X, N_B>>recombine, B0<<recombine, longBlocks);
-
- /* Undo time-freq changes that we did earlier */
- N_B = N_B0;
- B = B0;
- for (k=0;k<time_divide;k++)
- {
- B >>= 1;
- N_B <<= 1;
- cm |= cm>>B;
- haar1(X, N_B, B);
- }
-
- for (k=0;k<recombine;k++)
- {
- static const unsigned char bit_deinterleave_table[16]={
- 0x00,0x03,0x0C,0x0F,0x30,0x33,0x3C,0x3F,
- 0xC0,0xC3,0xCC,0xCF,0xF0,0xF3,0xFC,0xFF
- };
- cm = bit_deinterleave_table[cm];
- haar1(X, N0>>k, 1<<k);
- }
- B<<=recombine;
-
- /* Scale output for later folding */
- if (lowband_out)
- {
- int j;
- opus_val16 n;
- n = celt_sqrt(SHL32(EXTEND32(N0),22));
- for (j=0;j<N0;j++)
- lowband_out[j] = MULT16_16_Q15(n,X[j]);
- }
- cm &= (1<<B)-1;
- }
- return cm;
-}
-
-
-/* This function is responsible for encoding and decoding a band for the stereo case. */
-static unsigned quant_band_stereo(struct band_ctx *ctx, celt_norm *X, celt_norm *Y,
- int N, int b, int B, celt_norm *lowband,
- int LM, celt_norm *lowband_out,
- celt_norm *lowband_scratch, int fill)
-{
- int imid=0, iside=0;
- int inv = 0;
- opus_val16 mid=0, side=0;
- unsigned cm=0;
-#ifdef RESYNTH
- int resynth = 1;
-#else
- int resynth = !ctx->encode;
-#endif
- int mbits, sbits, delta;
- int itheta;
- int qalloc;
- struct split_ctx sctx;
- int orig_fill;
- int encode;
- ec_ctx *ec;
-
- encode = ctx->encode;
- ec = ctx->ec;
-
- /* Special case for one sample */
- if (N==1)
- {
- return quant_band_n1(ctx, X, Y, b, lowband_out);
- }
-
- orig_fill = fill;
-
- compute_theta(ctx, &sctx, X, Y, N, &b, B, B,
- LM, 1, &fill);
- inv = sctx.inv;
- imid = sctx.imid;
- iside = sctx.iside;
- delta = sctx.delta;
- itheta = sctx.itheta;
- qalloc = sctx.qalloc;
-#ifdef OPUS_FIXED_POINT
- mid = imid;
- side = iside;
-#else
- mid = (1.f/32768)*imid;
- side = (1.f/32768)*iside;
-#endif
-
- /* This is a special case for N=2 that only works for stereo and takes
- advantage of the fact that mid and side are orthogonal to encode
- the side with just one bit. */
- if (N==2)
- {
- int c;
- int sign=0;
- celt_norm *x2, *y2;
- mbits = b;
- sbits = 0;
- /* Only need one bit for the side. */
- if (itheta != 0 && itheta != 16384)
- sbits = 1<<BITRES;
- mbits -= sbits;
- c = itheta > 8192;
- ctx->remaining_bits -= qalloc+sbits;
-
- x2 = c ? Y : X;
- y2 = c ? X : Y;
- if (sbits)
- {
- if (encode)
- {
- /* Here we only need to encode a sign for the side. */
- sign = x2[0]*y2[1] - x2[1]*y2[0] < 0;
- ec_enc_bits(ec, sign, 1);
- } else {
- sign = ec_dec_bits(ec, 1);
- }
- }
- sign = 1-2*sign;
- /* We use orig_fill here because we want to fold the side, but if
- itheta==16384, we'll have cleared the low bits of fill. */
- cm = quant_band(ctx, x2, N, mbits, B, lowband,
- LM, lowband_out, Q15ONE, lowband_scratch, orig_fill);
- /* We don't split N=2 bands, so cm is either 1 or 0 (for a fold-collapse),
- and there's no need to worry about mixing with the other channel. */
- y2[0] = -sign*x2[1];
- y2[1] = sign*x2[0];
- if (resynth)
- {
- celt_norm tmp;
- X[0] = MULT16_16_Q15(mid, X[0]);
- X[1] = MULT16_16_Q15(mid, X[1]);
- Y[0] = MULT16_16_Q15(side, Y[0]);
- Y[1] = MULT16_16_Q15(side, Y[1]);
- tmp = X[0];
- X[0] = SUB16(tmp,Y[0]);
- Y[0] = ADD16(tmp,Y[0]);
- tmp = X[1];
- X[1] = SUB16(tmp,Y[1]);
- Y[1] = ADD16(tmp,Y[1]);
- }
- } else {
- /* "Normal" split code */
- opus_int32 rebalance;
-
- mbits = IMAX(0, IMIN(b, (b-delta)/2));
- sbits = b-mbits;
- ctx->remaining_bits -= qalloc;
-
- rebalance = ctx->remaining_bits;
- if (mbits >= sbits)
- {
- /* In stereo mode, we do not apply a scaling to the mid because we need the normalized
- mid for folding later. */
- cm = quant_band(ctx, X, N, mbits, B,
- lowband, LM, lowband_out,
- Q15ONE, lowband_scratch, fill);
- rebalance = mbits - (rebalance-ctx->remaining_bits);
- if (rebalance > 3<<BITRES && itheta!=0)
- sbits += rebalance - (3<<BITRES);
-
- /* For a stereo split, the high bits of fill are always zero, so no
- folding will be done to the side. */
- cm |= quant_band(ctx, Y, N, sbits, B,
- NULL, LM, NULL,
- side, NULL, fill>>B);
- } else {
- /* For a stereo split, the high bits of fill are always zero, so no
- folding will be done to the side. */
- cm = quant_band(ctx, Y, N, sbits, B,
- NULL, LM, NULL,
- side, NULL, fill>>B);
- rebalance = sbits - (rebalance-ctx->remaining_bits);
- if (rebalance > 3<<BITRES && itheta!=16384)
- mbits += rebalance - (3<<BITRES);
- /* In stereo mode, we do not apply a scaling to the mid because we need the normalized
- mid for folding later. */
- cm |= quant_band(ctx, X, N, mbits, B,
- lowband, LM, lowband_out,
- Q15ONE, lowband_scratch, fill);
- }
- }
-
-
- /* This code is used by the decoder and by the resynthesis-enabled encoder */
- if (resynth)
- {
- if (N!=2)
- stereo_merge(X, Y, mid, N, ctx->arch);
- if (inv)
- {
- int j;
- for (j=0;j<N;j++)
- Y[j] = -Y[j];
- }
- }
- return cm;
-}
-
-
-void quant_all_bands(int encode, const CELTMode *m, int start, int end,
- celt_norm *X_, celt_norm *Y_, unsigned char *collapse_masks,
- const celt_ener *bandE, int *pulses, int shortBlocks, int spread,
- int dual_stereo, int intensity, int *tf_res, opus_int32 total_bits,
- opus_int32 balance, ec_ctx *ec, int LM, int codedBands,
- opus_uint32 *seed, int arch)
-{
- int i;
- opus_int32 remaining_bits;
- const opus_int16 * OPUS_RESTRICT eBands = m->eBands;
- celt_norm * OPUS_RESTRICT norm, * OPUS_RESTRICT norm2;
- VARDECL(celt_norm, _norm);
- celt_norm *lowband_scratch;
- int B;
- int M;
- int lowband_offset;
- int update_lowband = 1;
- int C = Y_ != NULL ? 2 : 1;
- int norm_offset;
-#ifdef RESYNTH
- int resynth = 1;
-#else
- int resynth = !encode;
-#endif
- struct band_ctx ctx;
- SAVE_STACK;
-
- M = 1<<LM;
- B = shortBlocks ? M : 1;
- norm_offset = M*eBands[start];
- /* No need to allocate norm for the last band because we don't need an
- output in that band. */
- ALLOC(_norm, C*(M*eBands[m->nbEBands-1]-norm_offset), celt_norm);
- norm = _norm;
- norm2 = norm + M*eBands[m->nbEBands-1]-norm_offset;
- /* We can use the last band as scratch space because we don't need that
- scratch space for the last band. */
- lowband_scratch = X_+M*eBands[m->nbEBands-1];
-
- lowband_offset = 0;
- ctx.bandE = bandE;
- ctx.ec = ec;
- ctx.encode = encode;
- ctx.intensity = intensity;
- ctx.m = m;
- ctx.seed = *seed;
- ctx.spread = spread;
- ctx.arch = arch;
- for (i=start;i<end;i++)
- {
- opus_int32 tell;
- int b;
- int N;
- opus_int32 curr_balance;
- int effective_lowband=-1;
- celt_norm * OPUS_RESTRICT X, * OPUS_RESTRICT Y;
- int tf_change=0;
- unsigned x_cm;
- unsigned y_cm;
- int last;
-
- ctx.i = i;
- last = (i==end-1);
-
- X = X_+M*eBands[i];
- if (Y_!=NULL)
- Y = Y_+M*eBands[i];
- else
- Y = NULL;
- N = M*eBands[i+1]-M*eBands[i];
- tell = ec_tell_frac(ec);
-
- /* Compute how many bits we want to allocate to this band */
- if (i != start)
- balance -= tell;
- remaining_bits = total_bits-tell-1;
- ctx.remaining_bits = remaining_bits;
- if (i <= codedBands-1)
- {
- curr_balance = celt_sudiv(balance, IMIN(3, codedBands-i));
- b = IMAX(0, IMIN(16383, IMIN(remaining_bits+1,pulses[i]+curr_balance)));
- } else {
- b = 0;
- }
-
- if (resynth && M*eBands[i]-N >= M*eBands[start] && (update_lowband || lowband_offset==0))
- lowband_offset = i;
-
- tf_change = tf_res[i];
- ctx.tf_change = tf_change;
- if (i>=m->effEBands)
- {
- X=norm;
- if (Y_!=NULL)
- Y = norm;
- lowband_scratch = NULL;
- }
- if (i==end-1)
- lowband_scratch = NULL;
-
- /* Get a conservative estimate of the collapse_mask's for the bands we're
- going to be folding from. */
- if (lowband_offset != 0 && (spread!=SPREAD_AGGRESSIVE || B>1 || tf_change<0))
- {
- int fold_start;
- int fold_end;
- int fold_i;
- /* This ensures we never repeat spectral content within one band */
- effective_lowband = IMAX(0, M*eBands[lowband_offset]-norm_offset-N);
- fold_start = lowband_offset;
- while(M*eBands[--fold_start] > effective_lowband+norm_offset);
- fold_end = lowband_offset-1;
- while(M*eBands[++fold_end] < effective_lowband+norm_offset+N);
- x_cm = y_cm = 0;
- fold_i = fold_start; do {
- x_cm |= collapse_masks[fold_i*C+0];
- y_cm |= collapse_masks[fold_i*C+C-1];
- } while (++fold_i<fold_end);
- }
- /* Otherwise, we'll be using the LCG to fold, so all blocks will (almost
- always) be non-zero. */
- else
- x_cm = y_cm = (1<<B)-1;
-
- if (dual_stereo && i==intensity)
- {
- int j;
-
- /* Switch off dual stereo to do intensity. */
- dual_stereo = 0;
- if (resynth)
- for (j=0;j<M*eBands[i]-norm_offset;j++)
- norm[j] = HALF32(norm[j]+norm2[j]);
- }
- if (dual_stereo)
- {
- x_cm = quant_band(&ctx, X, N, b/2, B,
- effective_lowband != -1 ? norm+effective_lowband : NULL, LM,
- last?NULL:norm+M*eBands[i]-norm_offset, Q15ONE, lowband_scratch, x_cm);
- y_cm = quant_band(&ctx, Y, N, b/2, B,
- effective_lowband != -1 ? norm2+effective_lowband : NULL, LM,
- last?NULL:norm2+M*eBands[i]-norm_offset, Q15ONE, lowband_scratch, y_cm);
- } else {
- if (Y!=NULL)
- {
- x_cm = quant_band_stereo(&ctx, X, Y, N, b, B,
- effective_lowband != -1 ? norm+effective_lowband : NULL, LM,
- last?NULL:norm+M*eBands[i]-norm_offset, lowband_scratch, x_cm|y_cm);
- } else {
- x_cm = quant_band(&ctx, X, N, b, B,
- effective_lowband != -1 ? norm+effective_lowband : NULL, LM,
- last?NULL:norm+M*eBands[i]-norm_offset, Q15ONE, lowband_scratch, x_cm|y_cm);
- }
- y_cm = x_cm;
- }
- collapse_masks[i*C+0] = (unsigned char)x_cm;
- collapse_masks[i*C+C-1] = (unsigned char)y_cm;
- balance += pulses[i] + tell;
-
- /* Update the folding position only as long as we have 1 bit/sample depth. */
- update_lowband = b>(N<<BITRES);
- }
- *seed = ctx.seed;
-
- RESTORE_STACK;
-}
-
diff --git a/drivers/opus/celt/bands.h b/drivers/opus/celt/bands.h
deleted file mode 100644
index eb7ea4cc24..0000000000
--- a/drivers/opus/celt/bands.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Copyright (c) 2008-2009 Gregory Maxwell
- Written by Jean-Marc Valin and Gregory Maxwell */
-/*
- 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.
-
- 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 BANDS_H
-#define BANDS_H
-
-#include "opus/celt/arch.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/entenc.h"
-#include "opus/celt/entdec.h"
-#include "opus/celt/rate.h"
-
-/** Compute the amplitude (sqrt energy) in each of the bands
- * @param m Mode data
- * @param X Spectrum
- * @param bandE Square root of the energy for each band (returned)
- */
-void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bandE, int end, int C, int LM);
-
-/*void compute_noise_energies(const CELTMode *m, const celt_sig *X, const opus_val16 *tonality, celt_ener *bandE);*/
-
-/** Normalise each band of X such that the energy in each band is
- equal to 1
- * @param m Mode data
- * @param X Spectrum (returned normalised)
- * @param bandE Square root of the energy for each band
- */
-void normalise_bands(const CELTMode *m, const celt_sig * OPUS_RESTRICT freq, celt_norm * OPUS_RESTRICT X, const celt_ener *bandE, int end, int C, int M);
-
-/** Denormalise each band of X to restore full amplitude
- * @param m Mode data
- * @param X Spectrum (returned de-normalised)
- * @param bandE Square root of the energy for each band
- */
-void denormalise_bands(const CELTMode *m, const celt_norm * OPUS_RESTRICT X,
- celt_sig * OPUS_RESTRICT freq, const opus_val16 *bandE, int start,
- int end, int M, int downsample, int silence);
-
-#define SPREAD_NONE (0)
-#define SPREAD_LIGHT (1)
-#define SPREAD_NORMAL (2)
-#define SPREAD_AGGRESSIVE (3)
-
-int spreading_decision(const CELTMode *m, const celt_norm *X, int *average,
- int last_decision, int *hf_average, int *tapset_decision, int update_hf,
- int end, int C, int M);
-
-#ifdef MEASURE_NORM_MSE
-void measure_norm_mse(const CELTMode *m, float *X, float *X0, float *bandE, float *bandE0, int M, int N, int C);
-#endif
-
-void haar1(celt_norm *X, int N0, int stride);
-
-/** Quantisation/encoding of the residual spectrum
- * @param encode flag that indicates whether we're encoding (1) or decoding (0)
- * @param m Mode data
- * @param start First band to process
- * @param end Last band to process + 1
- * @param X Residual (normalised)
- * @param Y Residual (normalised) for second channel (or NULL for mono)
- * @param collapse_masks Anti-collapse tracking mask
- * @param bandE Square root of the energy for each band
- * @param pulses Bit allocation (per band) for PVQ
- * @param shortBlocks Zero for long blocks, non-zero for short blocks
- * @param spread Amount of spreading to use
- * @param dual_stereo Zero for MS stereo, non-zero for dual stereo
- * @param intensity First band to use intensity stereo
- * @param tf_res Time-frequency resolution change
- * @param total_bits Total number of bits that can be used for the frame (including the ones already spent)
- * @param balance Number of unallocated bits
- * @param en Entropy coder state
- * @param LM log2() of the number of 2.5 subframes in the frame
- * @param codedBands Last band to receive bits + 1
- * @param seed Random generator seed
- * @param arch Run-time architecture (see opus_select_arch())
- */
-void quant_all_bands(int encode, const CELTMode *m, int start, int end,
- celt_norm * X, celt_norm * Y, unsigned char *collapse_masks,
- const celt_ener *bandE, int *pulses, int shortBlocks, int spread,
- int dual_stereo, int intensity, int *tf_res, opus_int32 total_bits,
- opus_int32 balance, ec_ctx *ec, int M, int codedBands, opus_uint32 *seed,
- int arch);
-
-void anti_collapse(const CELTMode *m, celt_norm *X_,
- unsigned char *collapse_masks, int LM, int C, int size, int start,
- int end, const opus_val16 *logE, const opus_val16 *prev1logE,
- const opus_val16 *prev2logE, const int *pulses, opus_uint32 seed,
- int arch);
-
-opus_uint32 celt_lcg_rand(opus_uint32 seed);
-
-int hysteresis_decision(opus_val16 val, const opus_val16 *thresholds, const opus_val16 *hysteresis, int N, int prev);
-
-#endif /* BANDS_H */
diff --git a/drivers/opus/celt/celt.c b/drivers/opus/celt/celt.c
deleted file mode 100644
index 4a16651441..0000000000
--- a/drivers/opus/celt/celt.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2010 Xiph.Org Foundation
- Copyright (c) 2008 Gregory Maxwell
- Written by Jean-Marc Valin and Gregory Maxwell */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#define CELT_C
-
-#include "opus/celt/os_support.h"
-#include "opus/celt/mdct.h"
-#include <math.h>
-#include "opus/celt/celt.h"
-#include "opus/celt/pitch.h"
-#include "opus/celt/bands.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/entcode.h"
-#include "opus/celt/quant_bands.h"
-#include "opus/celt/rate.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/float_cast.h"
-#include <stdarg.h>
-#include "opus/celt/celt_lpc.h"
-#include "opus/celt/vq.h"
-
-#ifndef PACKAGE_VERSION
-#define PACKAGE_VERSION "unknown"
-#endif
-
-#if defined(MIPSr1_ASM)
-#include "opus/celt/mips/celt_mipsr1.h"
-#endif
-
-
-int resampling_factor(opus_int32 rate)
-{
- int ret;
- switch (rate)
- {
- case 48000:
- ret = 1;
- break;
- case 24000:
- ret = 2;
- break;
- case 16000:
- ret = 3;
- break;
- case 12000:
- ret = 4;
- break;
- case 8000:
- ret = 6;
- break;
- default:
-#ifndef CUSTOM_MODES
- celt_assert(0);
-#endif
- ret = 0;
- break;
- }
- return ret;
-}
-
-#if !defined(OVERRIDE_COMB_FILTER_CONST) || defined(NON_STATIC_COMB_FILTER_CONST_C)
-/* This version should be faster on ARM */
-#ifdef OPUS_ARM_ASM
-#ifndef NON_STATIC_COMB_FILTER_CONST_C
-static
-#endif
-void comb_filter_const_c(opus_val32 *y, opus_val32 *x, int T, int N,
- opus_val16 g10, opus_val16 g11, opus_val16 g12)
-{
- opus_val32 x0, x1, x2, x3, x4;
- int i;
- x4 = SHL32(x[-T-2], 1);
- x3 = SHL32(x[-T-1], 1);
- x2 = SHL32(x[-T], 1);
- x1 = SHL32(x[-T+1], 1);
- for (i=0;i<N-4;i+=5)
- {
- opus_val32 t;
- x0=SHL32(x[i-T+2],1);
- t = MAC16_32_Q16(x[i], g10, x2);
- t = MAC16_32_Q16(t, g11, ADD32(x1,x3));
- t = MAC16_32_Q16(t, g12, ADD32(x0,x4));
- y[i] = t;
- x4=SHL32(x[i-T+3],1);
- t = MAC16_32_Q16(x[i+1], g10, x1);
- t = MAC16_32_Q16(t, g11, ADD32(x0,x2));
- t = MAC16_32_Q16(t, g12, ADD32(x4,x3));
- y[i+1] = t;
- x3=SHL32(x[i-T+4],1);
- t = MAC16_32_Q16(x[i+2], g10, x0);
- t = MAC16_32_Q16(t, g11, ADD32(x4,x1));
- t = MAC16_32_Q16(t, g12, ADD32(x3,x2));
- y[i+2] = t;
- x2=SHL32(x[i-T+5],1);
- t = MAC16_32_Q16(x[i+3], g10, x4);
- t = MAC16_32_Q16(t, g11, ADD32(x3,x0));
- t = MAC16_32_Q16(t, g12, ADD32(x2,x1));
- y[i+3] = t;
- x1=SHL32(x[i-T+6],1);
- t = MAC16_32_Q16(x[i+4], g10, x3);
- t = MAC16_32_Q16(t, g11, ADD32(x2,x4));
- t = MAC16_32_Q16(t, g12, ADD32(x1,x0));
- y[i+4] = t;
- }
-#ifdef CUSTOM_MODES
- for (;i<N;i++)
- {
- opus_val32 t;
- x0=SHL32(x[i-T+2],1);
- t = MAC16_32_Q16(x[i], g10, x2);
- t = MAC16_32_Q16(t, g11, ADD32(x1,x3));
- t = MAC16_32_Q16(t, g12, ADD32(x0,x4));
- y[i] = t;
- x4=x3;
- x3=x2;
- x2=x1;
- x1=x0;
- }
-#endif
-}
-#else
-#ifndef NON_STATIC_COMB_FILTER_CONST_C
-static
-#endif
-void comb_filter_const_c(opus_val32 *y, opus_val32 *x, int T, int N,
- opus_val16 g10, opus_val16 g11, opus_val16 g12)
-{
- opus_val32 x0, x1, x2, x3, x4;
- int i;
- x4 = x[-T-2];
- x3 = x[-T-1];
- x2 = x[-T];
- x1 = x[-T+1];
- for (i=0;i<N;i++)
- {
- x0=x[i-T+2];
- y[i] = x[i]
- + MULT16_32_Q15(g10,x2)
- + MULT16_32_Q15(g11,ADD32(x1,x3))
- + MULT16_32_Q15(g12,ADD32(x0,x4));
- x4=x3;
- x3=x2;
- x2=x1;
- x1=x0;
- }
-
-}
-#endif
-#endif
-
-#ifndef OVERRIDE_comb_filter
-void comb_filter(opus_val32 *y, opus_val32 *x, int T0, int T1, int N,
- opus_val16 g0, opus_val16 g1, int tapset0, int tapset1,
- const opus_val16 *window, int overlap, int arch)
-{
- int i;
- /* printf ("%d %d %f %f\n", T0, T1, g0, g1); */
- opus_val16 g00, g01, g02, g10, g11, g12;
- opus_val32 x0, x1, x2, x3, x4;
- static const opus_val16 gains[3][3] = {
- {QCONST16(0.3066406250f, 15), QCONST16(0.2170410156f, 15), QCONST16(0.1296386719f, 15)},
- {QCONST16(0.4638671875f, 15), QCONST16(0.2680664062f, 15), QCONST16(0.f, 15)},
- {QCONST16(0.7998046875f, 15), QCONST16(0.1000976562f, 15), QCONST16(0.f, 15)}};
-
- if (g0==0 && g1==0)
- {
- /* OPT: Happens to work without the OPUS_MOVE(), but only because the current encoder already copies x to y */
- if (x!=y)
- OPUS_MOVE(y, x, N);
- return;
- }
- g00 = MULT16_16_P15(g0, gains[tapset0][0]);
- g01 = MULT16_16_P15(g0, gains[tapset0][1]);
- g02 = MULT16_16_P15(g0, gains[tapset0][2]);
- g10 = MULT16_16_P15(g1, gains[tapset1][0]);
- g11 = MULT16_16_P15(g1, gains[tapset1][1]);
- g12 = MULT16_16_P15(g1, gains[tapset1][2]);
- x1 = x[-T1+1];
- x2 = x[-T1 ];
- x3 = x[-T1-1];
- x4 = x[-T1-2];
- /* If the filter didn't change, we don't need the overlap */
- if (g0==g1 && T0==T1 && tapset0==tapset1)
- overlap=0;
- for (i=0;i<overlap;i++)
- {
- opus_val16 f;
- x0=x[i-T1+2];
- f = MULT16_16_Q15(window[i],window[i]);
- y[i] = x[i]
- + MULT16_32_Q15(MULT16_16_Q15((Q15ONE-f),g00),x[i-T0])
- + MULT16_32_Q15(MULT16_16_Q15((Q15ONE-f),g01),ADD32(x[i-T0+1],x[i-T0-1]))
- + MULT16_32_Q15(MULT16_16_Q15((Q15ONE-f),g02),ADD32(x[i-T0+2],x[i-T0-2]))
- + MULT16_32_Q15(MULT16_16_Q15(f,g10),x2)
- + MULT16_32_Q15(MULT16_16_Q15(f,g11),ADD32(x1,x3))
- + MULT16_32_Q15(MULT16_16_Q15(f,g12),ADD32(x0,x4));
- x4=x3;
- x3=x2;
- x2=x1;
- x1=x0;
-
- }
- if (g1==0)
- {
- /* OPT: Happens to work without the OPUS_MOVE(), but only because the current encoder already copies x to y */
- if (x!=y)
- OPUS_MOVE(y+overlap, x+overlap, N-overlap);
- return;
- }
-
- /* Compute the part with the constant filter. */
- comb_filter_const(y+i, x+i, T1, N-i, g10, g11, g12, arch);
-}
-#endif /* OVERRIDE_comb_filter */
-
-const signed char tf_select_table[4][8] = {
- {0, -1, 0, -1, 0,-1, 0,-1},
- {0, -1, 0, -2, 1, 0, 1,-1},
- {0, -2, 0, -3, 2, 0, 1,-1},
- {0, -2, 0, -3, 3, 0, 1,-1},
-};
-
-
-void init_caps(const CELTMode *m,int *cap,int LM,int C)
-{
- int i;
- for (i=0;i<m->nbEBands;i++)
- {
- int N;
- N=(m->eBands[i+1]-m->eBands[i])<<LM;
- cap[i] = (m->cache.caps[m->nbEBands*(2*LM+C-1)+i]+64)*C*N>>2;
- }
-}
-
-
-
-const char *opus_strerror(int error)
-{
- static const char * const error_strings[8] = {
- "success",
- "invalid argument",
- "buffer too small",
- "internal error",
- "corrupted stream",
- "request not implemented",
- "invalid state",
- "memory allocation failed"
- };
- if (error > 0 || error < -7)
- return "unknown error";
- else
- return error_strings[-error];
-}
-
-const char *opus_get_version_string(void)
-{
- return "libopus " PACKAGE_VERSION
- /* Applications may rely on the presence of this substring in the version
- string to determine if they have a fixed-point or floating-point build
- at runtime. */
-#ifdef OPUS_FIXED_POINT
- "-fixed"
-#endif
-#ifdef FUZZING
- "-fuzzing"
-#endif
- ;
-}
diff --git a/drivers/opus/celt/celt.h b/drivers/opus/celt/celt.h
deleted file mode 100644
index 72814dc0de..0000000000
--- a/drivers/opus/celt/celt.h
+++ /dev/null
@@ -1,229 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Copyright (c) 2008 Gregory Maxwell
- Written by Jean-Marc Valin and Gregory Maxwell */
-/**
- @file celt.h
- @brief Contains all the functions for encoding and decoding audio
- */
-
-/*
- 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.
-
- 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 CELT_H
-#define CELT_H
-
-#include "opus/opus_types.h"
-#include "opus/opus_defines.h"
-#include "opus/opus_custom.h"
-#include "opus/celt/entenc.h"
-#include "opus/celt/entdec.h"
-#include "opus/celt/arch.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define CELTEncoder OpusCustomEncoder
-#define CELTDecoder OpusCustomDecoder
-#define CELTMode OpusCustomMode
-
-typedef struct {
- int valid;
- float tonality;
- float tonality_slope;
- float noisiness;
- float activity;
- float music_prob;
- int bandwidth;
-}AnalysisInfo;
-
-#define __celt_check_mode_ptr_ptr(ptr) ((ptr) + ((ptr) - (const CELTMode**)(ptr)))
-
-#define __celt_check_analysis_ptr(ptr) ((ptr) + ((ptr) - (const AnalysisInfo*)(ptr)))
-
-/* Encoder/decoder Requests */
-
-/* Expose this option again when variable framesize actually works */
-#define OPUS_FRAMESIZE_VARIABLE 5010 /**< Optimize the frame size dynamically */
-
-
-#define CELT_SET_PREDICTION_REQUEST 10002
-/** Controls the use of interframe prediction.
- 0=Independent frames
- 1=Short term interframe prediction allowed
- 2=Long term prediction allowed
- */
-#define CELT_SET_PREDICTION(x) CELT_SET_PREDICTION_REQUEST, __opus_check_int(x)
-
-#define CELT_SET_INPUT_CLIPPING_REQUEST 10004
-#define CELT_SET_INPUT_CLIPPING(x) CELT_SET_INPUT_CLIPPING_REQUEST, __opus_check_int(x)
-
-#define CELT_GET_AND_CLEAR_ERROR_REQUEST 10007
-#define CELT_GET_AND_CLEAR_ERROR(x) CELT_GET_AND_CLEAR_ERROR_REQUEST, __opus_check_int_ptr(x)
-
-#define CELT_SET_CHANNELS_REQUEST 10008
-#define CELT_SET_CHANNELS(x) CELT_SET_CHANNELS_REQUEST, __opus_check_int(x)
-
-
-/* Internal */
-#define CELT_SET_START_BAND_REQUEST 10010
-#define CELT_SET_START_BAND(x) CELT_SET_START_BAND_REQUEST, __opus_check_int(x)
-
-#define CELT_SET_END_BAND_REQUEST 10012
-#define CELT_SET_END_BAND(x) CELT_SET_END_BAND_REQUEST, __opus_check_int(x)
-
-#define CELT_GET_MODE_REQUEST 10015
-/** Get the CELTMode used by an encoder or decoder */
-#define CELT_GET_MODE(x) CELT_GET_MODE_REQUEST, __celt_check_mode_ptr_ptr(x)
-
-#define CELT_SET_SIGNALLING_REQUEST 10016
-#define CELT_SET_SIGNALLING(x) CELT_SET_SIGNALLING_REQUEST, __opus_check_int(x)
-
-#define CELT_SET_TONALITY_REQUEST 10018
-#define CELT_SET_TONALITY(x) CELT_SET_TONALITY_REQUEST, __opus_check_int(x)
-#define CELT_SET_TONALITY_SLOPE_REQUEST 10020
-#define CELT_SET_TONALITY_SLOPE(x) CELT_SET_TONALITY_SLOPE_REQUEST, __opus_check_int(x)
-
-#define CELT_SET_ANALYSIS_REQUEST 10022
-#define CELT_SET_ANALYSIS(x) CELT_SET_ANALYSIS_REQUEST, __celt_check_analysis_ptr(x)
-
-#define OPUS_SET_LFE_REQUEST 10024
-#define OPUS_SET_LFE(x) OPUS_SET_LFE_REQUEST, __opus_check_int(x)
-
-#define OPUS_SET_ENERGY_MASK_REQUEST 10026
-#define OPUS_SET_ENERGY_MASK(x) OPUS_SET_ENERGY_MASK_REQUEST, __opus_check_val16_ptr(x)
-
-/* Encoder stuff */
-
-int celt_encoder_get_size(int channels);
-
-int celt_encode_with_ec(OpusCustomEncoder * OPUS_RESTRICT st, const opus_val16 * pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes, ec_enc *enc);
-
-int celt_encoder_init(CELTEncoder *st, opus_int32 sampling_rate, int channels,
- int arch);
-
-
-
-/* Decoder stuff */
-
-int celt_decoder_get_size(int channels);
-
-
-int celt_decoder_init(CELTDecoder *st, opus_int32 sampling_rate, int channels);
-
-int celt_decode_with_ec(OpusCustomDecoder * OPUS_RESTRICT st, const unsigned char *data,
- int len, opus_val16 * OPUS_RESTRICT pcm, int frame_size, ec_dec *dec, int accum);
-
-#define celt_encoder_ctl opus_custom_encoder_ctl
-#define celt_decoder_ctl opus_custom_decoder_ctl
-
-
-#ifdef CUSTOM_MODES
-#define OPUS_CUSTOM_NOSTATIC
-#else
-#define OPUS_CUSTOM_NOSTATIC static OPUS_INLINE
-#endif
-
-static const unsigned char trim_icdf[11] = {126, 124, 119, 109, 87, 41, 19, 9, 4, 2, 0};
-/* Probs: NONE: 21.875%, LIGHT: 6.25%, NORMAL: 65.625%, AGGRESSIVE: 6.25% */
-static const unsigned char spread_icdf[4] = {25, 23, 2, 0};
-
-static const unsigned char tapset_icdf[3]={2,1,0};
-
-#ifdef CUSTOM_MODES
-static const unsigned char toOpusTable[20] = {
- 0xE0, 0xE8, 0xF0, 0xF8,
- 0xC0, 0xC8, 0xD0, 0xD8,
- 0xA0, 0xA8, 0xB0, 0xB8,
- 0x00, 0x00, 0x00, 0x00,
- 0x80, 0x88, 0x90, 0x98,
-};
-
-static const unsigned char fromOpusTable[16] = {
- 0x80, 0x88, 0x90, 0x98,
- 0x40, 0x48, 0x50, 0x58,
- 0x20, 0x28, 0x30, 0x38,
- 0x00, 0x08, 0x10, 0x18
-};
-
-static OPUS_INLINE int toOpus(unsigned char c)
-{
- int ret=0;
- if (c<0xA0)
- ret = toOpusTable[c>>3];
- if (ret == 0)
- return -1;
- else
- return ret|(c&0x7);
-}
-
-static OPUS_INLINE int fromOpus(unsigned char c)
-{
- if (c<0x80)
- return -1;
- else
- return fromOpusTable[(c>>3)-16] | (c&0x7);
-}
-#endif /* CUSTOM_MODES */
-
-#define COMBFILTER_MAXPERIOD 1024
-#define COMBFILTER_MINPERIOD 15
-
-extern const signed char tf_select_table[4][8];
-
-int resampling_factor(opus_int32 rate);
-
-void celt_preemphasis(const opus_val16 * OPUS_RESTRICT pcmp, celt_sig * OPUS_RESTRICT inp,
- int N, int CC, int upsample, const opus_val16 *coef, celt_sig *mem, int clip);
-
-void comb_filter(opus_val32 *y, opus_val32 *x, int T0, int T1, int N,
- opus_val16 g0, opus_val16 g1, int tapset0, int tapset1,
- const opus_val16 *window, int overlap, int arch);
-
-#ifdef NON_STATIC_COMB_FILTER_CONST_C
-void comb_filter_const_c(opus_val32 *y, opus_val32 *x, int T, int N,
- opus_val16 g10, opus_val16 g11, opus_val16 g12);
-#endif
-
-#ifndef OVERRIDE_COMB_FILTER_CONST
-# define comb_filter_const(y, x, T, N, g10, g11, g12, arch) \
- ((void)(arch),comb_filter_const_c(y, x, T, N, g10, g11, g12))
-#endif
-
-void init_caps(const CELTMode *m,int *cap,int LM,int C);
-
-#ifdef RESYNTH
-void deemphasis(celt_sig *in[], opus_val16 *pcm, int N, int C, int downsample, const opus_val16 *coef, celt_sig *mem);
-void celt_synthesis(const CELTMode *mode, celt_norm *X, celt_sig * out_syn[],
- opus_val16 *oldBandE, int start, int effEnd, int C, int CC, int isTransient,
- int LM, int downsample, int silence);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* CELT_H */
diff --git a/drivers/opus/celt/celt_decoder.c b/drivers/opus/celt/celt_decoder.c
deleted file mode 100644
index 88072ed110..0000000000
--- a/drivers/opus/celt/celt_decoder.c
+++ /dev/null
@@ -1,1241 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2010 Xiph.Org Foundation
- Copyright (c) 2008 Gregory Maxwell
- Written by Jean-Marc Valin and Gregory Maxwell */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#define CELT_DECODER_C
-
-#include "opus/celt/cpu_support.h"
-#include "opus/celt/os_support.h"
-#include "opus/celt/mdct.h"
-#include <math.h>
-#include "opus/celt/celt.h"
-#include "opus/celt/pitch.h"
-#include "opus/celt/bands.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/entcode.h"
-#include "opus/celt/quant_bands.h"
-#include "opus/celt/rate.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/float_cast.h"
-#include <stdarg.h>
-#include "opus/celt/celt_lpc.h"
-#include "opus/celt/vq.h"
-
-#if defined(SMALL_FOOTPRINT) && defined(FIXED_POINT)
-#define NORM_ALIASING_HACK
-#endif
-/**********************************************************************/
-/* */
-/* DECODER */
-/* */
-/**********************************************************************/
-#define DECODE_BUFFER_SIZE 2048
-
-/** Decoder state
- @brief Decoder state
- */
-struct OpusCustomDecoder {
- const OpusCustomMode *mode;
- int overlap;
- int channels;
- int stream_channels;
-
- int downsample;
- int start, end;
- int signalling;
- int arch;
-
- /* Everything beyond this point gets cleared on a reset */
-#define DECODER_RESET_START rng
-
- opus_uint32 rng;
- int error;
- int last_pitch_index;
- int loss_count;
- int postfilter_period;
- int postfilter_period_old;
- opus_val16 postfilter_gain;
- opus_val16 postfilter_gain_old;
- int postfilter_tapset;
- int postfilter_tapset_old;
-
- celt_sig preemph_memD[2];
-
- celt_sig _decode_mem[1]; /* Size = channels*(DECODE_BUFFER_SIZE+mode->overlap) */
- /* opus_val16 lpc[], Size = channels*LPC_ORDER */
- /* opus_val16 oldEBands[], Size = 2*mode->nbEBands */
- /* opus_val16 oldLogE[], Size = 2*mode->nbEBands */
- /* opus_val16 oldLogE2[], Size = 2*mode->nbEBands */
- /* opus_val16 backgroundLogE[], Size = 2*mode->nbEBands */
-};
-
-int celt_decoder_get_size(int channels)
-{
- const CELTMode *mode = opus_custom_mode_create(48000, 960, NULL);
- return opus_custom_decoder_get_size(mode, channels);
-}
-
-OPUS_CUSTOM_NOSTATIC int opus_custom_decoder_get_size(const CELTMode *mode, int channels)
-{
- int size = sizeof(struct CELTDecoder)
- + (channels*(DECODE_BUFFER_SIZE+mode->overlap)-1)*sizeof(celt_sig)
- + channels*LPC_ORDER*sizeof(opus_val16)
- + 4*2*mode->nbEBands*sizeof(opus_val16);
- return size;
-}
-
-#ifdef CUSTOM_MODES
-CELTDecoder *opus_custom_decoder_create(const CELTMode *mode, int channels, int *error)
-{
- int ret;
- CELTDecoder *st = (CELTDecoder *)opus_alloc(opus_custom_decoder_get_size(mode, channels));
- ret = opus_custom_decoder_init(st, mode, channels);
- if (ret != OPUS_OK)
- {
- opus_custom_decoder_destroy(st);
- st = NULL;
- }
- if (error)
- *error = ret;
- return st;
-}
-#endif /* CUSTOM_MODES */
-
-int celt_decoder_init(CELTDecoder *st, opus_int32 sampling_rate, int channels)
-{
- int ret;
- ret = opus_custom_decoder_init(st, opus_custom_mode_create(48000, 960, NULL), channels);
- if (ret != OPUS_OK)
- return ret;
- st->downsample = resampling_factor(sampling_rate);
- if (st->downsample==0)
- return OPUS_BAD_ARG;
- else
- return OPUS_OK;
-}
-
-OPUS_CUSTOM_NOSTATIC int opus_custom_decoder_init(CELTDecoder *st, const CELTMode *mode, int channels)
-{
- if (channels < 0 || channels > 2)
- return OPUS_BAD_ARG;
-
- if (st==NULL)
- return OPUS_ALLOC_FAIL;
-
- OPUS_CLEAR((char*)st, opus_custom_decoder_get_size(mode, channels));
-
- st->mode = mode;
- st->overlap = mode->overlap;
- st->stream_channels = st->channels = channels;
-
- st->downsample = 1;
- st->start = 0;
- st->end = st->mode->effEBands;
- st->signalling = 1;
- st->arch = opus_select_arch();
-
- st->loss_count = 0;
-
- opus_custom_decoder_ctl(st, OPUS_RESET_STATE);
-
- return OPUS_OK;
-}
-
-#ifdef CUSTOM_MODES
-void opus_custom_decoder_destroy(CELTDecoder *st)
-{
- opus_free(st);
-}
-#endif /* CUSTOM_MODES */
-
-
-#ifndef RESYNTH
-static
-#endif
-void deemphasis(celt_sig *in[], opus_val16 *pcm, int N, int C, int downsample, const opus_val16 *coef,
- celt_sig *mem, int accum)
-{
- int c;
- int Nd;
- int apply_downsampling=0;
- opus_val16 coef0;
- VARDECL(celt_sig, scratch);
- SAVE_STACK;
-#ifndef OPUS_FIXED_POINT
- (void)accum;
- celt_assert(accum==0);
-#endif
- ALLOC(scratch, N, celt_sig);
- coef0 = coef[0];
- Nd = N/downsample;
- c=0; do {
- int j;
- celt_sig * OPUS_RESTRICT x;
- opus_val16 * OPUS_RESTRICT y;
- celt_sig m = mem[c];
- x =in[c];
- y = pcm+c;
-#ifdef CUSTOM_MODES
- if (coef[1] != 0)
- {
- opus_val16 coef1 = coef[1];
- opus_val16 coef3 = coef[3];
- for (j=0;j<N;j++)
- {
- celt_sig tmp = x[j] + m + VERY_SMALL;
- m = MULT16_32_Q15(coef0, tmp)
- - MULT16_32_Q15(coef1, x[j]);
- tmp = SHL32(MULT16_32_Q15(coef3, tmp), 2);
- scratch[j] = tmp;
- }
- apply_downsampling=1;
- } else
-#endif
- if (downsample>1)
- {
- /* Shortcut for the standard (non-custom modes) case */
- for (j=0;j<N;j++)
- {
- celt_sig tmp = x[j] + m + VERY_SMALL;
- m = MULT16_32_Q15(coef0, tmp);
- scratch[j] = tmp;
- }
- apply_downsampling=1;
- } else {
- /* Shortcut for the standard (non-custom modes) case */
-#ifdef OPUS_FIXED_POINT
- if (accum)
- {
- for (j=0;j<N;j++)
- {
- celt_sig tmp = x[j] + m + VERY_SMALL;
- m = MULT16_32_Q15(coef0, tmp);
- y[j*C] = SAT16(ADD32(y[j*C], SCALEOUT(SIG2WORD16(tmp))));
- }
- } else
-#endif
- {
- for (j=0;j<N;j++)
- {
- celt_sig tmp = x[j] + m + VERY_SMALL;
- m = MULT16_32_Q15(coef0, tmp);
- y[j*C] = SCALEOUT(SIG2WORD16(tmp));
- }
- }
- }
- mem[c] = m;
-
- if (apply_downsampling)
- {
- /* Perform down-sampling */
-#ifdef OPUS_FIXED_POINT
- if (accum)
- {
- for (j=0;j<Nd;j++)
- y[j*C] = SAT16(ADD32(y[j*C], SCALEOUT(SIG2WORD16(scratch[j*downsample]))));
- } else
-#endif
- {
- for (j=0;j<Nd;j++)
- y[j*C] = SCALEOUT(SIG2WORD16(scratch[j*downsample]));
- }
- }
- } while (++c<C);
- RESTORE_STACK;
-}
-
-#ifndef RESYNTH
-static
-#endif
-void celt_synthesis(const CELTMode *mode, celt_norm *X, celt_sig * out_syn[],
- opus_val16 *oldBandE, int start, int effEnd, int C, int CC,
- int isTransient, int LM, int downsample,
- int silence, int arch)
-{
- int c, i;
- int M;
- int b;
- int B;
- int N, NB;
- int shift;
- int nbEBands;
- int overlap;
- VARDECL(celt_sig, freq);
- SAVE_STACK;
-
- overlap = mode->overlap;
- nbEBands = mode->nbEBands;
- N = mode->shortMdctSize<<LM;
- ALLOC(freq, N, celt_sig); /**< Interleaved signal MDCTs */
- M = 1<<LM;
-
- if (isTransient)
- {
- B = M;
- NB = mode->shortMdctSize;
- shift = mode->maxLM;
- } else {
- B = 1;
- NB = mode->shortMdctSize<<LM;
- shift = mode->maxLM-LM;
- }
-
- if (CC==2&&C==1)
- {
- /* Copying a mono streams to two channels */
- celt_sig *freq2;
- denormalise_bands(mode, X, freq, oldBandE, start, effEnd, M,
- downsample, silence);
- /* Store a temporary copy in the output buffer because the IMDCT destroys its input. */
- freq2 = out_syn[1]+overlap/2;
- OPUS_COPY(freq2, freq, N);
- for (b=0;b<B;b++)
- clt_mdct_backward(&mode->mdct, &freq2[b], out_syn[0]+NB*b, mode->window, overlap, shift, B, arch);
- for (b=0;b<B;b++)
- clt_mdct_backward(&mode->mdct, &freq[b], out_syn[1]+NB*b, mode->window, overlap, shift, B, arch);
- } else if (CC==1&&C==2)
- {
- /* Downmixing a stereo stream to mono */
- celt_sig *freq2;
- freq2 = out_syn[0]+overlap/2;
- denormalise_bands(mode, X, freq, oldBandE, start, effEnd, M,
- downsample, silence);
- /* Use the output buffer as temp array before downmixing. */
- denormalise_bands(mode, X+N, freq2, oldBandE+nbEBands, start, effEnd, M,
- downsample, silence);
- for (i=0;i<N;i++)
- freq[i] = HALF32(ADD32(freq[i],freq2[i]));
- for (b=0;b<B;b++)
- clt_mdct_backward(&mode->mdct, &freq[b], out_syn[0]+NB*b, mode->window, overlap, shift, B, arch);
- } else {
- /* Normal case (mono or stereo) */
- c=0; do {
- denormalise_bands(mode, X+c*N, freq, oldBandE+c*nbEBands, start, effEnd, M,
- downsample, silence);
- for (b=0;b<B;b++)
- clt_mdct_backward(&mode->mdct, &freq[b], out_syn[c]+NB*b, mode->window, overlap, shift, B, arch);
- } while (++c<CC);
- }
- RESTORE_STACK;
-}
-
-static void tf_decode(int start, int end, int isTransient, int *tf_res, int LM, ec_dec *dec)
-{
- int i, curr, tf_select;
- int tf_select_rsv;
- int tf_changed;
- int logp;
- opus_uint32 budget;
- opus_uint32 tell;
-
- budget = dec->storage*8;
- tell = ec_tell(dec);
- logp = isTransient ? 2 : 4;
- tf_select_rsv = LM>0 && tell+logp+1<=budget;
- budget -= tf_select_rsv;
- tf_changed = curr = 0;
- for (i=start;i<end;i++)
- {
- if (tell+logp<=budget)
- {
- curr ^= ec_dec_bit_logp(dec, logp);
- tell = ec_tell(dec);
- tf_changed |= curr;
- }
- tf_res[i] = curr;
- logp = isTransient ? 4 : 5;
- }
- tf_select = 0;
- if (tf_select_rsv &&
- tf_select_table[LM][4*isTransient+0+tf_changed] !=
- tf_select_table[LM][4*isTransient+2+tf_changed])
- {
- tf_select = ec_dec_bit_logp(dec, 1);
- }
- for (i=start;i<end;i++)
- {
- tf_res[i] = tf_select_table[LM][4*isTransient+2*tf_select+tf_res[i]];
- }
-}
-
-/* The maximum pitch lag to allow in the pitch-based PLC. It's possible to save
- CPU time in the PLC pitch search by making this smaller than MAX_PERIOD. The
- current value corresponds to a pitch of 66.67 Hz. */
-#define PLC_PITCH_LAG_MAX (720)
-/* The minimum pitch lag to allow in the pitch-based PLC. This corresponds to a
- pitch of 480 Hz. */
-#define PLC_PITCH_LAG_MIN (100)
-
-static int celt_plc_pitch_search(celt_sig *decode_mem[2], int C, int arch)
-{
- int pitch_index;
- VARDECL( opus_val16, lp_pitch_buf );
- SAVE_STACK;
- ALLOC( lp_pitch_buf, DECODE_BUFFER_SIZE>>1, opus_val16 );
- pitch_downsample(decode_mem, lp_pitch_buf,
- DECODE_BUFFER_SIZE, C, arch);
- pitch_search(lp_pitch_buf+(PLC_PITCH_LAG_MAX>>1), lp_pitch_buf,
- DECODE_BUFFER_SIZE-PLC_PITCH_LAG_MAX,
- PLC_PITCH_LAG_MAX-PLC_PITCH_LAG_MIN, &pitch_index, arch);
- pitch_index = PLC_PITCH_LAG_MAX-pitch_index;
- RESTORE_STACK;
- return pitch_index;
-}
-
-static void celt_decode_lost(CELTDecoder * OPUS_RESTRICT st, int N, int LM)
-{
- int c;
- int i;
- const int C = st->channels;
- celt_sig *decode_mem[2];
- celt_sig *out_syn[2];
- opus_val16 *lpc;
- opus_val16 *oldBandE, *oldLogE, *oldLogE2, *backgroundLogE;
- const OpusCustomMode *mode;
- int nbEBands;
- int overlap;
- int start;
- int loss_count;
- int noise_based;
- const opus_int16 *eBands;
- SAVE_STACK;
-
- mode = st->mode;
- nbEBands = mode->nbEBands;
- overlap = mode->overlap;
- eBands = mode->eBands;
-
- c=0; do {
- decode_mem[c] = st->_decode_mem + c*(DECODE_BUFFER_SIZE+overlap);
- out_syn[c] = decode_mem[c]+DECODE_BUFFER_SIZE-N;
- } while (++c<C);
- lpc = (opus_val16*)(st->_decode_mem+(DECODE_BUFFER_SIZE+overlap)*C);
- oldBandE = lpc+C*LPC_ORDER;
- oldLogE = oldBandE + 2*nbEBands;
- oldLogE2 = oldLogE + 2*nbEBands;
- backgroundLogE = oldLogE2 + 2*nbEBands;
-
- loss_count = st->loss_count;
- start = st->start;
- noise_based = loss_count >= 5 || start != 0;
- if (noise_based)
- {
- /* Noise-based PLC/CNG */
-#ifdef NORM_ALIASING_HACK
- celt_norm *X;
-#else
- VARDECL(celt_norm, X);
-#endif
- opus_uint32 seed;
- int end;
- int effEnd;
- opus_val16 decay;
- end = st->end;
- effEnd = IMAX(start, IMIN(end, mode->effEBands));
-
-#ifdef NORM_ALIASING_HACK
- /* This is an ugly hack that breaks aliasing rules and would be easily broken,
- but it saves almost 4kB of stack. */
- X = (celt_norm*)(out_syn[C-1]+overlap/2);
-#else
- ALLOC(X, C*N, celt_norm); /**< Interleaved normalised MDCTs */
-#endif
-
- /* Energy decay */
- decay = loss_count==0 ? QCONST16(1.5f, DB_SHIFT) : QCONST16(.5f, DB_SHIFT);
- c=0; do
- {
- for (i=start;i<end;i++)
- oldBandE[c*nbEBands+i] = MAX16(backgroundLogE[c*nbEBands+i], oldBandE[c*nbEBands+i] - decay);
- } while (++c<C);
- seed = st->rng;
- for (c=0;c<C;c++)
- {
- for (i=start;i<effEnd;i++)
- {
- int j;
- int boffs;
- int blen;
- boffs = N*c+(eBands[i]<<LM);
- blen = (eBands[i+1]-eBands[i])<<LM;
- for (j=0;j<blen;j++)
- {
- seed = celt_lcg_rand(seed);
- X[boffs+j] = (celt_norm)((opus_int32)seed>>20);
- }
- renormalise_vector(X+boffs, blen, Q15ONE, st->arch);
- }
- }
- st->rng = seed;
-
- c=0; do {
- OPUS_MOVE(decode_mem[c], decode_mem[c]+N,
- DECODE_BUFFER_SIZE-N+(overlap>>1));
- } while (++c<C);
-
- celt_synthesis(mode, X, out_syn, oldBandE, start, effEnd, C, C, 0, LM, st->downsample, 0, st->arch);
- } else {
- /* Pitch-based PLC */
- const opus_val16 *window;
- opus_val16 fade = Q15ONE;
- int pitch_index;
- VARDECL(opus_val32, etmp);
- VARDECL(opus_val16, exc);
-
- if (loss_count == 0)
- {
- st->last_pitch_index = pitch_index = celt_plc_pitch_search(decode_mem, C, st->arch);
- } else {
- pitch_index = st->last_pitch_index;
- fade = QCONST16(.8f,15);
- }
-
- ALLOC(etmp, overlap, opus_val32);
- ALLOC(exc, MAX_PERIOD, opus_val16);
- window = mode->window;
- c=0; do {
- opus_val16 decay;
- opus_val16 attenuation;
- opus_val32 S1=0;
- celt_sig *buf;
- int extrapolation_offset;
- int extrapolation_len;
- int exc_length;
- int j;
-
- buf = decode_mem[c];
- for (i=0;i<MAX_PERIOD;i++) {
- exc[i] = ROUND16(buf[DECODE_BUFFER_SIZE-MAX_PERIOD+i], SIG_SHIFT);
- }
-
- if (loss_count == 0)
- {
- opus_val32 ac[LPC_ORDER+1];
- /* Compute LPC coefficients for the last MAX_PERIOD samples before
- the first loss so we can work in the excitation-filter domain. */
- _celt_autocorr(exc, ac, window, overlap,
- LPC_ORDER, MAX_PERIOD, st->arch);
- /* Add a noise floor of -40 dB. */
-#ifdef OPUS_FIXED_POINT
- ac[0] += SHR32(ac[0],13);
-#else
- ac[0] *= 1.0001f;
-#endif
- /* Use lag windowing to stabilize the Levinson-Durbin recursion. */
- for (i=1;i<=LPC_ORDER;i++)
- {
- /*ac[i] *= exp(-.5*(2*M_PI*.002*i)*(2*M_PI*.002*i));*/
-#ifdef OPUS_FIXED_POINT
- ac[i] -= MULT16_32_Q15(2*i*i, ac[i]);
-#else
- ac[i] -= ac[i]*(0.008f*0.008f)*i*i;
-#endif
- }
- _celt_lpc(lpc+c*LPC_ORDER, ac, LPC_ORDER);
- }
- /* We want the excitation for 2 pitch periods in order to look for a
- decaying signal, but we can't get more than MAX_PERIOD. */
- exc_length = IMIN(2*pitch_index, MAX_PERIOD);
- /* Initialize the LPC history with the samples just before the start
- of the region for which we're computing the excitation. */
- {
- opus_val16 lpc_mem[LPC_ORDER];
- for (i=0;i<LPC_ORDER;i++)
- {
- lpc_mem[i] =
- ROUND16(buf[DECODE_BUFFER_SIZE-exc_length-1-i], SIG_SHIFT);
- }
- /* Compute the excitation for exc_length samples before the loss. */
- celt_fir(exc+MAX_PERIOD-exc_length, lpc+c*LPC_ORDER,
- exc+MAX_PERIOD-exc_length, exc_length, LPC_ORDER, lpc_mem, st->arch);
- }
-
- /* Check if the waveform is decaying, and if so how fast.
- We do this to avoid adding energy when concealing in a segment
- with decaying energy. */
- {
- opus_val32 E1=1, E2=1;
- int decay_length;
-#ifdef OPUS_FIXED_POINT
- int shift = IMAX(0,2*celt_zlog2(celt_maxabs16(&exc[MAX_PERIOD-exc_length], exc_length))-20);
-#endif
- decay_length = exc_length>>1;
- for (i=0;i<decay_length;i++)
- {
- opus_val16 e;
- e = exc[MAX_PERIOD-decay_length+i];
- E1 += SHR32(MULT16_16(e, e), shift);
- e = exc[MAX_PERIOD-2*decay_length+i];
- E2 += SHR32(MULT16_16(e, e), shift);
- }
- E1 = MIN32(E1, E2);
- decay = celt_sqrt(frac_div32(SHR32(E1, 1), E2));
- }
-
- /* Move the decoder memory one frame to the left to give us room to
- add the data for the new frame. We ignore the overlap that extends
- past the end of the buffer, because we aren't going to use it. */
- OPUS_MOVE(buf, buf+N, DECODE_BUFFER_SIZE-N);
-
- /* Extrapolate from the end of the excitation with a period of
- "pitch_index", scaling down each period by an additional factor of
- "decay". */
- extrapolation_offset = MAX_PERIOD-pitch_index;
- /* We need to extrapolate enough samples to cover a complete MDCT
- window (including overlap/2 samples on both sides). */
- extrapolation_len = N+overlap;
- /* We also apply fading if this is not the first loss. */
- attenuation = MULT16_16_Q15(fade, decay);
- for (i=j=0;i<extrapolation_len;i++,j++)
- {
- opus_val16 tmp;
- if (j >= pitch_index) {
- j -= pitch_index;
- attenuation = MULT16_16_Q15(attenuation, decay);
- }
- buf[DECODE_BUFFER_SIZE-N+i] =
- SHL32(EXTEND32(MULT16_16_Q15(attenuation,
- exc[extrapolation_offset+j])), SIG_SHIFT);
- /* Compute the energy of the previously decoded signal whose
- excitation we're copying. */
- tmp = ROUND16(
- buf[DECODE_BUFFER_SIZE-MAX_PERIOD-N+extrapolation_offset+j],
- SIG_SHIFT);
- S1 += SHR32(MULT16_16(tmp, tmp), 8);
- }
-
- {
- opus_val16 lpc_mem[LPC_ORDER];
- /* Copy the last decoded samples (prior to the overlap region) to
- synthesis filter memory so we can have a continuous signal. */
- for (i=0;i<LPC_ORDER;i++)
- lpc_mem[i] = ROUND16(buf[DECODE_BUFFER_SIZE-N-1-i], SIG_SHIFT);
- /* Apply the synthesis filter to convert the excitation back into
- the signal domain. */
- celt_iir(buf+DECODE_BUFFER_SIZE-N, lpc+c*LPC_ORDER,
- buf+DECODE_BUFFER_SIZE-N, extrapolation_len, LPC_ORDER,
- lpc_mem, st->arch);
- }
-
- /* Check if the synthesis energy is higher than expected, which can
- happen with the signal changes during our window. If so,
- attenuate. */
- {
- opus_val32 S2=0;
- for (i=0;i<extrapolation_len;i++)
- {
- opus_val16 tmp = ROUND16(buf[DECODE_BUFFER_SIZE-N+i], SIG_SHIFT);
- S2 += SHR32(MULT16_16(tmp, tmp), 8);
- }
- /* This checks for an "explosion" in the synthesis. */
-#ifdef OPUS_FIXED_POINT
- if (!(S1 > SHR32(S2,2)))
-#else
- /* The float test is written this way to catch NaNs in the output
- of the IIR filter at the same time. */
- if (!(S1 > 0.2f*S2))
-#endif
- {
- for (i=0;i<extrapolation_len;i++)
- buf[DECODE_BUFFER_SIZE-N+i] = 0;
- } else if (S1 < S2)
- {
- opus_val16 ratio = celt_sqrt(frac_div32(SHR32(S1,1)+1,S2+1));
- for (i=0;i<overlap;i++)
- {
- opus_val16 tmp_g = Q15ONE
- - MULT16_16_Q15(window[i], Q15ONE-ratio);
- buf[DECODE_BUFFER_SIZE-N+i] =
- MULT16_32_Q15(tmp_g, buf[DECODE_BUFFER_SIZE-N+i]);
- }
- for (i=overlap;i<extrapolation_len;i++)
- {
- buf[DECODE_BUFFER_SIZE-N+i] =
- MULT16_32_Q15(ratio, buf[DECODE_BUFFER_SIZE-N+i]);
- }
- }
- }
-
- /* Apply the pre-filter to the MDCT overlap for the next frame because
- the post-filter will be re-applied in the decoder after the MDCT
- overlap. */
- comb_filter(etmp, buf+DECODE_BUFFER_SIZE,
- st->postfilter_period, st->postfilter_period, overlap,
- -st->postfilter_gain, -st->postfilter_gain,
- st->postfilter_tapset, st->postfilter_tapset, NULL, 0, st->arch);
-
- /* Simulate TDAC on the concealed audio so that it blends with the
- MDCT of the next frame. */
- for (i=0;i<overlap/2;i++)
- {
- buf[DECODE_BUFFER_SIZE+i] =
- MULT16_32_Q15(window[i], etmp[overlap-1-i])
- + MULT16_32_Q15(window[overlap-i-1], etmp[i]);
- }
- } while (++c<C);
- }
-
- st->loss_count = loss_count+1;
-
- RESTORE_STACK;
-}
-
-int celt_decode_with_ec(CELTDecoder * OPUS_RESTRICT st, const unsigned char *data,
- int len, opus_val16 * OPUS_RESTRICT pcm, int frame_size, ec_dec *dec, int accum)
-{
- int c, i, N;
- int spread_decision;
- opus_int32 bits;
- ec_dec _dec;
-#ifdef NORM_ALIASING_HACK
- celt_norm *X;
-#else
- VARDECL(celt_norm, X);
-#endif
- VARDECL(int, fine_quant);
- VARDECL(int, pulses);
- VARDECL(int, cap);
- VARDECL(int, offsets);
- VARDECL(int, fine_priority);
- VARDECL(int, tf_res);
- VARDECL(unsigned char, collapse_masks);
- celt_sig *decode_mem[2];
- celt_sig *out_syn[2];
- opus_val16 *lpc;
- opus_val16 *oldBandE, *oldLogE, *oldLogE2, *backgroundLogE;
-
- int shortBlocks;
- int isTransient;
- int intra_ener;
- const int CC = st->channels;
- int LM, M;
- int start;
- int end;
- int effEnd;
- int codedBands;
- int alloc_trim;
- int postfilter_pitch;
- opus_val16 postfilter_gain;
- int intensity=0;
- int dual_stereo=0;
- opus_int32 total_bits;
- opus_int32 balance;
- opus_int32 tell;
- int dynalloc_logp;
- int postfilter_tapset;
- int anti_collapse_rsv;
- int anti_collapse_on=0;
- int silence;
- int C = st->stream_channels;
- const OpusCustomMode *mode;
- int nbEBands;
- int overlap;
- const opus_int16 *eBands;
- ALLOC_STACK;
-
- mode = st->mode;
- nbEBands = mode->nbEBands;
- overlap = mode->overlap;
- eBands = mode->eBands;
- start = st->start;
- end = st->end;
- frame_size *= st->downsample;
-
- lpc = (opus_val16*)(st->_decode_mem+(DECODE_BUFFER_SIZE+overlap)*CC);
- oldBandE = lpc+CC*LPC_ORDER;
- oldLogE = oldBandE + 2*nbEBands;
- oldLogE2 = oldLogE + 2*nbEBands;
- backgroundLogE = oldLogE2 + 2*nbEBands;
-
-#ifdef CUSTOM_MODES
- if (st->signalling && data!=NULL)
- {
- int data0=data[0];
- /* Convert "standard mode" to Opus header */
- if (mode->Fs==48000 && mode->shortMdctSize==120)
- {
- data0 = fromOpus(data0);
- if (data0<0)
- return OPUS_INVALID_PACKET;
- }
- st->end = end = IMAX(1, mode->effEBands-2*(data0>>5));
- LM = (data0>>3)&0x3;
- C = 1 + ((data0>>2)&0x1);
- data++;
- len--;
- if (LM>mode->maxLM)
- return OPUS_INVALID_PACKET;
- if (frame_size < mode->shortMdctSize<<LM)
- return OPUS_BUFFER_TOO_SMALL;
- else
- frame_size = mode->shortMdctSize<<LM;
- } else {
-#else
- {
-#endif
- for (LM=0;LM<=mode->maxLM;LM++)
- if (mode->shortMdctSize<<LM==frame_size)
- break;
- if (LM>mode->maxLM)
- return OPUS_BAD_ARG;
- }
- M=1<<LM;
-
- if (len<0 || len>1275 || pcm==NULL)
- return OPUS_BAD_ARG;
-
- N = M*mode->shortMdctSize;
- c=0; do {
- decode_mem[c] = st->_decode_mem + c*(DECODE_BUFFER_SIZE+overlap);
- out_syn[c] = decode_mem[c]+DECODE_BUFFER_SIZE-N;
- } while (++c<CC);
-
- effEnd = end;
- if (effEnd > mode->effEBands)
- effEnd = mode->effEBands;
-
- if (data == NULL || len<=1)
- {
- celt_decode_lost(st, N, LM);
- deemphasis(out_syn, pcm, N, CC, st->downsample, mode->preemph, st->preemph_memD, accum);
- RESTORE_STACK;
- return frame_size/st->downsample;
- }
-
- if (dec == NULL)
- {
- ec_dec_init(&_dec,(unsigned char*)data,len);
- dec = &_dec;
- }
-
- if (C==1)
- {
- for (i=0;i<nbEBands;i++)
- oldBandE[i]=MAX16(oldBandE[i],oldBandE[nbEBands+i]);
- }
-
- total_bits = len*8;
- tell = ec_tell(dec);
-
- if (tell >= total_bits)
- silence = 1;
- else if (tell==1)
- silence = ec_dec_bit_logp(dec, 15);
- else
- silence = 0;
- if (silence)
- {
- /* Pretend we've read all the remaining bits */
- tell = len*8;
- dec->nbits_total+=tell-ec_tell(dec);
- }
-
- postfilter_gain = 0;
- postfilter_pitch = 0;
- postfilter_tapset = 0;
- if (start==0 && tell+16 <= total_bits)
- {
- if(ec_dec_bit_logp(dec, 1))
- {
- int qg, octave;
- octave = ec_dec_uint(dec, 6);
- postfilter_pitch = (16<<octave)+ec_dec_bits(dec, 4+octave)-1;
- qg = ec_dec_bits(dec, 3);
- if (ec_tell(dec)+2<=total_bits)
- postfilter_tapset = ec_dec_icdf(dec, tapset_icdf, 2);
- postfilter_gain = QCONST16(.09375f,15)*(qg+1);
- }
- tell = ec_tell(dec);
- }
-
- if (LM > 0 && tell+3 <= total_bits)
- {
- isTransient = ec_dec_bit_logp(dec, 3);
- tell = ec_tell(dec);
- }
- else
- isTransient = 0;
-
- if (isTransient)
- shortBlocks = M;
- else
- shortBlocks = 0;
-
- /* Decode the global flags (first symbols in the stream) */
- intra_ener = tell+3<=total_bits ? ec_dec_bit_logp(dec, 3) : 0;
- /* Get band energies */
- unquant_coarse_energy(mode, start, end, oldBandE,
- intra_ener, dec, C, LM);
-
- ALLOC(tf_res, nbEBands, int);
- tf_decode(start, end, isTransient, tf_res, LM, dec);
-
- tell = ec_tell(dec);
- spread_decision = SPREAD_NORMAL;
- if (tell+4 <= total_bits)
- spread_decision = ec_dec_icdf(dec, spread_icdf, 5);
-
- ALLOC(cap, nbEBands, int);
-
- init_caps(mode,cap,LM,C);
-
- ALLOC(offsets, nbEBands, int);
-
- dynalloc_logp = 6;
- total_bits<<=BITRES;
- tell = ec_tell_frac(dec);
- for (i=start;i<end;i++)
- {
- int width, quanta;
- int dynalloc_loop_logp;
- int boost;
- width = C*(eBands[i+1]-eBands[i])<<LM;
- /* quanta is 6 bits, but no more than 1 bit/sample
- and no less than 1/8 bit/sample */
- quanta = IMIN(width<<BITRES, IMAX(6<<BITRES, width));
- dynalloc_loop_logp = dynalloc_logp;
- boost = 0;
- while (tell+(dynalloc_loop_logp<<BITRES) < total_bits && boost < cap[i])
- {
- int flag;
- flag = ec_dec_bit_logp(dec, dynalloc_loop_logp);
- tell = ec_tell_frac(dec);
- if (!flag)
- break;
- boost += quanta;
- total_bits -= quanta;
- dynalloc_loop_logp = 1;
- }
- offsets[i] = boost;
- /* Making dynalloc more likely */
- if (boost>0)
- dynalloc_logp = IMAX(2, dynalloc_logp-1);
- }
-
- ALLOC(fine_quant, nbEBands, int);
- alloc_trim = tell+(6<<BITRES) <= total_bits ?
- ec_dec_icdf(dec, trim_icdf, 7) : 5;
-
- bits = (((opus_int32)len*8)<<BITRES) - ec_tell_frac(dec) - 1;
- anti_collapse_rsv = isTransient&&LM>=2&&bits>=((LM+2)<<BITRES) ? (1<<BITRES) : 0;
- bits -= anti_collapse_rsv;
-
- ALLOC(pulses, nbEBands, int);
- ALLOC(fine_priority, nbEBands, int);
-
- codedBands = compute_allocation(mode, start, end, offsets, cap,
- alloc_trim, &intensity, &dual_stereo, bits, &balance, pulses,
- fine_quant, fine_priority, C, LM, dec, 0, 0, 0);
-
- unquant_fine_energy(mode, start, end, oldBandE, fine_quant, dec, C);
-
- c=0; do {
- OPUS_MOVE(decode_mem[c], decode_mem[c]+N, DECODE_BUFFER_SIZE-N+overlap/2);
- } while (++c<CC);
-
- /* Decode fixed codebook */
- ALLOC(collapse_masks, C*nbEBands, unsigned char);
-
-#ifdef NORM_ALIASING_HACK
- /* This is an ugly hack that breaks aliasing rules and would be easily broken,
- but it saves almost 4kB of stack. */
- X = (celt_norm*)(out_syn[CC-1]+overlap/2);
-#else
- ALLOC(X, C*N, celt_norm); /**< Interleaved normalised MDCTs */
-#endif
-
- quant_all_bands(0, mode, start, end, X, C==2 ? X+N : NULL, collapse_masks,
- NULL, pulses, shortBlocks, spread_decision, dual_stereo, intensity, tf_res,
- len*(8<<BITRES)-anti_collapse_rsv, balance, dec, LM, codedBands, &st->rng, st->arch);
-
- if (anti_collapse_rsv > 0)
- {
- anti_collapse_on = ec_dec_bits(dec, 1);
- }
-
- unquant_energy_finalise(mode, start, end, oldBandE,
- fine_quant, fine_priority, len*8-ec_tell(dec), dec, C);
-
- if (anti_collapse_on)
- anti_collapse(mode, X, collapse_masks, LM, C, N,
- start, end, oldBandE, oldLogE, oldLogE2, pulses, st->rng, st->arch);
-
- if (silence)
- {
- for (i=0;i<C*nbEBands;i++)
- oldBandE[i] = -QCONST16(28.f,DB_SHIFT);
- }
-
- celt_synthesis(mode, X, out_syn, oldBandE, start, effEnd,
- C, CC, isTransient, LM, st->downsample, silence, st->arch);
-
- c=0; do {
- st->postfilter_period=IMAX(st->postfilter_period, COMBFILTER_MINPERIOD);
- st->postfilter_period_old=IMAX(st->postfilter_period_old, COMBFILTER_MINPERIOD);
- comb_filter(out_syn[c], out_syn[c], st->postfilter_period_old, st->postfilter_period, mode->shortMdctSize,
- st->postfilter_gain_old, st->postfilter_gain, st->postfilter_tapset_old, st->postfilter_tapset,
- mode->window, overlap, st->arch);
- if (LM!=0)
- comb_filter(out_syn[c]+mode->shortMdctSize, out_syn[c]+mode->shortMdctSize, st->postfilter_period, postfilter_pitch, N-mode->shortMdctSize,
- st->postfilter_gain, postfilter_gain, st->postfilter_tapset, postfilter_tapset,
- mode->window, overlap, st->arch);
-
- } while (++c<CC);
- st->postfilter_period_old = st->postfilter_period;
- st->postfilter_gain_old = st->postfilter_gain;
- st->postfilter_tapset_old = st->postfilter_tapset;
- st->postfilter_period = postfilter_pitch;
- st->postfilter_gain = postfilter_gain;
- st->postfilter_tapset = postfilter_tapset;
- if (LM!=0)
- {
- st->postfilter_period_old = st->postfilter_period;
- st->postfilter_gain_old = st->postfilter_gain;
- st->postfilter_tapset_old = st->postfilter_tapset;
- }
-
- if (C==1)
- OPUS_COPY(&oldBandE[nbEBands], oldBandE, nbEBands);
-
- /* In case start or end were to change */
- if (!isTransient)
- {
- opus_val16 max_background_increase;
- OPUS_COPY(oldLogE2, oldLogE, 2*nbEBands);
- OPUS_COPY(oldLogE, oldBandE, 2*nbEBands);
- /* In normal circumstances, we only allow the noise floor to increase by
- up to 2.4 dB/second, but when we're in DTX, we allow up to 6 dB
- increase for each update.*/
- if (st->loss_count < 10)
- max_background_increase = M*QCONST16(0.001f,DB_SHIFT);
- else
- max_background_increase = QCONST16(1.f,DB_SHIFT);
- for (i=0;i<2*nbEBands;i++)
- backgroundLogE[i] = MIN16(backgroundLogE[i] + max_background_increase, oldBandE[i]);
- } else {
- for (i=0;i<2*nbEBands;i++)
- oldLogE[i] = MIN16(oldLogE[i], oldBandE[i]);
- }
- c=0; do
- {
- for (i=0;i<start;i++)
- {
- oldBandE[c*nbEBands+i]=0;
- oldLogE[c*nbEBands+i]=oldLogE2[c*nbEBands+i]=-QCONST16(28.f,DB_SHIFT);
- }
- for (i=end;i<nbEBands;i++)
- {
- oldBandE[c*nbEBands+i]=0;
- oldLogE[c*nbEBands+i]=oldLogE2[c*nbEBands+i]=-QCONST16(28.f,DB_SHIFT);
- }
- } while (++c<2);
- st->rng = dec->rng;
-
- deemphasis(out_syn, pcm, N, CC, st->downsample, mode->preemph, st->preemph_memD, accum);
- st->loss_count = 0;
- RESTORE_STACK;
- if (ec_tell(dec) > 8*len)
- return OPUS_INTERNAL_ERROR;
- if(ec_get_error(dec))
- st->error = 1;
- return frame_size/st->downsample;
-}
-
-
-#ifdef CUSTOM_MODES
-
-#ifdef OPUS_FIXED_POINT
-int opus_custom_decode(CELTDecoder * OPUS_RESTRICT st, const unsigned char *data, int len, opus_int16 * OPUS_RESTRICT pcm, int frame_size)
-{
- return celt_decode_with_ec(st, data, len, pcm, frame_size, NULL, 0);
-}
-
-#ifndef DISABLE_FLOAT_API
-int opus_custom_decode_float(CELTDecoder * OPUS_RESTRICT st, const unsigned char *data, int len, float * OPUS_RESTRICT pcm, int frame_size)
-{
- int j, ret, C, N;
- VARDECL(opus_int16, out);
- ALLOC_STACK;
-
- if (pcm==NULL)
- return OPUS_BAD_ARG;
-
- C = st->channels;
- N = frame_size;
-
- ALLOC(out, C*N, opus_int16);
- ret=celt_decode_with_ec(st, data, len, out, frame_size, NULL, 0);
- if (ret>0)
- for (j=0;j<C*ret;j++)
- pcm[j]=out[j]*(1.f/32768.f);
-
- RESTORE_STACK;
- return ret;
-}
-#endif /* DISABLE_FLOAT_API */
-
-#else
-
-int opus_custom_decode_float(CELTDecoder * OPUS_RESTRICT st, const unsigned char *data, int len, float * OPUS_RESTRICT pcm, int frame_size)
-{
- return celt_decode_with_ec(st, data, len, pcm, frame_size, NULL, 0);
-}
-
-int opus_custom_decode(CELTDecoder * OPUS_RESTRICT st, const unsigned char *data, int len, opus_int16 * OPUS_RESTRICT pcm, int frame_size)
-{
- int j, ret, C, N;
- VARDECL(celt_sig, out);
- ALLOC_STACK;
-
- if (pcm==NULL)
- return OPUS_BAD_ARG;
-
- C = st->channels;
- N = frame_size;
- ALLOC(out, C*N, celt_sig);
-
- ret=celt_decode_with_ec(st, data, len, out, frame_size, NULL, 0);
-
- if (ret>0)
- for (j=0;j<C*ret;j++)
- pcm[j] = FLOAT2INT16 (out[j]);
-
- RESTORE_STACK;
- return ret;
-}
-
-#endif
-#endif /* CUSTOM_MODES */
-
-int opus_custom_decoder_ctl(CELTDecoder * OPUS_RESTRICT st, int request, ...)
-{
- va_list ap;
-
- va_start(ap, request);
- switch (request)
- {
- case CELT_SET_START_BAND_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<0 || value>=st->mode->nbEBands)
- goto bad_arg;
- st->start = value;
- }
- break;
- case CELT_SET_END_BAND_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<1 || value>st->mode->nbEBands)
- goto bad_arg;
- st->end = value;
- }
- break;
- case CELT_SET_CHANNELS_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<1 || value>2)
- goto bad_arg;
- st->stream_channels = value;
- }
- break;
- case CELT_GET_AND_CLEAR_ERROR_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (value==NULL)
- goto bad_arg;
- *value=st->error;
- st->error = 0;
- }
- break;
- case OPUS_GET_LOOKAHEAD_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (value==NULL)
- goto bad_arg;
- *value = st->overlap/st->downsample;
- }
- break;
- case OPUS_RESET_STATE:
- {
- int i;
- opus_val16 *lpc, *oldBandE, *oldLogE, *oldLogE2;
- lpc = (opus_val16*)(st->_decode_mem+(DECODE_BUFFER_SIZE+st->overlap)*st->channels);
- oldBandE = lpc+st->channels*LPC_ORDER;
- oldLogE = oldBandE + 2*st->mode->nbEBands;
- oldLogE2 = oldLogE + 2*st->mode->nbEBands;
- OPUS_CLEAR((char*)&st->DECODER_RESET_START,
- opus_custom_decoder_get_size(st->mode, st->channels)-
- ((char*)&st->DECODER_RESET_START - (char*)st));
- for (i=0;i<2*st->mode->nbEBands;i++)
- oldLogE[i]=oldLogE2[i]=-QCONST16(28.f,DB_SHIFT);
- }
- break;
- case OPUS_GET_PITCH_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (value==NULL)
- goto bad_arg;
- *value = st->postfilter_period;
- }
- break;
- case CELT_GET_MODE_REQUEST:
- {
- const CELTMode ** value = va_arg(ap, const CELTMode**);
- if (value==0)
- goto bad_arg;
- *value=st->mode;
- }
- break;
- case CELT_SET_SIGNALLING_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- st->signalling = value;
- }
- break;
- case OPUS_GET_FINAL_RANGE_REQUEST:
- {
- opus_uint32 * value = va_arg(ap, opus_uint32 *);
- if (value==0)
- goto bad_arg;
- *value=st->rng;
- }
- break;
- default:
- goto bad_request;
- }
- va_end(ap);
- return OPUS_OK;
-bad_arg:
- va_end(ap);
- return OPUS_BAD_ARG;
-bad_request:
- va_end(ap);
- return OPUS_UNIMPLEMENTED;
-}
diff --git a/drivers/opus/celt/celt_encoder.c b/drivers/opus/celt/celt_encoder.c
deleted file mode 100644
index 9099bcd278..0000000000
--- a/drivers/opus/celt/celt_encoder.c
+++ /dev/null
@@ -1,2404 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2010 Xiph.Org Foundation
- Copyright (c) 2008 Gregory Maxwell
- Written by Jean-Marc Valin and Gregory Maxwell */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#define CELT_ENCODER_C
-
-#include "opus/celt/cpu_support.h"
-#include "opus/celt/os_support.h"
-#include "opus/celt/mdct.h"
-#include <math.h>
-#include "opus/celt/celt.h"
-#include "opus/celt/pitch.h"
-#include "opus/celt/bands.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/entcode.h"
-#include "opus/celt/quant_bands.h"
-#include "opus/celt/rate.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/float_cast.h"
-#include <stdarg.h>
-#include "opus/celt/celt_lpc.h"
-#include "opus/celt/vq.h"
-
-
-/** Encoder state
- @brief Encoder state
- */
-struct OpusCustomEncoder {
- const OpusCustomMode *mode; /**< Mode used by the encoder */
- int channels;
- int stream_channels;
-
- int force_intra;
- int clip;
- int disable_pf;
- int complexity;
- int upsample;
- int start, end;
-
- opus_int32 bitrate;
- int vbr;
- int signalling;
- int constrained_vbr; /* If zero, VBR can do whatever it likes with the rate */
- int loss_rate;
- int lsb_depth;
- int variable_duration;
- int lfe;
- int arch;
-
- /* Everything beyond this point gets cleared on a reset */
-#define ENCODER_RESET_START rng
-
- opus_uint32 rng;
- int spread_decision;
- opus_val32 delayedIntra;
- int tonal_average;
- int lastCodedBands;
- int hf_average;
- int tapset_decision;
-
- int prefilter_period;
- opus_val16 prefilter_gain;
- int prefilter_tapset;
-#ifdef RESYNTH
- int prefilter_period_old;
- opus_val16 prefilter_gain_old;
- int prefilter_tapset_old;
-#endif
- int consec_transient;
- AnalysisInfo analysis;
-
- opus_val32 preemph_memE[2];
- opus_val32 preemph_memD[2];
-
- /* VBR-related parameters */
- opus_int32 vbr_reservoir;
- opus_int32 vbr_drift;
- opus_int32 vbr_offset;
- opus_int32 vbr_count;
- opus_val32 overlap_max;
- opus_val16 stereo_saving;
- int intensity;
- opus_val16 *energy_mask;
- opus_val16 spec_avg;
-
-#ifdef RESYNTH
- /* +MAX_PERIOD/2 to make space for overlap */
- celt_sig syn_mem[2][2*MAX_PERIOD+MAX_PERIOD/2];
-#endif
-
- celt_sig in_mem[1]; /* Size = channels*mode->overlap */
- /* celt_sig prefilter_mem[], Size = channels*COMBFILTER_MAXPERIOD */
- /* opus_val16 oldBandE[], Size = channels*mode->nbEBands */
- /* opus_val16 oldLogE[], Size = channels*mode->nbEBands */
- /* opus_val16 oldLogE2[], Size = channels*mode->nbEBands */
-};
-
-int celt_encoder_get_size(int channels)
-{
- CELTMode *mode = opus_custom_mode_create(48000, 960, NULL);
- return opus_custom_encoder_get_size(mode, channels);
-}
-
-OPUS_CUSTOM_NOSTATIC int opus_custom_encoder_get_size(const CELTMode *mode, int channels)
-{
- int size = sizeof(struct CELTEncoder)
- + (channels*mode->overlap-1)*sizeof(celt_sig) /* celt_sig in_mem[channels*mode->overlap]; */
- + channels*COMBFILTER_MAXPERIOD*sizeof(celt_sig) /* celt_sig prefilter_mem[channels*COMBFILTER_MAXPERIOD]; */
- + 3*channels*mode->nbEBands*sizeof(opus_val16); /* opus_val16 oldBandE[channels*mode->nbEBands]; */
- /* opus_val16 oldLogE[channels*mode->nbEBands]; */
- /* opus_val16 oldLogE2[channels*mode->nbEBands]; */
- return size;
-}
-
-#ifdef CUSTOM_MODES
-CELTEncoder *opus_custom_encoder_create(const CELTMode *mode, int channels, int *error)
-{
- int ret;
- CELTEncoder *st = (CELTEncoder *)opus_alloc(opus_custom_encoder_get_size(mode, channels));
- /* init will handle the NULL case */
- ret = opus_custom_encoder_init(st, mode, channels);
- if (ret != OPUS_OK)
- {
- opus_custom_encoder_destroy(st);
- st = NULL;
- }
- if (error)
- *error = ret;
- return st;
-}
-#endif /* CUSTOM_MODES */
-
-static int opus_custom_encoder_init_arch(CELTEncoder *st, const CELTMode *mode,
- int channels, int arch)
-{
- if (channels < 0 || channels > 2)
- return OPUS_BAD_ARG;
-
- if (st==NULL || mode==NULL)
- return OPUS_ALLOC_FAIL;
-
- OPUS_CLEAR((char*)st, opus_custom_encoder_get_size(mode, channels));
-
- st->mode = mode;
- st->stream_channels = st->channels = channels;
-
- st->upsample = 1;
- st->start = 0;
- st->end = st->mode->effEBands;
- st->signalling = 1;
-
- st->arch = arch;
-
- st->constrained_vbr = 1;
- st->clip = 1;
-
- st->bitrate = OPUS_BITRATE_MAX;
- st->vbr = 0;
- st->force_intra = 0;
- st->complexity = 5;
- st->lsb_depth=24;
-
- opus_custom_encoder_ctl(st, OPUS_RESET_STATE);
-
- return OPUS_OK;
-}
-
-#ifdef CUSTOM_MODES
-int opus_custom_encoder_init(CELTEncoder *st, const CELTMode *mode, int channels)
-{
- return opus_custom_encoder_init_arch(st, mode, channels, opus_select_arch());
-}
-#endif
-
-int celt_encoder_init(CELTEncoder *st, opus_int32 sampling_rate, int channels,
- int arch)
-{
- int ret;
- ret = opus_custom_encoder_init_arch(st,
- opus_custom_mode_create(48000, 960, NULL), channels, arch);
- if (ret != OPUS_OK)
- return ret;
- st->upsample = resampling_factor(sampling_rate);
- return OPUS_OK;
-}
-
-#ifdef CUSTOM_MODES
-void opus_custom_encoder_destroy(CELTEncoder *st)
-{
- opus_free(st);
-}
-#endif /* CUSTOM_MODES */
-
-
-static int transient_analysis(const opus_val32 * OPUS_RESTRICT in, int len, int C,
- opus_val16 *tf_estimate, int *tf_chan)
-{
- int i;
- VARDECL(opus_val16, tmp);
- opus_val32 mem0,mem1;
- int is_transient = 0;
- opus_int32 mask_metric = 0;
- int c;
- opus_val16 tf_max;
- int len2;
- /* Table of 6*64/x, trained on real data to minimize the average error */
- static const unsigned char inv_table[128] = {
- 255,255,156,110, 86, 70, 59, 51, 45, 40, 37, 33, 31, 28, 26, 25,
- 23, 22, 21, 20, 19, 18, 17, 16, 16, 15, 15, 14, 13, 13, 12, 12,
- 12, 12, 11, 11, 11, 10, 10, 10, 9, 9, 9, 9, 9, 9, 8, 8,
- 8, 8, 8, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2,
- };
- SAVE_STACK;
- ALLOC(tmp, len, opus_val16);
-
- len2=len/2;
- for (c=0;c<C;c++)
- {
- opus_val32 mean;
- opus_int32 unmask=0;
- opus_val32 norm;
- opus_val16 maxE;
- mem0=0;
- mem1=0;
- /* High-pass filter: (1 - 2*z^-1 + z^-2) / (1 - z^-1 + .5*z^-2) */
- for (i=0;i<len;i++)
- {
- opus_val32 x,y;
- x = SHR32(in[i+c*len],SIG_SHIFT);
- y = ADD32(mem0, x);
-#ifdef OPUS_FIXED_POINT
- mem0 = mem1 + y - SHL32(x,1);
- mem1 = x - SHR32(y,1);
-#else
- mem0 = mem1 + y - 2*x;
- mem1 = x - .5f*y;
-#endif
- tmp[i] = EXTRACT16(SHR32(y,2));
- /*printf("%f ", tmp[i]);*/
- }
- /*printf("\n");*/
- /* First few samples are bad because we don't propagate the memory */
- OPUS_CLEAR(tmp, 12);
-
-#ifdef OPUS_FIXED_POINT
- /* Normalize tmp to max range */
- {
- int shift=0;
- shift = 14-celt_ilog2(1+celt_maxabs16(tmp, len));
- if (shift!=0)
- {
- for (i=0;i<len;i++)
- tmp[i] = SHL16(tmp[i], shift);
- }
- }
-#endif
-
- mean=0;
- mem0=0;
- /* Grouping by two to reduce complexity */
- /* Forward pass to compute the post-echo threshold*/
- for (i=0;i<len2;i++)
- {
- opus_val16 x2 = PSHR32(MULT16_16(tmp[2*i],tmp[2*i]) + MULT16_16(tmp[2*i+1],tmp[2*i+1]),16);
- mean += x2;
-#ifdef OPUS_FIXED_POINT
- /* FIXME: Use PSHR16() instead */
- tmp[i] = mem0 + PSHR32(x2-mem0,4);
-#else
- tmp[i] = mem0 + MULT16_16_P15(QCONST16(.0625f,15),x2-mem0);
-#endif
- mem0 = tmp[i];
- }
-
- mem0=0;
- maxE=0;
- /* Backward pass to compute the pre-echo threshold */
- for (i=len2-1;i>=0;i--)
- {
-#ifdef OPUS_FIXED_POINT
- /* FIXME: Use PSHR16() instead */
- tmp[i] = mem0 + PSHR32(tmp[i]-mem0,3);
-#else
- tmp[i] = mem0 + MULT16_16_P15(QCONST16(0.125f,15),tmp[i]-mem0);
-#endif
- mem0 = tmp[i];
- maxE = MAX16(maxE, mem0);
- }
- /*for (i=0;i<len2;i++)printf("%f ", tmp[i]/mean);printf("\n");*/
-
- /* Compute the ratio of the "frame energy" over the harmonic mean of the energy.
- This essentially corresponds to a bitrate-normalized temporal noise-to-mask
- ratio */
-
- /* As a compromise with the old transient detector, frame energy is the
- geometric mean of the energy and half the max */
-#ifdef OPUS_FIXED_POINT
- /* Costs two sqrt() to avoid overflows */
- mean = MULT16_16(celt_sqrt(mean), celt_sqrt(MULT16_16(maxE,len2>>1)));
-#else
- mean = celt_sqrt(mean * maxE*.5*len2);
-#endif
- /* Inverse of the mean energy in Q15+6 */
- norm = SHL32(EXTEND32(len2),6+14)/ADD32(EPSILON,SHR32(mean,1));
- /* Compute harmonic mean discarding the unreliable boundaries
- The data is smooth, so we only take 1/4th of the samples */
- unmask=0;
- for (i=12;i<len2-5;i+=4)
- {
- int id;
-#ifdef OPUS_FIXED_POINT
- id = MAX32(0,MIN32(127,MULT16_32_Q15(tmp[i]+EPSILON,norm))); /* Do not round to nearest */
-#else
- id = (int)MAX32(0,MIN32(127,floor(64*norm*(tmp[i]+EPSILON)))); /* Do not round to nearest */
-#endif
- unmask += inv_table[id];
- }
- /*printf("%d\n", unmask);*/
- /* Normalize, compensate for the 1/4th of the sample and the factor of 6 in the inverse table */
- unmask = 64*unmask*4/(6*(len2-17));
- if (unmask>mask_metric)
- {
- *tf_chan = c;
- mask_metric = unmask;
- }
- }
- is_transient = mask_metric>200;
-
- /* Arbitrary metric for VBR boost */
- tf_max = MAX16(0,celt_sqrt(27*mask_metric)-42);
- /* *tf_estimate = 1 + MIN16(1, sqrt(MAX16(0, tf_max-30))/20); */
- *tf_estimate = celt_sqrt(MAX32(0, SHL32(MULT16_16(QCONST16(0.0069,14),MIN16(163,tf_max)),14)-QCONST32(0.139,28)));
- /*printf("%d %f\n", tf_max, mask_metric);*/
- RESTORE_STACK;
-#ifdef FUZZING
- is_transient = rand()&0x1;
-#endif
- /*printf("%d %f %d\n", is_transient, (float)*tf_estimate, tf_max);*/
- return is_transient;
-}
-
-/* Looks for sudden increases of energy to decide whether we need to patch
- the transient decision */
-static int patch_transient_decision(opus_val16 *newE, opus_val16 *oldE, int nbEBands,
- int start, int end, int C)
-{
- int i, c;
- opus_val32 mean_diff=0;
- opus_val16 spread_old[26];
- /* Apply an aggressive (-6 dB/Bark) spreading function to the old frame to
- avoid false detection caused by irrelevant bands */
- if (C==1)
- {
- spread_old[start] = oldE[start];
- for (i=start+1;i<end;i++)
- spread_old[i] = MAX16(spread_old[i-1]-QCONST16(1.0f, DB_SHIFT), oldE[i]);
- } else {
- spread_old[start] = MAX16(oldE[start],oldE[start+nbEBands]);
- for (i=start+1;i<end;i++)
- spread_old[i] = MAX16(spread_old[i-1]-QCONST16(1.0f, DB_SHIFT),
- MAX16(oldE[i],oldE[i+nbEBands]));
- }
- for (i=end-2;i>=start;i--)
- spread_old[i] = MAX16(spread_old[i], spread_old[i+1]-QCONST16(1.0f, DB_SHIFT));
- /* Compute mean increase */
- c=0; do {
- for (i=IMAX(2,start);i<end-1;i++)
- {
- opus_val16 x1, x2;
- x1 = MAX16(0, newE[i + c*nbEBands]);
- x2 = MAX16(0, spread_old[i]);
- mean_diff = ADD32(mean_diff, EXTEND32(MAX16(0, SUB16(x1, x2))));
- }
- } while (++c<C);
- mean_diff = DIV32(mean_diff, C*(end-1-IMAX(2,start)));
- /*printf("%f %f %d\n", mean_diff, max_diff, count);*/
- return mean_diff > QCONST16(1.f, DB_SHIFT);
-}
-
-/** Apply window and compute the MDCT for all sub-frames and
- all channels in a frame */
-static void compute_mdcts(const CELTMode *mode, int shortBlocks, celt_sig * OPUS_RESTRICT in,
- celt_sig * OPUS_RESTRICT out, int C, int CC, int LM, int upsample,
- int arch)
-{
- const int overlap = mode->overlap;
- int N;
- int B;
- int shift;
- int i, b, c;
- if (shortBlocks)
- {
- B = shortBlocks;
- N = mode->shortMdctSize;
- shift = mode->maxLM;
- } else {
- B = 1;
- N = mode->shortMdctSize<<LM;
- shift = mode->maxLM-LM;
- }
- c=0; do {
- for (b=0;b<B;b++)
- {
- /* Interleaving the sub-frames while doing the MDCTs */
- clt_mdct_forward(&mode->mdct, in+c*(B*N+overlap)+b*N,
- &out[b+c*N*B], mode->window, overlap, shift, B,
- arch);
- }
- } while (++c<CC);
- if (CC==2&&C==1)
- {
- for (i=0;i<B*N;i++)
- out[i] = ADD32(HALF32(out[i]), HALF32(out[B*N+i]));
- }
- if (upsample != 1)
- {
- c=0; do
- {
- int bound = B*N/upsample;
- for (i=0;i<bound;i++)
- out[c*B*N+i] *= upsample;
- OPUS_CLEAR(&out[c*B*N+bound], B*N-bound);
- } while (++c<C);
- }
-}
-
-
-void celt_preemphasis(const opus_val16 * OPUS_RESTRICT pcmp, celt_sig * OPUS_RESTRICT inp,
- int N, int CC, int upsample, const opus_val16 *coef, celt_sig *mem, int clip)
-{
- int i;
- opus_val16 coef0;
- celt_sig m;
- int Nu;
-
- coef0 = coef[0];
- m = *mem;
-
- /* Fast path for the normal 48kHz case and no clipping */
- if (coef[1] == 0 && upsample == 1 && !clip)
- {
- for (i=0;i<N;i++)
- {
- opus_val16 x;
- x = SCALEIN(pcmp[CC*i]);
- /* Apply pre-emphasis */
- inp[i] = SHL32(x, SIG_SHIFT) - m;
- m = SHR32(MULT16_16(coef0, x), 15-SIG_SHIFT);
- }
- *mem = m;
- return;
- }
-
- Nu = N/upsample;
- if (upsample!=1)
- {
- OPUS_CLEAR(inp, N);
- }
- for (i=0;i<Nu;i++)
- inp[i*upsample] = SCALEIN(pcmp[CC*i]);
-
-#ifndef OPUS_FIXED_POINT
- if (clip)
- {
- /* Clip input to avoid encoding non-portable files */
- for (i=0;i<Nu;i++)
- inp[i*upsample] = MAX32(-65536.f, MIN32(65536.f,inp[i*upsample]));
- }
-#else
- (void)clip; /* Avoids a warning about clip being unused. */
-#endif
-#ifdef CUSTOM_MODES
- if (coef[1] != 0)
- {
- opus_val16 coef1 = coef[1];
- opus_val16 coef2 = coef[2];
- for (i=0;i<N;i++)
- {
- celt_sig x, tmp;
- x = inp[i];
- /* Apply pre-emphasis */
- tmp = MULT16_16(coef2, x);
- inp[i] = tmp + m;
- m = MULT16_32_Q15(coef1, inp[i]) - MULT16_32_Q15(coef0, tmp);
- }
- } else
-#endif
- {
- for (i=0;i<N;i++)
- {
- opus_val16 x;
- x = inp[i];
- /* Apply pre-emphasis */
- inp[i] = SHL32(x, SIG_SHIFT) - m;
- m = SHR32(MULT16_16(coef0, x), 15-SIG_SHIFT);
- }
- }
- *mem = m;
-}
-
-
-
-static opus_val32 l1_metric(const celt_norm *tmp, int N, int LM, opus_val16 bias)
-{
- int i;
- opus_val32 L1;
- L1 = 0;
- for (i=0;i<N;i++)
- L1 += EXTEND32(ABS16(tmp[i]));
- /* When in doubt, prefer good freq resolution */
- L1 = MAC16_32_Q15(L1, LM*bias, L1);
- return L1;
-
-}
-
-static int tf_analysis(const CELTMode *m, int len, int isTransient,
- int *tf_res, int lambda, celt_norm *X, int N0, int LM,
- int *tf_sum, opus_val16 tf_estimate, int tf_chan)
-{
- int i;
- VARDECL(int, metric);
- int cost0;
- int cost1;
- VARDECL(int, path0);
- VARDECL(int, path1);
- VARDECL(celt_norm, tmp);
- VARDECL(celt_norm, tmp_1);
- int sel;
- int selcost[2];
- int tf_select=0;
- opus_val16 bias;
-
- SAVE_STACK;
- bias = MULT16_16_Q14(QCONST16(.04f,15), MAX16(-QCONST16(.25f,14), QCONST16(.5f,14)-tf_estimate));
- /*printf("%f ", bias);*/
-
- ALLOC(metric, len, int);
- ALLOC(tmp, (m->eBands[len]-m->eBands[len-1])<<LM, celt_norm);
- ALLOC(tmp_1, (m->eBands[len]-m->eBands[len-1])<<LM, celt_norm);
- ALLOC(path0, len, int);
- ALLOC(path1, len, int);
-
- *tf_sum = 0;
- for (i=0;i<len;i++)
- {
- int k, N;
- int narrow;
- opus_val32 L1, best_L1;
- int best_level=0;
- N = (m->eBands[i+1]-m->eBands[i])<<LM;
- /* band is too narrow to be split down to LM=-1 */
- narrow = (m->eBands[i+1]-m->eBands[i])==1;
- OPUS_COPY(tmp, &X[tf_chan*N0 + (m->eBands[i]<<LM)], N);
- /* Just add the right channel if we're in stereo */
- /*if (C==2)
- for (j=0;j<N;j++)
- tmp[j] = ADD16(SHR16(tmp[j], 1),SHR16(X[N0+j+(m->eBands[i]<<LM)], 1));*/
- L1 = l1_metric(tmp, N, isTransient ? LM : 0, bias);
- best_L1 = L1;
- /* Check the -1 case for transients */
- if (isTransient && !narrow)
- {
- OPUS_COPY(tmp_1, tmp, N);
- haar1(tmp_1, N>>LM, 1<<LM);
- L1 = l1_metric(tmp_1, N, LM+1, bias);
- if (L1<best_L1)
- {
- best_L1 = L1;
- best_level = -1;
- }
- }
- /*printf ("%f ", L1);*/
- for (k=0;k<LM+!(isTransient||narrow);k++)
- {
- int B;
-
- if (isTransient)
- B = (LM-k-1);
- else
- B = k+1;
-
- haar1(tmp, N>>k, 1<<k);
-
- L1 = l1_metric(tmp, N, B, bias);
-
- if (L1 < best_L1)
- {
- best_L1 = L1;
- best_level = k+1;
- }
- }
- /*printf ("%d ", isTransient ? LM-best_level : best_level);*/
- /* metric is in Q1 to be able to select the mid-point (-0.5) for narrower bands */
- if (isTransient)
- metric[i] = 2*best_level;
- else
- metric[i] = -2*best_level;
- *tf_sum += (isTransient ? LM : 0) - metric[i]/2;
- /* For bands that can't be split to -1, set the metric to the half-way point to avoid
- biasing the decision */
- if (narrow && (metric[i]==0 || metric[i]==-2*LM))
- metric[i]-=1;
- /*printf("%d ", metric[i]);*/
- }
- /*printf("\n");*/
- /* Search for the optimal tf resolution, including tf_select */
- tf_select = 0;
- for (sel=0;sel<2;sel++)
- {
- cost0 = 0;
- cost1 = isTransient ? 0 : lambda;
- for (i=1;i<len;i++)
- {
- int curr0, curr1;
- curr0 = IMIN(cost0, cost1 + lambda);
- curr1 = IMIN(cost0 + lambda, cost1);
- cost0 = curr0 + abs(metric[i]-2*tf_select_table[LM][4*isTransient+2*sel+0]);
- cost1 = curr1 + abs(metric[i]-2*tf_select_table[LM][4*isTransient+2*sel+1]);
- }
- cost0 = IMIN(cost0, cost1);
- selcost[sel]=cost0;
- }
- /* For now, we're conservative and only allow tf_select=1 for transients.
- * If tests confirm it's useful for non-transients, we could allow it. */
- if (selcost[1]<selcost[0] && isTransient)
- tf_select=1;
- cost0 = 0;
- cost1 = isTransient ? 0 : lambda;
- /* Viterbi forward pass */
- for (i=1;i<len;i++)
- {
- int curr0, curr1;
- int from0, from1;
-
- from0 = cost0;
- from1 = cost1 + lambda;
- if (from0 < from1)
- {
- curr0 = from0;
- path0[i]= 0;
- } else {
- curr0 = from1;
- path0[i]= 1;
- }
-
- from0 = cost0 + lambda;
- from1 = cost1;
- if (from0 < from1)
- {
- curr1 = from0;
- path1[i]= 0;
- } else {
- curr1 = from1;
- path1[i]= 1;
- }
- cost0 = curr0 + abs(metric[i]-2*tf_select_table[LM][4*isTransient+2*tf_select+0]);
- cost1 = curr1 + abs(metric[i]-2*tf_select_table[LM][4*isTransient+2*tf_select+1]);
- }
- tf_res[len-1] = cost0 < cost1 ? 0 : 1;
- /* Viterbi backward pass to check the decisions */
- for (i=len-2;i>=0;i--)
- {
- if (tf_res[i+1] == 1)
- tf_res[i] = path1[i+1];
- else
- tf_res[i] = path0[i+1];
- }
- /*printf("%d %f\n", *tf_sum, tf_estimate);*/
- RESTORE_STACK;
-#ifdef FUZZING
- tf_select = rand()&0x1;
- tf_res[0] = rand()&0x1;
- for (i=1;i<len;i++)
- tf_res[i] = tf_res[i-1] ^ ((rand()&0xF) == 0);
-#endif
- return tf_select;
-}
-
-static void tf_encode(int start, int end, int isTransient, int *tf_res, int LM, int tf_select, ec_enc *enc)
-{
- int curr, i;
- int tf_select_rsv;
- int tf_changed;
- int logp;
- opus_uint32 budget;
- opus_uint32 tell;
- budget = enc->storage*8;
- tell = ec_tell(enc);
- logp = isTransient ? 2 : 4;
- /* Reserve space to code the tf_select decision. */
- tf_select_rsv = LM>0 && tell+logp+1 <= budget;
- budget -= tf_select_rsv;
- curr = tf_changed = 0;
- for (i=start;i<end;i++)
- {
- if (tell+logp<=budget)
- {
- ec_enc_bit_logp(enc, tf_res[i] ^ curr, logp);
- tell = ec_tell(enc);
- curr = tf_res[i];
- tf_changed |= curr;
- }
- else
- tf_res[i] = curr;
- logp = isTransient ? 4 : 5;
- }
- /* Only code tf_select if it would actually make a difference. */
- if (tf_select_rsv &&
- tf_select_table[LM][4*isTransient+0+tf_changed]!=
- tf_select_table[LM][4*isTransient+2+tf_changed])
- ec_enc_bit_logp(enc, tf_select, 1);
- else
- tf_select = 0;
- for (i=start;i<end;i++)
- tf_res[i] = tf_select_table[LM][4*isTransient+2*tf_select+tf_res[i]];
- /*for(i=0;i<end;i++)printf("%d ", isTransient ? tf_res[i] : LM+tf_res[i]);printf("\n");*/
-}
-
-
-static int alloc_trim_analysis(const CELTMode *m, const celt_norm *X,
- const opus_val16 *bandLogE, int end, int LM, int C, int N0,
- AnalysisInfo *analysis, opus_val16 *stereo_saving, opus_val16 tf_estimate,
- int intensity, opus_val16 surround_trim, int arch)
-{
- int i;
- opus_val32 diff=0;
- int c;
- int trim_index;
- opus_val16 trim = QCONST16(5.f, 8);
- opus_val16 logXC, logXC2;
- if (C==2)
- {
- opus_val16 sum = 0; /* Q10 */
- opus_val16 minXC; /* Q10 */
- /* Compute inter-channel correlation for low frequencies */
- for (i=0;i<8;i++)
- {
- opus_val32 partial;
- partial = celt_inner_prod(&X[m->eBands[i]<<LM], &X[N0+(m->eBands[i]<<LM)],
- (m->eBands[i+1]-m->eBands[i])<<LM, arch);
- sum = ADD16(sum, EXTRACT16(SHR32(partial, 18)));
- }
- sum = MULT16_16_Q15(QCONST16(1.f/8, 15), sum);
- sum = MIN16(QCONST16(1.f, 10), ABS16(sum));
- minXC = sum;
- for (i=8;i<intensity;i++)
- {
- opus_val32 partial;
- partial = celt_inner_prod(&X[m->eBands[i]<<LM], &X[N0+(m->eBands[i]<<LM)],
- (m->eBands[i+1]-m->eBands[i])<<LM, arch);
- minXC = MIN16(minXC, ABS16(EXTRACT16(SHR32(partial, 18))));
- }
- minXC = MIN16(QCONST16(1.f, 10), ABS16(minXC));
- /*printf ("%f\n", sum);*/
- /* mid-side savings estimations based on the LF average*/
- logXC = celt_log2(QCONST32(1.001f, 20)-MULT16_16(sum, sum));
- /* mid-side savings estimations based on min correlation */
- logXC2 = MAX16(HALF16(logXC), celt_log2(QCONST32(1.001f, 20)-MULT16_16(minXC, minXC)));
-#ifdef OPUS_FIXED_POINT
- /* Compensate for Q20 vs Q14 input and convert output to Q8 */
- logXC = PSHR32(logXC-QCONST16(6.f, DB_SHIFT),DB_SHIFT-8);
- logXC2 = PSHR32(logXC2-QCONST16(6.f, DB_SHIFT),DB_SHIFT-8);
-#endif
-
- trim += MAX16(-QCONST16(4.f, 8), MULT16_16_Q15(QCONST16(.75f,15),logXC));
- *stereo_saving = MIN16(*stereo_saving + QCONST16(0.25f, 8), -HALF16(logXC2));
- }
-
- /* Estimate spectral tilt */
- c=0; do {
- for (i=0;i<end-1;i++)
- {
- diff += bandLogE[i+c*m->nbEBands]*(opus_int32)(2+2*i-end);
- }
- } while (++c<C);
- diff /= C*(end-1);
- /*printf("%f\n", diff);*/
- trim -= MAX16(-QCONST16(2.f, 8), MIN16(QCONST16(2.f, 8), SHR16(diff+QCONST16(1.f, DB_SHIFT),DB_SHIFT-8)/6 ));
- trim -= SHR16(surround_trim, DB_SHIFT-8);
- trim -= 2*SHR16(tf_estimate, 14-8);
-#ifndef DISABLE_FLOAT_API
- if (analysis->valid)
- {
- trim -= MAX16(-QCONST16(2.f, 8), MIN16(QCONST16(2.f, 8),
- (opus_val16)(QCONST16(2.f, 8)*(analysis->tonality_slope+.05f))));
- }
-#else
- (void)analysis;
-#endif
-
-#ifdef OPUS_FIXED_POINT
- trim_index = PSHR32(trim, 8);
-#else
- trim_index = (int)floor(.5f+trim);
-#endif
- trim_index = IMAX(0, IMIN(10, trim_index));
- /*printf("%d\n", trim_index);*/
-#ifdef FUZZING
- trim_index = rand()%11;
-#endif
- return trim_index;
-}
-
-static int stereo_analysis(const CELTMode *m, const celt_norm *X,
- int LM, int N0)
-{
- int i;
- int thetas;
- opus_val32 sumLR = EPSILON, sumMS = EPSILON;
-
- /* Use the L1 norm to model the entropy of the L/R signal vs the M/S signal */
- for (i=0;i<13;i++)
- {
- int j;
- for (j=m->eBands[i]<<LM;j<m->eBands[i+1]<<LM;j++)
- {
- opus_val32 L, R, M, S;
- /* We cast to 32-bit first because of the -32768 case */
- L = EXTEND32(X[j]);
- R = EXTEND32(X[N0+j]);
- M = ADD32(L, R);
- S = SUB32(L, R);
- sumLR = ADD32(sumLR, ADD32(ABS32(L), ABS32(R)));
- sumMS = ADD32(sumMS, ADD32(ABS32(M), ABS32(S)));
- }
- }
- sumMS = MULT16_32_Q15(QCONST16(0.707107f, 15), sumMS);
- thetas = 13;
- /* We don't need thetas for lower bands with LM<=1 */
- if (LM<=1)
- thetas -= 8;
- return MULT16_32_Q15((m->eBands[13]<<(LM+1))+thetas, sumMS)
- > MULT16_32_Q15(m->eBands[13]<<(LM+1), sumLR);
-}
-
-#define MSWAP(a,b) do {opus_val16 tmp = a;a=b;b=tmp;} while(0)
-static opus_val16 median_of_5(const opus_val16 *x)
-{
- opus_val16 t0, t1, t2, t3, t4;
- t2 = x[2];
- if (x[0] > x[1])
- {
- t0 = x[1];
- t1 = x[0];
- } else {
- t0 = x[0];
- t1 = x[1];
- }
- if (x[3] > x[4])
- {
- t3 = x[4];
- t4 = x[3];
- } else {
- t3 = x[3];
- t4 = x[4];
- }
- if (t0 > t3)
- {
- MSWAP(t0, t3);
- MSWAP(t1, t4);
- }
- if (t2 > t1)
- {
- if (t1 < t3)
- return MIN16(t2, t3);
- else
- return MIN16(t4, t1);
- } else {
- if (t2 < t3)
- return MIN16(t1, t3);
- else
- return MIN16(t2, t4);
- }
-}
-
-static opus_val16 median_of_3(const opus_val16 *x)
-{
- opus_val16 t0, t1, t2;
- if (x[0] > x[1])
- {
- t0 = x[1];
- t1 = x[0];
- } else {
- t0 = x[0];
- t1 = x[1];
- }
- t2 = x[2];
- if (t1 < t2)
- return t1;
- else if (t0 < t2)
- return t2;
- else
- return t0;
-}
-
-static opus_val16 dynalloc_analysis(const opus_val16 *bandLogE, const opus_val16 *bandLogE2,
- int nbEBands, int start, int end, int C, int *offsets, int lsb_depth, const opus_int16 *logN,
- int isTransient, int vbr, int constrained_vbr, const opus_int16 *eBands, int LM,
- int effectiveBytes, opus_int32 *tot_boost_, int lfe, opus_val16 *surround_dynalloc)
-{
- int i, c;
- opus_int32 tot_boost=0;
- opus_val16 maxDepth;
- VARDECL(opus_val16, follower);
- VARDECL(opus_val16, noise_floor);
- SAVE_STACK;
- ALLOC(follower, C*nbEBands, opus_val16);
- ALLOC(noise_floor, C*nbEBands, opus_val16);
- OPUS_CLEAR(offsets, nbEBands);
- /* Dynamic allocation code */
- maxDepth=-QCONST16(31.9f, DB_SHIFT);
- for (i=0;i<end;i++)
- {
- /* Noise floor must take into account eMeans, the depth, the width of the bands
- and the preemphasis filter (approx. square of bark band ID) */
- noise_floor[i] = MULT16_16(QCONST16(0.0625f, DB_SHIFT),logN[i])
- +QCONST16(.5f,DB_SHIFT)+SHL16(9-lsb_depth,DB_SHIFT)-SHL16(eMeans[i],6)
- +MULT16_16(QCONST16(.0062,DB_SHIFT),(i+5)*(i+5));
- }
- c=0;do
- {
- for (i=0;i<end;i++)
- maxDepth = MAX16(maxDepth, bandLogE[c*nbEBands+i]-noise_floor[i]);
- } while (++c<C);
- /* Make sure that dynamic allocation can't make us bust the budget */
- if (effectiveBytes > 50 && LM>=1 && !lfe)
- {
- int last=0;
- c=0;do
- {
- opus_val16 offset;
- opus_val16 tmp;
- opus_val16 *f;
- f = &follower[c*nbEBands];
- f[0] = bandLogE2[c*nbEBands];
- for (i=1;i<end;i++)
- {
- /* The last band to be at least 3 dB higher than the previous one
- is the last we'll consider. Otherwise, we run into problems on
- bandlimited signals. */
- if (bandLogE2[c*nbEBands+i] > bandLogE2[c*nbEBands+i-1]+QCONST16(.5f,DB_SHIFT))
- last=i;
- f[i] = MIN16(f[i-1]+QCONST16(1.5f,DB_SHIFT), bandLogE2[c*nbEBands+i]);
- }
- for (i=last-1;i>=0;i--)
- f[i] = MIN16(f[i], MIN16(f[i+1]+QCONST16(2.f,DB_SHIFT), bandLogE2[c*nbEBands+i]));
-
- /* Combine with a median filter to avoid dynalloc triggering unnecessarily.
- The "offset" value controls how conservative we are -- a higher offset
- reduces the impact of the median filter and makes dynalloc use more bits. */
- offset = QCONST16(1.f, DB_SHIFT);
- for (i=2;i<end-2;i++)
- f[i] = MAX16(f[i], median_of_5(&bandLogE2[c*nbEBands+i-2])-offset);
- tmp = median_of_3(&bandLogE2[c*nbEBands])-offset;
- f[0] = MAX16(f[0], tmp);
- f[1] = MAX16(f[1], tmp);
- tmp = median_of_3(&bandLogE2[c*nbEBands+end-3])-offset;
- f[end-2] = MAX16(f[end-2], tmp);
- f[end-1] = MAX16(f[end-1], tmp);
-
- for (i=0;i<end;i++)
- f[i] = MAX16(f[i], noise_floor[i]);
- } while (++c<C);
- if (C==2)
- {
- for (i=start;i<end;i++)
- {
- /* Consider 24 dB "cross-talk" */
- follower[nbEBands+i] = MAX16(follower[nbEBands+i], follower[ i]-QCONST16(4.f,DB_SHIFT));
- follower[ i] = MAX16(follower[ i], follower[nbEBands+i]-QCONST16(4.f,DB_SHIFT));
- follower[i] = HALF16(MAX16(0, bandLogE[i]-follower[i]) + MAX16(0, bandLogE[nbEBands+i]-follower[nbEBands+i]));
- }
- } else {
- for (i=start;i<end;i++)
- {
- follower[i] = MAX16(0, bandLogE[i]-follower[i]);
- }
- }
- for (i=start;i<end;i++)
- follower[i] = MAX16(follower[i], surround_dynalloc[i]);
- /* For non-transient CBR/CVBR frames, halve the dynalloc contribution */
- if ((!vbr || constrained_vbr)&&!isTransient)
- {
- for (i=start;i<end;i++)
- follower[i] = HALF16(follower[i]);
- }
- for (i=start;i<end;i++)
- {
- int width;
- int boost;
- int boost_bits;
-
- if (i<8)
- follower[i] *= 2;
- if (i>=12)
- follower[i] = HALF16(follower[i]);
- follower[i] = MIN16(follower[i], QCONST16(4, DB_SHIFT));
-
- width = C*(eBands[i+1]-eBands[i])<<LM;
- if (width<6)
- {
- boost = (int)SHR32(EXTEND32(follower[i]),DB_SHIFT);
- boost_bits = boost*width<<BITRES;
- } else if (width > 48) {
- boost = (int)SHR32(EXTEND32(follower[i])*8,DB_SHIFT);
- boost_bits = (boost*width<<BITRES)/8;
- } else {
- boost = (int)SHR32(EXTEND32(follower[i])*width/6,DB_SHIFT);
- boost_bits = boost*6<<BITRES;
- }
- /* For CBR and non-transient CVBR frames, limit dynalloc to 1/4 of the bits */
- if ((!vbr || (constrained_vbr&&!isTransient))
- && (tot_boost+boost_bits)>>BITRES>>3 > effectiveBytes/4)
- {
- opus_int32 cap = ((effectiveBytes/4)<<BITRES<<3);
- offsets[i] = cap-tot_boost;
- tot_boost = cap;
- break;
- } else {
- offsets[i] = boost;
- tot_boost += boost_bits;
- }
- }
- }
- *tot_boost_ = tot_boost;
- RESTORE_STACK;
- return maxDepth;
-}
-
-
-static int run_prefilter(CELTEncoder *st, celt_sig *in, celt_sig *prefilter_mem, int CC, int N,
- int prefilter_tapset, int *pitch, opus_val16 *gain, int *qgain, int enabled, int nbAvailableBytes)
-{
- int c;
- VARDECL(celt_sig, _pre);
- celt_sig *pre[2];
- const CELTMode *mode;
- int pitch_index;
- opus_val16 gain1;
- opus_val16 pf_threshold;
- int pf_on;
- int qg;
- int overlap;
- SAVE_STACK;
-
- mode = st->mode;
- overlap = mode->overlap;
- ALLOC(_pre, CC*(N+COMBFILTER_MAXPERIOD), celt_sig);
-
- pre[0] = _pre;
- pre[1] = _pre + (N+COMBFILTER_MAXPERIOD);
-
-
- c=0; do {
- OPUS_COPY(pre[c], prefilter_mem+c*COMBFILTER_MAXPERIOD, COMBFILTER_MAXPERIOD);
- OPUS_COPY(pre[c]+COMBFILTER_MAXPERIOD, in+c*(N+overlap)+overlap, N);
- } while (++c<CC);
-
- if (enabled)
- {
- VARDECL(opus_val16, pitch_buf);
- ALLOC(pitch_buf, (COMBFILTER_MAXPERIOD+N)>>1, opus_val16);
-
- pitch_downsample(pre, pitch_buf, COMBFILTER_MAXPERIOD+N, CC, st->arch);
- /* Don't search for the fir last 1.5 octave of the range because
- there's too many false-positives due to short-term correlation */
- pitch_search(pitch_buf+(COMBFILTER_MAXPERIOD>>1), pitch_buf, N,
- COMBFILTER_MAXPERIOD-3*COMBFILTER_MINPERIOD, &pitch_index,
- st->arch);
- pitch_index = COMBFILTER_MAXPERIOD-pitch_index;
-
- gain1 = remove_doubling(pitch_buf, COMBFILTER_MAXPERIOD, COMBFILTER_MINPERIOD,
- N, &pitch_index, st->prefilter_period, st->prefilter_gain, st->arch);
- if (pitch_index > COMBFILTER_MAXPERIOD-2)
- pitch_index = COMBFILTER_MAXPERIOD-2;
- gain1 = MULT16_16_Q15(QCONST16(.7f,15),gain1);
- /*printf("%d %d %f %f\n", pitch_change, pitch_index, gain1, st->analysis.tonality);*/
- if (st->loss_rate>2)
- gain1 = HALF32(gain1);
- if (st->loss_rate>4)
- gain1 = HALF32(gain1);
- if (st->loss_rate>8)
- gain1 = 0;
- } else {
- gain1 = 0;
- pitch_index = COMBFILTER_MINPERIOD;
- }
-
- /* Gain threshold for enabling the prefilter/postfilter */
- pf_threshold = QCONST16(.2f,15);
-
- /* Adjusting the threshold based on rate and continuity */
- if (abs(pitch_index-st->prefilter_period)*10>pitch_index)
- pf_threshold += QCONST16(.2f,15);
- if (nbAvailableBytes<25)
- pf_threshold += QCONST16(.1f,15);
- if (nbAvailableBytes<35)
- pf_threshold += QCONST16(.1f,15);
- if (st->prefilter_gain > QCONST16(.4f,15))
- pf_threshold -= QCONST16(.1f,15);
- if (st->prefilter_gain > QCONST16(.55f,15))
- pf_threshold -= QCONST16(.1f,15);
-
- /* Hard threshold at 0.2 */
- pf_threshold = MAX16(pf_threshold, QCONST16(.2f,15));
- if (gain1<pf_threshold)
- {
- gain1 = 0;
- pf_on = 0;
- qg = 0;
- } else {
- /*This block is not gated by a total bits check only because
- of the nbAvailableBytes check above.*/
- if (ABS16(gain1-st->prefilter_gain)<QCONST16(.1f,15))
- gain1=st->prefilter_gain;
-
-#ifdef OPUS_FIXED_POINT
- qg = ((gain1+1536)>>10)/3-1;
-#else
- qg = (int)floor(.5f+gain1*32/3)-1;
-#endif
- qg = IMAX(0, IMIN(7, qg));
- gain1 = QCONST16(0.09375f,15)*(qg+1);
- pf_on = 1;
- }
- /*printf("%d %f\n", pitch_index, gain1);*/
-
- c=0; do {
- int offset = mode->shortMdctSize-overlap;
- st->prefilter_period=IMAX(st->prefilter_period, COMBFILTER_MINPERIOD);
- OPUS_COPY(in+c*(N+overlap), st->in_mem+c*(overlap), overlap);
- if (offset)
- comb_filter(in+c*(N+overlap)+overlap, pre[c]+COMBFILTER_MAXPERIOD,
- st->prefilter_period, st->prefilter_period, offset, -st->prefilter_gain, -st->prefilter_gain,
- st->prefilter_tapset, st->prefilter_tapset, NULL, 0, st->arch);
-
- comb_filter(in+c*(N+overlap)+overlap+offset, pre[c]+COMBFILTER_MAXPERIOD+offset,
- st->prefilter_period, pitch_index, N-offset, -st->prefilter_gain, -gain1,
- st->prefilter_tapset, prefilter_tapset, mode->window, overlap, st->arch);
- OPUS_COPY(st->in_mem+c*(overlap), in+c*(N+overlap)+N, overlap);
-
- if (N>COMBFILTER_MAXPERIOD)
- {
- OPUS_MOVE(prefilter_mem+c*COMBFILTER_MAXPERIOD, pre[c]+N, COMBFILTER_MAXPERIOD);
- } else {
- OPUS_MOVE(prefilter_mem+c*COMBFILTER_MAXPERIOD, prefilter_mem+c*COMBFILTER_MAXPERIOD+N, COMBFILTER_MAXPERIOD-N);
- OPUS_MOVE(prefilter_mem+c*COMBFILTER_MAXPERIOD+COMBFILTER_MAXPERIOD-N, pre[c]+COMBFILTER_MAXPERIOD, N);
- }
- } while (++c<CC);
-
- RESTORE_STACK;
- *gain = gain1;
- *pitch = pitch_index;
- *qgain = qg;
- return pf_on;
-}
-
-static int compute_vbr(const CELTMode *mode, AnalysisInfo *analysis, opus_int32 base_target,
- int LM, opus_int32 bitrate, int lastCodedBands, int C, int intensity,
- int constrained_vbr, opus_val16 stereo_saving, int tot_boost,
- opus_val16 tf_estimate, int pitch_change, opus_val16 maxDepth,
- int variable_duration, int lfe, int has_surround_mask, opus_val16 surround_masking,
- opus_val16 temporal_vbr)
-{
- /* The target rate in 8th bits per frame */
- opus_int32 target;
- int coded_bins;
- int coded_bands;
- opus_val16 tf_calibration;
- int nbEBands;
- const opus_int16 *eBands;
-
- nbEBands = mode->nbEBands;
- eBands = mode->eBands;
-
- coded_bands = lastCodedBands ? lastCodedBands : nbEBands;
- coded_bins = eBands[coded_bands]<<LM;
- if (C==2)
- coded_bins += eBands[IMIN(intensity, coded_bands)]<<LM;
-
- target = base_target;
-
- /*printf("%f %f %f %f %d %d ", st->analysis.activity, st->analysis.tonality, tf_estimate, st->stereo_saving, tot_boost, coded_bands);*/
-#ifndef DISABLE_FLOAT_API
- if (analysis->valid && analysis->activity<.4)
- target -= (opus_int32)((coded_bins<<BITRES)*(.4f-analysis->activity));
-#endif
- /* Stereo savings */
- if (C==2)
- {
- int coded_stereo_bands;
- int coded_stereo_dof;
- opus_val16 max_frac;
- coded_stereo_bands = IMIN(intensity, coded_bands);
- coded_stereo_dof = (eBands[coded_stereo_bands]<<LM)-coded_stereo_bands;
- /* Maximum fraction of the bits we can save if the signal is mono. */
- max_frac = DIV32_16(MULT16_16(QCONST16(0.8f, 15), coded_stereo_dof), coded_bins);
- stereo_saving = MIN16(stereo_saving, QCONST16(1.f, 8));
- /*printf("%d %d %d ", coded_stereo_dof, coded_bins, tot_boost);*/
- target -= (opus_int32)MIN32(MULT16_32_Q15(max_frac,target),
- SHR32(MULT16_16(stereo_saving-QCONST16(0.1f,8),(coded_stereo_dof<<BITRES)),8));
- }
- /* Boost the rate according to dynalloc (minus the dynalloc average for calibration). */
- target += tot_boost-(16<<LM);
- /* Apply transient boost, compensating for average boost. */
- tf_calibration = variable_duration==OPUS_FRAMESIZE_VARIABLE ?
- QCONST16(0.02f,14) : QCONST16(0.04f,14);
- target += (opus_int32)SHL32(MULT16_32_Q15(tf_estimate-tf_calibration, target),1);
-
-#ifndef DISABLE_FLOAT_API
- /* Apply tonality boost */
- if (analysis->valid && !lfe)
- {
- opus_int32 tonal_target;
- float tonal;
-
- /* Tonality boost (compensating for the average). */
- tonal = MAX16(0.f,analysis->tonality-.15f)-0.09f;
- tonal_target = target + (opus_int32)((coded_bins<<BITRES)*1.2f*tonal);
- if (pitch_change)
- tonal_target += (opus_int32)((coded_bins<<BITRES)*.8f);
- /*printf("%f %f ", analysis->tonality, tonal);*/
- target = tonal_target;
- }
-#else
- (void)analysis;
- (void)pitch_change;
-#endif
-
- if (has_surround_mask&&!lfe)
- {
- opus_int32 surround_target = target + (opus_int32)SHR32(MULT16_16(surround_masking,coded_bins<<BITRES), DB_SHIFT);
- /*printf("%f %d %d %d %d %d %d ", surround_masking, coded_bins, st->end, st->intensity, surround_target, target, st->bitrate);*/
- target = IMAX(target/4, surround_target);
- }
-
- {
- opus_int32 floor_depth;
- int bins;
- bins = eBands[nbEBands-2]<<LM;
- /*floor_depth = SHR32(MULT16_16((C*bins<<BITRES),celt_log2(SHL32(MAX16(1,sample_max),13))), DB_SHIFT);*/
- floor_depth = (opus_int32)SHR32(MULT16_16((C*bins<<BITRES),maxDepth), DB_SHIFT);
- floor_depth = IMAX(floor_depth, target>>2);
- target = IMIN(target, floor_depth);
- /*printf("%f %d\n", maxDepth, floor_depth);*/
- }
-
- if ((!has_surround_mask||lfe) && (constrained_vbr || bitrate<64000))
- {
- opus_val16 rate_factor;
-#ifdef OPUS_FIXED_POINT
- rate_factor = MAX16(0,(bitrate-32000));
-#else
- rate_factor = MAX16(0,(1.f/32768)*(bitrate-32000));
-#endif
- if (constrained_vbr)
- rate_factor = MIN16(rate_factor, QCONST16(0.67f, 15));
- target = base_target + (opus_int32)MULT16_32_Q15(rate_factor, target-base_target);
-
- }
-
- if (!has_surround_mask && tf_estimate < QCONST16(.2f, 14))
- {
- opus_val16 amount;
- opus_val16 tvbr_factor;
- amount = MULT16_16_Q15(QCONST16(.0000031f, 30), IMAX(0, IMIN(32000, 96000-bitrate)));
- tvbr_factor = SHR32(MULT16_16(temporal_vbr, amount), DB_SHIFT);
- target += (opus_int32)MULT16_32_Q15(tvbr_factor, target);
- }
-
- /* Don't allow more than doubling the rate */
- target = IMIN(2*base_target, target);
-
- return target;
-}
-
-int celt_encode_with_ec(CELTEncoder * OPUS_RESTRICT st, const opus_val16 * pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes, ec_enc *enc)
-{
- int i, c, N;
- opus_int32 bits;
- ec_enc _enc;
- VARDECL(celt_sig, in);
- VARDECL(celt_sig, freq);
- VARDECL(celt_norm, X);
- VARDECL(celt_ener, bandE);
- VARDECL(opus_val16, bandLogE);
- VARDECL(opus_val16, bandLogE2);
- VARDECL(int, fine_quant);
- VARDECL(opus_val16, error);
- VARDECL(int, pulses);
- VARDECL(int, cap);
- VARDECL(int, offsets);
- VARDECL(int, fine_priority);
- VARDECL(int, tf_res);
- VARDECL(unsigned char, collapse_masks);
- celt_sig *prefilter_mem;
- opus_val16 *oldBandE, *oldLogE, *oldLogE2;
- int shortBlocks=0;
- int isTransient=0;
- const int CC = st->channels;
- const int C = st->stream_channels;
- int LM, M;
- int tf_select;
- int nbFilledBytes, nbAvailableBytes;
- int start;
- int end;
- int effEnd;
- int codedBands;
- int tf_sum;
- int alloc_trim;
- int pitch_index=COMBFILTER_MINPERIOD;
- opus_val16 gain1 = 0;
- int dual_stereo=0;
- int effectiveBytes;
- int dynalloc_logp;
- opus_int32 vbr_rate;
- opus_int32 total_bits;
- opus_int32 total_boost;
- opus_int32 balance;
- opus_int32 tell;
- int prefilter_tapset=0;
- int pf_on;
- int anti_collapse_rsv;
- int anti_collapse_on=0;
- int silence=0;
- int tf_chan = 0;
- opus_val16 tf_estimate;
- int pitch_change=0;
- opus_int32 tot_boost;
- opus_val32 sample_max;
- opus_val16 maxDepth;
- const OpusCustomMode *mode;
- int nbEBands;
- int overlap;
- const opus_int16 *eBands;
- int secondMdct;
- int signalBandwidth;
- int transient_got_disabled=0;
- opus_val16 surround_masking=0;
- opus_val16 temporal_vbr=0;
- opus_val16 surround_trim = 0;
- opus_int32 equiv_rate = 510000;
- VARDECL(opus_val16, surround_dynalloc);
- ALLOC_STACK;
-
- mode = st->mode;
- nbEBands = mode->nbEBands;
- overlap = mode->overlap;
- eBands = mode->eBands;
- start = st->start;
- end = st->end;
- tf_estimate = 0;
- if (nbCompressedBytes<2 || pcm==NULL)
- {
- RESTORE_STACK;
- return OPUS_BAD_ARG;
- }
-
- frame_size *= st->upsample;
- for (LM=0;LM<=mode->maxLM;LM++)
- if (mode->shortMdctSize<<LM==frame_size)
- break;
- if (LM>mode->maxLM)
- {
- RESTORE_STACK;
- return OPUS_BAD_ARG;
- }
- M=1<<LM;
- N = M*mode->shortMdctSize;
-
- prefilter_mem = st->in_mem+CC*(overlap);
- oldBandE = (opus_val16*)(st->in_mem+CC*(overlap+COMBFILTER_MAXPERIOD));
- oldLogE = oldBandE + CC*nbEBands;
- oldLogE2 = oldLogE + CC*nbEBands;
-
- if (enc==NULL)
- {
- tell=1;
- nbFilledBytes=0;
- } else {
- tell=ec_tell(enc);
- nbFilledBytes=(tell+4)>>3;
- }
-
-#ifdef CUSTOM_MODES
- if (st->signalling && enc==NULL)
- {
- int tmp = (mode->effEBands-end)>>1;
- end = st->end = IMAX(1, mode->effEBands-tmp);
- compressed[0] = tmp<<5;
- compressed[0] |= LM<<3;
- compressed[0] |= (C==2)<<2;
- /* Convert "standard mode" to Opus header */
- if (mode->Fs==48000 && mode->shortMdctSize==120)
- {
- int c0 = toOpus(compressed[0]);
- if (c0<0)
- {
- RESTORE_STACK;
- return OPUS_BAD_ARG;
- }
- compressed[0] = c0;
- }
- compressed++;
- nbCompressedBytes--;
- }
-#else
- celt_assert(st->signalling==0);
-#endif
-
- /* Can't produce more than 1275 output bytes */
- nbCompressedBytes = IMIN(nbCompressedBytes,1275);
- nbAvailableBytes = nbCompressedBytes - nbFilledBytes;
-
- if (st->vbr && st->bitrate!=OPUS_BITRATE_MAX)
- {
- opus_int32 den=mode->Fs>>BITRES;
- vbr_rate=(st->bitrate*frame_size+(den>>1))/den;
-#ifdef CUSTOM_MODES
- if (st->signalling)
- vbr_rate -= 8<<BITRES;
-#endif
- effectiveBytes = vbr_rate>>(3+BITRES);
- } else {
- opus_int32 tmp;
- vbr_rate = 0;
- tmp = st->bitrate*frame_size;
- if (tell>1)
- tmp += tell;
- if (st->bitrate!=OPUS_BITRATE_MAX)
- nbCompressedBytes = IMAX(2, IMIN(nbCompressedBytes,
- (tmp+4*mode->Fs)/(8*mode->Fs)-!!st->signalling));
- effectiveBytes = nbCompressedBytes;
- }
- if (st->bitrate != OPUS_BITRATE_MAX)
- equiv_rate = st->bitrate - (40*C+20)*((400>>LM) - 50);
-
- if (enc==NULL)
- {
- ec_enc_init(&_enc, compressed, nbCompressedBytes);
- enc = &_enc;
- }
-
- if (vbr_rate>0)
- {
- /* Computes the max bit-rate allowed in VBR mode to avoid violating the
- target rate and buffering.
- We must do this up front so that bust-prevention logic triggers
- correctly if we don't have enough bits. */
- if (st->constrained_vbr)
- {
- opus_int32 vbr_bound;
- opus_int32 max_allowed;
- /* We could use any multiple of vbr_rate as bound (depending on the
- delay).
- This is clamped to ensure we use at least two bytes if the encoder
- was entirely empty, but to allow 0 in hybrid mode. */
- vbr_bound = vbr_rate;
- max_allowed = IMIN(IMAX(tell==1?2:0,
- (vbr_rate+vbr_bound-st->vbr_reservoir)>>(BITRES+3)),
- nbAvailableBytes);
- if(max_allowed < nbAvailableBytes)
- {
- nbCompressedBytes = nbFilledBytes+max_allowed;
- nbAvailableBytes = max_allowed;
- ec_enc_shrink(enc, nbCompressedBytes);
- }
- }
- }
- total_bits = nbCompressedBytes*8;
-
- effEnd = end;
- if (effEnd > mode->effEBands)
- effEnd = mode->effEBands;
-
- ALLOC(in, CC*(N+overlap), celt_sig);
-
- sample_max=MAX32(st->overlap_max, celt_maxabs16(pcm, C*(N-overlap)/st->upsample));
- st->overlap_max=celt_maxabs16(pcm+C*(N-overlap)/st->upsample, C*overlap/st->upsample);
- sample_max=MAX32(sample_max, st->overlap_max);
-#ifdef OPUS_FIXED_POINT
- silence = (sample_max==0);
-#else
- silence = (sample_max <= (opus_val16)1/(1<<st->lsb_depth));
-#endif
-#ifdef FUZZING
- if ((rand()&0x3F)==0)
- silence = 1;
-#endif
- if (tell==1)
- ec_enc_bit_logp(enc, silence, 15);
- else
- silence=0;
- if (silence)
- {
- /*In VBR mode there is no need to send more than the minimum. */
- if (vbr_rate>0)
- {
- effectiveBytes=nbCompressedBytes=IMIN(nbCompressedBytes, nbFilledBytes+2);
- total_bits=nbCompressedBytes*8;
- nbAvailableBytes=2;
- ec_enc_shrink(enc, nbCompressedBytes);
- }
- /* Pretend we've filled all the remaining bits with zeros
- (that's what the initialiser did anyway) */
- tell = nbCompressedBytes*8;
- enc->nbits_total+=tell-ec_tell(enc);
- }
- c=0; do {
- int need_clip=0;
-#ifndef OPUS_FIXED_POINT
- need_clip = st->clip && sample_max>65536.f;
-#endif
- celt_preemphasis(pcm+c, in+c*(N+overlap)+overlap, N, CC, st->upsample,
- mode->preemph, st->preemph_memE+c, need_clip);
- } while (++c<CC);
-
-
-
- /* Find pitch period and gain */
- {
- int enabled;
- int qg;
- enabled = ((st->lfe&&nbAvailableBytes>3) || nbAvailableBytes>12*C) && start==0 && !silence && !st->disable_pf
- && st->complexity >= 5 && !(st->consec_transient && LM!=3 && st->variable_duration==OPUS_FRAMESIZE_VARIABLE);
-
- prefilter_tapset = st->tapset_decision;
- pf_on = run_prefilter(st, in, prefilter_mem, CC, N, prefilter_tapset, &pitch_index, &gain1, &qg, enabled, nbAvailableBytes);
- if ((gain1 > QCONST16(.4f,15) || st->prefilter_gain > QCONST16(.4f,15)) && (!st->analysis.valid || st->analysis.tonality > .3)
- && (pitch_index > 1.26*st->prefilter_period || pitch_index < .79*st->prefilter_period))
- pitch_change = 1;
- if (pf_on==0)
- {
- if(start==0 && tell+16<=total_bits)
- ec_enc_bit_logp(enc, 0, 1);
- } else {
- /*This block is not gated by a total bits check only because
- of the nbAvailableBytes check above.*/
- int octave;
- ec_enc_bit_logp(enc, 1, 1);
- pitch_index += 1;
- octave = EC_ILOG(pitch_index)-5;
- ec_enc_uint(enc, octave, 6);
- ec_enc_bits(enc, pitch_index-(16<<octave), 4+octave);
- pitch_index -= 1;
- ec_enc_bits(enc, qg, 3);
- ec_enc_icdf(enc, prefilter_tapset, tapset_icdf, 2);
- }
- }
-
- isTransient = 0;
- shortBlocks = 0;
- if (st->complexity >= 1 && !st->lfe)
- {
- isTransient = transient_analysis(in, N+overlap, CC,
- &tf_estimate, &tf_chan);
- }
- if (LM>0 && ec_tell(enc)+3<=total_bits)
- {
- if (isTransient)
- shortBlocks = M;
- } else {
- isTransient = 0;
- transient_got_disabled=1;
- }
-
- ALLOC(freq, CC*N, celt_sig); /**< Interleaved signal MDCTs */
- ALLOC(bandE,nbEBands*CC, celt_ener);
- ALLOC(bandLogE,nbEBands*CC, opus_val16);
-
- secondMdct = shortBlocks && st->complexity>=8;
- ALLOC(bandLogE2, C*nbEBands, opus_val16);
- if (secondMdct)
- {
- compute_mdcts(mode, 0, in, freq, C, CC, LM, st->upsample, st->arch);
- compute_band_energies(mode, freq, bandE, effEnd, C, LM);
- amp2Log2(mode, effEnd, end, bandE, bandLogE2, C);
- for (i=0;i<C*nbEBands;i++)
- bandLogE2[i] += HALF16(SHL16(LM, DB_SHIFT));
- }
-
- compute_mdcts(mode, shortBlocks, in, freq, C, CC, LM, st->upsample, st->arch);
- if (CC==2&&C==1)
- tf_chan = 0;
- compute_band_energies(mode, freq, bandE, effEnd, C, LM);
-
- if (st->lfe)
- {
- for (i=2;i<end;i++)
- {
- bandE[i] = IMIN(bandE[i], MULT16_32_Q15(QCONST16(1e-4f,15),bandE[0]));
- bandE[i] = MAX32(bandE[i], EPSILON);
- }
- }
- amp2Log2(mode, effEnd, end, bandE, bandLogE, C);
-
- ALLOC(surround_dynalloc, C*nbEBands, opus_val16);
- OPUS_CLEAR(surround_dynalloc, end);
- /* This computes how much masking takes place between surround channels */
- if (start==0&&st->energy_mask&&!st->lfe)
- {
- int mask_end;
- int midband;
- int count_dynalloc;
- opus_val32 mask_avg=0;
- opus_val32 diff=0;
- int count=0;
- mask_end = IMAX(2,st->lastCodedBands);
- for (c=0;c<C;c++)
- {
- for(i=0;i<mask_end;i++)
- {
- opus_val16 mask;
- mask = MAX16(MIN16(st->energy_mask[nbEBands*c+i],
- QCONST16(.25f, DB_SHIFT)), -QCONST16(2.0f, DB_SHIFT));
- if (mask > 0)
- mask = HALF16(mask);
- mask_avg += MULT16_16(mask, eBands[i+1]-eBands[i]);
- count += eBands[i+1]-eBands[i];
- diff += MULT16_16(mask, 1+2*i-mask_end);
- }
- }
- celt_assert(count>0);
- mask_avg = DIV32_16(mask_avg,count);
- mask_avg += QCONST16(.2f, DB_SHIFT);
- diff = diff*6/(C*(mask_end-1)*(mask_end+1)*mask_end);
- /* Again, being conservative */
- diff = HALF32(diff);
- diff = MAX32(MIN32(diff, QCONST32(.031f, DB_SHIFT)), -QCONST32(.031f, DB_SHIFT));
- /* Find the band that's in the middle of the coded spectrum */
- for (midband=0;eBands[midband+1] < eBands[mask_end]/2;midband++);
- count_dynalloc=0;
- for(i=0;i<mask_end;i++)
- {
- opus_val32 lin;
- opus_val16 unmask;
- lin = mask_avg + diff*(i-midband);
- if (C==2)
- unmask = MAX16(st->energy_mask[i], st->energy_mask[nbEBands+i]);
- else
- unmask = st->energy_mask[i];
- unmask = MIN16(unmask, QCONST16(.0f, DB_SHIFT));
- unmask -= lin;
- if (unmask > QCONST16(.25f, DB_SHIFT))
- {
- surround_dynalloc[i] = unmask - QCONST16(.25f, DB_SHIFT);
- count_dynalloc++;
- }
- }
- if (count_dynalloc>=3)
- {
- /* If we need dynalloc in many bands, it's probably because our
- initial masking rate was too low. */
- mask_avg += QCONST16(.25f, DB_SHIFT);
- if (mask_avg>0)
- {
- /* Something went really wrong in the original calculations,
- disabling masking. */
- mask_avg = 0;
- diff = 0;
- OPUS_CLEAR(surround_dynalloc, mask_end);
- } else {
- for(i=0;i<mask_end;i++)
- surround_dynalloc[i] = MAX16(0, surround_dynalloc[i]-QCONST16(.25f, DB_SHIFT));
- }
- }
- mask_avg += QCONST16(.2f, DB_SHIFT);
- /* Convert to 1/64th units used for the trim */
- surround_trim = 64*diff;
- /*printf("%d %d ", mask_avg, surround_trim);*/
- surround_masking = mask_avg;
- }
- /* Temporal VBR (but not for LFE) */
- if (!st->lfe)
- {
- opus_val16 follow=-QCONST16(10.0f,DB_SHIFT);
- opus_val32 frame_avg=0;
- opus_val16 offset = shortBlocks?HALF16(SHL16(LM, DB_SHIFT)):0;
- for(i=start;i<end;i++)
- {
- follow = MAX16(follow-QCONST16(1.f, DB_SHIFT), bandLogE[i]-offset);
- if (C==2)
- follow = MAX16(follow, bandLogE[i+nbEBands]-offset);
- frame_avg += follow;
- }
- frame_avg /= (end-start);
- temporal_vbr = SUB16(frame_avg,st->spec_avg);
- temporal_vbr = MIN16(QCONST16(3.f, DB_SHIFT), MAX16(-QCONST16(1.5f, DB_SHIFT), temporal_vbr));
- st->spec_avg += MULT16_16_Q15(QCONST16(.02f, 15), temporal_vbr);
- }
- /*for (i=0;i<21;i++)
- printf("%f ", bandLogE[i]);
- printf("\n");*/
-
- if (!secondMdct)
- {
- OPUS_COPY(bandLogE2, bandLogE, C*nbEBands);
- }
-
- /* Last chance to catch any transient we might have missed in the
- time-domain analysis */
- if (LM>0 && ec_tell(enc)+3<=total_bits && !isTransient && st->complexity>=5 && !st->lfe)
- {
- if (patch_transient_decision(bandLogE, oldBandE, nbEBands, start, end, C))
- {
- isTransient = 1;
- shortBlocks = M;
- compute_mdcts(mode, shortBlocks, in, freq, C, CC, LM, st->upsample, st->arch);
- compute_band_energies(mode, freq, bandE, effEnd, C, LM);
- amp2Log2(mode, effEnd, end, bandE, bandLogE, C);
- /* Compensate for the scaling of short vs long mdcts */
- for (i=0;i<C*nbEBands;i++)
- bandLogE2[i] += HALF16(SHL16(LM, DB_SHIFT));
- tf_estimate = QCONST16(.2f,14);
- }
- }
-
- if (LM>0 && ec_tell(enc)+3<=total_bits)
- ec_enc_bit_logp(enc, isTransient, 3);
-
- ALLOC(X, C*N, celt_norm); /**< Interleaved normalised MDCTs */
-
- /* Band normalisation */
- normalise_bands(mode, freq, X, bandE, effEnd, C, M);
-
- ALLOC(tf_res, nbEBands, int);
- /* Disable variable tf resolution for hybrid and at very low bitrate */
- if (effectiveBytes>=15*C && start==0 && st->complexity>=2 && !st->lfe)
- {
- int lambda;
- if (effectiveBytes<40)
- lambda = 12;
- else if (effectiveBytes<60)
- lambda = 6;
- else if (effectiveBytes<100)
- lambda = 4;
- else
- lambda = 3;
- lambda*=2;
- tf_select = tf_analysis(mode, effEnd, isTransient, tf_res, lambda, X, N, LM, &tf_sum, tf_estimate, tf_chan);
- for (i=effEnd;i<end;i++)
- tf_res[i] = tf_res[effEnd-1];
- } else {
- tf_sum = 0;
- for (i=0;i<end;i++)
- tf_res[i] = isTransient;
- tf_select=0;
- }
-
- ALLOC(error, C*nbEBands, opus_val16);
- quant_coarse_energy(mode, start, end, effEnd, bandLogE,
- oldBandE, total_bits, error, enc,
- C, LM, nbAvailableBytes, st->force_intra,
- &st->delayedIntra, st->complexity >= 4, st->loss_rate, st->lfe);
-
- tf_encode(start, end, isTransient, tf_res, LM, tf_select, enc);
-
- if (ec_tell(enc)+4<=total_bits)
- {
- if (st->lfe)
- {
- st->tapset_decision = 0;
- st->spread_decision = SPREAD_NORMAL;
- } else if (shortBlocks || st->complexity < 3 || nbAvailableBytes < 10*C || start != 0)
- {
- if (st->complexity == 0)
- st->spread_decision = SPREAD_NONE;
- else
- st->spread_decision = SPREAD_NORMAL;
- } else {
- /* Disable new spreading+tapset estimator until we can show it works
- better than the old one. So far it seems like spreading_decision()
- works best. */
-#if 0
- if (st->analysis.valid)
- {
- static const opus_val16 spread_thresholds[3] = {-QCONST16(.6f, 15), -QCONST16(.2f, 15), -QCONST16(.07f, 15)};
- static const opus_val16 spread_histeresis[3] = {QCONST16(.15f, 15), QCONST16(.07f, 15), QCONST16(.02f, 15)};
- static const opus_val16 tapset_thresholds[2] = {QCONST16(.0f, 15), QCONST16(.15f, 15)};
- static const opus_val16 tapset_histeresis[2] = {QCONST16(.1f, 15), QCONST16(.05f, 15)};
- st->spread_decision = hysteresis_decision(-st->analysis.tonality, spread_thresholds, spread_histeresis, 3, st->spread_decision);
- st->tapset_decision = hysteresis_decision(st->analysis.tonality_slope, tapset_thresholds, tapset_histeresis, 2, st->tapset_decision);
- } else
-#endif
- {
- st->spread_decision = spreading_decision(mode, X,
- &st->tonal_average, st->spread_decision, &st->hf_average,
- &st->tapset_decision, pf_on&&!shortBlocks, effEnd, C, M);
- }
- /*printf("%d %d\n", st->tapset_decision, st->spread_decision);*/
- /*printf("%f %d %f %d\n\n", st->analysis.tonality, st->spread_decision, st->analysis.tonality_slope, st->tapset_decision);*/
- }
- ec_enc_icdf(enc, st->spread_decision, spread_icdf, 5);
- }
-
- ALLOC(offsets, nbEBands, int);
-
- maxDepth = dynalloc_analysis(bandLogE, bandLogE2, nbEBands, start, end, C, offsets,
- st->lsb_depth, mode->logN, isTransient, st->vbr, st->constrained_vbr,
- eBands, LM, effectiveBytes, &tot_boost, st->lfe, surround_dynalloc);
- /* For LFE, everything interesting is in the first band */
- if (st->lfe)
- offsets[0] = IMIN(8, effectiveBytes/3);
- ALLOC(cap, nbEBands, int);
- init_caps(mode,cap,LM,C);
-
- dynalloc_logp = 6;
- total_bits<<=BITRES;
- total_boost = 0;
- tell = ec_tell_frac(enc);
- for (i=start;i<end;i++)
- {
- int width, quanta;
- int dynalloc_loop_logp;
- int boost;
- int j;
- width = C*(eBands[i+1]-eBands[i])<<LM;
- /* quanta is 6 bits, but no more than 1 bit/sample
- and no less than 1/8 bit/sample */
- quanta = IMIN(width<<BITRES, IMAX(6<<BITRES, width));
- dynalloc_loop_logp = dynalloc_logp;
- boost = 0;
- for (j = 0; tell+(dynalloc_loop_logp<<BITRES) < total_bits-total_boost
- && boost < cap[i]; j++)
- {
- int flag;
- flag = j<offsets[i];
- ec_enc_bit_logp(enc, flag, dynalloc_loop_logp);
- tell = ec_tell_frac(enc);
- if (!flag)
- break;
- boost += quanta;
- total_boost += quanta;
- dynalloc_loop_logp = 1;
- }
- /* Making dynalloc more likely */
- if (j)
- dynalloc_logp = IMAX(2, dynalloc_logp-1);
- offsets[i] = boost;
- }
-
- if (C==2)
- {
- static const opus_val16 intensity_thresholds[21]=
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 off*/
- { 1, 2, 3, 4, 5, 6, 7, 8,16,24,36,44,50,56,62,67,72,79,88,106,134};
- static const opus_val16 intensity_histeresis[21]=
- { 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 6, 8, 8};
-
- /* Always use MS for 2.5 ms frames until we can do a better analysis */
- if (LM!=0)
- dual_stereo = stereo_analysis(mode, X, LM, N);
-
- st->intensity = hysteresis_decision((opus_val16)(equiv_rate/1000),
- intensity_thresholds, intensity_histeresis, 21, st->intensity);
- st->intensity = IMIN(end,IMAX(start, st->intensity));
- }
-
- alloc_trim = 5;
- if (tell+(6<<BITRES) <= total_bits - total_boost)
- {
- if (st->lfe)
- alloc_trim = 5;
- else
- alloc_trim = alloc_trim_analysis(mode, X, bandLogE,
- end, LM, C, N, &st->analysis, &st->stereo_saving, tf_estimate,
- st->intensity, surround_trim, st->arch);
- ec_enc_icdf(enc, alloc_trim, trim_icdf, 7);
- tell = ec_tell_frac(enc);
- }
-
- /* Variable bitrate */
- if (vbr_rate>0)
- {
- opus_val16 alpha;
- opus_int32 delta;
- /* The target rate in 8th bits per frame */
- opus_int32 target, base_target;
- opus_int32 min_allowed;
- int lm_diff = mode->maxLM - LM;
-
- /* Don't attempt to use more than 510 kb/s, even for frames smaller than 20 ms.
- The CELT allocator will just not be able to use more than that anyway. */
- nbCompressedBytes = IMIN(nbCompressedBytes,1275>>(3-LM));
- base_target = vbr_rate - ((40*C+20)<<BITRES);
-
- if (st->constrained_vbr)
- base_target += (st->vbr_offset>>lm_diff);
-
- target = compute_vbr(mode, &st->analysis, base_target, LM, equiv_rate,
- st->lastCodedBands, C, st->intensity, st->constrained_vbr,
- st->stereo_saving, tot_boost, tf_estimate, pitch_change, maxDepth,
- st->variable_duration, st->lfe, st->energy_mask!=NULL, surround_masking,
- temporal_vbr);
-
- /* The current offset is removed from the target and the space used
- so far is added*/
- target=target+tell;
- /* In VBR mode the frame size must not be reduced so much that it would
- result in the encoder running out of bits.
- The margin of 2 bytes ensures that none of the bust-prevention logic
- in the decoder will have triggered so far. */
- min_allowed = ((tell+total_boost+(1<<(BITRES+3))-1)>>(BITRES+3)) + 2 - nbFilledBytes;
-
- nbAvailableBytes = (target+(1<<(BITRES+2)))>>(BITRES+3);
- nbAvailableBytes = IMAX(min_allowed,nbAvailableBytes);
- nbAvailableBytes = IMIN(nbCompressedBytes,nbAvailableBytes+nbFilledBytes) - nbFilledBytes;
-
- /* By how much did we "miss" the target on that frame */
- delta = target - vbr_rate;
-
- target=nbAvailableBytes<<(BITRES+3);
-
- /*If the frame is silent we don't adjust our drift, otherwise
- the encoder will shoot to very high rates after hitting a
- span of silence, but we do allow the bitres to refill.
- This means that we'll undershoot our target in CVBR/VBR modes
- on files with lots of silence. */
- if(silence)
- {
- nbAvailableBytes = 2;
- target = 2*8<<BITRES;
- delta = 0;
- }
-
- if (st->vbr_count < 970)
- {
- st->vbr_count++;
- alpha = celt_rcp(SHL32(EXTEND32(st->vbr_count+20),16));
- } else
- alpha = QCONST16(.001f,15);
- /* How many bits have we used in excess of what we're allowed */
- if (st->constrained_vbr)
- st->vbr_reservoir += target - vbr_rate;
- /*printf ("%d\n", st->vbr_reservoir);*/
-
- /* Compute the offset we need to apply in order to reach the target */
- if (st->constrained_vbr)
- {
- st->vbr_drift += (opus_int32)MULT16_32_Q15(alpha,(delta*(1<<lm_diff))-st->vbr_offset-st->vbr_drift);
- st->vbr_offset = -st->vbr_drift;
- }
- /*printf ("%d\n", st->vbr_drift);*/
-
- if (st->constrained_vbr && st->vbr_reservoir < 0)
- {
- /* We're under the min value -- increase rate */
- int adjust = (-st->vbr_reservoir)/(8<<BITRES);
- /* Unless we're just coding silence */
- nbAvailableBytes += silence?0:adjust;
- st->vbr_reservoir = 0;
- /*printf ("+%d\n", adjust);*/
- }
- nbCompressedBytes = IMIN(nbCompressedBytes,nbAvailableBytes+nbFilledBytes);
- /*printf("%d\n", nbCompressedBytes*50*8);*/
- /* This moves the raw bits to take into account the new compressed size */
- ec_enc_shrink(enc, nbCompressedBytes);
- }
-
- /* Bit allocation */
- ALLOC(fine_quant, nbEBands, int);
- ALLOC(pulses, nbEBands, int);
- ALLOC(fine_priority, nbEBands, int);
-
- /* bits = packet size - where we are - safety*/
- bits = (((opus_int32)nbCompressedBytes*8)<<BITRES) - ec_tell_frac(enc) - 1;
- anti_collapse_rsv = isTransient&&LM>=2&&bits>=((LM+2)<<BITRES) ? (1<<BITRES) : 0;
- bits -= anti_collapse_rsv;
- signalBandwidth = end-1;
-#ifndef DISABLE_FLOAT_API
- if (st->analysis.valid)
- {
- int min_bandwidth;
- if (equiv_rate < (opus_int32)32000*C)
- min_bandwidth = 13;
- else if (equiv_rate < (opus_int32)48000*C)
- min_bandwidth = 16;
- else if (equiv_rate < (opus_int32)60000*C)
- min_bandwidth = 18;
- else if (equiv_rate < (opus_int32)80000*C)
- min_bandwidth = 19;
- else
- min_bandwidth = 20;
- signalBandwidth = IMAX(st->analysis.bandwidth, min_bandwidth);
- }
-#endif
- if (st->lfe)
- signalBandwidth = 1;
- codedBands = compute_allocation(mode, start, end, offsets, cap,
- alloc_trim, &st->intensity, &dual_stereo, bits, &balance, pulses,
- fine_quant, fine_priority, C, LM, enc, 1, st->lastCodedBands, signalBandwidth);
- if (st->lastCodedBands)
- st->lastCodedBands = IMIN(st->lastCodedBands+1,IMAX(st->lastCodedBands-1,codedBands));
- else
- st->lastCodedBands = codedBands;
-
- quant_fine_energy(mode, start, end, oldBandE, error, fine_quant, enc, C);
-
- /* Residual quantisation */
- ALLOC(collapse_masks, C*nbEBands, unsigned char);
- quant_all_bands(1, mode, start, end, X, C==2 ? X+N : NULL, collapse_masks,
- bandE, pulses, shortBlocks, st->spread_decision,
- dual_stereo, st->intensity, tf_res, nbCompressedBytes*(8<<BITRES)-anti_collapse_rsv,
- balance, enc, LM, codedBands, &st->rng, st->arch);
-
- if (anti_collapse_rsv > 0)
- {
- anti_collapse_on = st->consec_transient<2;
-#ifdef FUZZING
- anti_collapse_on = rand()&0x1;
-#endif
- ec_enc_bits(enc, anti_collapse_on, 1);
- }
- quant_energy_finalise(mode, start, end, oldBandE, error, fine_quant, fine_priority, nbCompressedBytes*8-ec_tell(enc), enc, C);
-
- if (silence)
- {
- for (i=0;i<C*nbEBands;i++)
- oldBandE[i] = -QCONST16(28.f,DB_SHIFT);
- }
-
-#ifdef RESYNTH
- /* Re-synthesis of the coded audio if required */
- {
- celt_sig *out_mem[2];
-
- if (anti_collapse_on)
- {
- anti_collapse(mode, X, collapse_masks, LM, C, N,
- start, end, oldBandE, oldLogE, oldLogE2, pulses, st->rng);
- }
-
- c=0; do {
- OPUS_MOVE(st->syn_mem[c], st->syn_mem[c]+N, 2*MAX_PERIOD-N+overlap/2);
- } while (++c<CC);
-
- c=0; do {
- out_mem[c] = st->syn_mem[c]+2*MAX_PERIOD-N;
- } while (++c<CC);
-
- celt_synthesis(mode, X, out_mem, oldBandE, start, effEnd,
- C, CC, isTransient, LM, st->upsample, silence, st->arch);
-
- c=0; do {
- st->prefilter_period=IMAX(st->prefilter_period, COMBFILTER_MINPERIOD);
- st->prefilter_period_old=IMAX(st->prefilter_period_old, COMBFILTER_MINPERIOD);
- comb_filter(out_mem[c], out_mem[c], st->prefilter_period_old, st->prefilter_period, mode->shortMdctSize,
- st->prefilter_gain_old, st->prefilter_gain, st->prefilter_tapset_old, st->prefilter_tapset,
- mode->window, overlap);
- if (LM!=0)
- comb_filter(out_mem[c]+mode->shortMdctSize, out_mem[c]+mode->shortMdctSize, st->prefilter_period, pitch_index, N-mode->shortMdctSize,
- st->prefilter_gain, gain1, st->prefilter_tapset, prefilter_tapset,
- mode->window, overlap);
- } while (++c<CC);
-
- /* We reuse freq[] as scratch space for the de-emphasis */
- deemphasis(out_mem, (opus_val16*)pcm, N, CC, st->upsample, mode->preemph, st->preemph_memD);
- st->prefilter_period_old = st->prefilter_period;
- st->prefilter_gain_old = st->prefilter_gain;
- st->prefilter_tapset_old = st->prefilter_tapset;
- }
-#endif
-
- st->prefilter_period = pitch_index;
- st->prefilter_gain = gain1;
- st->prefilter_tapset = prefilter_tapset;
-#ifdef RESYNTH
- if (LM!=0)
- {
- st->prefilter_period_old = st->prefilter_period;
- st->prefilter_gain_old = st->prefilter_gain;
- st->prefilter_tapset_old = st->prefilter_tapset;
- }
-#endif
-
- if (CC==2&&C==1) {
- OPUS_COPY(&oldBandE[nbEBands], oldBandE, nbEBands);
- }
-
- if (!isTransient)
- {
- OPUS_COPY(oldLogE2, oldLogE, CC*nbEBands);
- OPUS_COPY(oldLogE, oldBandE, CC*nbEBands);
- } else {
- for (i=0;i<CC*nbEBands;i++)
- oldLogE[i] = MIN16(oldLogE[i], oldBandE[i]);
- }
- /* In case start or end were to change */
- c=0; do
- {
- for (i=0;i<start;i++)
- {
- oldBandE[c*nbEBands+i]=0;
- oldLogE[c*nbEBands+i]=oldLogE2[c*nbEBands+i]=-QCONST16(28.f,DB_SHIFT);
- }
- for (i=end;i<nbEBands;i++)
- {
- oldBandE[c*nbEBands+i]=0;
- oldLogE[c*nbEBands+i]=oldLogE2[c*nbEBands+i]=-QCONST16(28.f,DB_SHIFT);
- }
- } while (++c<CC);
-
- if (isTransient || transient_got_disabled)
- st->consec_transient++;
- else
- st->consec_transient=0;
- st->rng = enc->rng;
-
- /* If there's any room left (can only happen for very high rates),
- it's already filled with zeros */
- ec_enc_done(enc);
-
-#ifdef CUSTOM_MODES
- if (st->signalling)
- nbCompressedBytes++;
-#endif
-
- RESTORE_STACK;
- if (ec_get_error(enc))
- return OPUS_INTERNAL_ERROR;
- else
- return nbCompressedBytes;
-}
-
-
-#ifdef CUSTOM_MODES
-
-#ifdef OPUS_FIXED_POINT
-int opus_custom_encode(CELTEncoder * OPUS_RESTRICT st, const opus_int16 * pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes)
-{
- return celt_encode_with_ec(st, pcm, frame_size, compressed, nbCompressedBytes, NULL);
-}
-
-#ifndef DISABLE_FLOAT_API
-int opus_custom_encode_float(CELTEncoder * OPUS_RESTRICT st, const float * pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes)
-{
- int j, ret, C, N;
- VARDECL(opus_int16, in);
- ALLOC_STACK;
-
- if (pcm==NULL)
- return OPUS_BAD_ARG;
-
- C = st->channels;
- N = frame_size;
- ALLOC(in, C*N, opus_int16);
-
- for (j=0;j<C*N;j++)
- in[j] = FLOAT2INT16(pcm[j]);
-
- ret=celt_encode_with_ec(st,in,frame_size,compressed,nbCompressedBytes, NULL);
-#ifdef RESYNTH
- for (j=0;j<C*N;j++)
- ((float*)pcm)[j]=in[j]*(1.f/32768.f);
-#endif
- RESTORE_STACK;
- return ret;
-}
-#endif /* DISABLE_FLOAT_API */
-#else
-
-int opus_custom_encode(CELTEncoder * OPUS_RESTRICT st, const opus_int16 * pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes)
-{
- int j, ret, C, N;
- VARDECL(celt_sig, in);
- ALLOC_STACK;
-
- if (pcm==NULL)
- return OPUS_BAD_ARG;
-
- C=st->channels;
- N=frame_size;
- ALLOC(in, C*N, celt_sig);
- for (j=0;j<C*N;j++) {
- in[j] = SCALEOUT(pcm[j]);
- }
-
- ret = celt_encode_with_ec(st,in,frame_size,compressed,nbCompressedBytes, NULL);
-#ifdef RESYNTH
- for (j=0;j<C*N;j++)
- ((opus_int16*)pcm)[j] = FLOAT2INT16(in[j]);
-#endif
- RESTORE_STACK;
- return ret;
-}
-
-int opus_custom_encode_float(CELTEncoder * OPUS_RESTRICT st, const float * pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes)
-{
- return celt_encode_with_ec(st, pcm, frame_size, compressed, nbCompressedBytes, NULL);
-}
-
-#endif
-
-#endif /* CUSTOM_MODES */
-
-int opus_custom_encoder_ctl(CELTEncoder * OPUS_RESTRICT st, int request, ...)
-{
- va_list ap;
-
- va_start(ap, request);
- switch (request)
- {
- case OPUS_SET_COMPLEXITY_REQUEST:
- {
- int value = va_arg(ap, opus_int32);
- if (value<0 || value>10)
- goto bad_arg;
- st->complexity = value;
- }
- break;
- case CELT_SET_START_BAND_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<0 || value>=st->mode->nbEBands)
- goto bad_arg;
- st->start = value;
- }
- break;
- case CELT_SET_END_BAND_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<1 || value>st->mode->nbEBands)
- goto bad_arg;
- st->end = value;
- }
- break;
- case CELT_SET_PREDICTION_REQUEST:
- {
- int value = va_arg(ap, opus_int32);
- if (value<0 || value>2)
- goto bad_arg;
- st->disable_pf = value<=1;
- st->force_intra = value==0;
- }
- break;
- case OPUS_SET_PACKET_LOSS_PERC_REQUEST:
- {
- int value = va_arg(ap, opus_int32);
- if (value<0 || value>100)
- goto bad_arg;
- st->loss_rate = value;
- }
- break;
- case OPUS_SET_VBR_CONSTRAINT_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- st->constrained_vbr = value;
- }
- break;
- case OPUS_SET_VBR_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- st->vbr = value;
- }
- break;
- case OPUS_SET_BITRATE_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<=500 && value!=OPUS_BITRATE_MAX)
- goto bad_arg;
- value = IMIN(value, 260000*st->channels);
- st->bitrate = value;
- }
- break;
- case CELT_SET_CHANNELS_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<1 || value>2)
- goto bad_arg;
- st->stream_channels = value;
- }
- break;
- case OPUS_SET_LSB_DEPTH_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<8 || value>24)
- goto bad_arg;
- st->lsb_depth=value;
- }
- break;
- case OPUS_GET_LSB_DEPTH_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- *value=st->lsb_depth;
- }
- break;
- case OPUS_SET_EXPERT_FRAME_DURATION_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- st->variable_duration = value;
- }
- break;
- case OPUS_RESET_STATE:
- {
- int i;
- opus_val16 *oldBandE, *oldLogE, *oldLogE2;
- oldBandE = (opus_val16*)(st->in_mem+st->channels*(st->mode->overlap+COMBFILTER_MAXPERIOD));
- oldLogE = oldBandE + st->channels*st->mode->nbEBands;
- oldLogE2 = oldLogE + st->channels*st->mode->nbEBands;
- OPUS_CLEAR((char*)&st->ENCODER_RESET_START,
- opus_custom_encoder_get_size(st->mode, st->channels)-
- ((char*)&st->ENCODER_RESET_START - (char*)st));
- for (i=0;i<st->channels*st->mode->nbEBands;i++)
- oldLogE[i]=oldLogE2[i]=-QCONST16(28.f,DB_SHIFT);
- st->vbr_offset = 0;
- st->delayedIntra = 1;
- st->spread_decision = SPREAD_NORMAL;
- st->tonal_average = 256;
- st->hf_average = 0;
- st->tapset_decision = 0;
- }
- break;
-#ifdef CUSTOM_MODES
- case CELT_SET_INPUT_CLIPPING_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- st->clip = value;
- }
- break;
-#endif
- case CELT_SET_SIGNALLING_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- st->signalling = value;
- }
- break;
- case CELT_SET_ANALYSIS_REQUEST:
- {
- AnalysisInfo *info = va_arg(ap, AnalysisInfo *);
- if (info)
- OPUS_COPY(&st->analysis, info, 1);
- }
- break;
- case CELT_GET_MODE_REQUEST:
- {
- const CELTMode ** value = va_arg(ap, const CELTMode**);
- if (value==0)
- goto bad_arg;
- *value=st->mode;
- }
- break;
- case OPUS_GET_FINAL_RANGE_REQUEST:
- {
- opus_uint32 * value = va_arg(ap, opus_uint32 *);
- if (value==0)
- goto bad_arg;
- *value=st->rng;
- }
- break;
- case OPUS_SET_LFE_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- st->lfe = value;
- }
- break;
- case OPUS_SET_ENERGY_MASK_REQUEST:
- {
- opus_val16 *value = va_arg(ap, opus_val16*);
- st->energy_mask = value;
- }
- break;
- default:
- goto bad_request;
- }
- va_end(ap);
- return OPUS_OK;
-bad_arg:
- va_end(ap);
- return OPUS_BAD_ARG;
-bad_request:
- va_end(ap);
- return OPUS_UNIMPLEMENTED;
-}
diff --git a/drivers/opus/celt/celt_lpc.c b/drivers/opus/celt/celt_lpc.c
deleted file mode 100644
index 5b8c01021f..0000000000
--- a/drivers/opus/celt/celt_lpc.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/* Copyright (c) 2009-2010 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/celt_lpc.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/pitch.h"
-
-void _celt_lpc(
- opus_val16 *_lpc, /* out: [0...p-1] LPC coefficients */
-const opus_val32 *ac, /* in: [0...p] autocorrelation values */
-int p
-)
-{
- int i, j;
- opus_val32 r;
- opus_val32 error = ac[0];
-#ifdef OPUS_FIXED_POINT
- opus_val32 lpc[LPC_ORDER];
-#else
- float *lpc = _lpc;
-#endif
-
- for (i = 0; i < p; i++)
- lpc[i] = 0;
- if (ac[0] != 0)
- {
- for (i = 0; i < p; i++) {
- /* Sum up this iteration's reflection coefficient */
- opus_val32 rr = 0;
- for (j = 0; j < i; j++)
- rr += MULT32_32_Q31(lpc[j],ac[i - j]);
- rr += SHR32(ac[i + 1],3);
- r = -frac_div32(SHL32(rr,3), error);
- /* Update LPC coefficients and total error */
- lpc[i] = SHR32(r,3);
- for (j = 0; j < (i+1)>>1; j++)
- {
- opus_val32 tmp1, tmp2;
- tmp1 = lpc[j];
- tmp2 = lpc[i-1-j];
- lpc[j] = tmp1 + MULT32_32_Q31(r,tmp2);
- lpc[i-1-j] = tmp2 + MULT32_32_Q31(r,tmp1);
- }
-
- error = error - MULT32_32_Q31(MULT32_32_Q31(r,r),error);
- /* Bail out once we get 30 dB gain */
-#ifdef OPUS_FIXED_POINT
- if (error<SHR32(ac[0],10))
- break;
-#else
- if (error<.001f*ac[0])
- break;
-#endif
- }
- }
-#ifdef OPUS_FIXED_POINT
- for (i=0;i<p;i++)
- _lpc[i] = ROUND16(lpc[i],16);
-#endif
-}
-
-
-void celt_fir_c(
- const opus_val16 *_x,
- const opus_val16 *num,
- opus_val16 *_y,
- int N,
- int ord,
- opus_val16 *mem,
- int arch)
-{
- int i,j;
- VARDECL(opus_val16, rnum);
- VARDECL(opus_val16, x);
- SAVE_STACK;
-
- ALLOC(rnum, ord, opus_val16);
- ALLOC(x, N+ord, opus_val16);
- for(i=0;i<ord;i++)
- rnum[i] = num[ord-i-1];
- for(i=0;i<ord;i++)
- x[i] = mem[ord-i-1];
- for (i=0;i<N;i++)
- x[i+ord]=_x[i];
- for(i=0;i<ord;i++)
- mem[i] = _x[N-i-1];
-#ifdef SMALL_FOOTPRINT
- (void)arch;
- for (i=0;i<N;i++)
- {
- opus_val32 sum = SHL32(EXTEND32(_x[i]), SIG_SHIFT);
- for (j=0;j<ord;j++)
- {
- sum = MAC16_16(sum,rnum[j],x[i+j]);
- }
- _y[i] = SATURATE16(PSHR32(sum, SIG_SHIFT));
- }
-#else
- for (i=0;i<N-3;i+=4)
- {
- opus_val32 sum[4]={0,0,0,0};
- xcorr_kernel(rnum, x+i, sum, ord, arch);
- _y[i ] = SATURATE16(ADD32(EXTEND32(_x[i ]), PSHR32(sum[0], SIG_SHIFT)));
- _y[i+1] = SATURATE16(ADD32(EXTEND32(_x[i+1]), PSHR32(sum[1], SIG_SHIFT)));
- _y[i+2] = SATURATE16(ADD32(EXTEND32(_x[i+2]), PSHR32(sum[2], SIG_SHIFT)));
- _y[i+3] = SATURATE16(ADD32(EXTEND32(_x[i+3]), PSHR32(sum[3], SIG_SHIFT)));
- }
- for (;i<N;i++)
- {
- opus_val32 sum = 0;
- for (j=0;j<ord;j++)
- sum = MAC16_16(sum,rnum[j],x[i+j]);
- _y[i] = SATURATE16(ADD32(EXTEND32(_x[i]), PSHR32(sum, SIG_SHIFT)));
- }
-#endif
- RESTORE_STACK;
-}
-
-void celt_iir(const opus_val32 *_x,
- const opus_val16 *den,
- opus_val32 *_y,
- int N,
- int ord,
- opus_val16 *mem,
- int arch)
-{
-#ifdef SMALL_FOOTPRINT
- int i,j;
- (void)arch;
- for (i=0;i<N;i++)
- {
- opus_val32 sum = _x[i];
- for (j=0;j<ord;j++)
- {
- sum -= MULT16_16(den[j],mem[j]);
- }
- for (j=ord-1;j>=1;j--)
- {
- mem[j]=mem[j-1];
- }
- mem[0] = ROUND16(sum,SIG_SHIFT);
- _y[i] = sum;
- }
-#else
- int i,j;
- VARDECL(opus_val16, rden);
- VARDECL(opus_val16, y);
- SAVE_STACK;
-
- celt_assert((ord&3)==0);
- ALLOC(rden, ord, opus_val16);
- ALLOC(y, N+ord, opus_val16);
- for(i=0;i<ord;i++)
- rden[i] = den[ord-i-1];
- for(i=0;i<ord;i++)
- y[i] = -mem[ord-i-1];
- for(;i<N+ord;i++)
- y[i]=0;
- for (i=0;i<N-3;i+=4)
- {
- /* Unroll by 4 as if it were an FIR filter */
- opus_val32 sum[4];
- sum[0]=_x[i];
- sum[1]=_x[i+1];
- sum[2]=_x[i+2];
- sum[3]=_x[i+3];
- xcorr_kernel(rden, y+i, sum, ord, arch);
-
- /* Patch up the result to compensate for the fact that this is an IIR */
- y[i+ord ] = -ROUND16(sum[0],SIG_SHIFT);
- _y[i ] = sum[0];
- sum[1] = MAC16_16(sum[1], y[i+ord ], den[0]);
- y[i+ord+1] = -ROUND16(sum[1],SIG_SHIFT);
- _y[i+1] = sum[1];
- sum[2] = MAC16_16(sum[2], y[i+ord+1], den[0]);
- sum[2] = MAC16_16(sum[2], y[i+ord ], den[1]);
- y[i+ord+2] = -ROUND16(sum[2],SIG_SHIFT);
- _y[i+2] = sum[2];
-
- sum[3] = MAC16_16(sum[3], y[i+ord+2], den[0]);
- sum[3] = MAC16_16(sum[3], y[i+ord+1], den[1]);
- sum[3] = MAC16_16(sum[3], y[i+ord ], den[2]);
- y[i+ord+3] = -ROUND16(sum[3],SIG_SHIFT);
- _y[i+3] = sum[3];
- }
- for (;i<N;i++)
- {
- opus_val32 sum = _x[i];
- for (j=0;j<ord;j++)
- sum -= MULT16_16(rden[j],y[i+j]);
- y[i+ord] = ROUND16(sum,SIG_SHIFT);
- _y[i] = sum;
- }
- for(i=0;i<ord;i++)
- mem[i] = _y[N-i-1];
- RESTORE_STACK;
-#endif
-}
-
-int _celt_autocorr(
- const opus_val16 *x, /* in: [0...n-1] samples x */
- opus_val32 *ac, /* out: [0...lag-1] ac values */
- const opus_val16 *window,
- int overlap,
- int lag,
- int n,
- int arch
- )
-{
- opus_val32 d;
- int i, k;
- int fastN=n-lag;
- int shift;
- const opus_val16 *xptr;
- VARDECL(opus_val16, xx);
- SAVE_STACK;
- ALLOC(xx, n, opus_val16);
- celt_assert(n>0);
- celt_assert(overlap>=0);
- if (overlap == 0)
- {
- xptr = x;
- } else {
- for (i=0;i<n;i++)
- xx[i] = x[i];
- for (i=0;i<overlap;i++)
- {
- xx[i] = MULT16_16_Q15(x[i],window[i]);
- xx[n-i-1] = MULT16_16_Q15(x[n-i-1],window[i]);
- }
- xptr = xx;
- }
- shift=0;
-#ifdef OPUS_FIXED_POINT
- {
- opus_val32 ac0;
- ac0 = 1+(n<<7);
- if (n&1) ac0 += SHR32(MULT16_16(xptr[0],xptr[0]),9);
- for(i=(n&1);i<n;i+=2)
- {
- ac0 += SHR32(MULT16_16(xptr[i],xptr[i]),9);
- ac0 += SHR32(MULT16_16(xptr[i+1],xptr[i+1]),9);
- }
-
- shift = celt_ilog2(ac0)-30+10;
- shift = (shift)/2;
- if (shift>0)
- {
- for(i=0;i<n;i++)
- xx[i] = PSHR32(xptr[i], shift);
- xptr = xx;
- } else
- shift = 0;
- }
-#endif
- celt_pitch_xcorr(xptr, xptr, ac, fastN, lag+1, arch);
- for (k=0;k<=lag;k++)
- {
- for (i = k+fastN, d = 0; i < n; i++)
- d = MAC16_16(d, xptr[i], xptr[i-k]);
- ac[k] += d;
- }
-#ifdef OPUS_FIXED_POINT
- shift = 2*shift;
- if (shift<=0)
- ac[0] += SHL32((opus_int32)1, -shift);
- if (ac[0] < 268435456)
- {
- int shift2 = 29 - EC_ILOG(ac[0]);
- for (i=0;i<=lag;i++)
- ac[i] = SHL32(ac[i], shift2);
- shift -= shift2;
- } else if (ac[0] >= 536870912)
- {
- int shift2=1;
- if (ac[0] >= 1073741824)
- shift2++;
- for (i=0;i<=lag;i++)
- ac[i] = SHR32(ac[i], shift2);
- shift += shift2;
- }
-#endif
-
- RESTORE_STACK;
- return shift;
-}
diff --git a/drivers/opus/celt/celt_lpc.h b/drivers/opus/celt/celt_lpc.h
deleted file mode 100644
index dc0352d468..0000000000
--- a/drivers/opus/celt/celt_lpc.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* Copyright (c) 2009-2010 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 PLC_H
-#define PLC_H
-
-#include "opus/celt/arch.h"
-#include "opus/celt/cpu_support.h"
-
-#if defined(OPUS_X86_MAY_HAVE_SSE4_1)
-#include "opus/celt/x86/celt_lpc_sse.h"
-#endif
-
-#define LPC_ORDER 24
-
-void _celt_lpc(opus_val16 *_lpc, const opus_val32 *ac, int p);
-
-void celt_fir_c(
- const opus_val16 *x,
- const opus_val16 *num,
- opus_val16 *y,
- int N,
- int ord,
- opus_val16 *mem,
- int arch);
-
-#if !defined(OVERRIDE_CELT_FIR)
-#define celt_fir(x, num, y, N, ord, mem, arch) \
- (celt_fir_c(x, num, y, N, ord, mem, arch))
-#endif
-
-void celt_iir(const opus_val32 *x,
- const opus_val16 *den,
- opus_val32 *y,
- int N,
- int ord,
- opus_val16 *mem,
- int arch);
-
-int _celt_autocorr(const opus_val16 *x, opus_val32 *ac,
- const opus_val16 *window, int overlap, int lag, int n, int arch);
-
-#endif /* PLC_H */
diff --git a/drivers/opus/celt/cpu_support.h b/drivers/opus/celt/cpu_support.h
deleted file mode 100644
index 2507e1861e..0000000000
--- a/drivers/opus/celt/cpu_support.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (c) 2010 Xiph.Org Foundation
- * Copyright (c) 2013 Parrot */
-/*
- 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.
-
- 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 CPU_SUPPORT_H
-#define CPU_SUPPORT_H
-
-#include "opus/opus_types.h"
-#include "opus/opus_defines.h"
-
-#if defined(OPUS_HAVE_RTCD) && \
- (defined(OPUS_ARM_ASM) || defined(OPUS_ARM_MAY_HAVE_NEON_INTR))
-#include "opus/celt/arm/armcpu.h"
-
-/* We currently support 4 ARM variants:
- * arch[0] -> ARMv4
- * arch[1] -> ARMv5E
- * arch[2] -> ARMv6
- * arch[3] -> NEON
- */
-#define OPUS_ARCHMASK 3
-
-#elif (defined(OPUS_X86_MAY_HAVE_SSE) && !defined(OPUS_X86_PRESUME_SSE)) || \
- (defined(OPUS_X86_MAY_HAVE_SSE2) && !defined(OPUS_X86_PRESUME_SSE2)) || \
- (defined(OPUS_X86_MAY_HAVE_SSE4_1) && !defined(OPUS_X86_PRESUME_SSE4_1)) || \
- (defined(OPUS_X86_MAY_HAVE_AVX) && !defined(OPUS_X86_PRESUME_AVX))
-
-#include "opus/celt/x86/x86cpu.h"
-/* We currently support 5 x86 variants:
- * arch[0] -> non-sse
- * arch[1] -> sse
- * arch[2] -> sse2
- * arch[3] -> sse4.1
- * arch[4] -> avx
- */
-#define OPUS_ARCHMASK 7
-int opus_select_arch(void);
-
-#else
-#define OPUS_ARCHMASK 0
-
-static OPUS_INLINE int opus_select_arch(void)
-{
- return 0;
-}
-#endif
-#endif
diff --git a/drivers/opus/celt/cwrs.c b/drivers/opus/celt/cwrs.c
deleted file mode 100644
index 983d4580a9..0000000000
--- a/drivers/opus/celt/cwrs.c
+++ /dev/null
@@ -1,712 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Copyright (c) 2007-2009 Timothy B. Terriberry
- Written by Timothy B. Terriberry and Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/os_support.h"
-#include "opus/celt/cwrs.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/arch.h"
-
-#ifdef CUSTOM_MODES
-
-/*Guaranteed to return a conservatively large estimate of the binary logarithm
- with frac bits of fractional precision.
- Tested for all possible 32-bit inputs with frac=4, where the maximum
- overestimation is 0.06254243 bits.*/
-int log2_frac(opus_uint32 val, int frac)
-{
- int l;
- l=EC_ILOG(val);
- if(val&(val-1)){
- /*This is (val>>l-16), but guaranteed to round up, even if adding a bias
- before the shift would cause overflow (e.g., for 0xFFFFxxxx).
- Doesn't work for val=0, but that case fails the test above.*/
- if(l>16)val=((val-1)>>(l-16))+1;
- else val<<=16-l;
- l=(l-1)<<frac;
- /*Note that we always need one iteration, since the rounding up above means
- that we might need to adjust the integer part of the logarithm.*/
- do{
- int b;
- b=(int)(val>>16);
- l+=b<<frac;
- val=(val+b)>>b;
- val=(val*val+0x7FFF)>>15;
- }
- while(frac-->0);
- /*If val is not exactly 0x8000, then we have to round up the remainder.*/
- return l+(val>0x8000);
- }
- /*Exact powers of two require no rounding.*/
- else return (l-1)<<frac;
-}
-#endif
-
-/*Although derived separately, the pulse vector coding scheme is equivalent to
- a Pyramid Vector Quantizer \cite{Fis86}.
- Some additional notes about an early version appear at
- http://people.xiph.org/~tterribe/notes/cwrs.html, but the codebook ordering
- and the definitions of some terms have evolved since that was written.
-
- The conversion from a pulse vector to an integer index (encoding) and back
- (decoding) is governed by two related functions, V(N,K) and U(N,K).
-
- V(N,K) = the number of combinations, with replacement, of N items, taken K
- at a time, when a sign bit is added to each item taken at least once (i.e.,
- the number of N-dimensional unit pulse vectors with K pulses).
- One way to compute this is via
- V(N,K) = K>0 ? sum(k=1...K,2**k*choose(N,k)*choose(K-1,k-1)) : 1,
- where choose() is the binomial function.
- A table of values for N<10 and K<10 looks like:
- V[10][10] = {
- {1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {1, 2, 2, 2, 2, 2, 2, 2, 2, 2},
- {1, 4, 8, 12, 16, 20, 24, 28, 32, 36},
- {1, 6, 18, 38, 66, 102, 146, 198, 258, 326},
- {1, 8, 32, 88, 192, 360, 608, 952, 1408, 1992},
- {1, 10, 50, 170, 450, 1002, 1970, 3530, 5890, 9290},
- {1, 12, 72, 292, 912, 2364, 5336, 10836, 20256, 35436},
- {1, 14, 98, 462, 1666, 4942, 12642, 28814, 59906, 115598},
- {1, 16, 128, 688, 2816, 9424, 27008, 68464, 157184, 332688},
- {1, 18, 162, 978, 4482, 16722, 53154, 148626, 374274, 864146}
- };
-
- U(N,K) = the number of such combinations wherein N-1 objects are taken at
- most K-1 at a time.
- This is given by
- U(N,K) = sum(k=0...K-1,V(N-1,k))
- = K>0 ? (V(N-1,K-1) + V(N,K-1))/2 : 0.
- The latter expression also makes clear that U(N,K) is half the number of such
- combinations wherein the first object is taken at least once.
- Although it may not be clear from either of these definitions, U(N,K) is the
- natural function to work with when enumerating the pulse vector codebooks,
- not V(N,K).
- U(N,K) is not well-defined for N=0, but with the extension
- U(0,K) = K>0 ? 0 : 1,
- the function becomes symmetric: U(N,K) = U(K,N), with a similar table:
- U[10][10] = {
- {1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 1, 1, 1, 1, 1, 1, 1, 1, 1},
- {0, 1, 3, 5, 7, 9, 11, 13, 15, 17},
- {0, 1, 5, 13, 25, 41, 61, 85, 113, 145},
- {0, 1, 7, 25, 63, 129, 231, 377, 575, 833},
- {0, 1, 9, 41, 129, 321, 681, 1289, 2241, 3649},
- {0, 1, 11, 61, 231, 681, 1683, 3653, 7183, 13073},
- {0, 1, 13, 85, 377, 1289, 3653, 8989, 19825, 40081},
- {0, 1, 15, 113, 575, 2241, 7183, 19825, 48639, 108545},
- {0, 1, 17, 145, 833, 3649, 13073, 40081, 108545, 265729}
- };
-
- With this extension, V(N,K) may be written in terms of U(N,K):
- V(N,K) = U(N,K) + U(N,K+1)
- for all N>=0, K>=0.
- Thus U(N,K+1) represents the number of combinations where the first element
- is positive or zero, and U(N,K) represents the number of combinations where
- it is negative.
- With a large enough table of U(N,K) values, we could write O(N) encoding
- and O(min(N*log(K),N+K)) decoding routines, but such a table would be
- prohibitively large for small embedded devices (K may be as large as 32767
- for small N, and N may be as large as 200).
-
- Both functions obey the same recurrence relation:
- V(N,K) = V(N-1,K) + V(N,K-1) + V(N-1,K-1),
- U(N,K) = U(N-1,K) + U(N,K-1) + U(N-1,K-1),
- for all N>0, K>0, with different initial conditions at N=0 or K=0.
- This allows us to construct a row of one of the tables above given the
- previous row or the next row.
- Thus we can derive O(NK) encoding and decoding routines with O(K) memory
- using only addition and subtraction.
-
- When encoding, we build up from the U(2,K) row and work our way forwards.
- When decoding, we need to start at the U(N,K) row and work our way backwards,
- which requires a means of computing U(N,K).
- U(N,K) may be computed from two previous values with the same N:
- U(N,K) = ((2*N-1)*U(N,K-1) - U(N,K-2))/(K-1) + U(N,K-2)
- for all N>1, and since U(N,K) is symmetric, a similar relation holds for two
- previous values with the same K:
- U(N,K>1) = ((2*K-1)*U(N-1,K) - U(N-2,K))/(N-1) + U(N-2,K)
- for all K>1.
- This allows us to construct an arbitrary row of the U(N,K) table by starting
- with the first two values, which are constants.
- This saves roughly 2/3 the work in our O(NK) decoding routine, but costs O(K)
- multiplications.
- Similar relations can be derived for V(N,K), but are not used here.
-
- For N>0 and K>0, U(N,K) and V(N,K) take on the form of an (N-1)-degree
- polynomial for fixed N.
- The first few are
- U(1,K) = 1,
- U(2,K) = 2*K-1,
- U(3,K) = (2*K-2)*K+1,
- U(4,K) = (((4*K-6)*K+8)*K-3)/3,
- U(5,K) = ((((2*K-4)*K+10)*K-8)*K+3)/3,
- and
- V(1,K) = 2,
- V(2,K) = 4*K,
- V(3,K) = 4*K*K+2,
- V(4,K) = 8*(K*K+2)*K/3,
- V(5,K) = ((4*K*K+20)*K*K+6)/3,
- for all K>0.
- This allows us to derive O(N) encoding and O(N*log(K)) decoding routines for
- small N (and indeed decoding is also O(N) for N<3).
-
- @ARTICLE{Fis86,
- author="Thomas R. Fischer",
- title="A Pyramid Vector Quantizer",
- journal="IEEE Transactions on Information Theory",
- volume="IT-32",
- number=4,
- pages="568--583",
- month=Jul,
- year=1986
- }*/
-
-#if !defined(SMALL_FOOTPRINT)
-
-/*U(N,K) = U(K,N) := N>0?K>0?U(N-1,K)+U(N,K-1)+U(N-1,K-1):0:K>0?1:0*/
-# define CELT_PVQ_U(_n,_k) (CELT_PVQ_U_ROW[IMIN(_n,_k)][IMAX(_n,_k)])
-/*V(N,K) := U(N,K)+U(N,K+1) = the number of PVQ codewords for a band of size N
- with K pulses allocated to it.*/
-# define CELT_PVQ_V(_n,_k) (CELT_PVQ_U(_n,_k)+CELT_PVQ_U(_n,(_k)+1))
-
-/*For each V(N,K) supported, we will access element U(min(N,K+1),max(N,K+1)).
- Thus, the number of entries in row I is the larger of the maximum number of
- pulses we will ever allocate for a given N=I (K=128, or however many fit in
- 32 bits, whichever is smaller), plus one, and the maximum N for which
- K=I-1 pulses fit in 32 bits.
- The largest band size in an Opus Custom mode is 208.
- Otherwise, we can limit things to the set of N which can be achieved by
- splitting a band from a standard Opus mode: 176, 144, 96, 88, 72, 64, 48,
- 44, 36, 32, 24, 22, 18, 16, 8, 4, 2).*/
-#if defined(CUSTOM_MODES)
-static const opus_uint32 CELT_PVQ_U_DATA[1488]={
-#else
-static const opus_uint32 CELT_PVQ_U_DATA[1272]={
-#endif
- /*N=0, K=0...176:*/
- 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 defined(CUSTOM_MODES)
- /*...208:*/
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-#endif
- /*N=1, K=1...176:*/
- 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, 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, 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,
-#if defined(CUSTOM_MODES)
- /*...208:*/
- 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,
-#endif
- /*N=2, K=2...176:*/
- 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
- 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79,
- 81, 83, 85, 87, 89, 91, 93, 95, 97, 99, 101, 103, 105, 107, 109, 111, 113,
- 115, 117, 119, 121, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143,
- 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
- 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203,
- 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233,
- 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255, 257, 259, 261, 263,
- 265, 267, 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293,
- 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 317, 319, 321, 323,
- 325, 327, 329, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351,
-#if defined(CUSTOM_MODES)
- /*...208:*/
- 353, 355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381,
- 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411,
- 413, 415,
-#endif
- /*N=3, K=3...176:*/
- 13, 25, 41, 61, 85, 113, 145, 181, 221, 265, 313, 365, 421, 481, 545, 613,
- 685, 761, 841, 925, 1013, 1105, 1201, 1301, 1405, 1513, 1625, 1741, 1861,
- 1985, 2113, 2245, 2381, 2521, 2665, 2813, 2965, 3121, 3281, 3445, 3613, 3785,
- 3961, 4141, 4325, 4513, 4705, 4901, 5101, 5305, 5513, 5725, 5941, 6161, 6385,
- 6613, 6845, 7081, 7321, 7565, 7813, 8065, 8321, 8581, 8845, 9113, 9385, 9661,
- 9941, 10225, 10513, 10805, 11101, 11401, 11705, 12013, 12325, 12641, 12961,
- 13285, 13613, 13945, 14281, 14621, 14965, 15313, 15665, 16021, 16381, 16745,
- 17113, 17485, 17861, 18241, 18625, 19013, 19405, 19801, 20201, 20605, 21013,
- 21425, 21841, 22261, 22685, 23113, 23545, 23981, 24421, 24865, 25313, 25765,
- 26221, 26681, 27145, 27613, 28085, 28561, 29041, 29525, 30013, 30505, 31001,
- 31501, 32005, 32513, 33025, 33541, 34061, 34585, 35113, 35645, 36181, 36721,
- 37265, 37813, 38365, 38921, 39481, 40045, 40613, 41185, 41761, 42341, 42925,
- 43513, 44105, 44701, 45301, 45905, 46513, 47125, 47741, 48361, 48985, 49613,
- 50245, 50881, 51521, 52165, 52813, 53465, 54121, 54781, 55445, 56113, 56785,
- 57461, 58141, 58825, 59513, 60205, 60901, 61601,
-#if defined(CUSTOM_MODES)
- /*...208:*/
- 62305, 63013, 63725, 64441, 65161, 65885, 66613, 67345, 68081, 68821, 69565,
- 70313, 71065, 71821, 72581, 73345, 74113, 74885, 75661, 76441, 77225, 78013,
- 78805, 79601, 80401, 81205, 82013, 82825, 83641, 84461, 85285, 86113,
-#endif
- /*N=4, K=4...176:*/
- 63, 129, 231, 377, 575, 833, 1159, 1561, 2047, 2625, 3303, 4089, 4991, 6017,
- 7175, 8473, 9919, 11521, 13287, 15225, 17343, 19649, 22151, 24857, 27775,
- 30913, 34279, 37881, 41727, 45825, 50183, 54809, 59711, 64897, 70375, 76153,
- 82239, 88641, 95367, 102425, 109823, 117569, 125671, 134137, 142975, 152193,
- 161799, 171801, 182207, 193025, 204263, 215929, 228031, 240577, 253575,
- 267033, 280959, 295361, 310247, 325625, 341503, 357889, 374791, 392217,
- 410175, 428673, 447719, 467321, 487487, 508225, 529543, 551449, 573951,
- 597057, 620775, 645113, 670079, 695681, 721927, 748825, 776383, 804609,
- 833511, 863097, 893375, 924353, 956039, 988441, 1021567, 1055425, 1090023,
- 1125369, 1161471, 1198337, 1235975, 1274393, 1313599, 1353601, 1394407,
- 1436025, 1478463, 1521729, 1565831, 1610777, 1656575, 1703233, 1750759,
- 1799161, 1848447, 1898625, 1949703, 2001689, 2054591, 2108417, 2163175,
- 2218873, 2275519, 2333121, 2391687, 2451225, 2511743, 2573249, 2635751,
- 2699257, 2763775, 2829313, 2895879, 2963481, 3032127, 3101825, 3172583,
- 3244409, 3317311, 3391297, 3466375, 3542553, 3619839, 3698241, 3777767,
- 3858425, 3940223, 4023169, 4107271, 4192537, 4278975, 4366593, 4455399,
- 4545401, 4636607, 4729025, 4822663, 4917529, 5013631, 5110977, 5209575,
- 5309433, 5410559, 5512961, 5616647, 5721625, 5827903, 5935489, 6044391,
- 6154617, 6266175, 6379073, 6493319, 6608921, 6725887, 6844225, 6963943,
- 7085049, 7207551,
-#if defined(CUSTOM_MODES)
- /*...208:*/
- 7331457, 7456775, 7583513, 7711679, 7841281, 7972327, 8104825, 8238783,
- 8374209, 8511111, 8649497, 8789375, 8930753, 9073639, 9218041, 9363967,
- 9511425, 9660423, 9810969, 9963071, 10116737, 10271975, 10428793, 10587199,
- 10747201, 10908807, 11072025, 11236863, 11403329, 11571431, 11741177,
- 11912575,
-#endif
- /*N=5, K=5...176:*/
- 321, 681, 1289, 2241, 3649, 5641, 8361, 11969, 16641, 22569, 29961, 39041,
- 50049, 63241, 78889, 97281, 118721, 143529, 172041, 204609, 241601, 283401,
- 330409, 383041, 441729, 506921, 579081, 658689, 746241, 842249, 947241,
- 1061761, 1186369, 1321641, 1468169, 1626561, 1797441, 1981449, 2179241,
- 2391489, 2618881, 2862121, 3121929, 3399041, 3694209, 4008201, 4341801,
- 4695809, 5071041, 5468329, 5888521, 6332481, 6801089, 7295241, 7815849,
- 8363841, 8940161, 9545769, 10181641, 10848769, 11548161, 12280841, 13047849,
- 13850241, 14689089, 15565481, 16480521, 17435329, 18431041, 19468809,
- 20549801, 21675201, 22846209, 24064041, 25329929, 26645121, 28010881,
- 29428489, 30899241, 32424449, 34005441, 35643561, 37340169, 39096641,
- 40914369, 42794761, 44739241, 46749249, 48826241, 50971689, 53187081,
- 55473921, 57833729, 60268041, 62778409, 65366401, 68033601, 70781609,
- 73612041, 76526529, 79526721, 82614281, 85790889, 89058241, 92418049,
- 95872041, 99421961, 103069569, 106816641, 110664969, 114616361, 118672641,
- 122835649, 127107241, 131489289, 135983681, 140592321, 145317129, 150160041,
- 155123009, 160208001, 165417001, 170752009, 176215041, 181808129, 187533321,
- 193392681, 199388289, 205522241, 211796649, 218213641, 224775361, 231483969,
- 238341641, 245350569, 252512961, 259831041, 267307049, 274943241, 282741889,
- 290705281, 298835721, 307135529, 315607041, 324252609, 333074601, 342075401,
- 351257409, 360623041, 370174729, 379914921, 389846081, 399970689, 410291241,
- 420810249, 431530241, 442453761, 453583369, 464921641, 476471169, 488234561,
- 500214441, 512413449, 524834241, 537479489, 550351881, 563454121, 576788929,
- 590359041, 604167209, 618216201, 632508801,
-#if defined(CUSTOM_MODES)
- /*...208:*/
- 647047809, 661836041, 676876329, 692171521, 707724481, 723538089, 739615241,
- 755958849, 772571841, 789457161, 806617769, 824056641, 841776769, 859781161,
- 878072841, 896654849, 915530241, 934702089, 954173481, 973947521, 994027329,
- 1014416041, 1035116809, 1056132801, 1077467201, 1099123209, 1121104041,
- 1143412929, 1166053121, 1189027881, 1212340489, 1235994241,
-#endif
- /*N=6, K=6...96:*/
- 1683, 3653, 7183, 13073, 22363, 36365, 56695, 85305, 124515, 177045, 246047,
- 335137, 448427, 590557, 766727, 982729, 1244979, 1560549, 1937199, 2383409,
- 2908411, 3522221, 4235671, 5060441, 6009091, 7095093, 8332863, 9737793,
- 11326283, 13115773, 15124775, 17372905, 19880915, 22670725, 25765455,
- 29189457, 32968347, 37129037, 41699767, 46710137, 52191139, 58175189,
- 64696159, 71789409, 79491819, 87841821, 96879431, 106646281, 117185651,
- 128542501, 140763503, 153897073, 167993403, 183104493, 199284183, 216588185,
- 235074115, 254801525, 275831935, 298228865, 322057867, 347386557, 374284647,
- 402823977, 433078547, 465124549, 499040399, 534906769, 572806619, 612825229,
- 655050231, 699571641, 746481891, 795875861, 847850911, 902506913, 959946283,
- 1020274013, 1083597703, 1150027593, 1219676595, 1292660325, 1369097135,
- 1449108145, 1532817275, 1620351277, 1711839767, 1807415257, 1907213187,
- 2011371957, 2120032959,
-#if defined(CUSTOM_MODES)
- /*...109:*/
- 2233340609U, 2351442379U, 2474488829U, 2602633639U, 2736033641U, 2874848851U,
- 3019242501U, 3169381071U, 3325434321U, 3487575323U, 3655980493U, 3830829623U,
- 4012305913U,
-#endif
- /*N=7, K=7...54*/
- 8989, 19825, 40081, 75517, 134245, 227305, 369305, 579125, 880685, 1303777,
- 1884961, 2668525, 3707509, 5064793, 6814249, 9041957, 11847485, 15345233,
- 19665841, 24957661, 31388293, 39146185, 48442297, 59511829, 72616013,
- 88043969, 106114625, 127178701, 151620757, 179861305, 212358985, 249612805,
- 292164445, 340600625, 395555537, 457713341, 527810725, 606639529, 695049433,
- 793950709, 904317037, 1027188385, 1163673953, 1314955181, 1482288821,
- 1667010073, 1870535785, 2094367717,
-#if defined(CUSTOM_MODES)
- /*...60:*/
- 2340095869U, 2609401873U, 2904062449U, 3225952925U, 3577050821U, 3959439497U,
-#endif
- /*N=8, K=8...37*/
- 48639, 108545, 224143, 433905, 795455, 1392065, 2340495, 3800305, 5984767,
- 9173505, 13726991, 20103025, 28875327, 40754369, 56610575, 77500017,
- 104692735, 139703809, 184327311, 240673265, 311207743, 398796225, 506750351,
- 638878193, 799538175, 993696769, 1226990095, 1505789553, 1837271615,
- 2229491905U,
-#if defined(CUSTOM_MODES)
- /*...40:*/
- 2691463695U, 3233240945U, 3866006015U,
-#endif
- /*N=9, K=9...28:*/
- 265729, 598417, 1256465, 2485825, 4673345, 8405905, 14546705, 24331777,
- 39490049, 62390545, 96220561, 145198913, 214828609, 312193553, 446304145,
- 628496897, 872893441, 1196924561, 1621925137, 2173806145U,
-#if defined(CUSTOM_MODES)
- /*...29:*/
- 2883810113U,
-#endif
- /*N=10, K=10...24:*/
- 1462563, 3317445, 7059735, 14218905, 27298155, 50250765, 89129247, 152951073,
- 254831667, 413442773, 654862247, 1014889769, 1541911931, 2300409629U,
- 3375210671U,
- /*N=11, K=11...19:*/
- 8097453, 18474633, 39753273, 81270333, 158819253, 298199265, 540279585,
- 948062325, 1616336765,
-#if defined(CUSTOM_MODES)
- /*...20:*/
- 2684641785U,
-#endif
- /*N=12, K=12...18:*/
- 45046719, 103274625, 224298231, 464387817, 921406335, 1759885185,
- 3248227095U,
- /*N=13, K=13...16:*/
- 251595969, 579168825, 1267854873, 2653649025U,
- /*N=14, K=14:*/
- 1409933619
-};
-
-#if defined(CUSTOM_MODES)
-static const opus_uint32 *const CELT_PVQ_U_ROW[15]={
- CELT_PVQ_U_DATA+ 0,CELT_PVQ_U_DATA+ 208,CELT_PVQ_U_DATA+ 415,
- CELT_PVQ_U_DATA+ 621,CELT_PVQ_U_DATA+ 826,CELT_PVQ_U_DATA+1030,
- CELT_PVQ_U_DATA+1233,CELT_PVQ_U_DATA+1336,CELT_PVQ_U_DATA+1389,
- CELT_PVQ_U_DATA+1421,CELT_PVQ_U_DATA+1441,CELT_PVQ_U_DATA+1455,
- CELT_PVQ_U_DATA+1464,CELT_PVQ_U_DATA+1470,CELT_PVQ_U_DATA+1473
-};
-#else
-static const opus_uint32 *const CELT_PVQ_U_ROW[15]={
- CELT_PVQ_U_DATA+ 0,CELT_PVQ_U_DATA+ 176,CELT_PVQ_U_DATA+ 351,
- CELT_PVQ_U_DATA+ 525,CELT_PVQ_U_DATA+ 698,CELT_PVQ_U_DATA+ 870,
- CELT_PVQ_U_DATA+1041,CELT_PVQ_U_DATA+1131,CELT_PVQ_U_DATA+1178,
- CELT_PVQ_U_DATA+1207,CELT_PVQ_U_DATA+1226,CELT_PVQ_U_DATA+1240,
- CELT_PVQ_U_DATA+1248,CELT_PVQ_U_DATA+1254,CELT_PVQ_U_DATA+1257
-};
-#endif
-
-#if defined(CUSTOM_MODES)
-void get_required_bits(opus_int16 *_bits,int _n,int _maxk,int _frac){
- int k;
- /*_maxk==0 => there's nothing to do.*/
- celt_assert(_maxk>0);
- _bits[0]=0;
- for(k=1;k<=_maxk;k++)_bits[k]=log2_frac(CELT_PVQ_V(_n,k),_frac);
-}
-#endif
-
-static opus_uint32 icwrs(int _n,const int *_y){
- opus_uint32 i;
- int j;
- int k;
- celt_assert(_n>=2);
- j=_n-1;
- i=_y[j]<0;
- k=abs(_y[j]);
- do{
- j--;
- i+=CELT_PVQ_U(_n-j,k);
- k+=abs(_y[j]);
- if(_y[j]<0)i+=CELT_PVQ_U(_n-j,k+1);
- }
- while(j>0);
- return i;
-}
-
-void encode_pulses(const int *_y,int _n,int _k,ec_enc *_enc){
- celt_assert(_k>0);
- ec_enc_uint(_enc,icwrs(_n,_y),CELT_PVQ_V(_n,_k));
-}
-
-static opus_val32 cwrsi(int _n,int _k,opus_uint32 _i,int *_y){
- opus_uint32 p;
- int s;
- int k0;
- opus_int16 val;
- opus_val32 yy=0;
- celt_assert(_k>0);
- celt_assert(_n>1);
- while(_n>2){
- opus_uint32 q;
- /*Lots of pulses case:*/
- if(_k>=_n){
- const opus_uint32 *row;
- row=CELT_PVQ_U_ROW[_n];
- /*Are the pulses in this dimension negative?*/
- p=row[_k+1];
- s=-(_i>=p);
- _i-=p&s;
- /*Count how many pulses were placed in this dimension.*/
- k0=_k;
- q=row[_n];
- if(q>_i){
- celt_assert(p>q);
- _k=_n;
- do p=CELT_PVQ_U_ROW[--_k][_n];
- while(p>_i);
- }
- else for(p=row[_k];p>_i;p=row[_k])_k--;
- _i-=p;
- val=(k0-_k+s)^s;
- *_y++=val;
- yy=MAC16_16(yy,val,val);
- }
- /*Lots of dimensions case:*/
- else{
- /*Are there any pulses in this dimension at all?*/
- p=CELT_PVQ_U_ROW[_k][_n];
- q=CELT_PVQ_U_ROW[_k+1][_n];
- if(p<=_i&&_i<q){
- _i-=p;
- *_y++=0;
- }
- else{
- /*Are the pulses in this dimension negative?*/
- s=-(_i>=q);
- _i-=q&s;
- /*Count how many pulses were placed in this dimension.*/
- k0=_k;
- do p=CELT_PVQ_U_ROW[--_k][_n];
- while(p>_i);
- _i-=p;
- val=(k0-_k+s)^s;
- *_y++=val;
- yy=MAC16_16(yy,val,val);
- }
- }
- _n--;
- }
- /*_n==2*/
- p=2*_k+1;
- s=-(_i>=p);
- _i-=p&s;
- k0=_k;
- _k=(_i+1)>>1;
- if(_k)_i-=2*_k-1;
- val=(k0-_k+s)^s;
- *_y++=val;
- yy=MAC16_16(yy,val,val);
- /*_n==1*/
- s=-(int)_i;
- val=(_k+s)^s;
- *_y=val;
- yy=MAC16_16(yy,val,val);
- return yy;
-}
-
-opus_val32 decode_pulses(int *_y,int _n,int _k,ec_dec *_dec){
- return cwrsi(_n,_k,ec_dec_uint(_dec,CELT_PVQ_V(_n,_k)),_y);
-}
-
-#else /* SMALL_FOOTPRINT */
-
-/*Computes the next row/column of any recurrence that obeys the relation
- u[i][j]=u[i-1][j]+u[i][j-1]+u[i-1][j-1].
- _ui0 is the base case for the new row/column.*/
-static OPUS_INLINE void unext(opus_uint32 *_ui,unsigned _len,opus_uint32 _ui0){
- opus_uint32 ui1;
- unsigned j;
- /*This do-while will overrun the array if we don't have storage for at least
- 2 values.*/
- j=1; do {
- ui1=UADD32(UADD32(_ui[j],_ui[j-1]),_ui0);
- _ui[j-1]=_ui0;
- _ui0=ui1;
- } while (++j<_len);
- _ui[j-1]=_ui0;
-}
-
-/*Computes the previous row/column of any recurrence that obeys the relation
- u[i-1][j]=u[i][j]-u[i][j-1]-u[i-1][j-1].
- _ui0 is the base case for the new row/column.*/
-static OPUS_INLINE void uprev(opus_uint32 *_ui,unsigned _n,opus_uint32 _ui0){
- opus_uint32 ui1;
- unsigned j;
- /*This do-while will overrun the array if we don't have storage for at least
- 2 values.*/
- j=1; do {
- ui1=USUB32(USUB32(_ui[j],_ui[j-1]),_ui0);
- _ui[j-1]=_ui0;
- _ui0=ui1;
- } while (++j<_n);
- _ui[j-1]=_ui0;
-}
-
-/*Compute V(_n,_k), as well as U(_n,0..._k+1).
- _u: On exit, _u[i] contains U(_n,i) for i in [0..._k+1].*/
-static opus_uint32 ncwrs_urow(unsigned _n,unsigned _k,opus_uint32 *_u){
- opus_uint32 um2;
- unsigned len;
- unsigned k;
- len=_k+2;
- /*We require storage at least 3 values (e.g., _k>0).*/
- celt_assert(len>=3);
- _u[0]=0;
- _u[1]=um2=1;
- /*If _n==0, _u[0] should be 1 and the rest should be 0.*/
- /*If _n==1, _u[i] should be 1 for i>1.*/
- celt_assert(_n>=2);
- /*If _k==0, the following do-while loop will overflow the buffer.*/
- celt_assert(_k>0);
- k=2;
- do _u[k]=(k<<1)-1;
- while(++k<len);
- for(k=2;k<_n;k++)unext(_u+1,_k+1,1);
- return _u[_k]+_u[_k+1];
-}
-
-/*Returns the _i'th combination of _k elements chosen from a set of size _n
- with associated sign bits.
- _y: Returns the vector of pulses.
- _u: Must contain entries [0..._k+1] of row _n of U() on input.
- Its contents will be destructively modified.*/
-static opus_val32 cwrsi(int _n,int _k,opus_uint32 _i,int *_y,opus_uint32 *_u){
- int j;
- opus_int16 val;
- opus_val32 yy=0;
- celt_assert(_n>0);
- j=0;
- do{
- opus_uint32 p;
- int s;
- int yj;
- p=_u[_k+1];
- s=-(_i>=p);
- _i-=p&s;
- yj=_k;
- p=_u[_k];
- while(p>_i)p=_u[--_k];
- _i-=p;
- yj-=_k;
- val=(yj+s)^s;
- _y[j]=val;
- yy=MAC16_16(yy,val,val);
- uprev(_u,_k+2,0);
- }
- while(++j<_n);
- return yy;
-}
-
-/*Returns the index of the given combination of K elements chosen from a set
- of size 1 with associated sign bits.
- _y: The vector of pulses, whose sum of absolute values is K.
- _k: Returns K.*/
-static OPUS_INLINE opus_uint32 icwrs1(const int *_y,int *_k){
- *_k=abs(_y[0]);
- return _y[0]<0;
-}
-
-/*Returns the index of the given combination of K elements chosen from a set
- of size _n with associated sign bits.
- _y: The vector of pulses, whose sum of absolute values must be _k.
- _nc: Returns V(_n,_k).*/
-static OPUS_INLINE opus_uint32 icwrs(int _n,int _k,opus_uint32 *_nc,const int *_y,
- opus_uint32 *_u){
- opus_uint32 i;
- int j;
- int k;
- /*We can't unroll the first two iterations of the loop unless _n>=2.*/
- celt_assert(_n>=2);
- _u[0]=0;
- for(k=1;k<=_k+1;k++)_u[k]=(k<<1)-1;
- i=icwrs1(_y+_n-1,&k);
- j=_n-2;
- i+=_u[k];
- k+=abs(_y[j]);
- if(_y[j]<0)i+=_u[k+1];
- while(j-->0){
- unext(_u,_k+2,0);
- i+=_u[k];
- k+=abs(_y[j]);
- if(_y[j]<0)i+=_u[k+1];
- }
- *_nc=_u[k]+_u[k+1];
- return i;
-}
-
-#ifdef CUSTOM_MODES
-void get_required_bits(opus_int16 *_bits,int _n,int _maxk,int _frac){
- int k;
- /*_maxk==0 => there's nothing to do.*/
- celt_assert(_maxk>0);
- _bits[0]=0;
- if (_n==1)
- {
- for (k=1;k<=_maxk;k++)
- _bits[k] = 1<<_frac;
- }
- else {
- VARDECL(opus_uint32,u);
- SAVE_STACK;
- ALLOC(u,_maxk+2U,opus_uint32);
- ncwrs_urow(_n,_maxk,u);
- for(k=1;k<=_maxk;k++)
- _bits[k]=log2_frac(u[k]+u[k+1],_frac);
- RESTORE_STACK;
- }
-}
-#endif /* CUSTOM_MODES */
-
-void encode_pulses(const int *_y,int _n,int _k,ec_enc *_enc){
- opus_uint32 i;
- VARDECL(opus_uint32,u);
- opus_uint32 nc;
- SAVE_STACK;
- celt_assert(_k>0);
- ALLOC(u,_k+2U,opus_uint32);
- i=icwrs(_n,_k,&nc,_y,u);
- ec_enc_uint(_enc,i,nc);
- RESTORE_STACK;
-}
-
-opus_val32 decode_pulses(int *_y,int _n,int _k,ec_dec *_dec){
- VARDECL(opus_uint32,u);
- int ret;
- SAVE_STACK;
- celt_assert(_k>0);
- ALLOC(u,_k+2U,opus_uint32);
- ret = cwrsi(_n,_k,ec_dec_uint(_dec,ncwrs_urow(_n,_k,u)),_y,u);
- RESTORE_STACK;
- return ret;
-}
-
-#endif /* SMALL_FOOTPRINT */
diff --git a/drivers/opus/celt/cwrs.h b/drivers/opus/celt/cwrs.h
deleted file mode 100644
index f0ea844e5e..0000000000
--- a/drivers/opus/celt/cwrs.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Copyright (c) 2007-2009 Timothy B. Terriberry
- Written by Timothy B. Terriberry and Jean-Marc Valin */
-/*
- 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.
-
- 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 CWRS_H
-#define CWRS_H
-
-#include "opus/celt/arch.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/entenc.h"
-#include "opus/celt/entdec.h"
-
-#ifdef CUSTOM_MODES
-int log2_frac(opus_uint32 val, int frac);
-#endif
-
-void get_required_bits(opus_int16 *bits, int N, int K, int frac);
-
-void encode_pulses(const int *_y, int N, int K, ec_enc *enc);
-
-opus_val32 decode_pulses(int *_y, int N, int K, ec_dec *dec);
-
-#endif /* CWRS_H */
diff --git a/drivers/opus/celt/ecintrin.h b/drivers/opus/celt/ecintrin.h
deleted file mode 100644
index 6ed8fb280e..0000000000
--- a/drivers/opus/celt/ecintrin.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Copyright (c) 2003-2008 Timothy B. Terriberry
- Copyright (c) 2008 Xiph.Org Foundation */
-/*
- 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.
-
- 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.
-*/
-
-/*Some common macros for potential platform-specific optimization.*/
-#include "opus/opus_types.h"
-#include <math.h>
-#include <limits.h>
-#include "opus/celt/arch.h"
-#if !defined(_ecintrin_H)
-# define _ecintrin_H (1)
-
-/*Some specific platforms may have optimized intrinsic or OPUS_INLINE assembly
- versions of these functions which can substantially improve performance.
- We define macros for them to allow easy incorporation of these non-ANSI
- features.*/
-
-/*Modern gcc (4.x) can compile the naive versions of min and max with cmov if
- given an appropriate architecture, but the branchless bit-twiddling versions
- are just as fast, and do not require any special target architecture.
- Earlier gcc versions (3.x) compiled both code to the same assembly
- instructions, because of the way they represented ((_b)>(_a)) internally.*/
-# define EC_MINI(_a,_b) ((_a)+(((_b)-(_a))&-((_b)<(_a))))
-
-/*Count leading zeros.
- This macro should only be used for implementing ec_ilog(), if it is defined.
- All other code should use EC_ILOG() instead.*/
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-# include <intrin.h>
-/*In _DEBUG mode this is not an intrinsic by default.*/
-# pragma intrinsic(_BitScanReverse)
-
-static __inline int ec_bsr(unsigned long _x){
- unsigned long ret;
- _BitScanReverse(&ret,_x);
- return (int)ret;
-}
-# define EC_CLZ0 (1)
-# define EC_CLZ(_x) (-ec_bsr(_x))
-#elif defined(ENABLE_TI_DSPLIB)
-# include "dsplib.h"
-# define EC_CLZ0 (31)
-# define EC_CLZ(_x) (_lnorm(_x))
-#elif __GNUC_PREREQ(3,4)
-# if INT_MAX>=2147483647
-# define EC_CLZ0 ((int)sizeof(unsigned)*CHAR_BIT)
-# define EC_CLZ(_x) (__builtin_clz(_x))
-# elif LONG_MAX>=2147483647L
-# define EC_CLZ0 ((int)sizeof(unsigned long)*CHAR_BIT)
-# define EC_CLZ(_x) (__builtin_clzl(_x))
-# endif
-#endif
-
-#if defined(EC_CLZ)
-/*Note that __builtin_clz is not defined when _x==0, according to the gcc
- documentation (and that of the BSR instruction that implements it on x86).
- The majority of the time we can never pass it zero.
- When we need to, it can be special cased.*/
-# define EC_ILOG(_x) (EC_CLZ0-EC_CLZ(_x))
-#else
-int ec_ilog(opus_uint32 _v);
-# define EC_ILOG(_x) (ec_ilog(_x))
-#endif
-#endif
diff --git a/drivers/opus/celt/entcode.c b/drivers/opus/celt/entcode.c
deleted file mode 100644
index d1c6b25c7f..0000000000
--- a/drivers/opus/celt/entcode.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/* Copyright (c) 2001-2011 Timothy B. Terriberry
-*/
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/entcode.h"
-#include "opus/celt/arch.h"
-
-#if !defined(EC_CLZ)
-/*This is a fallback for systems where we don't know how to access
- a BSR or CLZ instruction (see ecintrin.h).
- If you are optimizing Opus on a new platform and it has a native CLZ or
- BZR (e.g. cell, MIPS, x86, etc) then making it available to Opus will be
- an easy performance win.*/
-int ec_ilog(opus_uint32 _v){
- /*On a Pentium M, this branchless version tested as the fastest on
- 1,000,000,000 random 32-bit integers, edging out a similar version with
- branches, and a 256-entry LUT version.*/
- int ret;
- int m;
- ret=!!_v;
- m=!!(_v&0xFFFF0000)<<4;
- _v>>=m;
- ret|=m;
- m=!!(_v&0xFF00)<<3;
- _v>>=m;
- ret|=m;
- m=!!(_v&0xF0)<<2;
- _v>>=m;
- ret|=m;
- m=!!(_v&0xC)<<1;
- _v>>=m;
- ret|=m;
- ret+=!!(_v&0x2);
- return ret;
-}
-#endif
-
-#if 1
-/* This is a faster version of ec_tell_frac() that takes advantage
- of the low (1/8 bit) resolution to use just a linear function
- followed by a lookup to determine the exact transition thresholds. */
-opus_uint32 ec_tell_frac(ec_ctx *_this){
- static const unsigned correction[8] =
- {35733, 38967, 42495, 46340,
- 50535, 55109, 60097, 65535};
- opus_uint32 nbits;
- opus_uint32 r;
- int l;
- unsigned b;
- nbits=_this->nbits_total<<BITRES;
- l=EC_ILOG(_this->rng);
- r=_this->rng>>(l-16);
- b = (r>>12)-8;
- b += r>correction[b];
- l = (l<<3)+b;
- return nbits-l;
-}
-#else
-opus_uint32 ec_tell_frac(ec_ctx *_this){
- opus_uint32 nbits;
- opus_uint32 r;
- int l;
- int i;
- /*To handle the non-integral number of bits still left in the encoder/decoder
- state, we compute the worst-case number of bits of val that must be
- encoded to ensure that the value is inside the range for any possible
- subsequent bits.
- The computation here is independent of val itself (the decoder does not
- even track that value), even though the real number of bits used after
- ec_enc_done() may be 1 smaller if rng is a power of two and the
- corresponding trailing bits of val are all zeros.
- If we did try to track that special case, then coding a value with a
- probability of 1/(1<<n) might sometimes appear to use more than n bits.
- This may help explain the surprising result that a newly initialized
- encoder or decoder claims to have used 1 bit.*/
- nbits=_this->nbits_total<<BITRES;
- l=EC_ILOG(_this->rng);
- r=_this->rng>>(l-16);
- for(i=BITRES;i-->0;){
- int b;
- r=r*r>>15;
- b=(int)(r>>16);
- l=l<<1|b;
- r>>=b;
- }
- return nbits-l;
-}
-#endif
-
-#ifdef USE_SMALL_DIV_TABLE
-/* Result of 2^32/(2*i+1), except for i=0. */
-const opus_uint32 SMALL_DIV_TABLE[129] = {
- 0xFFFFFFFF, 0x55555555, 0x33333333, 0x24924924,
- 0x1C71C71C, 0x1745D174, 0x13B13B13, 0x11111111,
- 0x0F0F0F0F, 0x0D79435E, 0x0C30C30C, 0x0B21642C,
- 0x0A3D70A3, 0x097B425E, 0x08D3DCB0, 0x08421084,
- 0x07C1F07C, 0x07507507, 0x06EB3E45, 0x06906906,
- 0x063E7063, 0x05F417D0, 0x05B05B05, 0x0572620A,
- 0x05397829, 0x05050505, 0x04D4873E, 0x04A7904A,
- 0x047DC11F, 0x0456C797, 0x04325C53, 0x04104104,
- 0x03F03F03, 0x03D22635, 0x03B5CC0E, 0x039B0AD1,
- 0x0381C0E0, 0x0369D036, 0x03531DEC, 0x033D91D2,
- 0x0329161F, 0x03159721, 0x03030303, 0x02F14990,
- 0x02E05C0B, 0x02D02D02, 0x02C0B02C, 0x02B1DA46,
- 0x02A3A0FD, 0x0295FAD4, 0x0288DF0C, 0x027C4597,
- 0x02702702, 0x02647C69, 0x02593F69, 0x024E6A17,
- 0x0243F6F0, 0x0239E0D5, 0x02302302, 0x0226B902,
- 0x021D9EAD, 0x0214D021, 0x020C49BA, 0x02040810,
- 0x01FC07F0, 0x01F44659, 0x01ECC07B, 0x01E573AC,
- 0x01DE5D6E, 0x01D77B65, 0x01D0CB58, 0x01CA4B30,
- 0x01C3F8F0, 0x01BDD2B8, 0x01B7D6C3, 0x01B20364,
- 0x01AC5701, 0x01A6D01A, 0x01A16D3F, 0x019C2D14,
- 0x01970E4F, 0x01920FB4, 0x018D3018, 0x01886E5F,
- 0x0183C977, 0x017F405F, 0x017AD220, 0x01767DCE,
- 0x01724287, 0x016E1F76, 0x016A13CD, 0x01661EC6,
- 0x01623FA7, 0x015E75BB, 0x015AC056, 0x01571ED3,
- 0x01539094, 0x01501501, 0x014CAB88, 0x0149539E,
- 0x01460CBC, 0x0142D662, 0x013FB013, 0x013C995A,
- 0x013991C2, 0x013698DF, 0x0133AE45, 0x0130D190,
- 0x012E025C, 0x012B404A, 0x01288B01, 0x0125E227,
- 0x01234567, 0x0120B470, 0x011E2EF3, 0x011BB4A4,
- 0x01194538, 0x0116E068, 0x011485F0, 0x0112358E,
- 0x010FEF01, 0x010DB20A, 0x010B7E6E, 0x010953F3,
- 0x01073260, 0x0105197F, 0x0103091B, 0x01010101
-};
-#endif
diff --git a/drivers/opus/celt/entcode.h b/drivers/opus/celt/entcode.h
deleted file mode 100644
index 4d736d4dca..0000000000
--- a/drivers/opus/celt/entcode.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* Copyright (c) 2001-2011 Timothy B. Terriberry
- Copyright (c) 2008-2009 Xiph.Org Foundation */
-/*
- 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.
-
- 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 "opus/opus_types.h"
-#include "opus/opus_defines.h"
-
-#if !defined(_entcode_H)
-# define _entcode_H (1)
-# include <limits.h>
-# include <stddef.h>
-# include "opus/celt/ecintrin.h"
-
-extern const opus_uint32 SMALL_DIV_TABLE[129];
-
-#ifdef OPUS_ARM_ASM
-#define USE_SMALL_DIV_TABLE
-#endif
-
-/*OPT: ec_window must be at least 32 bits, but if you have fast arithmetic on a
- larger type, you can speed up the decoder by using it here.*/
-typedef opus_uint32 ec_window;
-typedef struct ec_ctx ec_ctx;
-typedef struct ec_ctx ec_enc;
-typedef struct ec_ctx ec_dec;
-
-# define EC_WINDOW_SIZE ((int)sizeof(ec_window)*CHAR_BIT)
-
-/*The number of bits to use for the range-coded part of unsigned integers.*/
-# define EC_UINT_BITS (8)
-
-/*The resolution of fractional-precision bit usage measurements, i.e.,
- 3 => 1/8th bits.*/
-# define BITRES 3
-
-/*The entropy encoder/decoder context.
- We use the same structure for both, so that common functions like ec_tell()
- can be used on either one.*/
-struct ec_ctx{
- /*Buffered input/output.*/
- unsigned char *buf;
- /*The size of the buffer.*/
- opus_uint32 storage;
- /*The offset at which the last byte containing raw bits was read/written.*/
- opus_uint32 end_offs;
- /*Bits that will be read from/written at the end.*/
- ec_window end_window;
- /*Number of valid bits in end_window.*/
- int nend_bits;
- /*The total number of whole bits read/written.
- This does not include partial bits currently in the range coder.*/
- int nbits_total;
- /*The offset at which the next range coder byte will be read/written.*/
- opus_uint32 offs;
- /*The number of values in the current range.*/
- opus_uint32 rng;
- /*In the decoder: the difference between the top of the current range and
- the input value, minus one.
- In the encoder: the low end of the current range.*/
- opus_uint32 val;
- /*In the decoder: the saved normalization factor from ec_decode().
- In the encoder: the number of oustanding carry propagating symbols.*/
- opus_uint32 ext;
- /*A buffered input/output symbol, awaiting carry propagation.*/
- int rem;
- /*Nonzero if an error occurred.*/
- int error;
-};
-
-static OPUS_INLINE opus_uint32 ec_range_bytes(ec_ctx *_this){
- return _this->offs;
-}
-
-static OPUS_INLINE unsigned char *ec_get_buffer(ec_ctx *_this){
- return _this->buf;
-}
-
-static OPUS_INLINE int ec_get_error(ec_ctx *_this){
- return _this->error;
-}
-
-/*Returns the number of bits "used" by the encoded or decoded symbols so far.
- This same number can be computed in either the encoder or the decoder, and is
- suitable for making coding decisions.
- Return: The number of bits.
- This will always be slightly larger than the exact value (e.g., all
- rounding error is in the positive direction).*/
-static OPUS_INLINE int ec_tell(ec_ctx *_this){
- return _this->nbits_total-EC_ILOG(_this->rng);
-}
-
-/*Returns the number of bits "used" by the encoded or decoded symbols so far.
- This same number can be computed in either the encoder or the decoder, and is
- suitable for making coding decisions.
- Return: The number of bits scaled by 2**BITRES.
- This will always be slightly larger than the exact value (e.g., all
- rounding error is in the positive direction).*/
-opus_uint32 ec_tell_frac(ec_ctx *_this);
-
-/* Tested exhaustively for all n and for 1<=d<=256 */
-static OPUS_INLINE opus_uint32 celt_udiv(opus_uint32 n, opus_uint32 d) {
- celt_assert(d>0);
-#ifdef USE_SMALL_DIV_TABLE
- if (d>256)
- return n/d;
- else {
- opus_uint32 t, q;
- t = EC_ILOG(d&-d);
- q = (opus_uint64)SMALL_DIV_TABLE[d>>t]*(n>>(t-1))>>32;
- return q+(n-q*d >= d);
- }
-#else
- return n/d;
-#endif
-}
-
-static OPUS_INLINE opus_int32 celt_sudiv(opus_int32 n, opus_int32 d) {
- celt_assert(d>0);
-#ifdef USE_SMALL_DIV_TABLE
- if (n<0)
- return -(opus_int32)celt_udiv(-n, d);
- else
- return celt_udiv(n, d);
-#else
- return n/d;
-#endif
-}
-
-#endif
diff --git a/drivers/opus/celt/entdec.c b/drivers/opus/celt/entdec.c
deleted file mode 100644
index fdc49c92c1..0000000000
--- a/drivers/opus/celt/entdec.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/* Copyright (c) 2001-2011 Timothy B. Terriberry
- Copyright (c) 2008-2009 Xiph.Org Foundation */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <stddef.h>
-#include "opus/celt/os_support.h"
-#include "opus/celt/arch.h"
-#include "opus/celt/entdec.h"
-#include "opus/celt/mfrngcod.h"
-
-/*A range decoder.
- This is an entropy decoder based upon \cite{Mar79}, which is itself a
- rediscovery of the FIFO arithmetic code introduced by \cite{Pas76}.
- It is very similar to arithmetic encoding, except that encoding is done with
- digits in any base, instead of with bits, and so it is faster when using
- larger bases (i.e.: a byte).
- The author claims an average waste of $\frac{1}{2}\log_b(2b)$ bits, where $b$
- is the base, longer than the theoretical optimum, but to my knowledge there
- is no published justification for this claim.
- This only seems true when using near-infinite precision arithmetic so that
- the process is carried out with no rounding errors.
-
- An excellent description of implementation details is available at
- http://www.arturocampos.com/ac_range.html
- A recent work \cite{MNW98} which proposes several changes to arithmetic
- encoding for efficiency actually re-discovers many of the principles
- behind range encoding, and presents a good theoretical analysis of them.
-
- End of stream is handled by writing out the smallest number of bits that
- ensures that the stream will be correctly decoded regardless of the value of
- any subsequent bits.
- ec_tell() can be used to determine how many bits were needed to decode
- all the symbols thus far; other data can be packed in the remaining bits of
- the input buffer.
- @PHDTHESIS{Pas76,
- author="Richard Clark Pasco",
- title="Source coding algorithms for fast data compression",
- school="Dept. of Electrical Engineering, Stanford University",
- address="Stanford, CA",
- month=May,
- year=1976
- }
- @INPROCEEDINGS{Mar79,
- author="Martin, G.N.N.",
- title="Range encoding: an algorithm for removing redundancy from a digitised
- message",
- booktitle="Video & Data Recording Conference",
- year=1979,
- address="Southampton",
- month=Jul
- }
- @ARTICLE{MNW98,
- author="Alistair Moffat and Radford Neal and Ian H. Witten",
- title="Arithmetic Coding Revisited",
- journal="{ACM} Transactions on Information Systems",
- year=1998,
- volume=16,
- number=3,
- pages="256--294",
- month=Jul,
- URL="http://www.stanford.edu/class/ee398a/handouts/papers/Moffat98ArithmCoding.pdf"
- }*/
-
-static int ec_read_byte(ec_dec *_this){
- return _this->offs<_this->storage?_this->buf[_this->offs++]:0;
-}
-
-static int ec_read_byte_from_end(ec_dec *_this){
- return _this->end_offs<_this->storage?
- _this->buf[_this->storage-++(_this->end_offs)]:0;
-}
-
-/*Normalizes the contents of val and rng so that rng lies entirely in the
- high-order symbol.*/
-static void ec_dec_normalize(ec_dec *_this){
- /*If the range is too small, rescale it and input some bits.*/
- while(_this->rng<=EC_CODE_BOT){
- int sym;
- _this->nbits_total+=EC_SYM_BITS;
- _this->rng<<=EC_SYM_BITS;
- /*Use up the remaining bits from our last symbol.*/
- sym=_this->rem;
- /*Read the next value from the input.*/
- _this->rem=ec_read_byte(_this);
- /*Take the rest of the bits we need from this new symbol.*/
- sym=(sym<<EC_SYM_BITS|_this->rem)>>(EC_SYM_BITS-EC_CODE_EXTRA);
- /*And subtract them from val, capped to be less than EC_CODE_TOP.*/
- _this->val=((_this->val<<EC_SYM_BITS)+(EC_SYM_MAX&~sym))&(EC_CODE_TOP-1);
- }
-}
-
-void ec_dec_init(ec_dec *_this,unsigned char *_buf,opus_uint32 _storage){
- _this->buf=_buf;
- _this->storage=_storage;
- _this->end_offs=0;
- _this->end_window=0;
- _this->nend_bits=0;
- /*This is the offset from which ec_tell() will subtract partial bits.
- The final value after the ec_dec_normalize() call will be the same as in
- the encoder, but we have to compensate for the bits that are added there.*/
- _this->nbits_total=EC_CODE_BITS+1
- -((EC_CODE_BITS-EC_CODE_EXTRA)/EC_SYM_BITS)*EC_SYM_BITS;
- _this->offs=0;
- _this->rng=1U<<EC_CODE_EXTRA;
- _this->rem=ec_read_byte(_this);
- _this->val=_this->rng-1-(_this->rem>>(EC_SYM_BITS-EC_CODE_EXTRA));
- _this->error=0;
- /*Normalize the interval.*/
- ec_dec_normalize(_this);
-}
-
-unsigned ec_decode(ec_dec *_this,unsigned _ft){
- unsigned s;
- _this->ext=celt_udiv(_this->rng,_ft);
- s=(unsigned)(_this->val/_this->ext);
- return _ft-EC_MINI(s+1,_ft);
-}
-
-unsigned ec_decode_bin(ec_dec *_this,unsigned _bits){
- unsigned s;
- _this->ext=_this->rng>>_bits;
- s=(unsigned)(_this->val/_this->ext);
- return (1U<<_bits)-EC_MINI(s+1U,1U<<_bits);
-}
-
-void ec_dec_update(ec_dec *_this,unsigned _fl,unsigned _fh,unsigned _ft){
- opus_uint32 s;
- s=IMUL32(_this->ext,_ft-_fh);
- _this->val-=s;
- _this->rng=_fl>0?IMUL32(_this->ext,_fh-_fl):_this->rng-s;
- ec_dec_normalize(_this);
-}
-
-/*The probability of having a "one" is 1/(1<<_logp).*/
-int ec_dec_bit_logp(ec_dec *_this,unsigned _logp){
- opus_uint32 r;
- opus_uint32 d;
- opus_uint32 s;
- int ret;
- r=_this->rng;
- d=_this->val;
- s=r>>_logp;
- ret=d<s;
- if(!ret)_this->val=d-s;
- _this->rng=ret?s:r-s;
- ec_dec_normalize(_this);
- return ret;
-}
-
-int ec_dec_icdf(ec_dec *_this,const unsigned char *_icdf,unsigned _ftb){
- opus_uint32 r;
- opus_uint32 d;
- opus_uint32 s;
- opus_uint32 t;
- int ret;
- s=_this->rng;
- d=_this->val;
- r=s>>_ftb;
- ret=-1;
- do{
- t=s;
- s=IMUL32(r,_icdf[++ret]);
- }
- while(d<s);
- _this->val=d-s;
- _this->rng=t-s;
- ec_dec_normalize(_this);
- return ret;
-}
-
-opus_uint32 ec_dec_uint(ec_dec *_this,opus_uint32 _ft){
- unsigned ft;
- unsigned s;
- int ftb;
- /*In order to optimize EC_ILOG(), it is undefined for the value 0.*/
- celt_assert(_ft>1);
- _ft--;
- ftb=EC_ILOG(_ft);
- if(ftb>EC_UINT_BITS){
- opus_uint32 t;
- ftb-=EC_UINT_BITS;
- ft=(unsigned)(_ft>>ftb)+1;
- s=ec_decode(_this,ft);
- ec_dec_update(_this,s,s+1,ft);
- t=(opus_uint32)s<<ftb|ec_dec_bits(_this,ftb);
- if(t<=_ft)return t;
- _this->error=1;
- return _ft;
- }
- else{
- _ft++;
- s=ec_decode(_this,(unsigned)_ft);
- ec_dec_update(_this,s,s+1,(unsigned)_ft);
- return s;
- }
-}
-
-opus_uint32 ec_dec_bits(ec_dec *_this,unsigned _bits){
- ec_window window;
- int available;
- opus_uint32 ret;
- window=_this->end_window;
- available=_this->nend_bits;
- if((unsigned)available<_bits){
- do{
- window|=(ec_window)ec_read_byte_from_end(_this)<<available;
- available+=EC_SYM_BITS;
- }
- while(available<=EC_WINDOW_SIZE-EC_SYM_BITS);
- }
- ret=(opus_uint32)window&(((opus_uint32)1<<_bits)-1U);
- window>>=_bits;
- available-=_bits;
- _this->end_window=window;
- _this->nend_bits=available;
- _this->nbits_total+=_bits;
- return ret;
-}
diff --git a/drivers/opus/celt/entdec.h b/drivers/opus/celt/entdec.h
deleted file mode 100644
index fda60ab326..0000000000
--- a/drivers/opus/celt/entdec.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Copyright (c) 2001-2011 Timothy B. Terriberry
- Copyright (c) 2008-2009 Xiph.Org Foundation */
-/*
- 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.
-
- 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.
-*/
-
-#if !defined(_entdec_H)
-# define _entdec_H (1)
-# include <limits.h>
-# include "opus/celt/entcode.h"
-
-/*Initializes the decoder.
- _buf: The input buffer to use.
- Return: 0 on success, or a negative value on error.*/
-void ec_dec_init(ec_dec *_this,unsigned char *_buf,opus_uint32 _storage);
-
-/*Calculates the cumulative frequency for the next symbol.
- This can then be fed into the probability model to determine what that
- symbol is, and the additional frequency information required to advance to
- the next symbol.
- This function cannot be called more than once without a corresponding call to
- ec_dec_update(), or decoding will not proceed correctly.
- _ft: The total frequency of the symbols in the alphabet the next symbol was
- encoded with.
- Return: A cumulative frequency representing the encoded symbol.
- If the cumulative frequency of all the symbols before the one that
- was encoded was fl, and the cumulative frequency of all the symbols
- up to and including the one encoded is fh, then the returned value
- will fall in the range [fl,fh).*/
-unsigned ec_decode(ec_dec *_this,unsigned _ft);
-
-/*Equivalent to ec_decode() with _ft==1<<_bits.*/
-unsigned ec_decode_bin(ec_dec *_this,unsigned _bits);
-
-/*Advance the decoder past the next symbol using the frequency information the
- symbol was encoded with.
- Exactly one call to ec_decode() must have been made so that all necessary
- intermediate calculations are performed.
- _fl: The cumulative frequency of all symbols that come before the symbol
- decoded.
- _fh: The cumulative frequency of all symbols up to and including the symbol
- decoded.
- Together with _fl, this defines the range [_fl,_fh) in which the value
- returned above must fall.
- _ft: The total frequency of the symbols in the alphabet the symbol decoded
- was encoded in.
- This must be the same as passed to the preceding call to ec_decode().*/
-void ec_dec_update(ec_dec *_this,unsigned _fl,unsigned _fh,unsigned _ft);
-
-/* Decode a bit that has a 1/(1<<_logp) probability of being a one */
-int ec_dec_bit_logp(ec_dec *_this,unsigned _logp);
-
-/*Decodes a symbol given an "inverse" CDF table.
- No call to ec_dec_update() is necessary after this call.
- _icdf: The "inverse" CDF, such that symbol s falls in the range
- [s>0?ft-_icdf[s-1]:0,ft-_icdf[s]), where ft=1<<_ftb.
- The values must be monotonically non-increasing, and the last value
- must be 0.
- _ftb: The number of bits of precision in the cumulative distribution.
- Return: The decoded symbol s.*/
-int ec_dec_icdf(ec_dec *_this,const unsigned char *_icdf,unsigned _ftb);
-
-/*Extracts a raw unsigned integer with a non-power-of-2 range from the stream.
- The bits must have been encoded with ec_enc_uint().
- No call to ec_dec_update() is necessary after this call.
- _ft: The number of integers that can be decoded (one more than the max).
- This must be at least one, and no more than 2**32-1.
- Return: The decoded bits.*/
-opus_uint32 ec_dec_uint(ec_dec *_this,opus_uint32 _ft);
-
-/*Extracts a sequence of raw bits from the stream.
- The bits must have been encoded with ec_enc_bits().
- No call to ec_dec_update() is necessary after this call.
- _ftb: The number of bits to extract.
- This must be between 0 and 25, inclusive.
- Return: The decoded bits.*/
-opus_uint32 ec_dec_bits(ec_dec *_this,unsigned _ftb);
-
-#endif
diff --git a/drivers/opus/celt/entenc.c b/drivers/opus/celt/entenc.c
deleted file mode 100644
index da7f2c8e62..0000000000
--- a/drivers/opus/celt/entenc.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/* Copyright (c) 2001-2011 Timothy B. Terriberry
- Copyright (c) 2008-2009 Xiph.Org Foundation */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-#include "opus/celt/os_support.h"
-#include "opus/celt/arch.h"
-#include "opus/celt/entenc.h"
-#include "opus/celt/mfrngcod.h"
-
-/*A range encoder.
- See entdec.c and the references for implementation details \cite{Mar79,MNW98}.
-
- @INPROCEEDINGS{Mar79,
- author="Martin, G.N.N.",
- title="Range encoding: an algorithm for removing redundancy from a digitised
- message",
- booktitle="Video \& Data Recording Conference",
- year=1979,
- address="Southampton",
- month=Jul
- }
- @ARTICLE{MNW98,
- author="Alistair Moffat and Radford Neal and Ian H. Witten",
- title="Arithmetic Coding Revisited",
- journal="{ACM} Transactions on Information Systems",
- year=1998,
- volume=16,
- number=3,
- pages="256--294",
- month=Jul,
- URL="http://www.stanford.edu/class/ee398/handouts/papers/Moffat98ArithmCoding.pdf"
- }*/
-
-static int ec_write_byte(ec_enc *_this,unsigned _value){
- if(_this->offs+_this->end_offs>=_this->storage)return -1;
- _this->buf[_this->offs++]=(unsigned char)_value;
- return 0;
-}
-
-static int ec_write_byte_at_end(ec_enc *_this,unsigned _value){
- if(_this->offs+_this->end_offs>=_this->storage)return -1;
- _this->buf[_this->storage-++(_this->end_offs)]=(unsigned char)_value;
- return 0;
-}
-
-/*Outputs a symbol, with a carry bit.
- If there is a potential to propagate a carry over several symbols, they are
- buffered until it can be determined whether or not an actual carry will
- occur.
- If the counter for the buffered symbols overflows, then the stream becomes
- undecodable.
- This gives a theoretical limit of a few billion symbols in a single packet on
- 32-bit systems.
- The alternative is to truncate the range in order to force a carry, but
- requires similar carry tracking in the decoder, needlessly slowing it down.*/
-static void ec_enc_carry_out(ec_enc *_this,int _c){
- if(_c!=EC_SYM_MAX){
- /*No further carry propagation possible, flush buffer.*/
- int carry;
- carry=_c>>EC_SYM_BITS;
- /*Don't output a byte on the first write.
- This compare should be taken care of by branch-prediction thereafter.*/
- if(_this->rem>=0)_this->error|=ec_write_byte(_this,_this->rem+carry);
- if(_this->ext>0){
- unsigned sym;
- sym=(EC_SYM_MAX+carry)&EC_SYM_MAX;
- do _this->error|=ec_write_byte(_this,sym);
- while(--(_this->ext)>0);
- }
- _this->rem=_c&EC_SYM_MAX;
- }
- else _this->ext++;
-}
-
-static OPUS_INLINE void ec_enc_normalize(ec_enc *_this){
- /*If the range is too small, output some bits and rescale it.*/
- while(_this->rng<=EC_CODE_BOT){
- ec_enc_carry_out(_this,(int)(_this->val>>EC_CODE_SHIFT));
- /*Move the next-to-high-order symbol into the high-order position.*/
- _this->val=(_this->val<<EC_SYM_BITS)&(EC_CODE_TOP-1);
- _this->rng<<=EC_SYM_BITS;
- _this->nbits_total+=EC_SYM_BITS;
- }
-}
-
-void ec_enc_init(ec_enc *_this,unsigned char *_buf,opus_uint32 _size){
- _this->buf=_buf;
- _this->end_offs=0;
- _this->end_window=0;
- _this->nend_bits=0;
- /*This is the offset from which ec_tell() will subtract partial bits.*/
- _this->nbits_total=EC_CODE_BITS+1;
- _this->offs=0;
- _this->rng=EC_CODE_TOP;
- _this->rem=-1;
- _this->val=0;
- _this->ext=0;
- _this->storage=_size;
- _this->error=0;
-}
-
-void ec_encode(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _ft){
- opus_uint32 r;
- r=celt_udiv(_this->rng,_ft);
- if(_fl>0){
- _this->val+=_this->rng-IMUL32(r,(_ft-_fl));
- _this->rng=IMUL32(r,(_fh-_fl));
- }
- else _this->rng-=IMUL32(r,(_ft-_fh));
- ec_enc_normalize(_this);
-}
-
-void ec_encode_bin(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _bits){
- opus_uint32 r;
- r=_this->rng>>_bits;
- if(_fl>0){
- _this->val+=_this->rng-IMUL32(r,((1U<<_bits)-_fl));
- _this->rng=IMUL32(r,(_fh-_fl));
- }
- else _this->rng-=IMUL32(r,((1U<<_bits)-_fh));
- ec_enc_normalize(_this);
-}
-
-/*The probability of having a "one" is 1/(1<<_logp).*/
-void ec_enc_bit_logp(ec_enc *_this,int _val,unsigned _logp){
- opus_uint32 r;
- opus_uint32 s;
- opus_uint32 l;
- r=_this->rng;
- l=_this->val;
- s=r>>_logp;
- r-=s;
- if(_val)_this->val=l+r;
- _this->rng=_val?s:r;
- ec_enc_normalize(_this);
-}
-
-void ec_enc_icdf(ec_enc *_this,int _s,const unsigned char *_icdf,unsigned _ftb){
- opus_uint32 r;
- r=_this->rng>>_ftb;
- if(_s>0){
- _this->val+=_this->rng-IMUL32(r,_icdf[_s-1]);
- _this->rng=IMUL32(r,_icdf[_s-1]-_icdf[_s]);
- }
- else _this->rng-=IMUL32(r,_icdf[_s]);
- ec_enc_normalize(_this);
-}
-
-void ec_enc_uint(ec_enc *_this,opus_uint32 _fl,opus_uint32 _ft){
- unsigned ft;
- unsigned fl;
- int ftb;
- /*In order to optimize EC_ILOG(), it is undefined for the value 0.*/
- celt_assert(_ft>1);
- _ft--;
- ftb=EC_ILOG(_ft);
- if(ftb>EC_UINT_BITS){
- ftb-=EC_UINT_BITS;
- ft=(_ft>>ftb)+1;
- fl=(unsigned)(_fl>>ftb);
- ec_encode(_this,fl,fl+1,ft);
- ec_enc_bits(_this,_fl&(((opus_uint32)1<<ftb)-1U),ftb);
- }
- else ec_encode(_this,_fl,_fl+1,_ft+1);
-}
-
-void ec_enc_bits(ec_enc *_this,opus_uint32 _fl,unsigned _bits){
- ec_window window;
- int used;
- window=_this->end_window;
- used=_this->nend_bits;
- celt_assert(_bits>0);
- if(used+_bits>EC_WINDOW_SIZE){
- do{
- _this->error|=ec_write_byte_at_end(_this,(unsigned)window&EC_SYM_MAX);
- window>>=EC_SYM_BITS;
- used-=EC_SYM_BITS;
- }
- while(used>=EC_SYM_BITS);
- }
- window|=(ec_window)_fl<<used;
- used+=_bits;
- _this->end_window=window;
- _this->nend_bits=used;
- _this->nbits_total+=_bits;
-}
-
-void ec_enc_patch_initial_bits(ec_enc *_this,unsigned _val,unsigned _nbits){
- int shift;
- unsigned mask;
- celt_assert(_nbits<=EC_SYM_BITS);
- shift=EC_SYM_BITS-_nbits;
- mask=((1<<_nbits)-1)<<shift;
- if(_this->offs>0){
- /*The first byte has been finalized.*/
- _this->buf[0]=(unsigned char)((_this->buf[0]&~mask)|_val<<shift);
- }
- else if(_this->rem>=0){
- /*The first byte is still awaiting carry propagation.*/
- _this->rem=(_this->rem&~mask)|_val<<shift;
- }
- else if(_this->rng<=(EC_CODE_TOP>>_nbits)){
- /*The renormalization loop has never been run.*/
- _this->val=(_this->val&~((opus_uint32)mask<<EC_CODE_SHIFT))|
- (opus_uint32)_val<<(EC_CODE_SHIFT+shift);
- }
- /*The encoder hasn't even encoded _nbits of data yet.*/
- else _this->error=-1;
-}
-
-void ec_enc_shrink(ec_enc *_this,opus_uint32 _size){
- celt_assert(_this->offs+_this->end_offs<=_size);
- OPUS_MOVE(_this->buf+_size-_this->end_offs,
- _this->buf+_this->storage-_this->end_offs,_this->end_offs);
- _this->storage=_size;
-}
-
-void ec_enc_done(ec_enc *_this){
- ec_window window;
- int used;
- opus_uint32 msk;
- opus_uint32 end;
- int l;
- /*We output the minimum number of bits that ensures that the symbols encoded
- thus far will be decoded correctly regardless of the bits that follow.*/
- l=EC_CODE_BITS-EC_ILOG(_this->rng);
- msk=(EC_CODE_TOP-1)>>l;
- end=(_this->val+msk)&~msk;
- if((end|msk)>=_this->val+_this->rng){
- l++;
- msk>>=1;
- end=(_this->val+msk)&~msk;
- }
- while(l>0){
- ec_enc_carry_out(_this,(int)(end>>EC_CODE_SHIFT));
- end=(end<<EC_SYM_BITS)&(EC_CODE_TOP-1);
- l-=EC_SYM_BITS;
- }
- /*If we have a buffered byte flush it into the output buffer.*/
- if(_this->rem>=0||_this->ext>0)ec_enc_carry_out(_this,0);
- /*If we have buffered extra bits, flush them as well.*/
- window=_this->end_window;
- used=_this->nend_bits;
- while(used>=EC_SYM_BITS){
- _this->error|=ec_write_byte_at_end(_this,(unsigned)window&EC_SYM_MAX);
- window>>=EC_SYM_BITS;
- used-=EC_SYM_BITS;
- }
- /*Clear any excess space and add any remaining extra bits to the last byte.*/
- if(!_this->error){
- OPUS_CLEAR(_this->buf+_this->offs,
- _this->storage-_this->offs-_this->end_offs);
- if(used>0){
- /*If there's no range coder data at all, give up.*/
- if(_this->end_offs>=_this->storage)_this->error=-1;
- else{
- l=-l;
- /*If we've busted, don't add too many extra bits to the last byte; it
- would corrupt the range coder data, and that's more important.*/
- if(_this->offs+_this->end_offs>=_this->storage&&l<used){
- window&=(1<<l)-1;
- _this->error=-1;
- }
- _this->buf[_this->storage-_this->end_offs-1]|=(unsigned char)window;
- }
- }
- }
-}
diff --git a/drivers/opus/celt/entenc.h b/drivers/opus/celt/entenc.h
deleted file mode 100644
index 3f4a3acc93..0000000000
--- a/drivers/opus/celt/entenc.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* Copyright (c) 2001-2011 Timothy B. Terriberry
- Copyright (c) 2008-2009 Xiph.Org Foundation */
-/*
- 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.
-
- 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.
-*/
-
-#if !defined(_entenc_H)
-# define _entenc_H (1)
-# include <stddef.h>
-# include "opus/celt/entcode.h"
-
-/*Initializes the encoder.
- _buf: The buffer to store output bytes in.
- _size: The size of the buffer, in chars.*/
-void ec_enc_init(ec_enc *_this,unsigned char *_buf,opus_uint32 _size);
-/*Encodes a symbol given its frequency information.
- The frequency information must be discernable by the decoder, assuming it
- has read only the previous symbols from the stream.
- It is allowable to change the frequency information, or even the entire
- source alphabet, so long as the decoder can tell from the context of the
- previously encoded information that it is supposed to do so as well.
- _fl: The cumulative frequency of all symbols that come before the one to be
- encoded.
- _fh: The cumulative frequency of all symbols up to and including the one to
- be encoded.
- Together with _fl, this defines the range [_fl,_fh) in which the
- decoded value will fall.
- _ft: The sum of the frequencies of all the symbols*/
-void ec_encode(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _ft);
-
-/*Equivalent to ec_encode() with _ft==1<<_bits.*/
-void ec_encode_bin(ec_enc *_this,unsigned _fl,unsigned _fh,unsigned _bits);
-
-/* Encode a bit that has a 1/(1<<_logp) probability of being a one */
-void ec_enc_bit_logp(ec_enc *_this,int _val,unsigned _logp);
-
-/*Encodes a symbol given an "inverse" CDF table.
- _s: The index of the symbol to encode.
- _icdf: The "inverse" CDF, such that symbol _s falls in the range
- [_s>0?ft-_icdf[_s-1]:0,ft-_icdf[_s]), where ft=1<<_ftb.
- The values must be monotonically non-increasing, and the last value
- must be 0.
- _ftb: The number of bits of precision in the cumulative distribution.*/
-void ec_enc_icdf(ec_enc *_this,int _s,const unsigned char *_icdf,unsigned _ftb);
-
-/*Encodes a raw unsigned integer in the stream.
- _fl: The integer to encode.
- _ft: The number of integers that can be encoded (one more than the max).
- This must be at least one, and no more than 2**32-1.*/
-void ec_enc_uint(ec_enc *_this,opus_uint32 _fl,opus_uint32 _ft);
-
-/*Encodes a sequence of raw bits in the stream.
- _fl: The bits to encode.
- _ftb: The number of bits to encode.
- This must be between 1 and 25, inclusive.*/
-void ec_enc_bits(ec_enc *_this,opus_uint32 _fl,unsigned _ftb);
-
-/*Overwrites a few bits at the very start of an existing stream, after they
- have already been encoded.
- This makes it possible to have a few flags up front, where it is easy for
- decoders to access them without parsing the whole stream, even if their
- values are not determined until late in the encoding process, without having
- to buffer all the intermediate symbols in the encoder.
- In order for this to work, at least _nbits bits must have already been
- encoded using probabilities that are an exact power of two.
- The encoder can verify the number of encoded bits is sufficient, but cannot
- check this latter condition.
- _val: The bits to encode (in the least _nbits significant bits).
- They will be decoded in order from most-significant to least.
- _nbits: The number of bits to overwrite.
- This must be no more than 8.*/
-void ec_enc_patch_initial_bits(ec_enc *_this,unsigned _val,unsigned _nbits);
-
-/*Compacts the data to fit in the target size.
- This moves up the raw bits at the end of the current buffer so they are at
- the end of the new buffer size.
- The caller must ensure that the amount of data that's already been written
- will fit in the new size.
- _size: The number of bytes in the new buffer.
- This must be large enough to contain the bits already written, and
- must be no larger than the existing size.*/
-void ec_enc_shrink(ec_enc *_this,opus_uint32 _size);
-
-/*Indicates that there are no more symbols to encode.
- All reamining output bytes are flushed to the output buffer.
- ec_enc_init() must be called before the encoder can be used again.*/
-void ec_enc_done(ec_enc *_this);
-
-#endif
diff --git a/drivers/opus/celt/fixed_debug.h b/drivers/opus/celt/fixed_debug.h
deleted file mode 100644
index 3b8d5ef7a9..0000000000
--- a/drivers/opus/celt/fixed_debug.h
+++ /dev/null
@@ -1,784 +0,0 @@
-/* Copyright (C) 2003-2008 Jean-Marc Valin
- Copyright (C) 2007-2012 Xiph.Org Foundation */
-/**
- @file fixed_debug.h
- @brief Fixed-point operations with debugging
-*/
-/*
- 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.
-
- 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 FIXED_DEBUG_H
-#define FIXED_DEBUG_H
-
-#include <stdio.h>
-#include "opus/opus_defines.h"
-
-#ifdef CELT_C
-OPUS_EXPORT opus_int64 celt_mips=0;
-#else
-extern opus_int64 celt_mips;
-#endif
-
-#define MULT16_16SU(a,b) ((opus_val32)(opus_val16)(a)*(opus_val32)(opus_uint16)(b))
-#define MULT32_32_Q31(a,b) ADD32(ADD32(SHL32(MULT16_16(SHR32((a),16),SHR((b),16)),1), SHR32(MULT16_16SU(SHR32((a),16),((b)&0x0000ffff)),15)), SHR32(MULT16_16SU(SHR32((b),16),((a)&0x0000ffff)),15))
-
-/** 16x32 multiplication, followed by a 16-bit shift right. Results fits in 32 bits */
-#define MULT16_32_Q16(a,b) ADD32(MULT16_16((a),SHR32((b),16)), SHR32(MULT16_16SU((a),((b)&0x0000ffff)),16))
-
-#define MULT16_32_P16(a,b) MULT16_32_PX(a,b,16)
-
-#define QCONST16(x,bits) ((opus_val16)(.5+(x)*(((opus_val32)1)<<(bits))))
-#define QCONST32(x,bits) ((opus_val32)(.5+(x)*(((opus_val32)1)<<(bits))))
-
-#define VERIFY_SHORT(x) ((x)<=32767&&(x)>=-32768)
-#define VERIFY_INT(x) ((x)<=2147483647LL&&(x)>=-2147483648LL)
-#define VERIFY_UINT(x) ((x)<=(2147483647LLU<<1))
-
-#define SHR(a,b) SHR32(a,b)
-#define PSHR(a,b) PSHR32(a,b)
-
-static OPUS_INLINE short NEG16(int x)
-{
- int res;
- if (!VERIFY_SHORT(x))
- {
- fprintf (stderr, "NEG16: input is not short: %d\n", (int)x);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = -x;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "NEG16: output is not short: %d\n", (int)res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips++;
- return res;
-}
-static OPUS_INLINE int NEG32(opus_int64 x)
-{
- opus_int64 res;
- if (!VERIFY_INT(x))
- {
- fprintf (stderr, "NEG16: input is not int: %d\n", (int)x);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = -x;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "NEG16: output is not int: %d\n", (int)res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=2;
- return res;
-}
-
-#define EXTRACT16(x) EXTRACT16_(x, __FILE__, __LINE__)
-static OPUS_INLINE short EXTRACT16_(int x, char *file, int line)
-{
- int res;
- if (!VERIFY_SHORT(x))
- {
- fprintf (stderr, "EXTRACT16: input is not short: %d in %s: line %d\n", x, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = x;
- celt_mips++;
- return res;
-}
-
-#define EXTEND32(x) EXTEND32_(x, __FILE__, __LINE__)
-static OPUS_INLINE int EXTEND32_(int x, char *file, int line)
-{
- int res;
- if (!VERIFY_SHORT(x))
- {
- fprintf (stderr, "EXTEND32: input is not short: %d in %s: line %d\n", x, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = x;
- celt_mips++;
- return res;
-}
-
-#define SHR16(a, shift) SHR16_(a, shift, __FILE__, __LINE__)
-static OPUS_INLINE short SHR16_(int a, int shift, char *file, int line)
-{
- int res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(shift))
- {
- fprintf (stderr, "SHR16: inputs are not short: %d >> %d in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a>>shift;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "SHR16: output is not short: %d in %s: line %d\n", res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips++;
- return res;
-}
-#define SHL16(a, shift) SHL16_(a, shift, __FILE__, __LINE__)
-static OPUS_INLINE short SHL16_(int a, int shift, char *file, int line)
-{
- int res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(shift))
- {
- fprintf (stderr, "SHL16: inputs are not short: %d %d in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a<<shift;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "SHL16: output is not short: %d in %s: line %d\n", res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips++;
- return res;
-}
-
-static OPUS_INLINE int SHR32(opus_int64 a, int shift)
-{
- opus_int64 res;
- if (!VERIFY_INT(a) || !VERIFY_SHORT(shift))
- {
- fprintf (stderr, "SHR32: inputs are not int: %d %d\n", (int)a, shift);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a>>shift;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "SHR32: output is not int: %d\n", (int)res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=2;
- return res;
-}
-#define SHL32(a, shift) SHL32_(a, shift, __FILE__, __LINE__)
-static OPUS_INLINE int SHL32_(opus_int64 a, int shift, char *file, int line)
-{
- opus_int64 res;
- if (!VERIFY_INT(a) || !VERIFY_SHORT(shift))
- {
- fprintf (stderr, "SHL32: inputs are not int: %lld %d in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a<<shift;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "SHL32: output is not int: %lld<<%d = %lld in %s: line %d\n", a, shift, res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=2;
- return res;
-}
-
-#define PSHR32(a,shift) (celt_mips--,SHR32(ADD32((a),(((opus_val32)(1)<<((shift))>>1))),shift))
-#define VSHR32(a, shift) (((shift)>0) ? SHR32(a, shift) : SHL32(a, -(shift)))
-
-#define ROUND16(x,a) (celt_mips--,EXTRACT16(PSHR32((x),(a))))
-#define HALF16(x) (SHR16(x,1))
-#define HALF32(x) (SHR32(x,1))
-
-//#define SHR(a,shift) ((a) >> (shift))
-//#define SHL(a,shift) ((a) << (shift))
-
-#define ADD16(a, b) ADD16_(a, b, __FILE__, __LINE__)
-static OPUS_INLINE short ADD16_(int a, int b, char *file, int line)
-{
- int res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "ADD16: inputs are not short: %d %d in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a+b;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "ADD16: output is not short: %d+%d=%d in %s: line %d\n", a,b,res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips++;
- return res;
-}
-
-#define SUB16(a, b) SUB16_(a, b, __FILE__, __LINE__)
-static OPUS_INLINE short SUB16_(int a, int b, char *file, int line)
-{
- int res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "SUB16: inputs are not short: %d %d in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a-b;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "SUB16: output is not short: %d in %s: line %d\n", res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips++;
- return res;
-}
-
-#define ADD32(a, b) ADD32_(a, b, __FILE__, __LINE__)
-static OPUS_INLINE int ADD32_(opus_int64 a, opus_int64 b, char *file, int line)
-{
- opus_int64 res;
- if (!VERIFY_INT(a) || !VERIFY_INT(b))
- {
- fprintf (stderr, "ADD32: inputs are not int: %d %d in %s: line %d\n", (int)a, (int)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a+b;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "ADD32: output is not int: %d in %s: line %d\n", (int)res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=2;
- return res;
-}
-
-#define SUB32(a, b) SUB32_(a, b, __FILE__, __LINE__)
-static OPUS_INLINE int SUB32_(opus_int64 a, opus_int64 b, char *file, int line)
-{
- opus_int64 res;
- if (!VERIFY_INT(a) || !VERIFY_INT(b))
- {
- fprintf (stderr, "SUB32: inputs are not int: %d %d in %s: line %d\n", (int)a, (int)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a-b;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "SUB32: output is not int: %d in %s: line %d\n", (int)res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=2;
- return res;
-}
-
-#undef UADD32
-#define UADD32(a, b) UADD32_(a, b, __FILE__, __LINE__)
-static OPUS_INLINE unsigned int UADD32_(opus_uint64 a, opus_uint64 b, char *file, int line)
-{
- opus_uint64 res;
- if (!VERIFY_UINT(a) || !VERIFY_UINT(b))
- {
- fprintf (stderr, "UADD32: inputs are not uint32: %llu %llu in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a+b;
- if (!VERIFY_UINT(res))
- {
- fprintf (stderr, "UADD32: output is not uint32: %llu in %s: line %d\n", res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=2;
- return res;
-}
-
-#undef USUB32
-#define USUB32(a, b) USUB32_(a, b, __FILE__, __LINE__)
-static OPUS_INLINE unsigned int USUB32_(opus_uint64 a, opus_uint64 b, char *file, int line)
-{
- opus_uint64 res;
- if (!VERIFY_UINT(a) || !VERIFY_UINT(b))
- {
- fprintf (stderr, "USUB32: inputs are not uint32: %llu %llu in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- if (a<b)
- {
- fprintf (stderr, "USUB32: inputs underflow: %llu < %llu in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a-b;
- if (!VERIFY_UINT(res))
- {
- fprintf (stderr, "USUB32: output is not uint32: %llu - %llu = %llu in %s: line %d\n", a, b, res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=2;
- return res;
-}
-
-/* result fits in 16 bits */
-static OPUS_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);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a*b;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "MULT16_16_16: output is not short: %d\n", res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips++;
- return res;
-}
-
-#define MULT16_16(a, b) MULT16_16_(a, b, __FILE__, __LINE__)
-static OPUS_INLINE int MULT16_16_(int a, int b, char *file, int line)
-{
- opus_int64 res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "MULT16_16: inputs are not short: %d %d in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = ((opus_int64)a)*b;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "MULT16_16: output is not int: %d in %s: line %d\n", (int)res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips++;
- return res;
-}
-
-#define MAC16_16(c,a,b) (celt_mips-=2,ADD32((c),MULT16_16((a),(b))))
-
-#define MULT16_32_QX(a, b, Q) MULT16_32_QX_(a, b, Q, __FILE__, __LINE__)
-static OPUS_INLINE int MULT16_32_QX_(int a, opus_int64 b, int Q, char *file, int line)
-{
- opus_int64 res;
- if (!VERIFY_SHORT(a) || !VERIFY_INT(b))
- {
- fprintf (stderr, "MULT16_32_Q%d: inputs are not short+int: %d %d in %s: line %d\n", Q, (int)a, (int)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- if (ABS32(b)>=((opus_val32)(1)<<(15+Q)))
- {
- fprintf (stderr, "MULT16_32_Q%d: second operand too large: %d %d in %s: line %d\n", Q, (int)a, (int)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = (((opus_int64)a)*(opus_int64)b) >> Q;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "MULT16_32_Q%d: output is not int: %d*%d=%d in %s: line %d\n", Q, (int)a, (int)b,(int)res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- if (Q==15)
- celt_mips+=3;
- else
- celt_mips+=4;
- return res;
-}
-
-#define MULT16_32_PX(a, b, Q) MULT16_32_PX_(a, b, Q, __FILE__, __LINE__)
-static OPUS_INLINE int MULT16_32_PX_(int a, opus_int64 b, int Q, char *file, int line)
-{
- opus_int64 res;
- if (!VERIFY_SHORT(a) || !VERIFY_INT(b))
- {
- fprintf (stderr, "MULT16_32_P%d: inputs are not short+int: %d %d in %s: line %d\n\n", Q, (int)a, (int)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- if (ABS32(b)>=((opus_int64)(1)<<(15+Q)))
- {
- fprintf (stderr, "MULT16_32_Q%d: second operand too large: %d %d in %s: line %d\n\n", Q, (int)a, (int)b,file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = ((((opus_int64)a)*(opus_int64)b) + (((opus_val32)(1)<<Q)>>1))>> Q;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "MULT16_32_P%d: output is not int: %d*%d=%d in %s: line %d\n\n", Q, (int)a, (int)b,(int)res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- if (Q==15)
- celt_mips+=4;
- else
- celt_mips+=5;
- return res;
-}
-
-#define MULT16_32_Q15(a,b) MULT16_32_QX(a,b,15)
-#define MAC16_32_Q15(c,a,b) (celt_mips-=2,ADD32((c),MULT16_32_Q15((a),(b))))
-#define MAC16_32_Q16(c,a,b) (celt_mips-=2,ADD32((c),MULT16_32_Q16((a),(b))))
-
-static OPUS_INLINE int SATURATE(int a, int b)
-{
- if (a>b)
- a=b;
- if (a<-b)
- a = -b;
- celt_mips+=3;
- return a;
-}
-
-static OPUS_INLINE opus_int16 SATURATE16(opus_int32 a)
-{
- celt_mips+=3;
- if (a>32767)
- return 32767;
- else if (a<-32768)
- return -32768;
- else return a;
-}
-
-static OPUS_INLINE int MULT16_16_Q11_32(int a, int b)
-{
- opus_int64 res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "MULT16_16_Q11: inputs are not short: %d %d\n", a, b);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = ((opus_int64)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);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=3;
- return res;
-}
-static OPUS_INLINE short MULT16_16_Q13(int a, int b)
-{
- opus_int64 res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "MULT16_16_Q13: inputs are not short: %d %d\n", a, b);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = ((opus_int64)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);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=3;
- return res;
-}
-static OPUS_INLINE short MULT16_16_Q14(int a, int b)
-{
- opus_int64 res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "MULT16_16_Q14: inputs are not short: %d %d\n", a, b);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = ((opus_int64)a)*b;
- res >>= 14;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "MULT16_16_Q14: output is not short: %d\n", (int)res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=3;
- return res;
-}
-
-#define MULT16_16_Q15(a, b) MULT16_16_Q15_(a, b, __FILE__, __LINE__)
-static OPUS_INLINE short MULT16_16_Q15_(int a, int b, char *file, int line)
-{
- opus_int64 res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "MULT16_16_Q15: inputs are not short: %d %d in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = ((opus_int64)a)*b;
- res >>= 15;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "MULT16_16_Q15: output is not short: %d in %s: line %d\n", (int)res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=1;
- return res;
-}
-
-static OPUS_INLINE short MULT16_16_P13(int a, int b)
-{
- opus_int64 res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "MULT16_16_P13: inputs are not short: %d %d\n", a, b);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = ((opus_int64)a)*b;
- res += 4096;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "MULT16_16_P13: overflow: %d*%d=%d\n", a, b, (int)res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res >>= 13;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "MULT16_16_P13: output is not short: %d*%d=%d\n", a, b, (int)res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=4;
- return res;
-}
-static OPUS_INLINE short MULT16_16_P14(int a, int b)
-{
- opus_int64 res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "MULT16_16_P14: inputs are not short: %d %d\n", a, b);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = ((opus_int64)a)*b;
- res += 8192;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "MULT16_16_P14: overflow: %d*%d=%d\n", a, b, (int)res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res >>= 14;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "MULT16_16_P14: output is not short: %d*%d=%d\n", a, b, (int)res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=4;
- return res;
-}
-static OPUS_INLINE short MULT16_16_P15(int a, int b)
-{
- opus_int64 res;
- if (!VERIFY_SHORT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "MULT16_16_P15: inputs are not short: %d %d\n", a, b);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = ((opus_int64)a)*b;
- res += 16384;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "MULT16_16_P15: overflow: %d*%d=%d\n", a, b, (int)res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res >>= 15;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "MULT16_16_P15: output is not short: %d*%d=%d\n", a, b, (int)res);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=2;
- return res;
-}
-
-#define DIV32_16(a, b) DIV32_16_(a, b, __FILE__, __LINE__)
-
-static OPUS_INLINE int DIV32_16_(opus_int64 a, opus_int64 b, char *file, int line)
-{
- opus_int64 res;
- if (b==0)
- {
- fprintf(stderr, "DIV32_16: divide by zero: %d/%d in %s: line %d\n", (int)a, (int)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- return 0;
- }
- if (!VERIFY_INT(a) || !VERIFY_SHORT(b))
- {
- fprintf (stderr, "DIV32_16: inputs are not int/short: %d %d in %s: line %d\n", (int)a, (int)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a/b;
- if (!VERIFY_SHORT(res))
- {
- fprintf (stderr, "DIV32_16: output is not short: %d / %d = %d in %s: line %d\n", (int)a,(int)b,(int)res, file, line);
- if (res>32767)
- res = 32767;
- if (res<-32768)
- res = -32768;
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=35;
- return res;
-}
-
-#define DIV32(a, b) DIV32_(a, b, __FILE__, __LINE__)
-static OPUS_INLINE int DIV32_(opus_int64 a, opus_int64 b, char *file, int line)
-{
- opus_int64 res;
- if (b==0)
- {
- fprintf(stderr, "DIV32: divide by zero: %d/%d in %s: line %d\n", (int)a, (int)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- return 0;
- }
-
- if (!VERIFY_INT(a) || !VERIFY_INT(b))
- {
- fprintf (stderr, "DIV32: inputs are not int/short: %d %d in %s: line %d\n", (int)a, (int)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- res = a/b;
- if (!VERIFY_INT(res))
- {
- fprintf (stderr, "DIV32: output is not int: %d in %s: line %d\n", (int)res, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- celt_assert(0);
-#endif
- }
- celt_mips+=70;
- return res;
-}
-
-static OPUS_INLINE opus_val16 SIG2WORD16_generic(celt_sig x)
-{
- x = PSHR32(x, SIG_SHIFT);
- x = MAX32(x, -32768);
- x = MIN32(x, 32767);
- return EXTRACT16(x);
-}
-#define SIG2WORD16(x) (SIG2WORD16_generic(x))
-
-
-#undef PRINT_MIPS
-#define PRINT_MIPS(file) do {fprintf (file, "total complexity = %llu MIPS\n", celt_mips);} while (0);
-
-#endif
diff --git a/drivers/opus/celt/fixed_generic.h b/drivers/opus/celt/fixed_generic.h
deleted file mode 100644
index 71ab048e4a..0000000000
--- a/drivers/opus/celt/fixed_generic.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/* Copyright (C) 2007-2009 Xiph.Org Foundation
- Copyright (C) 2003-2008 Jean-Marc Valin
- Copyright (C) 2007-2008 CSIRO */
-/**
- @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.
-
- 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 FIXED_GENERIC_H
-#define FIXED_GENERIC_H
-
-/** Multiply a 16-bit signed value by a 16-bit unsigned value. The result is a 32-bit signed value */
-#define MULT16_16SU(a,b) ((opus_val32)(opus_val16)(a)*(opus_val32)(opus_uint16)(b))
-
-/** 16x32 multiplication, followed by a 16-bit shift right. Results fits in 32 bits */
-#define MULT16_32_Q16(a,b) ADD32(MULT16_16((a),SHR((b),16)), SHR(MULT16_16SU((a),((b)&0x0000ffff)),16))
-
-/** 16x32 multiplication, followed by a 16-bit shift right (round-to-nearest). Results fits in 32 bits */
-#define MULT16_32_P16(a,b) ADD32(MULT16_16((a),SHR((b),16)), PSHR(MULT16_16SU((a),((b)&0x0000ffff)),16))
-
-/** 16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits */
-#define MULT16_32_Q15(a,b) ADD32(SHL(MULT16_16((a),SHR((b),16)),1), SHR(MULT16_16SU((a),((b)&0x0000ffff)),15))
-
-/** 32x32 multiplication, followed by a 31-bit shift right. Results fits in 32 bits */
-#define MULT32_32_Q31(a,b) ADD32(ADD32(SHL(MULT16_16(SHR((a),16),SHR((b),16)),1), SHR(MULT16_16SU(SHR((a),16),((b)&0x0000ffff)),15)), SHR(MULT16_16SU(SHR((b),16),((a)&0x0000ffff)),15))
-
-/** Compile-time conversion of float constant to 16-bit value */
-#define QCONST16(x,bits) ((opus_val16)(.5+(x)*(((opus_val32)1)<<(bits))))
-
-/** Compile-time conversion of float constant to 32-bit value */
-#define QCONST32(x,bits) ((opus_val32)(.5+(x)*(((opus_val32)1)<<(bits))))
-
-/** Negate a 16-bit value */
-#define NEG16(x) (-(x))
-/** Negate a 32-bit value */
-#define NEG32(x) (-(x))
-
-/** Change a 32-bit value into a 16-bit value. The value is assumed to fit in 16-bit, otherwise the result is undefined */
-#define EXTRACT16(x) ((opus_val16)(x))
-/** Change a 16-bit value into a 32-bit value */
-#define EXTEND32(x) ((opus_val32)(x))
-
-/** Arithmetic shift-right of a 16-bit value */
-#define SHR16(a,shift) ((a) >> (shift))
-/** Arithmetic shift-left of a 16-bit value */
-#define SHL16(a,shift) ((opus_int16)((opus_uint16)(a)<<(shift)))
-/** Arithmetic shift-right of a 32-bit value */
-#define SHR32(a,shift) ((a) >> (shift))
-/** Arithmetic shift-left of a 32-bit value */
-#define SHL32(a,shift) ((opus_int32)((opus_uint32)(a)<<(shift)))
-
-/** 32-bit arithmetic shift right with rounding-to-nearest instead of rounding down */
-#define PSHR32(a,shift) (SHR32((a)+((EXTEND32(1)<<((shift))>>1)),shift))
-/** 32-bit arithmetic shift right where the argument can be negative */
-#define VSHR32(a, shift) (((shift)>0) ? SHR32(a, shift) : SHL32(a, -(shift)))
-
-/** "RAW" macros, should not be used outside of this header file */
-#define SHR(a,shift) ((a) >> (shift))
-#define SHL(a,shift) SHL32(a,shift)
-#define PSHR(a,shift) (SHR((a)+((EXTEND32(1)<<((shift))>>1)),shift))
-#define SATURATE(x,a) (((x)>(a) ? (a) : (x)<-(a) ? -(a) : (x)))
-
-#define SATURATE16(x) (EXTRACT16((x)>32767 ? 32767 : (x)<-32768 ? -32768 : (x)))
-
-/** Shift by a and round-to-neareast 32-bit value. Result is a 16-bit value */
-#define ROUND16(x,a) (EXTRACT16(PSHR32((x),(a))))
-/** Divide by two */
-#define HALF16(x) (SHR16(x,1))
-#define HALF32(x) (SHR32(x,1))
-
-/** Add two 16-bit values */
-#define ADD16(a,b) ((opus_val16)((opus_val16)(a)+(opus_val16)(b)))
-/** Subtract two 16-bit values */
-#define SUB16(a,b) ((opus_val16)(a)-(opus_val16)(b))
-/** Add two 32-bit values */
-#define ADD32(a,b) ((opus_val32)(a)+(opus_val32)(b))
-/** Subtract two 32-bit values */
-#define SUB32(a,b) ((opus_val32)(a)-(opus_val32)(b))
-
-/** 16x16 multiplication where the result fits in 16 bits */
-#define MULT16_16_16(a,b) ((((opus_val16)(a))*((opus_val16)(b))))
-
-/* (opus_val32)(opus_val16) gives TI compiler a hint that it's 16x16->32 multiply */
-/** 16x16 multiplication where the result fits in 32 bits */
-#define MULT16_16(a,b) (((opus_val32)(opus_val16)(a))*((opus_val32)(opus_val16)(b)))
-
-/** 16x16 multiply-add where the result fits in 32 bits */
-#define MAC16_16(c,a,b) (ADD32((c),MULT16_16((a),(b))))
-/** 16x32 multiply, followed by a 15-bit shift right and 32-bit add.
- b must fit in 31 bits.
- Result fits in 32 bits. */
-#define MAC16_32_Q15(c,a,b) ADD32((c),ADD32(MULT16_16((a),SHR((b),15)), SHR(MULT16_16((a),((b)&0x00007fff)),15)))
-
-/** 16x32 multiplication, followed by a 16-bit shift right and 32-bit add.
- Results fits in 32 bits */
-#define MAC16_32_Q16(c,a,b) ADD32((c),ADD32(MULT16_16((a),SHR((b),16)), SHR(MULT16_16SU((a),((b)&0x0000ffff)),16)))
-
-#define MULT16_16_Q11_32(a,b) (SHR(MULT16_16((a),(b)),11))
-#define MULT16_16_Q11(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))
-
-/** Divide a 32-bit value by a 16-bit value. Result fits in 16 bits */
-#define DIV32_16(a,b) ((opus_val16)(((opus_val32)(a))/((opus_val16)(b))))
-
-/** Divide a 32-bit value by a 32-bit value. Result fits in 32 bits */
-#define DIV32(a,b) (((opus_val32)(a))/((opus_val32)(b)))
-
-#if defined(MIPSr1_ASM)
-#include "opus/celt/mips/fixed_generic_mipsr1.h"
-#endif
-
-static OPUS_INLINE opus_val16 SIG2WORD16_generic(celt_sig x)
-{
- x = PSHR32(x, SIG_SHIFT);
- x = MAX32(x, -32768);
- x = MIN32(x, 32767);
- return EXTRACT16(x);
-}
-#define SIG2WORD16(x) (SIG2WORD16_generic(x))
-
-#endif
diff --git a/drivers/opus/celt/float_cast.h b/drivers/opus/celt/float_cast.h
deleted file mode 100644
index 36a1bfe671..0000000000
--- a/drivers/opus/celt/float_cast.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Copyright (C) 2001 Erik de Castro Lopo <erikd AT mega-nerd DOT com> */
-/*
- 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.
-
- 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.
-*/
-
-/* Version 1.1 */
-
-#ifndef FLOAT_CAST_H
-#define FLOAT_CAST_H
-
-
-#include "opus/celt/arch.h"
-
-/*============================================================================
-** On Intel Pentium processors (especially PIII and probably P4), converting
-** from float to int is very slow. To meet the C specs, the code produced by
-** most C compilers targeting Pentium needs to change the FPU rounding mode
-** before the float to int conversion is performed.
-**
-** Changing the FPU rounding mode causes the FPU pipeline to be flushed. It
-** is this flushing of the pipeline which is so slow.
-**
-** Fortunately the ISO C99 specifications define the functions lrint, lrintf,
-** llrint and llrintf which fix this problem as a side effect.
-**
-** On Unix-like systems, the configure process should have detected the
-** presence of these functions. If they weren't found we have to replace them
-** here with a standard C cast.
-*/
-
-/*
-** The C99 prototypes for lrint and lrintf are as follows:
-**
-** long int lrintf (float x) ;
-** long int lrint (double x) ;
-*/
-
-/* The presence of the required functions are detected during the configure
-** process and the values HAVE_LRINT and HAVE_LRINTF are set accordingly in
-** the config.h file.
-*/
-
-#if (HAVE_LRINTF)
-
-/* These defines enable functionality introduced with the 1999 ISO C
-** standard. They must be defined before the inclusion of math.h to
-** engage them. If optimisation is enabled, these functions will be
-** inlined. With optimisation switched off, you have to link in the
-** maths library using -lm.
-*/
-
-#define _ISOC9X_SOURCE 1
-#define _ISOC99_SOURCE 1
-
-#define __USE_ISOC9X 1
-#define __USE_ISOC99 1
-
-#include <math.h>
-#define float2int(x) lrintf(x)
-
-#elif (defined(HAVE_LRINT))
-
-#define _ISOC9X_SOURCE 1
-#define _ISOC99_SOURCE 1
-
-#define __USE_ISOC9X 1
-#define __USE_ISOC99 1
-
-#include <math.h>
-#define float2int(x) lrint(x)
-
-#elif (defined(_MSC_VER) && _MSC_VER >= 1400) && defined (_M_X64)
- #include <xmmintrin.h>
-
- __inline long int float2int(float value)
- {
- return _mm_cvtss_si32(_mm_load_ss(&value));
- }
-#elif (defined(_MSC_VER) && _MSC_VER >= 1400) && defined (_M_IX86)
- #include <math.h>
-
- /* Win32 doesn't seem to have these functions.
- ** Therefore implement OPUS_INLINE versions of these functions here.
- */
-
- __inline long int
- float2int (float flt)
- { int intgr;
-
- _asm
- { fld flt
- fistp intgr
- } ;
-
- return intgr ;
- }
-
-#else
-
-#if (defined(__GNUC__) && defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L)
- /* supported by gcc in C99 mode, but not by all other compilers */
- #warning "Don't have the functions lrint() and lrintf ()."
- #warning "Replacing these functions with a standard C cast."
-#endif /* __STDC_VERSION__ >= 199901L */
- #include <math.h>
- #define float2int(flt) ((int)(floor(.5+flt)))
-#endif
-
-#ifndef DISABLE_FLOAT_API
-static OPUS_INLINE opus_int16 FLOAT2INT16(float x)
-{
- x = x*CELT_SIG_SCALE;
- x = MAX32(x, -32768);
- x = MIN32(x, 32767);
- return (opus_int16)float2int(x);
-}
-#endif /* DISABLE_FLOAT_API */
-
-#endif /* FLOAT_CAST_H */
diff --git a/drivers/opus/celt/kiss_fft.c b/drivers/opus/celt/kiss_fft.c
deleted file mode 100644
index cf8d049fa1..0000000000
--- a/drivers/opus/celt/kiss_fft.c
+++ /dev/null
@@ -1,602 +0,0 @@
-/*Copyright (c) 2003-2004, Mark Borgerding
- Lots of modifications by Jean-Marc Valin
- Copyright (c) 2005-2007, Xiph.Org Foundation
- Copyright (c) 2008, Xiph.Org Foundation, CSIRO
-
- 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.
-
- 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 code is originally from Mark Borgerding's KISS-FFT but has been
- heavily modified to better suit Opus */
-
-#ifndef SKIP_CONFIG_H
-#include "opus/opus_config.h"
-#endif
-
-#include "opus/celt/_kiss_fft_guts.h"
-#include "opus/celt/arch.h"
-#include "opus/celt/os_support.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/stack_alloc.h"
-
-/* The guts header contains all the multiplication and addition macros that are defined for
- complex numbers. It also delares the kf_ internal functions.
-*/
-
-static void kf_bfly2(
- kiss_fft_cpx * Fout,
- int m,
- int N
- )
-{
- kiss_fft_cpx * Fout2;
- int i;
- (void)m;
-#ifdef CUSTOM_MODES
- if (m==1)
- {
- celt_assert(m==1);
- for (i=0;i<N;i++)
- {
- kiss_fft_cpx t;
- Fout2 = Fout + 1;
- t = *Fout2;
- C_SUB( *Fout2 , *Fout , t );
- C_ADDTO( *Fout , t );
- Fout += 2;
- }
- } else
-#endif
- {
- opus_val16 tw;
- tw = QCONST16(0.7071067812f, 15);
- /* We know that m==4 here because the radix-2 is just after a radix-4 */
- celt_assert(m==4);
- for (i=0;i<N;i++)
- {
- kiss_fft_cpx t;
- Fout2 = Fout + 4;
- t = Fout2[0];
- C_SUB( Fout2[0] , Fout[0] , t );
- C_ADDTO( Fout[0] , t );
-
- t.r = S_MUL(Fout2[1].r+Fout2[1].i, tw);
- t.i = S_MUL(Fout2[1].i-Fout2[1].r, tw);
- C_SUB( Fout2[1] , Fout[1] , t );
- C_ADDTO( Fout[1] , t );
-
- t.r = Fout2[2].i;
- t.i = -Fout2[2].r;
- C_SUB( Fout2[2] , Fout[2] , t );
- C_ADDTO( Fout[2] , t );
-
- t.r = S_MUL(Fout2[3].i-Fout2[3].r, tw);
- t.i = S_MUL(-Fout2[3].i-Fout2[3].r, tw);
- C_SUB( Fout2[3] , Fout[3] , t );
- C_ADDTO( Fout[3] , t );
- Fout += 8;
- }
- }
-}
-
-static void kf_bfly4(
- kiss_fft_cpx * Fout,
- const size_t fstride,
- const kiss_fft_state *st,
- int m,
- int N,
- int mm
- )
-{
- int i;
-
- if (m==1)
- {
- /* Degenerate case where all the twiddles are 1. */
- for (i=0;i<N;i++)
- {
- kiss_fft_cpx scratch0, scratch1;
-
- C_SUB( scratch0 , *Fout, Fout[2] );
- C_ADDTO(*Fout, Fout[2]);
- C_ADD( scratch1 , Fout[1] , Fout[3] );
- C_SUB( Fout[2], *Fout, scratch1 );
- C_ADDTO( *Fout , scratch1 );
- C_SUB( scratch1 , Fout[1] , Fout[3] );
-
- Fout[1].r = scratch0.r + scratch1.i;
- Fout[1].i = scratch0.i - scratch1.r;
- Fout[3].r = scratch0.r - scratch1.i;
- Fout[3].i = scratch0.i + scratch1.r;
- Fout+=4;
- }
- } else {
- int j;
- kiss_fft_cpx scratch[6];
- const kiss_twiddle_cpx *tw1,*tw2,*tw3;
- const int m2=2*m;
- const int m3=3*m;
- kiss_fft_cpx * Fout_beg = Fout;
- for (i=0;i<N;i++)
- {
- Fout = Fout_beg + i*mm;
- tw3 = tw2 = tw1 = st->twiddles;
- /* m is guaranteed to be a multiple of 4. */
- for (j=0;j<m;j++)
- {
- 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;
- }
- }
- }
-}
-
-
-#ifndef RADIX_TWO_ONLY
-
-static void kf_bfly3(
- kiss_fft_cpx * Fout,
- const size_t fstride,
- const kiss_fft_state *st,
- int m,
- int N,
- int mm
- )
-{
- int i;
- size_t k;
- const size_t m2 = 2*m;
- const kiss_twiddle_cpx *tw1,*tw2;
- kiss_fft_cpx scratch[5];
- kiss_twiddle_cpx epi3;
-
- kiss_fft_cpx * Fout_beg = Fout;
-#ifdef OPUS_FIXED_POINT
- epi3.r = -16384;
- epi3.i = -28378;
-#else
- epi3 = st->twiddles[fstride*m];
-#endif
- for (i=0;i<N;i++)
- {
- Fout = Fout_beg + i*mm;
- tw1=tw2=st->twiddles;
- /* For non-custom modes, m is guaranteed to be a multiple of 4. */
- k=m;
- do {
-
- 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);
- }
-}
-
-
-#ifndef OVERRIDE_kf_bfly5
-static void kf_bfly5(
- kiss_fft_cpx * Fout,
- const size_t fstride,
- const kiss_fft_state *st,
- int m,
- int N,
- int mm
- )
-{
- kiss_fft_cpx *Fout0,*Fout1,*Fout2,*Fout3,*Fout4;
- int i, u;
- kiss_fft_cpx scratch[13];
- const kiss_twiddle_cpx *tw;
- kiss_twiddle_cpx ya,yb;
- kiss_fft_cpx * Fout_beg = Fout;
-
-#ifdef OPUS_FIXED_POINT
- ya.r = 10126;
- ya.i = -31164;
- yb.r = -26510;
- yb.i = -19261;
-#else
- ya = st->twiddles[fstride*m];
- yb = st->twiddles[fstride*2*m];
-#endif
- tw=st->twiddles;
-
- for (i=0;i<N;i++)
- {
- Fout = Fout_beg + i*mm;
- Fout0=Fout;
- Fout1=Fout0+m;
- Fout2=Fout0+2*m;
- Fout3=Fout0+3*m;
- Fout4=Fout0+4*m;
-
- /* For non-custom modes, m is guaranteed to be a multiple of 4. */
- for ( u=0; u<m; ++u ) {
- 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;
- }
- }
-}
-#endif /* OVERRIDE_kf_bfly5 */
-
-
-#endif
-
-
-#ifdef CUSTOM_MODES
-
-static
-void compute_bitrev_table(
- int Fout,
- opus_int16 *f,
- const size_t fstride,
- int in_stride,
- opus_int16 * factors,
- const kiss_fft_state *st
- )
-{
- const int p=*factors++; /* the radix */
- const int m=*factors++; /* stage's fft length/p */
-
- /*printf ("fft %d %d %d %d %d %d\n", p*m, m, p, s2, fstride*in_stride, N);*/
- if (m==1)
- {
- int j;
- for (j=0;j<p;j++)
- {
- *f = Fout+j;
- f += fstride*in_stride;
- }
- } else {
- int j;
- for (j=0;j<p;j++)
- {
- compute_bitrev_table( Fout , f, fstride*p, in_stride, factors,st);
- f += fstride*in_stride;
- Fout += m;
- }
- }
-}
-
-/* facbuf is populated by p1,m1,p2,m2, ...
- where
- p[i] * m[i] = m[i-1]
- m0 = n */
-static
-int kf_factor(int n,opus_int16 * facbuf)
-{
- int p=4;
- int i;
- int stages=0;
- int nbak = 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>32000 || (opus_int32)p*(opus_int32)p > n)
- p = n; /* no more factors, skip to end */
- }
- n /= p;
-#ifdef RADIX_TWO_ONLY
- if (p!=2 && p != 4)
-#else
- if (p>5)
-#endif
- {
- return 0;
- }
- facbuf[2*stages] = p;
- if (p==2 && stages > 1)
- {
- facbuf[2*stages] = 4;
- facbuf[2] = 2;
- }
- stages++;
- } while (n > 1);
- n = nbak;
- /* Reverse the order to get the radix 4 at the end, so we can use the
- fast degenerate case. It turns out that reversing the order also
- improves the noise behaviour. */
- for (i=0;i<stages/2;i++)
- {
- int tmp;
- tmp = facbuf[2*i];
- facbuf[2*i] = facbuf[2*(stages-i-1)];
- facbuf[2*(stages-i-1)] = tmp;
- }
- for (i=0;i<stages;i++)
- {
- n /= facbuf[2*i];
- facbuf[2*i+1] = n;
- }
- return 1;
-}
-
-static void compute_twiddles(kiss_twiddle_cpx *twiddles, int nfft)
-{
- int i;
-#ifdef OPUS_FIXED_POINT
- for (i=0;i<nfft;++i) {
- opus_val32 phase = -i;
- kf_cexp2(twiddles+i, DIV32(SHL32(phase,17),nfft));
- }
-#else
- for (i=0;i<nfft;++i) {
- const double pi=3.14159265358979323846264338327;
- double phase = ( -2*pi /nfft ) * i;
- kf_cexp(twiddles+i, phase );
- }
-#endif
-}
-
-int opus_fft_alloc_arch_c(kiss_fft_state *st) {
- (void)st;
- return 0;
-}
-
-/*
- *
- * Allocates all necessary storage space for the fft and ifft.
- * The return value is a contiguous block of memory. As such,
- * It can be freed with free().
- * */
-kiss_fft_state *opus_fft_alloc_twiddles(int nfft,void * mem,size_t * lenmem,
- const kiss_fft_state *base, int arch)
-{
- kiss_fft_state *st=NULL;
- size_t memneeded = sizeof(struct kiss_fft_state); /* twiddle factors*/
-
- if ( lenmem==NULL ) {
- st = ( kiss_fft_state*)KISS_FFT_MALLOC( memneeded );
- }else{
- if (mem != NULL && *lenmem >= memneeded)
- st = (kiss_fft_state*)mem;
- *lenmem = memneeded;
- }
- if (st) {
- opus_int16 *bitrev;
- kiss_twiddle_cpx *twiddles;
-
- st->nfft=nfft;
-#ifdef OPUS_FIXED_POINT
- st->scale_shift = celt_ilog2(st->nfft);
- if (st->nfft == 1<<st->scale_shift)
- st->scale = Q15ONE;
- else
- st->scale = (1073741824+st->nfft/2)/st->nfft>>(15-st->scale_shift);
-#else
- st->scale = 1.f/nfft;
-#endif
- if (base != NULL)
- {
- st->twiddles = base->twiddles;
- st->shift = 0;
- while (st->shift < 32 && nfft<<st->shift != base->nfft)
- st->shift++;
- if (st->shift>=32)
- goto fail;
- } else {
- st->twiddles = twiddles = (kiss_twiddle_cpx*)KISS_FFT_MALLOC(sizeof(kiss_twiddle_cpx)*nfft);
- compute_twiddles(twiddles, nfft);
- st->shift = -1;
- }
- if (!kf_factor(nfft,st->factors))
- {
- goto fail;
- }
-
- /* bitrev */
- st->bitrev = bitrev = (opus_int16*)KISS_FFT_MALLOC(sizeof(opus_int16)*nfft);
- if (st->bitrev==NULL)
- goto fail;
- compute_bitrev_table(0, bitrev, 1,1, st->factors,st);
-
- /* Initialize architecture specific fft parameters */
- if (opus_fft_alloc_arch(st, arch))
- goto fail;
- }
- return st;
-fail:
- opus_fft_free(st, arch);
- return NULL;
-}
-
-kiss_fft_state *opus_fft_alloc(int nfft,void * mem,size_t * lenmem, int arch)
-{
- return opus_fft_alloc_twiddles(nfft, mem, lenmem, NULL, arch);
-}
-
-void opus_fft_free_arch_c(kiss_fft_state *st) {
- (void)st;
-}
-
-void opus_fft_free(const kiss_fft_state *cfg, int arch)
-{
- if (cfg)
- {
- opus_fft_free_arch((kiss_fft_state *)cfg, arch);
- opus_free((opus_int16*)cfg->bitrev);
- if (cfg->shift < 0)
- opus_free((kiss_twiddle_cpx*)cfg->twiddles);
- opus_free((kiss_fft_state*)cfg);
- }
-}
-
-#endif /* CUSTOM_MODES */
-
-void opus_fft_impl(const kiss_fft_state *st,kiss_fft_cpx *fout)
-{
- int m2, m;
- int p;
- int L;
- int fstride[MAXFACTORS];
- int i;
- int shift;
-
- /* st->shift can be -1 */
- shift = st->shift>0 ? st->shift : 0;
-
- fstride[0] = 1;
- L=0;
- do {
- p = st->factors[2*L];
- m = st->factors[2*L+1];
- fstride[L+1] = fstride[L]*p;
- L++;
- } while(m!=1);
- m = st->factors[2*L-1];
- for (i=L-1;i>=0;i--)
- {
- if (i!=0)
- m2 = st->factors[2*i-1];
- else
- m2 = 1;
- switch (st->factors[2*i])
- {
- case 2:
- kf_bfly2(fout, m, fstride[i]);
- break;
- case 4:
- kf_bfly4(fout,fstride[i]<<shift,st,m, fstride[i], m2);
- break;
- #ifndef RADIX_TWO_ONLY
- case 3:
- kf_bfly3(fout,fstride[i]<<shift,st,m, fstride[i], m2);
- break;
- case 5:
- kf_bfly5(fout,fstride[i]<<shift,st,m, fstride[i], m2);
- break;
- #endif
- }
- m = m2;
- }
-}
-
-void opus_fft_c(const kiss_fft_state *st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout)
-{
- int i;
- opus_val16 scale;
-#ifdef OPUS_FIXED_POINT
- /* Allows us to scale with MULT16_32_Q16(), which is faster than
- MULT16_32_Q15() on ARM. */
- int scale_shift = st->scale_shift-1;
-#endif
- scale = st->scale;
-
- celt_assert2 (fin != fout, "In-place FFT not supported");
- /* Bit-reverse the input */
- for (i=0;i<st->nfft;i++)
- {
- kiss_fft_cpx x = fin[i];
- fout[st->bitrev[i]].r = SHR32(MULT16_32_Q16(scale, x.r), scale_shift);
- fout[st->bitrev[i]].i = SHR32(MULT16_32_Q16(scale, x.i), scale_shift);
- }
- opus_fft_impl(st, fout);
-}
-
-
-void opus_ifft_c(const kiss_fft_state *st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout)
-{
- int i;
- celt_assert2 (fin != fout, "In-place FFT not supported");
- /* Bit-reverse the input */
- for (i=0;i<st->nfft;i++)
- fout[st->bitrev[i]] = fin[i];
- for (i=0;i<st->nfft;i++)
- fout[i].i = -fout[i].i;
- opus_fft_impl(st, fout);
- for (i=0;i<st->nfft;i++)
- fout[i].i = -fout[i].i;
-}
diff --git a/drivers/opus/celt/kiss_fft.h b/drivers/opus/celt/kiss_fft.h
deleted file mode 100644
index 6229044c43..0000000000
--- a/drivers/opus/celt/kiss_fft.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*Copyright (c) 2003-2004, Mark Borgerding
- Lots of modifications by Jean-Marc Valin
- Copyright (c) 2005-2007, Xiph.Org Foundation
- Copyright (c) 2008, Xiph.Org Foundation, CSIRO
-
- 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.
-
- 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 KISS_FFT_H
-#define KISS_FFT_H
-
-#include <stdlib.h>
-#include <math.h>
-#include "opus/celt/arch.h"
-#include "opus/celt/cpu_support.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef USE_SIMD
-# include <xmmintrin.h>
-# define kiss_fft_scalar __m128
-#define KISS_FFT_MALLOC(nbytes) memalign(16,nbytes)
-#else
-#define KISS_FFT_MALLOC opus_alloc
-#endif
-
-#ifdef OPUS_FIXED_POINT
-#include "opus/celt/arch.h"
-
-# define kiss_fft_scalar opus_int32
-# define kiss_twiddle_scalar opus_int16
-
-
-#else
-# ifndef kiss_fft_scalar
-/* default is float */
-# define kiss_fft_scalar float
-# define kiss_twiddle_scalar float
-# define KF_SUFFIX _celt_single
-# endif
-#endif
-
-typedef struct {
- kiss_fft_scalar r;
- kiss_fft_scalar i;
-}kiss_fft_cpx;
-
-typedef struct {
- kiss_twiddle_scalar r;
- kiss_twiddle_scalar i;
-}kiss_twiddle_cpx;
-
-#define MAXFACTORS 8
-/* e.g. an fft of length 128 has 4 factors
- as far as kissfft is concerned
- 4*4*4*2
- */
-
-typedef struct arch_fft_state{
- int is_supported;
- void *priv;
-} arch_fft_state;
-
-typedef struct kiss_fft_state{
- int nfft;
- opus_val16 scale;
-#ifdef OPUS_FIXED_POINT
- int scale_shift;
-#endif
- int shift;
- opus_int16 factors[2*MAXFACTORS];
- const opus_int16 *bitrev;
- const kiss_twiddle_cpx *twiddles;
- arch_fft_state *arch_fft;
-} kiss_fft_state;
-
-#if defined(HAVE_ARM_NE10)
-#include "opus/celt/arm/fft_arm.h"
-#endif
-
-/*typedef struct kiss_fft_state* kiss_fft_cfg;*/
-
-/**
- * opus_fft_alloc
- *
- * Initialize a FFT (or IFFT) algorithm's cfg/state buffer.
- *
- * typical usage: kiss_fft_cfg mycfg=opus_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 opus_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_state *opus_fft_alloc_twiddles(int nfft,void * mem,size_t * lenmem, const kiss_fft_state *base, int arch);
-
-kiss_fft_state *opus_fft_alloc(int nfft,void * mem,size_t * lenmem, int arch);
-
-/**
- * opus_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 opus_fft_c(const kiss_fft_state *cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
-void opus_ifft_c(const kiss_fft_state *cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
-
-void opus_fft_impl(const kiss_fft_state *st,kiss_fft_cpx *fout);
-void opus_ifft_impl(const kiss_fft_state *st,kiss_fft_cpx *fout);
-
-void opus_fft_free(const kiss_fft_state *cfg, int arch);
-
-
-void opus_fft_free_arch_c(kiss_fft_state *st);
-int opus_fft_alloc_arch_c(kiss_fft_state *st);
-
-#if !defined(OVERRIDE_OPUS_FFT)
-/* Is run-time CPU detection enabled on this platform? */
-#if defined(OPUS_HAVE_RTCD) && (defined(HAVE_ARM_NE10))
-
-extern int (*const OPUS_FFT_ALLOC_ARCH_IMPL[OPUS_ARCHMASK+1])(
- kiss_fft_state *st);
-
-#define opus_fft_alloc_arch(_st, arch) \
- ((*OPUS_FFT_ALLOC_ARCH_IMPL[(arch)&OPUS_ARCHMASK])(_st))
-
-extern void (*const OPUS_FFT_FREE_ARCH_IMPL[OPUS_ARCHMASK+1])(
- kiss_fft_state *st);
-#define opus_fft_free_arch(_st, arch) \
- ((*OPUS_FFT_FREE_ARCH_IMPL[(arch)&OPUS_ARCHMASK])(_st))
-
-extern void (*const OPUS_FFT[OPUS_ARCHMASK+1])(const kiss_fft_state *cfg,
- const kiss_fft_cpx *fin, kiss_fft_cpx *fout);
-#define opus_fft(_cfg, _fin, _fout, arch) \
- ((*OPUS_FFT[(arch)&OPUS_ARCHMASK])(_cfg, _fin, _fout))
-
-extern void (*const OPUS_IFFT[OPUS_ARCHMASK+1])(const kiss_fft_state *cfg,
- const kiss_fft_cpx *fin, kiss_fft_cpx *fout);
-#define opus_ifft(_cfg, _fin, _fout, arch) \
- ((*OPUS_IFFT[(arch)&OPUS_ARCHMASK])(_cfg, _fin, _fout))
-
-#else /* else for if defined(OPUS_HAVE_RTCD) && (defined(HAVE_ARM_NE10)) */
-
-#define opus_fft_alloc_arch(_st, arch) \
- ((void)(arch), opus_fft_alloc_arch_c(_st))
-
-#define opus_fft_free_arch(_st, arch) \
- ((void)(arch), opus_fft_free_arch_c(_st))
-
-#define opus_fft(_cfg, _fin, _fout, arch) \
- ((void)(arch), opus_fft_c(_cfg, _fin, _fout))
-
-#define opus_ifft(_cfg, _fin, _fout, arch) \
- ((void)(arch), opus_ifft_c(_cfg, _fin, _fout))
-
-#endif /* end if defined(OPUS_HAVE_RTCD) && (defined(HAVE_ARM_NE10)) */
-#endif /* end if !defined(OVERRIDE_OPUS_FFT) */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/drivers/opus/celt/laplace.c b/drivers/opus/celt/laplace.c
deleted file mode 100644
index 5bc956af45..0000000000
--- a/drivers/opus/celt/laplace.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/* Copyright (c) 2007 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/laplace.h"
-#include "opus/celt/mathops.h"
-
-/* The minimum probability of an energy delta (out of 32768). */
-#define LAPLACE_LOG_MINP (0)
-#define LAPLACE_MINP (1<<LAPLACE_LOG_MINP)
-/* The minimum number of guaranteed representable energy deltas (in one
- direction). */
-#define LAPLACE_NMIN (16)
-
-/* When called, decay is positive and at most 11456. */
-static unsigned ec_laplace_get_freq1(unsigned fs0, int decay)
-{
- unsigned ft;
- ft = 32768 - LAPLACE_MINP*(2*LAPLACE_NMIN) - fs0;
- return ft*(opus_int32)(16384-decay)>>15;
-}
-
-void ec_laplace_encode(ec_enc *enc, int *value, unsigned fs, int decay)
-{
- unsigned fl;
- int val = *value;
- fl = 0;
- if (val)
- {
- int s;
- int i;
- s = -(val<0);
- val = (val+s)^s;
- fl = fs;
- fs = ec_laplace_get_freq1(fs, decay);
- /* Search the decaying part of the PDF.*/
- for (i=1; fs > 0 && i < val; i++)
- {
- fs *= 2;
- fl += fs+2*LAPLACE_MINP;
- fs = (fs*(opus_int32)decay)>>15;
- }
- /* Everything beyond that has probability LAPLACE_MINP. */
- if (!fs)
- {
- int di;
- int ndi_max;
- ndi_max = (32768-fl+LAPLACE_MINP-1)>>LAPLACE_LOG_MINP;
- ndi_max = (ndi_max-s)>>1;
- di = IMIN(val - i, ndi_max - 1);
- fl += (2*di+1+s)*LAPLACE_MINP;
- fs = IMIN(LAPLACE_MINP, 32768-fl);
- *value = (i+di+s)^s;
- }
- else
- {
- fs += LAPLACE_MINP;
- fl += fs&~s;
- }
- celt_assert(fl+fs<=32768);
- celt_assert(fs>0);
- }
- ec_encode_bin(enc, fl, fl+fs, 15);
-}
-
-int ec_laplace_decode(ec_dec *dec, unsigned fs, int decay)
-{
- int val=0;
- unsigned fl;
- unsigned fm;
- fm = ec_decode_bin(dec, 15);
- fl = 0;
- if (fm >= fs)
- {
- val++;
- fl = fs;
- fs = ec_laplace_get_freq1(fs, decay)+LAPLACE_MINP;
- /* Search the decaying part of the PDF.*/
- while(fs > LAPLACE_MINP && fm >= fl+2*fs)
- {
- fs *= 2;
- fl += fs;
- fs = ((fs-2*LAPLACE_MINP)*(opus_int32)decay)>>15;
- fs += LAPLACE_MINP;
- val++;
- }
- /* Everything beyond that has probability LAPLACE_MINP. */
- if (fs <= LAPLACE_MINP)
- {
- int di;
- di = (fm-fl)>>(LAPLACE_LOG_MINP+1);
- val += di;
- fl += 2*di*LAPLACE_MINP;
- }
- if (fm < fl+fs)
- val = -val;
- else
- fl += fs;
- }
- celt_assert(fl<32768);
- celt_assert(fs>0);
- celt_assert(fl<=fm);
- celt_assert(fm<IMIN(fl+fs,32768));
- ec_dec_update(dec, fl, IMIN(fl+fs,32768), 32768);
- return val;
-}
diff --git a/drivers/opus/celt/laplace.h b/drivers/opus/celt/laplace.h
deleted file mode 100644
index 9efcc73aa2..0000000000
--- a/drivers/opus/celt/laplace.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (c) 2007 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/celt/entenc.h"
-#include "opus/celt/entdec.h"
-
-/** Encode a value that is assumed to be the realisation of a
- Laplace-distributed random process
- @param enc Entropy encoder state
- @param value Value to encode
- @param fs Probability of 0, multiplied by 32768
- @param decay Probability of the value +/- 1, multiplied by 16384
-*/
-void ec_laplace_encode(ec_enc *enc, int *value, unsigned fs, int decay);
-
-/** Decode a value that is assumed to be the realisation of a
- Laplace-distributed random process
- @param dec Entropy decoder state
- @param fs Probability of 0, multiplied by 32768
- @param decay Probability of the value +/- 1, multiplied by 16384
- @return Value decoded
- */
-int ec_laplace_decode(ec_dec *dec, unsigned fs, int decay);
diff --git a/drivers/opus/celt/mathops.c b/drivers/opus/celt/mathops.c
deleted file mode 100644
index 3f7c1a8bdd..0000000000
--- a/drivers/opus/celt/mathops.c
+++ /dev/null
@@ -1,205 +0,0 @@
-/* Copyright (c) 2002-2008 Jean-Marc Valin
- Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/**
- @file mathops.h
- @brief Various math 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/mathops.h"
-
-/*Compute floor(sqrt(_val)) with exact arithmetic.
- This has been tested on all possible 32-bit inputs.*/
-unsigned isqrt32(opus_uint32 _val){
- unsigned b;
- unsigned g;
- int bshift;
- /*Uses the second method from
- http://www.azillionmonkeys.com/qed/sqroot.html
- The main idea is to search for the largest binary digit b such that
- (g+b)*(g+b) <= _val, and add it to the solution g.*/
- g=0;
- bshift=(EC_ILOG(_val)-1)>>1;
- b=1U<<bshift;
- do{
- opus_uint32 t;
- t=(((opus_uint32)g<<1)+b)<<bshift;
- if(t<=_val){
- g+=b;
- _val-=t;
- }
- b>>=1;
- bshift--;
- }
- while(bshift>=0);
- return g;
-}
-
-#ifdef OPUS_FIXED_POINT
-
-opus_val32 frac_div32(opus_val32 a, opus_val32 b)
-{
- opus_val16 rcp;
- opus_val32 result, rem;
- int shift = celt_ilog2(b)-29;
- a = VSHR32(a,shift);
- b = VSHR32(b,shift);
- /* 16-bit reciprocal */
- rcp = ROUND16(celt_rcp(ROUND16(b,16)),3);
- result = MULT16_32_Q15(rcp, a);
- rem = PSHR32(a,2)-MULT32_32_Q31(result, b);
- result = ADD32(result, SHL32(MULT16_32_Q15(rcp, rem),2));
- if (result >= 536870912) /* 2^29 */
- return 2147483647; /* 2^31 - 1 */
- else if (result <= -536870912) /* -2^29 */
- return -2147483647; /* -2^31 */
- else
- return SHL32(result, 2);
-}
-
-/** Reciprocal sqrt approximation in the range [0.25,1) (Q16 in, Q14 out) */
-opus_val16 celt_rsqrt_norm(opus_val32 x)
-{
- opus_val16 n;
- opus_val16 r;
- opus_val16 r2;
- opus_val16 y;
- /* Range of n is [-16384,32767] ([-0.5,1) in Q15). */
- n = x-32768;
- /* Get a rough initial guess for the root.
- The optimal minimax quadratic approximation (using relative error) is
- r = 1.437799046117536+n*(-0.823394375837328+n*0.4096419668459485).
- Coefficients here, and the final result r, are Q14.*/
- r = ADD16(23557, MULT16_16_Q15(n, ADD16(-13490, MULT16_16_Q15(n, 6713))));
- /* We want y = x*r*r-1 in Q15, but x is 32-bit Q16 and r is Q14.
- We can compute the result from n and r using Q15 multiplies with some
- adjustment, carefully done to avoid overflow.
- Range of y is [-1564,1594]. */
- r2 = MULT16_16_Q15(r, r);
- y = SHL16(SUB16(ADD16(MULT16_16_Q15(r2, n), r2), 16384), 1);
- /* Apply a 2nd-order Householder iteration: r += r*y*(y*0.375-0.5).
- This yields the Q14 reciprocal square root of the Q16 x, with a maximum
- relative error of 1.04956E-4, a (relative) RMSE of 2.80979E-5, and a
- peak absolute error of 2.26591/16384. */
- return ADD16(r, MULT16_16_Q15(r, MULT16_16_Q15(y,
- SUB16(MULT16_16_Q15(y, 12288), 16384))));
-}
-
-/** Sqrt approximation (QX input, QX/2 output) */
-opus_val32 celt_sqrt(opus_val32 x)
-{
- int k;
- opus_val16 n;
- opus_val32 rt;
- static const opus_val16 C[5] = {23175, 11561, -3011, 1699, -664};
- if (x==0)
- return 0;
- else if (x>=1073741824)
- return 32767;
- k = (celt_ilog2(x)>>1)-7;
- x = VSHR32(x, 2*k);
- n = x-32768;
- rt = ADD16(C[0], MULT16_16_Q15(n, ADD16(C[1], MULT16_16_Q15(n, ADD16(C[2],
- MULT16_16_Q15(n, ADD16(C[3], MULT16_16_Q15(n, (C[4])))))))));
- rt = VSHR32(rt,7-k);
- return rt;
-}
-
-#define L1 32767
-#define L2 -7651
-#define L3 8277
-#define L4 -626
-
-static OPUS_INLINE opus_val16 _celt_cos_pi_2(opus_val16 x)
-{
- opus_val16 x2;
-
- x2 = MULT16_16_P15(x,x);
- return ADD16(1,MIN16(32766,ADD32(SUB16(L1,x2), MULT16_16_P15(x2, ADD32(L2, MULT16_16_P15(x2, ADD32(L3, MULT16_16_P15(L4, x2
- ))))))));
-}
-
-#undef L1
-#undef L2
-#undef L3
-#undef L4
-
-opus_val16 celt_cos_norm(opus_val32 x)
-{
- x = x&0x0001ffff;
- if (x>SHL32(EXTEND32(1), 16))
- x = SUB32(SHL32(EXTEND32(1), 17),x);
- if (x&0x00007fff)
- {
- if (x<SHL32(EXTEND32(1), 15))
- {
- return _celt_cos_pi_2(EXTRACT16(x));
- } else {
- return NEG32(_celt_cos_pi_2(EXTRACT16(65536-x)));
- }
- } else {
- if (x&0x0000ffff)
- return 0;
- else if (x&0x0001ffff)
- return -32767;
- else
- return 32767;
- }
-}
-
-/** Reciprocal approximation (Q15 input, Q16 output) */
-opus_val32 celt_rcp(opus_val32 x)
-{
- int i;
- opus_val16 n;
- opus_val16 r;
- celt_assert2(x>0, "celt_rcp() only defined for positive values");
- i = celt_ilog2(x);
- /* n is Q15 with range [0,1). */
- n = VSHR32(x,i-15)-32768;
- /* Start with a linear approximation:
- r = 1.8823529411764706-0.9411764705882353*n.
- The coefficients and the result are Q14 in the range [15420,30840].*/
- r = ADD16(30840, MULT16_16_Q15(-15420, n));
- /* Perform two Newton iterations:
- r -= r*((r*n)-1.Q15)
- = r*((r*n)+(r-1.Q15)). */
- r = SUB16(r, MULT16_16_Q15(r,
- ADD16(MULT16_16_Q15(r, n), ADD16(r, -32768))));
- /* We subtract an extra 1 in the second iteration to avoid overflow; it also
- neatly compensates for truncation error in the rest of the process. */
- r = SUB16(r, ADD16(1, MULT16_16_Q15(r,
- ADD16(MULT16_16_Q15(r, n), ADD16(r, -32768)))));
- /* r is now the Q15 solution to 2/(n+1), with a maximum relative error
- of 7.05346E-5, a (relative) RMSE of 2.14418E-5, and a peak absolute
- error of 1.24665/32768. */
- return VSHR32(EXTEND32(r),i-16);
-}
-
-#endif
diff --git a/drivers/opus/celt/mathops.h b/drivers/opus/celt/mathops.h
deleted file mode 100644
index a008d71e18..0000000000
--- a/drivers/opus/celt/mathops.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* Copyright (c) 2002-2008 Jean-Marc Valin
- Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/**
- @file mathops.h
- @brief Various math 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.
-
- 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 MATHOPS_H
-#define MATHOPS_H
-
-#include "opus/celt/arch.h"
-#include "opus/celt/entcode.h"
-#include "opus/celt/os_support.h"
-
-/* Multiplies two 16-bit fractional values. Bit-exactness of this macro is important */
-#define FRAC_MUL16(a,b) ((16384+((opus_int32)(opus_int16)(a)*(opus_int16)(b)))>>15)
-
-unsigned isqrt32(opus_uint32 _val);
-
-#ifndef OVERRIDE_CELT_MAXABS16
-static OPUS_INLINE opus_val32 celt_maxabs16(const opus_val16 *x, int len)
-{
- int i;
- opus_val16 maxval = 0;
- opus_val16 minval = 0;
- for (i=0;i<len;i++)
- {
- maxval = MAX16(maxval, x[i]);
- minval = MIN16(minval, x[i]);
- }
- return MAX32(EXTEND32(maxval),-EXTEND32(minval));
-}
-#endif
-
-#ifndef OVERRIDE_CELT_MAXABS32
-#ifdef OPUS_FIXED_POINT
-static OPUS_INLINE opus_val32 celt_maxabs32(const opus_val32 *x, int len)
-{
- int i;
- opus_val32 maxval = 0;
- opus_val32 minval = 0;
- for (i=0;i<len;i++)
- {
- maxval = MAX32(maxval, x[i]);
- minval = MIN32(minval, x[i]);
- }
- return MAX32(maxval, -minval);
-}
-#else
-#define celt_maxabs32(x,len) celt_maxabs16(x,len)
-#endif
-#endif
-
-
-#ifndef OPUS_FIXED_POINT
-
-#define PI 3.141592653f
-#define celt_sqrt(x) ((float)sqrt(x))
-#define celt_rsqrt(x) (1.f/celt_sqrt(x))
-#define celt_rsqrt_norm(x) (celt_rsqrt(x))
-#define celt_cos_norm(x) ((float)cos((.5f*PI)*(x)))
-#define celt_rcp(x) (1.f/(x))
-#define celt_div(a,b) ((a)/(b))
-#define frac_div32(a,b) ((float)(a)/(b))
-
-#ifdef FLOAT_APPROX
-
-/* Note: This assumes radix-2 floating point with the exponent at bits 23..30 and an offset of 127
- denorm, +/- inf and NaN are *not* handled */
-
-/** Base-2 log approximation (log2(x)). */
-static OPUS_INLINE float celt_log2(float x)
-{
- int integer;
- float frac;
- union {
- float f;
- opus_uint32 i;
- } in;
- in.f = x;
- integer = (in.i>>23)-127;
- in.i -= integer<<23;
- frac = in.f - 1.5f;
- frac = -0.41445418f + frac*(0.95909232f
- + frac*(-0.33951290f + frac*0.16541097f));
- return 1+integer+frac;
-}
-
-/** Base-2 exponential approximation (2^x). */
-static OPUS_INLINE float celt_exp2(float x)
-{
- int integer;
- float frac;
- union {
- float f;
- opus_uint32 i;
- } res;
- integer = floor(x);
- if (integer < -50)
- return 0;
- frac = x-integer;
- /* K0 = 1, K1 = log(2), K2 = 3-4*log(2), K3 = 3*log(2) - 2 */
- res.f = 0.99992522f + frac * (0.69583354f
- + frac * (0.22606716f + 0.078024523f*frac));
- res.i = (res.i + (integer<<23)) & 0x7fffffff;
- return res.f;
-}
-
-#else
-#define celt_log2(x) ((float)(1.442695040888963387*log(x)))
-#define celt_exp2(x) ((float)exp(0.6931471805599453094*(x)))
-#endif
-
-#endif
-
-#ifdef OPUS_FIXED_POINT
-
-#include "opus/celt/os_support.h"
-
-#ifndef OVERRIDE_CELT_ILOG2
-/** Integer log in base2. Undefined for zero and negative numbers */
-static OPUS_INLINE opus_int16 celt_ilog2(opus_int32 x)
-{
- celt_assert2(x>0, "celt_ilog2() only defined for strictly positive numbers");
- return EC_ILOG(x)-1;
-}
-#endif
-
-
-/** Integer log in base2. Defined for zero, but not for negative numbers */
-static OPUS_INLINE opus_int16 celt_zlog2(opus_val32 x)
-{
- return x <= 0 ? 0 : celt_ilog2(x);
-}
-
-opus_val16 celt_rsqrt_norm(opus_val32 x);
-
-opus_val32 celt_sqrt(opus_val32 x);
-
-opus_val16 celt_cos_norm(opus_val32 x);
-
-/** Base-2 logarithm approximation (log2(x)). (Q14 input, Q10 output) */
-static OPUS_INLINE opus_val16 celt_log2(opus_val32 x)
-{
- int i;
- opus_val16 n, frac;
- /* -0.41509302963303146, 0.9609890551383969, -0.31836011537636605,
- 0.15530808010959576, -0.08556153059057618 */
- static const opus_val16 C[5] = {-6801+(1<<(13-DB_SHIFT)), 15746, -5217, 2545, -1401};
- if (x==0)
- return -32767;
- i = celt_ilog2(x);
- n = VSHR32(x,i-15)-32768-16384;
- frac = ADD16(C[0], MULT16_16_Q15(n, ADD16(C[1], MULT16_16_Q15(n, ADD16(C[2], MULT16_16_Q15(n, ADD16(C[3], MULT16_16_Q15(n, C[4]))))))));
- return SHL16(i-13,DB_SHIFT)+SHR16(frac,14-DB_SHIFT);
-}
-
-/*
- K0 = 1
- K1 = log(2)
- K2 = 3-4*log(2)
- K3 = 3*log(2) - 2
-*/
-#define D0 16383
-#define D1 22804
-#define D2 14819
-#define D3 10204
-
-static OPUS_INLINE opus_val32 celt_exp2_frac(opus_val16 x)
-{
- opus_val16 frac;
- frac = SHL16(x, 4);
- return ADD16(D0, MULT16_16_Q15(frac, ADD16(D1, MULT16_16_Q15(frac, ADD16(D2 , MULT16_16_Q15(D3,frac))))));
-}
-/** Base-2 exponential approximation (2^x). (Q10 input, Q16 output) */
-static OPUS_INLINE opus_val32 celt_exp2(opus_val16 x)
-{
- int integer;
- opus_val16 frac;
- integer = SHR16(x,10);
- if (integer>14)
- return 0x7f000000;
- else if (integer < -15)
- return 0;
- frac = celt_exp2_frac(x-SHL16(integer,10));
- return VSHR32(EXTEND32(frac), -integer-2);
-}
-
-opus_val32 celt_rcp(opus_val32 x);
-
-#define celt_div(a,b) MULT32_32_Q31((opus_val32)(a),celt_rcp(b))
-
-opus_val32 frac_div32(opus_val32 a, opus_val32 b);
-
-#define M1 32767
-#define M2 -21
-#define M3 -11943
-#define M4 4936
-
-/* Atan approximation using a 4th order polynomial. Input is in Q15 format
- and normalized by pi/4. Output is in Q15 format */
-static OPUS_INLINE opus_val16 celt_atan01(opus_val16 x)
-{
- return MULT16_16_P15(x, ADD32(M1, MULT16_16_P15(x, ADD32(M2, MULT16_16_P15(x, ADD32(M3, MULT16_16_P15(M4, x)))))));
-}
-
-#undef M1
-#undef M2
-#undef M3
-#undef M4
-
-/* atan2() approximation valid for positive input values */
-static OPUS_INLINE opus_val16 celt_atan2p(opus_val16 y, opus_val16 x)
-{
- if (y < x)
- {
- opus_val32 arg;
- arg = celt_div(SHL32(EXTEND32(y),15),x);
- if (arg >= 32767)
- arg = 32767;
- return SHR16(celt_atan01(EXTRACT16(arg)),1);
- } else {
- opus_val32 arg;
- arg = celt_div(SHL32(EXTEND32(x),15),y);
- if (arg >= 32767)
- arg = 32767;
- return 25736-SHR16(celt_atan01(EXTRACT16(arg)),1);
- }
-}
-
-#endif /* FIXED_POINT */
-#endif /* MATHOPS_H */
diff --git a/drivers/opus/celt/mdct.c b/drivers/opus/celt/mdct.c
deleted file mode 100644
index 641a20e49a..0000000000
--- a/drivers/opus/celt/mdct.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2008 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 is a simple MDCT implementation that uses a N/4 complex FFT
- to do most of the work. It should be relatively straightforward to
- plug in pretty much and FFT here.
-
- This replaces the Vorbis FFT (and uses the exact same API), which
- was a bit too messy and that was ending up duplicating code
- (might as well use the same FFT everywhere).
-
- The algorithm is similar to (and inspired from) Fabrice Bellard's
- MDCT implementation in FFMPEG, but has differences in signs, ordering
- and scaling in many places.
-*/
-
-#ifndef SKIP_CONFIG_H
-#include "opus/opus_config.h"
-#endif
-
-#include "opus/celt/mdct.h"
-#include "opus/celt/kiss_fft.h"
-#include "opus/celt/_kiss_fft_guts.h"
-#include <math.h>
-#include "opus/celt/os_support.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/stack_alloc.h"
-
-#if defined(MIPSr1_ASM)
-#include "opus/celt/mips/mdct_mipsr1.h"
-#endif
-
-
-#ifdef CUSTOM_MODES
-
-int clt_mdct_init(mdct_lookup *l,int N, int maxshift, int arch)
-{
- int i;
- kiss_twiddle_scalar *trig;
- int shift;
- int N2=N>>1;
- l->n = N;
- l->maxshift = maxshift;
- for (i=0;i<=maxshift;i++)
- {
- if (i==0)
- l->kfft[i] = opus_fft_alloc(N>>2>>i, 0, 0, arch);
- else
- l->kfft[i] = opus_fft_alloc_twiddles(N>>2>>i, 0, 0, l->kfft[0], arch);
-#ifndef ENABLE_TI_DSPLIB55
- if (l->kfft[i]==NULL)
- return 0;
-#endif
- }
- l->trig = trig = (kiss_twiddle_scalar*)opus_alloc((N-(N2>>maxshift))*sizeof(kiss_twiddle_scalar));
- if (l->trig==NULL)
- return 0;
- for (shift=0;shift<=maxshift;shift++)
- {
- /* We have enough points that sine isn't necessary */
-#if defined(FIXED_POINT)
-#if 1
- for (i=0;i<N2;i++)
- trig[i] = TRIG_UPSCALE*celt_cos_norm(DIV32(ADD32(SHL32(EXTEND32(i),17),N2+16384),N));
-#else
- for (i=0;i<N2;i++)
- trig[i] = (kiss_twiddle_scalar)MAX32(-32767,MIN32(32767,floor(.5+32768*cos(2*M_PI*(i+.125)/N))));
-#endif
-#else
- for (i=0;i<N2;i++)
- trig[i] = (kiss_twiddle_scalar)cos(2*PI*(i+.125)/N);
-#endif
- trig += N2;
- N2 >>= 1;
- N >>= 1;
- }
- return 1;
-}
-
-void clt_mdct_clear(mdct_lookup *l, int arch)
-{
- int i;
- for (i=0;i<=l->maxshift;i++)
- opus_fft_free(l->kfft[i], arch);
- opus_free((kiss_twiddle_scalar*)l->trig);
-}
-
-#endif /* CUSTOM_MODES */
-
-/* Forward MDCT trashes the input array */
-#ifndef OVERRIDE_clt_mdct_forward
-void clt_mdct_forward_c(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 *window, int overlap, int shift, int stride, int arch)
-{
- int i;
- int N, N2, N4;
- VARDECL(kiss_fft_scalar, f);
- VARDECL(kiss_fft_cpx, f2);
- const kiss_fft_state *st = l->kfft[shift];
- const kiss_twiddle_scalar *trig;
- opus_val16 scale;
-#ifdef OPUS_FIXED_POINT
- /* Allows us to scale with MULT16_32_Q16(), which is faster than
- MULT16_32_Q15() on ARM. */
- int scale_shift = st->scale_shift-1;
-#endif
- SAVE_STACK;
- (void)arch;
- scale = st->scale;
-
- N = l->n;
- trig = l->trig;
- for (i=0;i<shift;i++)
- {
- N >>= 1;
- trig += N;
- }
- N2 = N>>1;
- N4 = N>>2;
-
- ALLOC(f, N2, kiss_fft_scalar);
- ALLOC(f2, N4, kiss_fft_cpx);
-
- /* Consider the input to be composed of four blocks: [a, b, c, d] */
- /* Window, shuffle, fold */
- {
- /* Temp pointers to make it really clear to the compiler what we're doing */
- const kiss_fft_scalar * OPUS_RESTRICT xp1 = in+(overlap>>1);
- const kiss_fft_scalar * OPUS_RESTRICT xp2 = in+N2-1+(overlap>>1);
- kiss_fft_scalar * OPUS_RESTRICT yp = f;
- const opus_val16 * OPUS_RESTRICT wp1 = window+(overlap>>1);
- const opus_val16 * OPUS_RESTRICT wp2 = window+(overlap>>1)-1;
- for(i=0;i<((overlap+3)>>2);i++)
- {
- /* Real part arranged as -d-cR, Imag part arranged as -b+aR*/
- *yp++ = MULT16_32_Q15(*wp2, xp1[N2]) + MULT16_32_Q15(*wp1,*xp2);
- *yp++ = MULT16_32_Q15(*wp1, *xp1) - MULT16_32_Q15(*wp2, xp2[-N2]);
- xp1+=2;
- xp2-=2;
- wp1+=2;
- wp2-=2;
- }
- wp1 = window;
- wp2 = window+overlap-1;
- for(;i<N4-((overlap+3)>>2);i++)
- {
- /* Real part arranged as a-bR, Imag part arranged as -c-dR */
- *yp++ = *xp2;
- *yp++ = *xp1;
- xp1+=2;
- xp2-=2;
- }
- for(;i<N4;i++)
- {
- /* Real part arranged as a-bR, Imag part arranged as -c-dR */
- *yp++ = -MULT16_32_Q15(*wp1, xp1[-N2]) + MULT16_32_Q15(*wp2, *xp2);
- *yp++ = MULT16_32_Q15(*wp2, *xp1) + MULT16_32_Q15(*wp1, xp2[N2]);
- xp1+=2;
- xp2-=2;
- wp1+=2;
- wp2-=2;
- }
- }
- /* Pre-rotation */
- {
- kiss_fft_scalar * OPUS_RESTRICT yp = f;
- const kiss_twiddle_scalar *t = &trig[0];
- for(i=0;i<N4;i++)
- {
- kiss_fft_cpx yc;
- kiss_twiddle_scalar t0, t1;
- kiss_fft_scalar re, im, yr, yi;
- t0 = t[i];
- t1 = t[N4+i];
- re = *yp++;
- im = *yp++;
- yr = S_MUL(re,t0) - S_MUL(im,t1);
- yi = S_MUL(im,t0) + S_MUL(re,t1);
- yc.r = yr;
- yc.i = yi;
- yc.r = PSHR32(MULT16_32_Q16(scale, yc.r), scale_shift);
- yc.i = PSHR32(MULT16_32_Q16(scale, yc.i), scale_shift);
- f2[st->bitrev[i]] = yc;
- }
- }
-
- /* N/4 complex FFT, does not downscale anymore */
- opus_fft_impl(st, f2);
-
- /* Post-rotate */
- {
- /* Temp pointers to make it really clear to the compiler what we're doing */
- const kiss_fft_cpx * OPUS_RESTRICT fp = f2;
- kiss_fft_scalar * OPUS_RESTRICT yp1 = out;
- kiss_fft_scalar * OPUS_RESTRICT yp2 = out+stride*(N2-1);
- const kiss_twiddle_scalar *t = &trig[0];
- /* Temp pointers to make it really clear to the compiler what we're doing */
- for(i=0;i<N4;i++)
- {
- kiss_fft_scalar yr, yi;
- yr = S_MUL(fp->i,t[N4+i]) - S_MUL(fp->r,t[i]);
- yi = S_MUL(fp->r,t[N4+i]) + S_MUL(fp->i,t[i]);
- *yp1 = yr;
- *yp2 = yi;
- fp++;
- yp1 += 2*stride;
- yp2 -= 2*stride;
- }
- }
- RESTORE_STACK;
-}
-#endif /* OVERRIDE_clt_mdct_forward */
-
-#ifndef OVERRIDE_clt_mdct_backward
-void clt_mdct_backward_c(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 * OPUS_RESTRICT window, int overlap, int shift, int stride, int arch)
-{
- int i;
- int N, N2, N4;
- const kiss_twiddle_scalar *trig;
- (void) arch;
-
- N = l->n;
- trig = l->trig;
- for (i=0;i<shift;i++)
- {
- N >>= 1;
- trig += N;
- }
- N2 = N>>1;
- N4 = N>>2;
-
- /* Pre-rotate */
- {
- /* Temp pointers to make it really clear to the compiler what we're doing */
- const kiss_fft_scalar * OPUS_RESTRICT xp1 = in;
- const kiss_fft_scalar * OPUS_RESTRICT xp2 = in+stride*(N2-1);
- kiss_fft_scalar * OPUS_RESTRICT yp = out+(overlap>>1);
- const kiss_twiddle_scalar * OPUS_RESTRICT t = &trig[0];
- const opus_int16 * OPUS_RESTRICT bitrev = l->kfft[shift]->bitrev;
- for(i=0;i<N4;i++)
- {
- int rev;
- kiss_fft_scalar yr, yi;
- rev = *bitrev++;
- yr = S_MUL(*xp2, t[i]) + S_MUL(*xp1, t[N4+i]);
- yi = S_MUL(*xp1, t[i]) - S_MUL(*xp2, t[N4+i]);
- /* We swap real and imag because we use an FFT instead of an IFFT. */
- yp[2*rev+1] = yr;
- yp[2*rev] = yi;
- /* Storing the pre-rotation directly in the bitrev order. */
- xp1+=2*stride;
- xp2-=2*stride;
- }
- }
-
- opus_fft_impl(l->kfft[shift], (kiss_fft_cpx*)(out+(overlap>>1)));
-
- /* Post-rotate and de-shuffle from both ends of the buffer at once to make
- it in-place. */
- {
- kiss_fft_scalar * yp0 = out+(overlap>>1);
- kiss_fft_scalar * yp1 = out+(overlap>>1)+N2-2;
- const kiss_twiddle_scalar *t = &trig[0];
- /* Loop to (N4+1)>>1 to handle odd N4. When N4 is odd, the
- middle pair will be computed twice. */
- for(i=0;i<(N4+1)>>1;i++)
- {
- kiss_fft_scalar re, im, yr, yi;
- kiss_twiddle_scalar t0, t1;
- /* We swap real and imag because we're using an FFT instead of an IFFT. */
- re = yp0[1];
- im = yp0[0];
- t0 = t[i];
- t1 = t[N4+i];
- /* We'd scale up by 2 here, but instead it's done when mixing the windows */
- yr = S_MUL(re,t0) + S_MUL(im,t1);
- yi = S_MUL(re,t1) - S_MUL(im,t0);
- /* We swap real and imag because we're using an FFT instead of an IFFT. */
- re = yp1[1];
- im = yp1[0];
- yp0[0] = yr;
- yp1[1] = yi;
-
- t0 = t[(N4-i-1)];
- t1 = t[(N2-i-1)];
- /* We'd scale up by 2 here, but instead it's done when mixing the windows */
- yr = S_MUL(re,t0) + S_MUL(im,t1);
- yi = S_MUL(re,t1) - S_MUL(im,t0);
- yp1[0] = yr;
- yp0[1] = yi;
- yp0 += 2;
- yp1 -= 2;
- }
- }
-
- /* Mirror on both sides for TDAC */
- {
- kiss_fft_scalar * OPUS_RESTRICT xp1 = out+overlap-1;
- kiss_fft_scalar * OPUS_RESTRICT yp1 = out;
- const opus_val16 * OPUS_RESTRICT wp1 = window;
- const opus_val16 * OPUS_RESTRICT wp2 = window+overlap-1;
-
- for(i = 0; i < overlap/2; i++)
- {
- kiss_fft_scalar x1, x2;
- x1 = *xp1;
- x2 = *yp1;
- *yp1++ = MULT16_32_Q15(*wp2, x2) - MULT16_32_Q15(*wp1, x1);
- *xp1-- = MULT16_32_Q15(*wp1, x2) + MULT16_32_Q15(*wp2, x1);
- wp1++;
- wp2--;
- }
- }
-}
-#endif /* OVERRIDE_clt_mdct_backward */
diff --git a/drivers/opus/celt/mdct.h b/drivers/opus/celt/mdct.h
deleted file mode 100644
index 2ec98a92e5..0000000000
--- a/drivers/opus/celt/mdct.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2008 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 is a simple MDCT implementation that uses a N/4 complex FFT
- to do most of the work. It should be relatively straightforward to
- plug in pretty much and FFT here.
-
- This replaces the Vorbis FFT (and uses the exact same API), which
- was a bit too messy and that was ending up duplicating code
- (might as well use the same FFT everywhere).
-
- The algorithm is similar to (and inspired from) Fabrice Bellard's
- MDCT implementation in FFMPEG, but has differences in signs, ordering
- and scaling in many places.
-*/
-
-#ifndef MDCT_H
-#define MDCT_H
-
-#include "opus/opus_defines.h"
-#include "opus/celt/kiss_fft.h"
-#include "opus/celt/arch.h"
-
-typedef struct {
- int n;
- int maxshift;
- const kiss_fft_state *kfft[4];
- const kiss_twiddle_scalar * OPUS_RESTRICT trig;
-} mdct_lookup;
-
-#if defined(HAVE_ARM_NE10)
-#include "opus/celt/arm/mdct_arm.h"
-#endif
-
-
-int clt_mdct_init(mdct_lookup *l,int N, int maxshift, int arch);
-void clt_mdct_clear(mdct_lookup *l, int arch);
-
-/** Compute a forward MDCT and scale by 4/N, trashes the input array */
-void clt_mdct_forward_c(const mdct_lookup *l, kiss_fft_scalar *in,
- kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 *window, int overlap,
- int shift, int stride, int arch);
-
-/** Compute a backward MDCT (no scaling) and performs weighted overlap-add
- (scales implicitly by 1/2) */
-void clt_mdct_backward_c(const mdct_lookup *l, kiss_fft_scalar *in,
- kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 * OPUS_RESTRICT window,
- int overlap, int shift, int stride, int arch);
-
-#if !defined(OVERRIDE_OPUS_MDCT)
-/* Is run-time CPU detection enabled on this platform? */
-#if defined(OPUS_HAVE_RTCD) && defined(HAVE_ARM_NE10)
-
-extern void (*const CLT_MDCT_FORWARD_IMPL[OPUS_ARCHMASK+1])(
- const mdct_lookup *l, kiss_fft_scalar *in,
- kiss_fft_scalar * OPUS_RESTRICT out, const opus_val16 *window,
- int overlap, int shift, int stride, int arch);
-
-#define clt_mdct_forward(_l, _in, _out, _window, _overlap, _shift, _stride, _arch) \
- ((*CLT_MDCT_FORWARD_IMPL[(arch)&OPUS_ARCHMASK])(_l, _in, _out, \
- _window, _overlap, _shift, \
- _stride, _arch))
-
-extern void (*const CLT_MDCT_BACKWARD_IMPL[OPUS_ARCHMASK+1])(
- const mdct_lookup *l, kiss_fft_scalar *in,
- kiss_fft_scalar * OPUS_RESTRICT out, const opus_val16 *window,
- int overlap, int shift, int stride, int arch);
-
-#define clt_mdct_backward(_l, _in, _out, _window, _overlap, _shift, _stride, _arch) \
- (*CLT_MDCT_BACKWARD_IMPL[(arch)&OPUS_ARCHMASK])(_l, _in, _out, \
- _window, _overlap, _shift, \
- _stride, _arch)
-
-#else /* if defined(OPUS_HAVE_RTCD) && defined(HAVE_ARM_NE10) */
-
-#define clt_mdct_forward(_l, _in, _out, _window, _overlap, _shift, _stride, _arch) \
- clt_mdct_forward_c(_l, _in, _out, _window, _overlap, _shift, _stride, _arch)
-
-#define clt_mdct_backward(_l, _in, _out, _window, _overlap, _shift, _stride, _arch) \
- clt_mdct_backward_c(_l, _in, _out, _window, _overlap, _shift, _stride, _arch)
-
-#endif /* end if defined(OPUS_HAVE_RTCD) && defined(HAVE_ARM_NE10) && !defined(FIXED_POINT) */
-#endif /* end if !defined(OVERRIDE_OPUS_MDCT) */
-
-#endif
diff --git a/drivers/opus/celt/mfrngcod.h b/drivers/opus/celt/mfrngcod.h
deleted file mode 100644
index c24d98cde2..0000000000
--- a/drivers/opus/celt/mfrngcod.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (c) 2001-2008 Timothy B. Terriberry
- Copyright (c) 2008-2009 Xiph.Org Foundation */
-/*
- 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.
-
- 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.
-*/
-
-#if !defined(_mfrngcode_H)
-# define _mfrngcode_H (1)
-# include "opus/celt/entcode.h"
-
-/*Constants used by the entropy encoder/decoder.*/
-
-/*The number of bits to output at a time.*/
-# define EC_SYM_BITS (8)
-/*The total number of bits in each of the state registers.*/
-# define EC_CODE_BITS (32)
-/*The maximum symbol value.*/
-# define EC_SYM_MAX ((1U<<EC_SYM_BITS)-1)
-/*Bits to shift by to move a symbol into the high-order position.*/
-# define EC_CODE_SHIFT (EC_CODE_BITS-EC_SYM_BITS-1)
-/*Carry bit of the high-order range symbol.*/
-# define EC_CODE_TOP (((opus_uint32)1U)<<(EC_CODE_BITS-1))
-/*Low-order bit of the high-order range symbol.*/
-# define EC_CODE_BOT (EC_CODE_TOP>>EC_SYM_BITS)
-/*The number of bits available for the last, partial symbol in the code field.*/
-# define EC_CODE_EXTRA ((EC_CODE_BITS-2)%EC_SYM_BITS+1)
-#endif
diff --git a/drivers/opus/celt/mips/celt_mipsr1.h b/drivers/opus/celt/mips/celt_mipsr1.h
deleted file mode 100644
index 906848f1ec..0000000000
--- a/drivers/opus/celt/mips/celt_mipsr1.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2010 Xiph.Org Foundation
- Copyright (c) 2008 Gregory Maxwell
- Written by Jean-Marc Valin and Gregory Maxwell */
-/*
- 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.
-
- 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 __CELT_MIPSR1_H__
-#define __CELT_MIPSR1_H__
-#include "opus/opus_config.h"
-
-#define CELT_C
-
-#include "opus/celt/os_support.h"
-#include "opus/celt/mdct.h"
-#include <math.h>
-#include "opus/celt/celt.h"
-#include "opus/celt/pitch.h"
-#include "opus/celt/bands.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/entcode.h"
-#include "opus/celt/quant_bands.h"
-#include "opus/celt/rate.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/float_cast.h"
-#include <stdarg.h>
-#include "opus/celt/celt_lpc.h"
-#include "opus/celt/vq.h"
-
-#define OVERRIDE_comb_filter
-void comb_filter(opus_val32 *y, opus_val32 *x, int T0, int T1, int N,
- opus_val16 g0, opus_val16 g1, int tapset0, int tapset1,
- const opus_val16 *window, int overlap, int arch)
-{
- int i;
- opus_val32 x0, x1, x2, x3, x4;
-
- (void)arch;
-
- /* printf ("%d %d %f %f\n", T0, T1, g0, g1); */
- opus_val16 g00, g01, g02, g10, g11, g12;
- static const opus_val16 gains[3][3] = {
- {QCONST16(0.3066406250f, 15), QCONST16(0.2170410156f, 15), QCONST16(0.1296386719f, 15)},
- {QCONST16(0.4638671875f, 15), QCONST16(0.2680664062f, 15), QCONST16(0.f, 15)},
- {QCONST16(0.7998046875f, 15), QCONST16(0.1000976562f, 15), QCONST16(0.f, 15)}};
-
- if (g0==0 && g1==0)
- {
- /* OPT: Happens to work without the OPUS_MOVE(), but only because the current encoder already copies x to y */
- if (x!=y)
- OPUS_MOVE(y, x, N);
- return;
- }
-
- g00 = MULT16_16_P15(g0, gains[tapset0][0]);
- g01 = MULT16_16_P15(g0, gains[tapset0][1]);
- g02 = MULT16_16_P15(g0, gains[tapset0][2]);
- g10 = MULT16_16_P15(g1, gains[tapset1][0]);
- g11 = MULT16_16_P15(g1, gains[tapset1][1]);
- g12 = MULT16_16_P15(g1, gains[tapset1][2]);
- x1 = x[-T1+1];
- x2 = x[-T1 ];
- x3 = x[-T1-1];
- x4 = x[-T1-2];
- /* If the filter didn't change, we don't need the overlap */
- if (g0==g1 && T0==T1 && tapset0==tapset1)
- overlap=0;
-
- for (i=0;i<overlap;i++)
- {
- opus_val16 f;
- opus_val32 res;
- f = MULT16_16_Q15(window[i],window[i]);
- x0= x[i-T1+2];
-
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)MULT16_16_Q15((Q15ONE-f),g00)), "r" ((int)x[i-T0]));
-
- asm volatile("MADD $ac1, %0, %1" : : "r" ((int)MULT16_16_Q15((Q15ONE-f),g01)), "r" ((int)ADD32(x[i-T0-1],x[i-T0+1])));
- asm volatile("MADD $ac1, %0, %1" : : "r" ((int)MULT16_16_Q15((Q15ONE-f),g02)), "r" ((int)ADD32(x[i-T0-2],x[i-T0+2])));
- asm volatile("MADD $ac1, %0, %1" : : "r" ((int)MULT16_16_Q15(f,g10)), "r" ((int)x2));
- asm volatile("MADD $ac1, %0, %1" : : "r" ((int)MULT16_16_Q15(f,g11)), "r" ((int)ADD32(x3,x1)));
- asm volatile("MADD $ac1, %0, %1" : : "r" ((int)MULT16_16_Q15(f,g12)), "r" ((int)ADD32(x4,x0)));
-
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (res): "i" (15));
-
- y[i] = x[i] + res;
-
- x4=x3;
- x3=x2;
- x2=x1;
- x1=x0;
- }
-
- x4 = x[i-T1-2];
- x3 = x[i-T1-1];
- x2 = x[i-T1];
- x1 = x[i-T1+1];
-
- if (g1==0)
- {
- /* OPT: Happens to work without the OPUS_MOVE(), but only because the current encoder already copies x to y */
- if (x!=y)
- OPUS_MOVE(y+overlap, x+overlap, N-overlap);
- return;
- }
-
- for (i=overlap;i<N;i++)
- {
- opus_val32 res;
- x0=x[i-T1+2];
-
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)g10), "r" ((int)x2));
-
- asm volatile("MADD $ac1, %0, %1" : : "r" ((int)g11), "r" ((int)ADD32(x3,x1)));
- asm volatile("MADD $ac1, %0, %1" : : "r" ((int)g12), "r" ((int)ADD32(x4,x0)));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (res): "i" (15));
- y[i] = x[i] + res;
- x4=x3;
- x3=x2;
- x2=x1;
- x1=x0;
- }
-}
-
-#endif /* __CELT_MIPSR1_H__ */
diff --git a/drivers/opus/celt/mips/fixed_generic_mipsr1.h b/drivers/opus/celt/mips/fixed_generic_mipsr1.h
deleted file mode 100644
index 4a05efbf85..0000000000
--- a/drivers/opus/celt/mips/fixed_generic_mipsr1.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* Copyright (C) 2007-2009 Xiph.Org Foundation
- Copyright (C) 2003-2008 Jean-Marc Valin
- Copyright (C) 2007-2008 CSIRO */
-/**
- @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.
-
- 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 CELT_FIXED_GENERIC_MIPSR1_H
-#define CELT_FIXED_GENERIC_MIPSR1_H
-
-#undef MULT16_32_Q15_ADD
-static inline int MULT16_32_Q15_ADD(int a, int b, int c, int d) {
- int m;
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)a), "r" ((int)b));
- asm volatile("madd $ac1, %0, %1" : : "r" ((int)c), "r" ((int)d));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (m): "i" (15));
- return m;
-}
-
-#undef MULT16_32_Q15_SUB
-static inline int MULT16_32_Q15_SUB(int a, int b, int c, int d) {
- int m;
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)a), "r" ((int)b));
- asm volatile("msub $ac1, %0, %1" : : "r" ((int)c), "r" ((int)d));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (m): "i" (15));
- return m;
-}
-
-#undef MULT16_16_Q15_ADD
-static inline int MULT16_16_Q15_ADD(int a, int b, int c, int d) {
- int m;
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)a), "r" ((int)b));
- asm volatile("madd $ac1, %0, %1" : : "r" ((int)c), "r" ((int)d));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (m): "i" (15));
- return m;
-}
-
-#undef MULT16_16_Q15_SUB
-static inline int MULT16_16_Q15_SUB(int a, int b, int c, int d) {
- int m;
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)a), "r" ((int)b));
- asm volatile("msub $ac1, %0, %1" : : "r" ((int)c), "r" ((int)d));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (m): "i" (15));
- return m;
-}
-
-
-#undef MULT16_32_Q16
-static inline int MULT16_32_Q16(int a, int b)
-{
- int c;
- asm volatile("MULT $ac1,%0, %1" : : "r" (a), "r" (b));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (c): "i" (16));
- return c;
-}
-
-#undef MULT16_32_P16
-static inline int MULT16_32_P16(int a, int b)
-{
- int c;
- asm volatile("MULT $ac1, %0, %1" : : "r" (a), "r" (b));
- asm volatile("EXTR_R.W %0,$ac1, %1" : "=r" (c): "i" (16));
- return c;
-}
-
-#undef MULT16_32_Q15
-static inline int MULT16_32_Q15(int a, int b)
-{
- int c;
- asm volatile("MULT $ac1, %0, %1" : : "r" (a), "r" (b));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (c): "i" (15));
- return c;
-}
-
-#undef MULT32_32_Q31
-static inline int MULT32_32_Q31(int a, int b)
-{
- int r;
- asm volatile("MULT $ac1, %0, %1" : : "r" (a), "r" (b));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (r): "i" (31));
- return r;
-}
-
-#undef PSHR32
-static inline int PSHR32(int a, int shift)
-{
- int r;
- asm volatile ("SHRAV_R.W %0, %1, %2" :"=r" (r): "r" (a), "r" (shift));
- return r;
-}
-
-#undef MULT16_16_P15
-static inline int MULT16_16_P15(int a, int b)
-{
- int r;
- asm volatile ("mul %0, %1, %2" :"=r" (r): "r" (a), "r" (b));
- asm volatile ("SHRA_R.W %0, %1, %2" : "+r" (r): "0" (r), "i"(15));
- return r;
-}
-
-#endif /* CELT_FIXED_GENERIC_MIPSR1_H */
diff --git a/drivers/opus/celt/mips/kiss_fft_mipsr1.h b/drivers/opus/celt/mips/kiss_fft_mipsr1.h
deleted file mode 100644
index 09dc9af464..0000000000
--- a/drivers/opus/celt/mips/kiss_fft_mipsr1.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*Copyright (c) 2013, Xiph.Org Foundation and contributors.
-
- 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.
-
- 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 KISS_FFT_MIPSR1_H
-#define KISS_FFT_MIPSR1_H
-
-#if !defined(KISS_FFT_GUTS_H)
-#error "This file should only be included from _kiss_fft_guts.h"
-#endif
-
-#ifdef OPUS_FIXED_POINT
-
-#define S_MUL_ADD(a, b, c, d) (S_MUL(a,b)+S_MUL(c,d))
-#define S_MUL_SUB(a, b, c, d) (S_MUL(a,b)-S_MUL(c,d))
-
-#undef S_MUL_ADD
-static inline int S_MUL_ADD(int a, int b, int c, int d) {
- int m;
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)a), "r" ((int)b));
- asm volatile("madd $ac1, %0, %1" : : "r" ((int)c), "r" ((int)d));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (m): "i" (15));
- return m;
-}
-
-#undef S_MUL_SUB
-static inline int S_MUL_SUB(int a, int b, int c, int d) {
- int m;
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)a), "r" ((int)b));
- asm volatile("msub $ac1, %0, %1" : : "r" ((int)c), "r" ((int)d));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (m): "i" (15));
- return m;
-}
-
-#undef C_MUL
-# define C_MUL(m,a,b) (m=C_MUL_fun(a,b))
-static inline kiss_fft_cpx C_MUL_fun(kiss_fft_cpx a, kiss_twiddle_cpx b) {
- kiss_fft_cpx m;
-
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)a.r), "r" ((int)b.r));
- asm volatile("msub $ac1, %0, %1" : : "r" ((int)a.i), "r" ((int)b.i));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (m.r): "i" (15));
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)a.r), "r" ((int)b.i));
- asm volatile("madd $ac1, %0, %1" : : "r" ((int)a.i), "r" ((int)b.r));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (m.i): "i" (15));
-
- return m;
-}
-#undef C_MULC
-# define C_MULC(m,a,b) (m=C_MULC_fun(a,b))
-static inline kiss_fft_cpx C_MULC_fun(kiss_fft_cpx a, kiss_twiddle_cpx b) {
- kiss_fft_cpx m;
-
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)a.r), "r" ((int)b.r));
- asm volatile("madd $ac1, %0, %1" : : "r" ((int)a.i), "r" ((int)b.i));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (m.r): "i" (15));
- asm volatile("MULT $ac1, %0, %1" : : "r" ((int)a.i), "r" ((int)b.r));
- asm volatile("msub $ac1, %0, %1" : : "r" ((int)a.r), "r" ((int)b.i));
- asm volatile("EXTR.W %0,$ac1, %1" : "=r" (m.i): "i" (15));
-
- return m;
-}
-
-#endif /* FIXED_POINT */
-
-#define OVERRIDE_kf_bfly5
-static void kf_bfly5(
- kiss_fft_cpx * Fout,
- const size_t fstride,
- const kiss_fft_state *st,
- int m,
- int N,
- int mm
- )
-{
- kiss_fft_cpx *Fout0,*Fout1,*Fout2,*Fout3,*Fout4;
- int i, u;
- kiss_fft_cpx scratch[13];
-
- const kiss_twiddle_cpx *tw;
- kiss_twiddle_cpx ya,yb;
- kiss_fft_cpx * Fout_beg = Fout;
-
-#ifdef OPUS_FIXED_POINT
- ya.r = 10126;
- ya.i = -31164;
- yb.r = -26510;
- yb.i = -19261;
-#else
- ya = st->twiddles[fstride*m];
- yb = st->twiddles[fstride*2*m];
-#endif
-
- tw=st->twiddles;
-
- for (i=0;i<N;i++)
- {
- Fout = Fout_beg + i*mm;
- Fout0=Fout;
- Fout1=Fout0+m;
- Fout2=Fout0+2*m;
- Fout3=Fout0+3*m;
- Fout4=Fout0+4*m;
-
- /* For non-custom modes, m is guaranteed to be a multiple of 4. */
- for ( u=0; u<m; ++u ) {
- 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_ADD(scratch[7].r,ya.r,scratch[8].r,yb.r);
- scratch[5].i = scratch[0].i + S_MUL_ADD(scratch[7].i,ya.r,scratch[8].i,yb.r);
-
- scratch[6].r = S_MUL_ADD(scratch[10].i,ya.i,scratch[9].i,yb.i);
- scratch[6].i = -S_MUL_ADD(scratch[10].r,ya.i,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_ADD(scratch[7].r,yb.r,scratch[8].r,ya.r);
- scratch[11].i = scratch[0].i + S_MUL_ADD(scratch[7].i,yb.r,scratch[8].i,ya.r);
-
- scratch[12].r = S_MUL_SUB(scratch[9].i,ya.i,scratch[10].i,yb.i);
- scratch[12].i = S_MUL_SUB(scratch[10].r,yb.i,scratch[9].r,ya.i);
-
- C_ADD(*Fout2,scratch[11],scratch[12]);
- C_SUB(*Fout3,scratch[11],scratch[12]);
-
- ++Fout0;++Fout1;++Fout2;++Fout3;++Fout4;
- }
- }
-}
-
-
-#endif /* KISS_FFT_MIPSR1_H */
diff --git a/drivers/opus/celt/mips/mdct_mipsr1.h b/drivers/opus/celt/mips/mdct_mipsr1.h
deleted file mode 100644
index 0bb8b5a056..0000000000
--- a/drivers/opus/celt/mips/mdct_mipsr1.h
+++ /dev/null
@@ -1,286 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2008 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 is a simple MDCT implementation that uses a N/4 complex FFT
- to do most of the work. It should be relatively straightforward to
- plug in pretty much and FFT here.
-
- This replaces the Vorbis FFT (and uses the exact same API), which
- was a bit too messy and that was ending up duplicating code
- (might as well use the same FFT everywhere).
-
- The algorithm is similar to (and inspired from) Fabrice Bellard's
- MDCT implementation in FFMPEG, but has differences in signs, ordering
- and scaling in many places.
-*/
-#ifndef __MDCT_MIPSR1_H__
-#define __MDCT_MIPSR1_H__
-
-#ifndef SKIP_CONFIG_H
-#include "opus/opus_config.h"
-#endif
-
-#include "opus/celt/mdct.h"
-#include "opus/celt/kiss_fft.h"
-#include "opus/celt/_kiss_fft_guts.h"
-#include <math.h>
-#include "opus/celt/os_support.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/stack_alloc.h"
-
-/* Forward MDCT trashes the input array */
-#define OVERRIDE_clt_mdct_forward
-void clt_mdct_forward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 *window, int overlap, int shift, int stride, int arch)
-{
- int i;
- int N, N2, N4;
- VARDECL(kiss_fft_scalar, f);
- VARDECL(kiss_fft_cpx, f2);
- const kiss_fft_state *st = l->kfft[shift];
- const kiss_twiddle_scalar *trig;
- opus_val16 scale;
-#ifdef OPUS_FIXED_POINT
- /* Allows us to scale with MULT16_32_Q16(), which is faster than
- MULT16_32_Q15() on ARM. */
- int scale_shift = st->scale_shift-1;
-#endif
-
- (void)arch;
-
- SAVE_STACK;
- scale = st->scale;
-
- N = l->n;
- trig = l->trig;
- for (i=0;i<shift;i++)
- {
- N >>= 1;
- trig += N;
- }
- N2 = N>>1;
- N4 = N>>2;
-
- ALLOC(f, N2, kiss_fft_scalar);
- ALLOC(f2, N4, kiss_fft_cpx);
-
- /* Consider the input to be composed of four blocks: [a, b, c, d] */
- /* Window, shuffle, fold */
- {
- /* Temp pointers to make it really clear to the compiler what we're doing */
- const kiss_fft_scalar * OPUS_RESTRICT xp1 = in+(overlap>>1);
- const kiss_fft_scalar * OPUS_RESTRICT xp2 = in+N2-1+(overlap>>1);
- kiss_fft_scalar * OPUS_RESTRICT yp = f;
- const opus_val16 * OPUS_RESTRICT wp1 = window+(overlap>>1);
- const opus_val16 * OPUS_RESTRICT wp2 = window+(overlap>>1)-1;
- for(i=0;i<((overlap+3)>>2);i++)
- {
- /* Real part arranged as -d-cR, Imag part arranged as -b+aR*/
- *yp++ = S_MUL_ADD(*wp2, xp1[N2],*wp1,*xp2);
- *yp++ = S_MUL_SUB(*wp1, *xp1,*wp2, xp2[-N2]);
- xp1+=2;
- xp2-=2;
- wp1+=2;
- wp2-=2;
- }
- wp1 = window;
- wp2 = window+overlap-1;
- for(;i<N4-((overlap+3)>>2);i++)
- {
- /* Real part arranged as a-bR, Imag part arranged as -c-dR */
- *yp++ = *xp2;
- *yp++ = *xp1;
- xp1+=2;
- xp2-=2;
- }
- for(;i<N4;i++)
- {
- /* Real part arranged as a-bR, Imag part arranged as -c-dR */
- *yp++ = S_MUL_SUB(*wp2, *xp2, *wp1, xp1[-N2]);
- *yp++ = S_MUL_ADD(*wp2, *xp1, *wp1, xp2[N2]);
- xp1+=2;
- xp2-=2;
- wp1+=2;
- wp2-=2;
- }
- }
- /* Pre-rotation */
- {
- kiss_fft_scalar * OPUS_RESTRICT yp = f;
- const kiss_twiddle_scalar *t = &trig[0];
- for(i=0;i<N4;i++)
- {
- kiss_fft_cpx yc;
- kiss_twiddle_scalar t0, t1;
- kiss_fft_scalar re, im, yr, yi;
- t0 = t[i];
- t1 = t[N4+i];
- re = *yp++;
- im = *yp++;
-
- yr = S_MUL_SUB(re,t0,im,t1);
- yi = S_MUL_ADD(im,t0,re,t1);
-
- yc.r = yr;
- yc.i = yi;
- yc.r = PSHR32(MULT16_32_Q16(scale, yc.r), scale_shift);
- yc.i = PSHR32(MULT16_32_Q16(scale, yc.i), scale_shift);
- f2[st->bitrev[i]] = yc;
- }
- }
-
- /* N/4 complex FFT, does not downscale anymore */
- opus_fft_impl(st, f2);
-
- /* Post-rotate */
- {
- /* Temp pointers to make it really clear to the compiler what we're doing */
- const kiss_fft_cpx * OPUS_RESTRICT fp = f2;
- kiss_fft_scalar * OPUS_RESTRICT yp1 = out;
- kiss_fft_scalar * OPUS_RESTRICT yp2 = out+stride*(N2-1);
- const kiss_twiddle_scalar *t = &trig[0];
- /* Temp pointers to make it really clear to the compiler what we're doing */
- for(i=0;i<N4;i++)
- {
- kiss_fft_scalar yr, yi;
- yr = S_MUL_SUB(fp->i,t[N4+i] , fp->r,t[i]);
- yi = S_MUL_ADD(fp->r,t[N4+i] ,fp->i,t[i]);
- *yp1 = yr;
- *yp2 = yi;
- fp++;
- yp1 += 2*stride;
- yp2 -= 2*stride;
- }
- }
- RESTORE_STACK;
-}
-
-#define OVERRIDE_clt_mdct_backward
-void clt_mdct_backward(const mdct_lookup *l, kiss_fft_scalar *in, kiss_fft_scalar * OPUS_RESTRICT out,
- const opus_val16 * OPUS_RESTRICT window, int overlap, int shift, int stride, int arch)
-{
- int i;
- int N, N2, N4;
- const kiss_twiddle_scalar *trig;
-
- (void)arch;
-
- N = l->n;
- trig = l->trig;
- for (i=0;i<shift;i++)
- {
- N >>= 1;
- trig += N;
- }
- N2 = N>>1;
- N4 = N>>2;
-
- /* Pre-rotate */
- {
- /* Temp pointers to make it really clear to the compiler what we're doing */
- const kiss_fft_scalar * OPUS_RESTRICT xp1 = in;
- const kiss_fft_scalar * OPUS_RESTRICT xp2 = in+stride*(N2-1);
- kiss_fft_scalar * OPUS_RESTRICT yp = out+(overlap>>1);
- const kiss_twiddle_scalar * OPUS_RESTRICT t = &trig[0];
- const opus_int16 * OPUS_RESTRICT bitrev = l->kfft[shift]->bitrev;
- for(i=0;i<N4;i++)
- {
- int rev;
- kiss_fft_scalar yr, yi;
- rev = *bitrev++;
- yr = S_MUL_ADD(*xp2, t[i] , *xp1, t[N4+i]);
- yi = S_MUL_SUB(*xp1, t[i] , *xp2, t[N4+i]);
- /* We swap real and imag because we use an FFT instead of an IFFT. */
- yp[2*rev+1] = yr;
- yp[2*rev] = yi;
- /* Storing the pre-rotation directly in the bitrev order. */
- xp1+=2*stride;
- xp2-=2*stride;
- }
- }
-
- opus_fft_impl(l->kfft[shift], (kiss_fft_cpx*)(out+(overlap>>1)));
-
- /* Post-rotate and de-shuffle from both ends of the buffer at once to make
- it in-place. */
- {
- kiss_fft_scalar * OPUS_RESTRICT yp0 = out+(overlap>>1);
- kiss_fft_scalar * OPUS_RESTRICT yp1 = out+(overlap>>1)+N2-2;
- const kiss_twiddle_scalar *t = &trig[0];
- /* Loop to (N4+1)>>1 to handle odd N4. When N4 is odd, the
- middle pair will be computed twice. */
- for(i=0;i<(N4+1)>>1;i++)
- {
- kiss_fft_scalar re, im, yr, yi;
- kiss_twiddle_scalar t0, t1;
- /* We swap real and imag because we're using an FFT instead of an IFFT. */
- re = yp0[1];
- im = yp0[0];
- t0 = t[i];
- t1 = t[N4+i];
- /* We'd scale up by 2 here, but instead it's done when mixing the windows */
- yr = S_MUL_ADD(re,t0 , im,t1);
- yi = S_MUL_SUB(re,t1 , im,t0);
- /* We swap real and imag because we're using an FFT instead of an IFFT. */
- re = yp1[1];
- im = yp1[0];
- yp0[0] = yr;
- yp1[1] = yi;
-
- t0 = t[(N4-i-1)];
- t1 = t[(N2-i-1)];
- /* We'd scale up by 2 here, but instead it's done when mixing the windows */
- yr = S_MUL_ADD(re,t0,im,t1);
- yi = S_MUL_SUB(re,t1,im,t0);
- yp1[0] = yr;
- yp0[1] = yi;
- yp0 += 2;
- yp1 -= 2;
- }
- }
-
- /* Mirror on both sides for TDAC */
- {
- kiss_fft_scalar * OPUS_RESTRICT xp1 = out+overlap-1;
- kiss_fft_scalar * OPUS_RESTRICT yp1 = out;
- const opus_val16 * OPUS_RESTRICT wp1 = window;
- const opus_val16 * OPUS_RESTRICT wp2 = window+overlap-1;
-
- for(i = 0; i < overlap/2; i++)
- {
- kiss_fft_scalar x1, x2;
- x1 = *xp1;
- x2 = *yp1;
- *yp1++ = MULT16_32_Q15(*wp2, x2) - MULT16_32_Q15(*wp1, x1);
- *xp1-- = MULT16_32_Q15(*wp1, x2) + MULT16_32_Q15(*wp2, x1);
- wp1++;
- wp2--;
- }
- }
-}
-#endif /* __MDCT_MIPSR1_H__ */
diff --git a/drivers/opus/celt/mips/pitch_mipsr1.h b/drivers/opus/celt/mips/pitch_mipsr1.h
deleted file mode 100644
index a9500aff58..0000000000
--- a/drivers/opus/celt/mips/pitch_mipsr1.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/**
- @file pitch.h
- @brief Pitch 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.
-
- 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 PITCH_MIPSR1_H
-#define PITCH_MIPSR1_H
-
-#define OVERRIDE_DUAL_INNER_PROD
-static inline void dual_inner_prod(const opus_val16 *x, const opus_val16 *y01, const opus_val16 *y02,
- int N, opus_val32 *xy1, opus_val32 *xy2, int arch)
-{
- int j;
- opus_val32 xy01=0;
- opus_val32 xy02=0;
-
- (void)arch;
-
- asm volatile("MULT $ac1, $0, $0");
- asm volatile("MULT $ac2, $0, $0");
- /* Compute the norm of X+Y and X-Y as |X|^2 + |Y|^2 +/- sum(xy) */
- for (j=0;j<N;j++)
- {
- asm volatile("MADD $ac1, %0, %1" : : "r" ((int)x[j]), "r" ((int)y01[j]));
- asm volatile("MADD $ac2, %0, %1" : : "r" ((int)x[j]), "r" ((int)y02[j]));
- ++j;
- asm volatile("MADD $ac1, %0, %1" : : "r" ((int)x[j]), "r" ((int)y01[j]));
- asm volatile("MADD $ac2, %0, %1" : : "r" ((int)x[j]), "r" ((int)y02[j]));
- }
- asm volatile ("mflo %0, $ac1": "=r"(xy01));
- asm volatile ("mflo %0, $ac2": "=r"(xy02));
- *xy1 = xy01;
- *xy2 = xy02;
-}
-
-static inline void xcorr_kernel_mips(const opus_val16 * x,
- const opus_val16 * y, opus_val32 sum[4], int len)
-{
- int j;
- opus_val16 y_0, y_1, y_2, y_3;
-
- opus_int64 sum_0, sum_1, sum_2, sum_3;
- sum_0 = (opus_int64)sum[0];
- sum_1 = (opus_int64)sum[1];
- sum_2 = (opus_int64)sum[2];
- sum_3 = (opus_int64)sum[3];
-
- y_3=0; /* gcc doesn't realize that y_3 can't be used uninitialized */
- y_0=*y++;
- y_1=*y++;
- y_2=*y++;
- for (j=0;j<len-3;j+=4)
- {
- opus_val16 tmp;
- tmp = *x++;
- y_3=*y++;
-
- sum_0 = __builtin_mips_madd( sum_0, tmp, y_0);
- sum_1 = __builtin_mips_madd( sum_1, tmp, y_1);
- sum_2 = __builtin_mips_madd( sum_2, tmp, y_2);
- sum_3 = __builtin_mips_madd( sum_3, tmp, y_3);
-
- tmp=*x++;
- y_0=*y++;
-
- sum_0 = __builtin_mips_madd( sum_0, tmp, y_1 );
- sum_1 = __builtin_mips_madd( sum_1, tmp, y_2 );
- sum_2 = __builtin_mips_madd( sum_2, tmp, y_3);
- sum_3 = __builtin_mips_madd( sum_3, tmp, y_0);
-
- tmp=*x++;
- y_1=*y++;
-
- sum_0 = __builtin_mips_madd( sum_0, tmp, y_2 );
- sum_1 = __builtin_mips_madd( sum_1, tmp, y_3 );
- sum_2 = __builtin_mips_madd( sum_2, tmp, y_0);
- sum_3 = __builtin_mips_madd( sum_3, tmp, y_1);
-
-
- tmp=*x++;
- y_2=*y++;
-
- sum_0 = __builtin_mips_madd( sum_0, tmp, y_3 );
- sum_1 = __builtin_mips_madd( sum_1, tmp, y_0 );
- sum_2 = __builtin_mips_madd( sum_2, tmp, y_1);
- sum_3 = __builtin_mips_madd( sum_3, tmp, y_2);
-
- }
- if (j++<len)
- {
- opus_val16 tmp = *x++;
- y_3=*y++;
-
- sum_0 = __builtin_mips_madd( sum_0, tmp, y_0 );
- sum_1 = __builtin_mips_madd( sum_1, tmp, y_1 );
- sum_2 = __builtin_mips_madd( sum_2, tmp, y_2);
- sum_3 = __builtin_mips_madd( sum_3, tmp, y_3);
- }
-
- if (j++<len)
- {
- opus_val16 tmp=*x++;
- y_0=*y++;
-
- sum_0 = __builtin_mips_madd( sum_0, tmp, y_1 );
- sum_1 = __builtin_mips_madd( sum_1, tmp, y_2 );
- sum_2 = __builtin_mips_madd( sum_2, tmp, y_3);
- sum_3 = __builtin_mips_madd( sum_3, tmp, y_0);
- }
-
- if (j<len)
- {
- opus_val16 tmp=*x++;
- y_1=*y++;
-
- sum_0 = __builtin_mips_madd( sum_0, tmp, y_2 );
- sum_1 = __builtin_mips_madd( sum_1, tmp, y_3 );
- sum_2 = __builtin_mips_madd( sum_2, tmp, y_0);
- sum_3 = __builtin_mips_madd( sum_3, tmp, y_1);
-
- }
-
- sum[0] = (opus_val32)sum_0;
- sum[1] = (opus_val32)sum_1;
- sum[2] = (opus_val32)sum_2;
- sum[3] = (opus_val32)sum_3;
-}
-
-#define OVERRIDE_XCORR_KERNEL
-#define xcorr_kernel(x, y, sum, len, arch) \
- ((void)(arch), xcorr_kernel_mips(x, y, sum, len))
-
-#endif /* PITCH_MIPSR1_H */
diff --git a/drivers/opus/celt/mips/vq_mipsr1.h b/drivers/opus/celt/mips/vq_mipsr1.h
deleted file mode 100644
index c68159972f..0000000000
--- a/drivers/opus/celt/mips/vq_mipsr1.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 __VQ_MIPSR1_H__
-#define __VQ_MIPSR1_H__
-#include "opus/opus_config.h"
-
-#include "opus/celt/mathops.h"
-#include "opus/celt/arch.h"
-
-static unsigned extract_collapse_mask(int *iy, int N, int B);
-static void normalise_residual(int * OPUS_RESTRICT iy, celt_norm * OPUS_RESTRICT X, int N, opus_val32 Ryy, opus_val16 gain);
-static void exp_rotation(celt_norm *X, int len, int dir, int stride, int K, int spread);
-static void renormalise_vector_mips(celt_norm *X, int N, opus_val16 gain, int arch);
-
-#define OVERRIDE_vq_exp_rotation1
-static void exp_rotation1(celt_norm *X, int len, int stride, opus_val16 c, opus_val16 s)
-{
- int i;
- opus_val16 ms;
- celt_norm *Xptr;
- Xptr = X;
- ms = NEG16(s);
- for (i=0;i<len-stride;i++)
- {
- celt_norm x1, x2;
- x1 = Xptr[0];
- x2 = Xptr[stride];
- Xptr[stride] = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x2), s, x1), 15));
- *Xptr++ = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x1), ms, x2), 15));
- }
- Xptr = &X[len-2*stride-1];
- for (i=len-2*stride-1;i>=0;i--)
- {
- celt_norm x1, x2;
- x1 = Xptr[0];
- x2 = Xptr[stride];
- Xptr[stride] = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x2), s, x1), 15));
- *Xptr-- = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x1), ms, x2), 15));
- }
-}
-
-#define OVERRIDE_renormalise_vector
-
-#define renormalise_vector(X, N, gain, arch) \
- (renormalise_vector_mips(X, N, gain, arch))
-
-void renormalise_vector_mips(celt_norm *X, int N, opus_val16 gain, int arch)
-{
- int i;
-#ifdef OPUS_FIXED_POINT
- int k;
-#endif
- opus_val32 E = EPSILON;
- opus_val16 g;
- opus_val32 t;
- celt_norm *xptr = X;
- int X0, X1;
-
- (void)arch;
-
- asm volatile("mult $ac1, $0, $0");
- asm volatile("MTLO %0, $ac1" : :"r" (E));
- /*if(N %4)
- printf("error");*/
- for (i=0;i<N-2;i+=2)
- {
- X0 = (int)*xptr++;
- asm volatile("MADD $ac1, %0, %1" : : "r" (X0), "r" (X0));
-
- X1 = (int)*xptr++;
- asm volatile("MADD $ac1, %0, %1" : : "r" (X1), "r" (X1));
- }
-
- for (;i<N;i++)
- {
- X0 = (int)*xptr++;
- asm volatile("MADD $ac1, %0, %1" : : "r" (X0), "r" (X0));
- }
-
- asm volatile("MFLO %0, $ac1" : "=r" (E));
-#ifdef OPUS_FIXED_POINT
- k = celt_ilog2(E)>>1;
-#endif
- t = VSHR32(E, 2*(k-7));
- g = MULT16_16_P15(celt_rsqrt_norm(t),gain);
-
- xptr = X;
- for (i=0;i<N;i++)
- {
- *xptr = EXTRACT16(PSHR32(MULT16_16(g, *xptr), k+1));
- xptr++;
- }
- /*return celt_sqrt(E);*/
-}
-
-#endif /* __VQ_MIPSR1_H__ */
diff --git a/drivers/opus/celt/modes.c b/drivers/opus/celt/modes.c
deleted file mode 100644
index d628f1468b..0000000000
--- a/drivers/opus/celt/modes.c
+++ /dev/null
@@ -1,439 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Copyright (c) 2008 Gregory Maxwell
- Written by Jean-Marc Valin and Gregory Maxwell */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/celt.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/rate.h"
-#include "opus/celt/os_support.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/quant_bands.h"
-#include "opus/celt/cpu_support.h"
-
-static const opus_int16 eband5ms[] = {
-/*0 200 400 600 800 1k 1.2 1.4 1.6 2k 2.4 2.8 3.2 4k 4.8 5.6 6.8 8k 9.6 12k 15.6 */
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 34, 40, 48, 60, 78, 100
-};
-
-/* Alternate tuning (partially derived from Vorbis) */
-#define BITALLOC_SIZE 11
-/* Bit allocation table in units of 1/32 bit/sample (0.1875 dB SNR) */
-static const unsigned char band_allocation[] = {
-/*0 200 400 600 800 1k 1.2 1.4 1.6 2k 2.4 2.8 3.2 4k 4.8 5.6 6.8 8k 9.6 12k 15.6 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 90, 80, 75, 69, 63, 56, 49, 40, 34, 29, 20, 18, 10, 0, 0, 0, 0, 0, 0, 0, 0,
-110,100, 90, 84, 78, 71, 65, 58, 51, 45, 39, 32, 26, 20, 12, 0, 0, 0, 0, 0, 0,
-118,110,103, 93, 86, 80, 75, 70, 65, 59, 53, 47, 40, 31, 23, 15, 4, 0, 0, 0, 0,
-126,119,112,104, 95, 89, 83, 78, 72, 66, 60, 54, 47, 39, 32, 25, 17, 12, 1, 0, 0,
-134,127,120,114,103, 97, 91, 85, 78, 72, 66, 60, 54, 47, 41, 35, 29, 23, 16, 10, 1,
-144,137,130,124,113,107,101, 95, 88, 82, 76, 70, 64, 57, 51, 45, 39, 33, 26, 15, 1,
-152,145,138,132,123,117,111,105, 98, 92, 86, 80, 74, 67, 61, 55, 49, 43, 36, 20, 1,
-162,155,148,142,133,127,121,115,108,102, 96, 90, 84, 77, 71, 65, 59, 53, 46, 30, 1,
-172,165,158,152,143,137,131,125,118,112,106,100, 94, 87, 81, 75, 69, 63, 56, 45, 20,
-200,200,200,200,200,200,200,200,198,193,188,183,178,173,168,163,158,153,148,129,104,
-};
-
-#ifndef CUSTOM_MODES_ONLY
- #ifdef OPUS_FIXED_POINT
- #include "opus/celt/static_modes_fixed.h"
- #else
- #include "opus/celt/static_modes_float.h"
- #endif
-#endif /* CUSTOM_MODES_ONLY */
-
-#ifndef M_PI
-#define M_PI 3.141592653
-#endif
-
-#ifdef CUSTOM_MODES
-
-/* Defining 25 critical bands for the full 0-20 kHz audio bandwidth
- Taken from http://ccrma.stanford.edu/~jos/bbt/Bark_Frequency_Scale.html */
-#define BARK_BANDS 25
-static const opus_int16 bark_freq[BARK_BANDS+1] = {
- 0, 100, 200, 300, 400,
- 510, 630, 770, 920, 1080,
- 1270, 1480, 1720, 2000, 2320,
- 2700, 3150, 3700, 4400, 5300,
- 6400, 7700, 9500, 12000, 15500,
- 20000};
-
-static opus_int16 *compute_ebands(opus_int32 Fs, int frame_size, int res, int *nbEBands)
-{
- opus_int16 *eBands;
- int i, j, lin, low, high, nBark, offset=0;
-
- /* All modes that have 2.5 ms short blocks use the same definition */
- if (Fs == 400*(opus_int32)frame_size)
- {
- *nbEBands = sizeof(eband5ms)/sizeof(eband5ms[0])-1;
- eBands = opus_alloc(sizeof(opus_int16)*(*nbEBands+1));
- for (i=0;i<*nbEBands+1;i++)
- eBands[i] = eband5ms[i];
- return eBands;
- }
- /* Find the number of critical bands supported by our sampling rate */
- for (nBark=1;nBark<BARK_BANDS;nBark++)
- if (bark_freq[nBark+1]*2 >= Fs)
- break;
-
- /* Find where the linear part ends (i.e. where the spacing is more than min_width */
- for (lin=0;lin<nBark;lin++)
- if (bark_freq[lin+1]-bark_freq[lin] >= res)
- break;
-
- low = (bark_freq[lin]+res/2)/res;
- high = nBark-lin;
- *nbEBands = low+high;
- eBands = opus_alloc(sizeof(opus_int16)*(*nbEBands+2));
-
- if (eBands==NULL)
- return NULL;
-
- /* Linear spacing (min_width) */
- for (i=0;i<low;i++)
- eBands[i] = i;
- if (low>0)
- offset = eBands[low-1]*res - bark_freq[lin-1];
- /* Spacing follows critical bands */
- for (i=0;i<high;i++)
- {
- int target = bark_freq[lin+i];
- /* Round to an even value */
- eBands[i+low] = (target+offset/2+res)/(2*res)*2;
- offset = eBands[i+low]*res - target;
- }
- /* Enforce the minimum spacing at the boundary */
- for (i=0;i<*nbEBands;i++)
- if (eBands[i] < i)
- eBands[i] = i;
- /* Round to an even value */
- eBands[*nbEBands] = (bark_freq[nBark]+res)/(2*res)*2;
- if (eBands[*nbEBands] > frame_size)
- eBands[*nbEBands] = frame_size;
- for (i=1;i<*nbEBands-1;i++)
- {
- if (eBands[i+1]-eBands[i] < eBands[i]-eBands[i-1])
- {
- eBands[i] -= (2*eBands[i]-eBands[i-1]-eBands[i+1])/2;
- }
- }
- /* Remove any empty bands. */
- for (i=j=0;i<*nbEBands;i++)
- if(eBands[i+1]>eBands[j])
- eBands[++j]=eBands[i+1];
- *nbEBands=j;
-
- for (i=1;i<*nbEBands;i++)
- {
- /* Every band must be smaller than the last band. */
- celt_assert(eBands[i]-eBands[i-1]<=eBands[*nbEBands]-eBands[*nbEBands-1]);
- /* Each band must be no larger than twice the size of the previous one. */
- celt_assert(eBands[i+1]-eBands[i]<=2*(eBands[i]-eBands[i-1]));
- }
-
- return eBands;
-}
-
-static void compute_allocation_table(CELTMode *mode)
-{
- int i, j;
- unsigned char *allocVectors;
- int maxBands = sizeof(eband5ms)/sizeof(eband5ms[0])-1;
-
- mode->nbAllocVectors = BITALLOC_SIZE;
- allocVectors = opus_alloc(sizeof(unsigned char)*(BITALLOC_SIZE*mode->nbEBands));
- if (allocVectors==NULL)
- return;
-
- /* Check for standard mode */
- if (mode->Fs == 400*(opus_int32)mode->shortMdctSize)
- {
- for (i=0;i<BITALLOC_SIZE*mode->nbEBands;i++)
- allocVectors[i] = band_allocation[i];
- mode->allocVectors = allocVectors;
- return;
- }
- /* If not the standard mode, interpolate */
- /* Compute per-codec-band allocation from per-critical-band matrix */
- for (i=0;i<BITALLOC_SIZE;i++)
- {
- for (j=0;j<mode->nbEBands;j++)
- {
- int k;
- for (k=0;k<maxBands;k++)
- {
- if (400*(opus_int32)eband5ms[k] > mode->eBands[j]*(opus_int32)mode->Fs/mode->shortMdctSize)
- break;
- }
- if (k>maxBands-1)
- allocVectors[i*mode->nbEBands+j] = band_allocation[i*maxBands + maxBands-1];
- else {
- opus_int32 a0, a1;
- a1 = mode->eBands[j]*(opus_int32)mode->Fs/mode->shortMdctSize - 400*(opus_int32)eband5ms[k-1];
- a0 = 400*(opus_int32)eband5ms[k] - mode->eBands[j]*(opus_int32)mode->Fs/mode->shortMdctSize;
- allocVectors[i*mode->nbEBands+j] = (a0*band_allocation[i*maxBands+k-1]
- + a1*band_allocation[i*maxBands+k])/(a0+a1);
- }
- }
- }
-
- /*printf ("\n");
- for (i=0;i<BITALLOC_SIZE;i++)
- {
- for (j=0;j<mode->nbEBands;j++)
- printf ("%d ", allocVectors[i*mode->nbEBands+j]);
- printf ("\n");
- }
- exit(0);*/
-
- mode->allocVectors = allocVectors;
-}
-
-#endif /* CUSTOM_MODES */
-
-CELTMode *opus_custom_mode_create(opus_int32 Fs, int frame_size, int *error)
-{
- int i;
-#ifdef CUSTOM_MODES
- CELTMode *mode=NULL;
- int res;
- opus_val16 *window;
- opus_int16 *logN;
- int LM;
- int arch = opus_select_arch();
- ALLOC_STACK;
-#if !defined(VAR_ARRAYS) && !defined(USE_ALLOCA)
- if (global_stack==NULL)
- goto failure;
-#endif
-#endif
-
-#ifndef CUSTOM_MODES_ONLY
- for (i=0;i<TOTAL_MODES;i++)
- {
- int j;
- for (j=0;j<4;j++)
- {
- if (Fs == static_mode_list[i]->Fs &&
- (frame_size<<j) == static_mode_list[i]->shortMdctSize*static_mode_list[i]->nbShortMdcts)
- {
- if (error)
- *error = OPUS_OK;
- return (CELTMode*)static_mode_list[i];
- }
- }
- }
-#endif /* CUSTOM_MODES_ONLY */
-
-#ifndef CUSTOM_MODES
- if (error)
- *error = OPUS_BAD_ARG;
- return NULL;
-#else
-
- /* The good thing here is that permutation of the arguments will automatically be invalid */
-
- if (Fs < 8000 || Fs > 96000)
- {
- if (error)
- *error = OPUS_BAD_ARG;
- return NULL;
- }
- if (frame_size < 40 || frame_size > 1024 || frame_size%2!=0)
- {
- if (error)
- *error = OPUS_BAD_ARG;
- return NULL;
- }
- /* Frames of less than 1ms are not supported. */
- if ((opus_int32)frame_size*1000 < Fs)
- {
- if (error)
- *error = OPUS_BAD_ARG;
- return NULL;
- }
-
- if ((opus_int32)frame_size*75 >= Fs && (frame_size%16)==0)
- {
- LM = 3;
- } else if ((opus_int32)frame_size*150 >= Fs && (frame_size%8)==0)
- {
- LM = 2;
- } else if ((opus_int32)frame_size*300 >= Fs && (frame_size%4)==0)
- {
- LM = 1;
- } else
- {
- LM = 0;
- }
-
- /* Shorts longer than 3.3ms are not supported. */
- if ((opus_int32)(frame_size>>LM)*300 > Fs)
- {
- if (error)
- *error = OPUS_BAD_ARG;
- return NULL;
- }
-
- mode = opus_alloc(sizeof(CELTMode));
- if (mode==NULL)
- goto failure;
- mode->Fs = Fs;
-
- /* Pre/de-emphasis depends on sampling rate. The "standard" pre-emphasis
- is defined as A(z) = 1 - 0.85*z^-1 at 48 kHz. Other rates should
- approximate that. */
- if(Fs < 12000) /* 8 kHz */
- {
- mode->preemph[0] = QCONST16(0.3500061035f, 15);
- mode->preemph[1] = -QCONST16(0.1799926758f, 15);
- mode->preemph[2] = QCONST16(0.2719968125f, SIG_SHIFT); /* exact 1/preemph[3] */
- mode->preemph[3] = QCONST16(3.6765136719f, 13);
- } else if(Fs < 24000) /* 16 kHz */
- {
- mode->preemph[0] = QCONST16(0.6000061035f, 15);
- mode->preemph[1] = -QCONST16(0.1799926758f, 15);
- mode->preemph[2] = QCONST16(0.4424998650f, SIG_SHIFT); /* exact 1/preemph[3] */
- mode->preemph[3] = QCONST16(2.2598876953f, 13);
- } else if(Fs < 40000) /* 32 kHz */
- {
- mode->preemph[0] = QCONST16(0.7799987793f, 15);
- mode->preemph[1] = -QCONST16(0.1000061035f, 15);
- mode->preemph[2] = QCONST16(0.7499771125f, SIG_SHIFT); /* exact 1/preemph[3] */
- mode->preemph[3] = QCONST16(1.3333740234f, 13);
- } else /* 48 kHz */
- {
- mode->preemph[0] = QCONST16(0.8500061035f, 15);
- mode->preemph[1] = QCONST16(0.0f, 15);
- mode->preemph[2] = QCONST16(1.f, SIG_SHIFT);
- mode->preemph[3] = QCONST16(1.f, 13);
- }
-
- mode->maxLM = LM;
- mode->nbShortMdcts = 1<<LM;
- mode->shortMdctSize = frame_size/mode->nbShortMdcts;
- res = (mode->Fs+mode->shortMdctSize)/(2*mode->shortMdctSize);
-
- mode->eBands = compute_ebands(Fs, mode->shortMdctSize, res, &mode->nbEBands);
- if (mode->eBands==NULL)
- goto failure;
-#if !defined(SMALL_FOOTPRINT)
- /* Make sure we don't allocate a band larger than our PVQ table.
- 208 should be enough, but let's be paranoid. */
- if ((mode->eBands[mode->nbEBands] - mode->eBands[mode->nbEBands-1])<<LM >
- 208) {
- goto failure;
- }
-#endif
-
- mode->effEBands = mode->nbEBands;
- while (mode->eBands[mode->effEBands] > mode->shortMdctSize)
- mode->effEBands--;
-
- /* Overlap must be divisible by 4 */
- mode->overlap = ((mode->shortMdctSize>>2)<<2);
-
- compute_allocation_table(mode);
- if (mode->allocVectors==NULL)
- goto failure;
-
- window = (opus_val16*)opus_alloc(mode->overlap*sizeof(opus_val16));
- if (window==NULL)
- goto failure;
-
-#ifndef OPUS_FIXED_POINT
- for (i=0;i<mode->overlap;i++)
- window[i] = Q15ONE*sin(.5*M_PI* sin(.5*M_PI*(i+.5)/mode->overlap) * sin(.5*M_PI*(i+.5)/mode->overlap));
-#else
- for (i=0;i<mode->overlap;i++)
- window[i] = MIN32(32767,floor(.5+32768.*sin(.5*M_PI* sin(.5*M_PI*(i+.5)/mode->overlap) * sin(.5*M_PI*(i+.5)/mode->overlap))));
-#endif
- mode->window = window;
-
- logN = (opus_int16*)opus_alloc(mode->nbEBands*sizeof(opus_int16));
- if (logN==NULL)
- goto failure;
-
- for (i=0;i<mode->nbEBands;i++)
- logN[i] = log2_frac(mode->eBands[i+1]-mode->eBands[i], BITRES);
- mode->logN = logN;
-
- compute_pulse_cache(mode, mode->maxLM);
-
- if (clt_mdct_init(&mode->mdct, 2*mode->shortMdctSize*mode->nbShortMdcts,
- mode->maxLM, arch) == 0)
- goto failure;
-
- if (error)
- *error = OPUS_OK;
-
- return mode;
-failure:
- if (error)
- *error = OPUS_ALLOC_FAIL;
- if (mode!=NULL)
- opus_custom_mode_destroy(mode);
- return NULL;
-#endif /* !CUSTOM_MODES */
-}
-
-#ifdef CUSTOM_MODES
-void opus_custom_mode_destroy(CELTMode *mode)
-{
- int arch = opus_select_arch();
-
- if (mode == NULL)
- return;
-#ifndef CUSTOM_MODES_ONLY
- {
- int i;
- for (i=0;i<TOTAL_MODES;i++)
- {
- if (mode == static_mode_list[i])
- {
- return;
- }
- }
- }
-#endif /* CUSTOM_MODES_ONLY */
- opus_free((opus_int16*)mode->eBands);
- opus_free((opus_int16*)mode->allocVectors);
-
- opus_free((opus_val16*)mode->window);
- opus_free((opus_int16*)mode->logN);
-
- opus_free((opus_int16*)mode->cache.index);
- opus_free((unsigned char*)mode->cache.bits);
- opus_free((unsigned char*)mode->cache.caps);
- clt_mdct_clear(&mode->mdct, arch);
-
- opus_free((CELTMode *)mode);
-}
-#endif
diff --git a/drivers/opus/celt/modes.h b/drivers/opus/celt/modes.h
deleted file mode 100644
index a5f1c30ac9..0000000000
--- a/drivers/opus/celt/modes.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Copyright (c) 2008 Gregory Maxwell
- Written by Jean-Marc Valin and Gregory Maxwell */
-/*
- 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.
-
- 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 MODES_H
-#define MODES_H
-
-#include "opus/opus_types.h"
-#include "opus/celt/celt.h"
-#include "opus/celt/arch.h"
-#include "opus/celt/mdct.h"
-#include "opus/celt/entenc.h"
-#include "opus/celt/entdec.h"
-
-#define MAX_PERIOD 1024
-
-typedef struct {
- int size;
- const opus_int16 *index;
- const unsigned char *bits;
- const unsigned char *caps;
-} PulseCache;
-
-/** Mode definition (opaque)
- @brief Mode definition
- */
-struct OpusCustomMode {
- opus_int32 Fs;
- int overlap;
-
- int nbEBands;
- int effEBands;
- opus_val16 preemph[4];
- const opus_int16 *eBands; /**< Definition for each "pseudo-critical band" */
-
- int maxLM;
- int nbShortMdcts;
- int shortMdctSize;
-
- int nbAllocVectors; /**< Number of lines in the matrix below */
- const unsigned char *allocVectors; /**< Number of bits in each band for several rates */
- const opus_int16 *logN;
-
- const opus_val16 *window;
- mdct_lookup mdct;
- PulseCache cache;
-};
-
-
-#endif
diff --git a/drivers/opus/celt/opus_custom_demo.c b/drivers/opus/celt/opus_custom_demo.c
deleted file mode 100644
index 956bec4e45..0000000000
--- a/drivers/opus/celt/opus_custom_demo.c
+++ /dev/null
@@ -1,207 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/opus_custom.h"
-#include "opus/celt/arch.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-
-#define MAX_PACKET 1275
-
-int main(int argc, char *argv[])
-{
- int err;
- char *inFile, *outFile;
- FILE *fin, *fout;
- OpusCustomMode *mode=NULL;
- OpusCustomEncoder *enc;
- OpusCustomDecoder *dec;
- int len;
- opus_int32 frame_size, channels, rate;
- int bytes_per_packet;
- unsigned char data[MAX_PACKET];
- int complexity;
-#if !(defined (FIXED_POINT) && !defined(CUSTOM_MODES)) && defined(RESYNTH)
- int i;
- double rmsd = 0;
-#endif
- int count = 0;
- opus_int32 skip;
- opus_int16 *in, *out;
- if (argc != 9 && argc != 8 && argc != 7)
- {
- fprintf (stderr, "Usage: test_opus_custom <rate> <channels> <frame size> "
- " <bytes per packet> [<complexity> [packet loss rate]] "
- "<input> <output>\n");
- return 1;
- }
-
- rate = (opus_int32)atol(argv[1]);
- channels = atoi(argv[2]);
- frame_size = atoi(argv[3]);
- mode = opus_custom_mode_create(rate, frame_size, NULL);
- if (mode == NULL)
- {
- fprintf(stderr, "failed to create a mode\n");
- return 1;
- }
-
- bytes_per_packet = atoi(argv[4]);
- if (bytes_per_packet < 0 || bytes_per_packet > MAX_PACKET)
- {
- fprintf (stderr, "bytes per packet must be between 0 and %d\n",
- MAX_PACKET);
- return 1;
- }
-
- inFile = argv[argc-2];
- fin = fopen(inFile, "rb");
- if (!fin)
- {
- fprintf (stderr, "Could not open input file %s\n", argv[argc-2]);
- return 1;
- }
- outFile = argv[argc-1];
- fout = fopen(outFile, "wb+");
- if (!fout)
- {
- fprintf (stderr, "Could not open output file %s\n", argv[argc-1]);
- fclose(fin);
- return 1;
- }
-
- enc = opus_custom_encoder_create(mode, channels, &err);
- if (err != 0)
- {
- fprintf(stderr, "Failed to create the encoder: %s\n", opus_strerror(err));
- fclose(fin);
- fclose(fout);
- return 1;
- }
- dec = opus_custom_decoder_create(mode, channels, &err);
- if (err != 0)
- {
- fprintf(stderr, "Failed to create the decoder: %s\n", opus_strerror(err));
- fclose(fin);
- fclose(fout);
- return 1;
- }
- opus_custom_decoder_ctl(dec, OPUS_GET_LOOKAHEAD(&skip));
-
- if (argc>7)
- {
- complexity=atoi(argv[5]);
- opus_custom_encoder_ctl(enc,OPUS_SET_COMPLEXITY(complexity));
- }
-
- in = (opus_int16*)malloc(frame_size*channels*sizeof(opus_int16));
- out = (opus_int16*)malloc(frame_size*channels*sizeof(opus_int16));
-
- while (!feof(fin))
- {
- int ret;
- err = fread(in, sizeof(short), frame_size*channels, fin);
- if (feof(fin))
- break;
- len = opus_custom_encode(enc, in, frame_size, data, bytes_per_packet);
- if (len <= 0)
- fprintf (stderr, "opus_custom_encode() failed: %s\n", opus_strerror(len));
-
- /* This is for simulating bit errors */
-#if 0
- int errors = 0;
- int eid = 0;
- /* This simulates random bit error */
- for (i=0;i<len*8;i++)
- {
- if (rand()%atoi(argv[8])==0)
- {
- if (i<64)
- {
- errors++;
- eid = i;
- }
- data[i/8] ^= 1<<(7-(i%8));
- }
- }
- if (errors == 1)
- data[eid/8] ^= 1<<(7-(eid%8));
- else if (errors%2 == 1)
- data[rand()%8] ^= 1<<rand()%8;
-#endif
-
-#if 1 /* Set to zero to use the encoder's output instead */
- /* This is to simulate packet loss */
- if (argc==9 && rand()%1000<atoi(argv[argc-3]))
- /*if (errors && (errors%2==0))*/
- ret = opus_custom_decode(dec, NULL, len, out, frame_size);
- else
- ret = opus_custom_decode(dec, data, len, out, frame_size);
- if (ret < 0)
- fprintf(stderr, "opus_custom_decode() failed: %s\n", opus_strerror(ret));
-#else
- for (i=0;i<ret*channels;i++)
- out[i] = in[i];
-#endif
-#if !(defined (FIXED_POINT) && !defined(CUSTOM_MODES)) && defined(RESYNTH)
- for (i=0;i<ret*channels;i++)
- {
- rmsd += (in[i]-out[i])*1.0*(in[i]-out[i]);
- /*out[i] -= in[i];*/
- }
-#endif
- count++;
- fwrite(out+skip*channels, sizeof(short), (ret-skip)*channels, fout);
- skip = 0;
- }
- PRINT_MIPS(stderr);
-
- opus_custom_encoder_destroy(enc);
- opus_custom_decoder_destroy(dec);
- fclose(fin);
- fclose(fout);
- opus_custom_mode_destroy(mode);
- free(in);
- free(out);
-#if !(defined (FIXED_POINT) && !defined(CUSTOM_MODES)) && defined(RESYNTH)
- if (rmsd > 0)
- {
- rmsd = sqrt(rmsd/(1.0*frame_size*channels*count));
- fprintf (stderr, "Error: encoder doesn't match decoder\n");
- fprintf (stderr, "RMS mismatch is %f\n", rmsd);
- return 1;
- } else {
- fprintf (stderr, "Encoder matches decoder!!\n");
- }
-#endif
- return 0;
-}
-
diff --git a/drivers/opus/celt/os_support.h b/drivers/opus/celt/os_support.h
deleted file mode 100644
index 5e36b3ae56..0000000000
--- a/drivers/opus/celt/os_support.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright (C) 2007 Jean-Marc Valin
-
- File: os_support.h
- This is the (tiny) OS abstraction layer. Aside from math.h, this is the
- only place where system headers are allowed.
-
- 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.
-
- 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 OS_SUPPORT_H
-#define OS_SUPPORT_H
-
-#ifdef CUSTOM_SUPPORT
-# include "custom_support.h"
-#endif
-
-#include "opus/opus_types.h"
-#include "opus/opus_defines.h"
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-/** Opus wrapper for malloc(). To do your own dynamic allocation, all you need to do is replace this function and opus_free */
-#ifndef OVERRIDE_OPUS_ALLOC
-static OPUS_INLINE void *opus_alloc (size_t size)
-{
- return malloc(size);
-}
-#endif
-
-/** Same as celt_alloc(), except that the area is only needed inside a CELT call (might cause problem with wideband though) */
-#ifndef OVERRIDE_OPUS_ALLOC_SCRATCH
-static OPUS_INLINE void *opus_alloc_scratch (size_t size)
-{
- /* Scratch space doesn't need to be cleared */
- return opus_alloc(size);
-}
-#endif
-
-/** Opus wrapper for free(). To do your own dynamic allocation, all you need to do is replace this function and opus_alloc */
-#ifndef OVERRIDE_OPUS_FREE
-static OPUS_INLINE void opus_free (void *ptr)
-{
- free(ptr);
-}
-#endif
-
-/** Copy n elements from src to dst. The 0* term provides compile-time type checking */
-#ifndef OVERRIDE_OPUS_COPY
-#define OPUS_COPY(dst, src, n) (memcpy((dst), (src), (n)*sizeof(*(dst)) + 0*((dst)-(src)) ))
-#endif
-
-/** Copy n elements from src to dst, allowing overlapping regions. The 0* term
- provides compile-time type checking */
-#ifndef OVERRIDE_OPUS_MOVE
-#define OPUS_MOVE(dst, src, n) (memmove((dst), (src), (n)*sizeof(*(dst)) + 0*((dst)-(src)) ))
-#endif
-
-/** Set n elements of dst to zero */
-#ifndef OVERRIDE_OPUS_CLEAR
-#define OPUS_CLEAR(dst, n) (memset((dst), 0, (n)*sizeof(*(dst))))
-#endif
-
-/*#ifdef __GNUC__
-#pragma GCC poison printf sprintf
-#pragma GCC poison malloc free realloc calloc
-#endif*/
-
-#endif /* OS_SUPPORT_H */
-
diff --git a/drivers/opus/celt/pitch.c b/drivers/opus/celt/pitch.c
deleted file mode 100644
index 1bcbabe943..0000000000
--- a/drivers/opus/celt/pitch.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/**
- @file pitch.c
- @brief Pitch 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/pitch.h"
-#include "opus/celt/os_support.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/celt_lpc.h"
-
-static void find_best_pitch(opus_val32 *xcorr, opus_val16 *y, int len,
- int max_pitch, int *best_pitch
-#ifdef OPUS_FIXED_POINT
- , int yshift, opus_val32 maxcorr
-#endif
- )
-{
- int i, j;
- opus_val32 Syy=1;
- opus_val16 best_num[2];
- opus_val32 best_den[2];
-#ifdef OPUS_FIXED_POINT
- int xshift;
-
- xshift = celt_ilog2(maxcorr)-14;
-#endif
-
- best_num[0] = -1;
- best_num[1] = -1;
- best_den[0] = 0;
- best_den[1] = 0;
- best_pitch[0] = 0;
- best_pitch[1] = 1;
- for (j=0;j<len;j++)
- Syy = ADD32(Syy, SHR32(MULT16_16(y[j],y[j]), yshift));
- for (i=0;i<max_pitch;i++)
- {
- if (xcorr[i]>0)
- {
- opus_val16 num;
- opus_val32 xcorr16;
- xcorr16 = EXTRACT16(VSHR32(xcorr[i], xshift));
-#ifndef OPUS_FIXED_POINT
- /* Considering the range of xcorr16, this should avoid both underflows
- and overflows (inf) when squaring xcorr16 */
- xcorr16 *= 1e-12f;
-#endif
- num = MULT16_16_Q15(xcorr16,xcorr16);
- if (MULT16_32_Q15(num,best_den[1]) > MULT16_32_Q15(best_num[1],Syy))
- {
- if (MULT16_32_Q15(num,best_den[0]) > MULT16_32_Q15(best_num[0],Syy))
- {
- best_num[1] = best_num[0];
- best_den[1] = best_den[0];
- best_pitch[1] = best_pitch[0];
- best_num[0] = num;
- best_den[0] = Syy;
- best_pitch[0] = i;
- } else {
- best_num[1] = num;
- best_den[1] = Syy;
- best_pitch[1] = i;
- }
- }
- }
- Syy += SHR32(MULT16_16(y[i+len],y[i+len]),yshift) - SHR32(MULT16_16(y[i],y[i]),yshift);
- Syy = MAX32(1, Syy);
- }
-}
-
-static void celt_fir5(const opus_val16 *x,
- const opus_val16 *num,
- opus_val16 *y,
- int N,
- opus_val16 *mem)
-{
- int i;
- opus_val16 num0, num1, num2, num3, num4;
- opus_val32 mem0, mem1, mem2, mem3, mem4;
- num0=num[0];
- num1=num[1];
- num2=num[2];
- num3=num[3];
- num4=num[4];
- mem0=mem[0];
- mem1=mem[1];
- mem2=mem[2];
- mem3=mem[3];
- mem4=mem[4];
- for (i=0;i<N;i++)
- {
- opus_val32 sum = SHL32(EXTEND32(x[i]), SIG_SHIFT);
- sum = MAC16_16(sum,num0,mem0);
- sum = MAC16_16(sum,num1,mem1);
- sum = MAC16_16(sum,num2,mem2);
- sum = MAC16_16(sum,num3,mem3);
- sum = MAC16_16(sum,num4,mem4);
- mem4 = mem3;
- mem3 = mem2;
- mem2 = mem1;
- mem1 = mem0;
- mem0 = x[i];
- y[i] = ROUND16(sum, SIG_SHIFT);
- }
- mem[0]=mem0;
- mem[1]=mem1;
- mem[2]=mem2;
- mem[3]=mem3;
- mem[4]=mem4;
-}
-
-
-void pitch_downsample(celt_sig * OPUS_RESTRICT x[], opus_val16 * OPUS_RESTRICT x_lp,
- int len, int C, int arch)
-{
- int i;
- opus_val32 ac[5];
- opus_val16 tmp=Q15ONE;
- opus_val16 lpc[4], mem[5]={0,0,0,0,0};
- opus_val16 lpc2[5];
- opus_val16 c1 = QCONST16(.8f,15);
-#ifdef OPUS_FIXED_POINT
- int shift;
- opus_val32 maxabs = celt_maxabs32(x[0], len);
- if (C==2)
- {
- opus_val32 maxabs_1 = celt_maxabs32(x[1], len);
- maxabs = MAX32(maxabs, maxabs_1);
- }
- if (maxabs<1)
- maxabs=1;
- shift = celt_ilog2(maxabs)-10;
- if (shift<0)
- shift=0;
- if (C==2)
- shift++;
-#endif
- for (i=1;i<len>>1;i++)
- x_lp[i] = SHR32(HALF32(HALF32(x[0][(2*i-1)]+x[0][(2*i+1)])+x[0][2*i]), shift);
- x_lp[0] = SHR32(HALF32(HALF32(x[0][1])+x[0][0]), shift);
- if (C==2)
- {
- for (i=1;i<len>>1;i++)
- x_lp[i] += SHR32(HALF32(HALF32(x[1][(2*i-1)]+x[1][(2*i+1)])+x[1][2*i]), shift);
- x_lp[0] += SHR32(HALF32(HALF32(x[1][1])+x[1][0]), shift);
- }
-
- _celt_autocorr(x_lp, ac, NULL, 0,
- 4, len>>1, arch);
-
- /* Noise floor -40 dB */
-#ifdef OPUS_FIXED_POINT
- ac[0] += SHR32(ac[0],13);
-#else
- ac[0] *= 1.0001f;
-#endif
- /* Lag windowing */
- for (i=1;i<=4;i++)
- {
- /*ac[i] *= exp(-.5*(2*M_PI*.002*i)*(2*M_PI*.002*i));*/
-#ifdef OPUS_FIXED_POINT
- ac[i] -= MULT16_32_Q15(2*i*i, ac[i]);
-#else
- ac[i] -= ac[i]*(.008f*i)*(.008f*i);
-#endif
- }
-
- _celt_lpc(lpc, ac, 4);
- for (i=0;i<4;i++)
- {
- tmp = MULT16_16_Q15(QCONST16(.9f,15), tmp);
- lpc[i] = MULT16_16_Q15(lpc[i], tmp);
- }
- /* Add a zero */
- lpc2[0] = lpc[0] + QCONST16(.8f,SIG_SHIFT);
- lpc2[1] = lpc[1] + MULT16_16_Q15(c1,lpc[0]);
- lpc2[2] = lpc[2] + MULT16_16_Q15(c1,lpc[1]);
- lpc2[3] = lpc[3] + MULT16_16_Q15(c1,lpc[2]);
- lpc2[4] = MULT16_16_Q15(c1,lpc[3]);
- celt_fir5(x_lp, lpc2, x_lp, len>>1, mem);
-}
-
-/* Pure C implementation. */
-#ifdef OPUS_FIXED_POINT
-opus_val32
-#else
-void
-#endif
-#if defined(OVERRIDE_PITCH_XCORR)
-celt_pitch_xcorr_c(const opus_val16 *_x, const opus_val16 *_y,
- opus_val32 *xcorr, int len, int max_pitch)
-#else
-celt_pitch_xcorr(const opus_val16 *_x, const opus_val16 *_y,
- opus_val32 *xcorr, int len, int max_pitch, int arch)
-#endif
-{
-
-#if 0 /* This is a simple version of the pitch correlation that should work
- well on DSPs like Blackfin and TI C5x/C6x */
- int i, j;
-#ifdef OPUS_FIXED_POINT
- opus_val32 maxcorr=1;
-#endif
-#if !defined(OVERRIDE_PITCH_XCORR)
- (void)arch;
-#endif
- for (i=0;i<max_pitch;i++)
- {
- opus_val32 sum = 0;
- for (j=0;j<len;j++)
- sum = MAC16_16(sum, _x[j], _y[i+j]);
- xcorr[i] = sum;
-#ifdef OPUS_FIXED_POINT
- maxcorr = MAX32(maxcorr, sum);
-#endif
- }
-#ifdef OPUS_FIXED_POINT
- return maxcorr;
-#endif
-
-#else /* Unrolled version of the pitch correlation -- runs faster on x86 and ARM */
- int i;
- /*The EDSP version requires that max_pitch is at least 1, and that _x is
- 32-bit aligned.
- Since it's hard to put asserts in assembly, put them here.*/
-#ifdef OPUS_FIXED_POINT
- opus_val32 maxcorr=1;
-#endif
- celt_assert(max_pitch>0);
- celt_assert((((unsigned char *)_x-(unsigned char *)NULL)&3)==0);
- for (i=0;i<max_pitch-3;i+=4)
- {
- opus_val32 sum[4]={0,0,0,0};
-#if defined(OVERRIDE_PITCH_XCORR)
- xcorr_kernel_c(_x, _y+i, sum, len);
-#else
- xcorr_kernel(_x, _y+i, sum, len, arch);
-#endif
- xcorr[i]=sum[0];
- xcorr[i+1]=sum[1];
- xcorr[i+2]=sum[2];
- xcorr[i+3]=sum[3];
-#ifdef OPUS_FIXED_POINT
- sum[0] = MAX32(sum[0], sum[1]);
- sum[2] = MAX32(sum[2], sum[3]);
- sum[0] = MAX32(sum[0], sum[2]);
- maxcorr = MAX32(maxcorr, sum[0]);
-#endif
- }
- /* In case max_pitch isn't a multiple of 4, do non-unrolled version. */
- for (;i<max_pitch;i++)
- {
- opus_val32 sum;
-#if defined(OVERRIDE_PITCH_XCORR)
- sum = celt_inner_prod_c(_x, _y+i, len);
-#else
- sum = celt_inner_prod(_x, _y+i, len, arch);
-#endif
- xcorr[i] = sum;
-#ifdef OPUS_FIXED_POINT
- maxcorr = MAX32(maxcorr, sum);
-#endif
- }
-#ifdef OPUS_FIXED_POINT
- return maxcorr;
-#endif
-#endif
-}
-
-void pitch_search(const opus_val16 * OPUS_RESTRICT x_lp, opus_val16 * OPUS_RESTRICT y,
- int len, int max_pitch, int *pitch, int arch)
-{
- int i, j;
- int lag;
- int best_pitch[2]={0,0};
- VARDECL(opus_val16, x_lp4);
- VARDECL(opus_val16, y_lp4);
- VARDECL(opus_val32, xcorr);
-#ifdef OPUS_FIXED_POINT
- opus_val32 maxcorr;
- opus_val32 xmax, ymax;
- int shift=0;
-#endif
- int offset;
-
- SAVE_STACK;
-
- celt_assert(len>0);
- celt_assert(max_pitch>0);
- lag = len+max_pitch;
-
- ALLOC(x_lp4, len>>2, opus_val16);
- ALLOC(y_lp4, lag>>2, opus_val16);
- ALLOC(xcorr, max_pitch>>1, opus_val32);
-
- /* Downsample by 2 again */
- for (j=0;j<len>>2;j++)
- x_lp4[j] = x_lp[2*j];
- for (j=0;j<lag>>2;j++)
- y_lp4[j] = y[2*j];
-
-#ifdef OPUS_FIXED_POINT
- xmax = celt_maxabs16(x_lp4, len>>2);
- ymax = celt_maxabs16(y_lp4, lag>>2);
- shift = celt_ilog2(MAX32(1, MAX32(xmax, ymax)))-11;
- if (shift>0)
- {
- for (j=0;j<len>>2;j++)
- x_lp4[j] = SHR16(x_lp4[j], shift);
- for (j=0;j<lag>>2;j++)
- y_lp4[j] = SHR16(y_lp4[j], shift);
- /* Use double the shift for a MAC */
- shift *= 2;
- } else {
- shift = 0;
- }
-#endif
-
- /* Coarse search with 4x decimation */
-
-#ifdef OPUS_FIXED_POINT
- maxcorr =
-#endif
- celt_pitch_xcorr(x_lp4, y_lp4, xcorr, len>>2, max_pitch>>2, arch);
-
- find_best_pitch(xcorr, y_lp4, len>>2, max_pitch>>2, best_pitch
-#ifdef OPUS_FIXED_POINT
- , 0, maxcorr
-#endif
- );
-
- /* Finer search with 2x decimation */
-#ifdef OPUS_FIXED_POINT
- maxcorr=1;
-#endif
- for (i=0;i<max_pitch>>1;i++)
- {
- opus_val32 sum;
- xcorr[i] = 0;
- if (abs(i-2*best_pitch[0])>2 && abs(i-2*best_pitch[1])>2)
- continue;
-#ifdef OPUS_FIXED_POINT
- sum = 0;
- for (j=0;j<len>>1;j++)
- sum += SHR32(MULT16_16(x_lp[j],y[i+j]), shift);
-#else
- sum = celt_inner_prod_c(x_lp, y+i, len>>1);
-#endif
- xcorr[i] = MAX32(-1, sum);
-#ifdef OPUS_FIXED_POINT
- maxcorr = MAX32(maxcorr, sum);
-#endif
- }
- find_best_pitch(xcorr, y, len>>1, max_pitch>>1, best_pitch
-#ifdef OPUS_FIXED_POINT
- , shift+1, maxcorr
-#endif
- );
-
- /* Refine by pseudo-interpolation */
- if (best_pitch[0]>0 && best_pitch[0]<(max_pitch>>1)-1)
- {
- opus_val32 a, b, c;
- a = xcorr[best_pitch[0]-1];
- b = xcorr[best_pitch[0]];
- c = xcorr[best_pitch[0]+1];
- if ((c-a) > MULT16_32_Q15(QCONST16(.7f,15),b-a))
- offset = 1;
- else if ((a-c) > MULT16_32_Q15(QCONST16(.7f,15),b-c))
- offset = -1;
- else
- offset = 0;
- } else {
- offset = 0;
- }
- *pitch = 2*best_pitch[0]-offset;
-
- RESTORE_STACK;
-}
-
-static const int second_check[16] = {0, 0, 3, 2, 3, 2, 5, 2, 3, 2, 3, 2, 5, 2, 3, 2};
-opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod,
- int N, int *T0_, int prev_period, opus_val16 prev_gain, int arch)
-{
- int k, i, T, T0;
- opus_val16 g, g0;
- opus_val16 pg;
- opus_val32 xy,xx,yy,xy2;
- opus_val32 xcorr[3];
- opus_val32 best_xy, best_yy;
- int offset;
- int minperiod0;
- VARDECL(opus_val32, yy_lookup);
- SAVE_STACK;
-
- minperiod0 = minperiod;
- maxperiod /= 2;
- minperiod /= 2;
- *T0_ /= 2;
- prev_period /= 2;
- N /= 2;
- x += maxperiod;
- if (*T0_>=maxperiod)
- *T0_=maxperiod-1;
-
- T = T0 = *T0_;
- ALLOC(yy_lookup, maxperiod+1, opus_val32);
- dual_inner_prod(x, x, x-T0, N, &xx, &xy, arch);
- yy_lookup[0] = xx;
- yy=xx;
- for (i=1;i<=maxperiod;i++)
- {
- yy = yy+MULT16_16(x[-i],x[-i])-MULT16_16(x[N-i],x[N-i]);
- yy_lookup[i] = MAX32(0, yy);
- }
- yy = yy_lookup[T0];
- best_xy = xy;
- best_yy = yy;
-#ifdef OPUS_FIXED_POINT
- {
- opus_val32 x2y2;
- int sh, t;
- x2y2 = 1+HALF32(MULT32_32_Q31(xx,yy));
- sh = celt_ilog2(x2y2)>>1;
- t = VSHR32(x2y2, 2*(sh-7));
- g = g0 = VSHR32(MULT16_32_Q15(celt_rsqrt_norm(t), xy),sh+1);
- }
-#else
- g = g0 = xy/celt_sqrt(1+xx*yy);
-#endif
- /* Look for any pitch at T/k */
- for (k=2;k<=15;k++)
- {
- int T1, T1b;
- opus_val16 g1;
- opus_val16 cont=0;
- opus_val16 thresh;
- T1 = celt_udiv(2*T0+k, 2*k);
- if (T1 < minperiod)
- break;
- /* Look for another strong correlation at T1b */
- if (k==2)
- {
- if (T1+T0>maxperiod)
- T1b = T0;
- else
- T1b = T0+T1;
- } else
- {
- T1b = celt_udiv(2*second_check[k]*T0+k, 2*k);
- }
- dual_inner_prod(x, &x[-T1], &x[-T1b], N, &xy, &xy2, arch);
- xy += xy2;
- yy = yy_lookup[T1] + yy_lookup[T1b];
-#ifdef OPUS_FIXED_POINT
- {
- opus_val32 x2y2;
- int sh, t;
- x2y2 = 1+MULT32_32_Q31(xx,yy);
- sh = celt_ilog2(x2y2)>>1;
- t = VSHR32(x2y2, 2*(sh-7));
- g1 = VSHR32(MULT16_32_Q15(celt_rsqrt_norm(t), xy),sh+1);
- }
-#else
- g1 = xy/celt_sqrt(1+2.f*xx*1.f*yy);
-#endif
- if (abs(T1-prev_period)<=1)
- cont = prev_gain;
- else if (abs(T1-prev_period)<=2 && 5*k*k < T0)
- cont = HALF32(prev_gain);
- else
- cont = 0;
- thresh = MAX16(QCONST16(.3f,15), MULT16_16_Q15(QCONST16(.7f,15),g0)-cont);
- /* Bias against very high pitch (very short period) to avoid false-positives
- due to short-term correlation */
- if (T1<3*minperiod)
- thresh = MAX16(QCONST16(.4f,15), MULT16_16_Q15(QCONST16(.85f,15),g0)-cont);
- else if (T1<2*minperiod)
- thresh = MAX16(QCONST16(.5f,15), MULT16_16_Q15(QCONST16(.9f,15),g0)-cont);
- if (g1 > thresh)
- {
- best_xy = xy;
- best_yy = yy;
- T = T1;
- g = g1;
- }
- }
- best_xy = MAX32(0, best_xy);
- if (best_yy <= best_xy)
- pg = Q15ONE;
- else
- pg = SHR32(frac_div32(best_xy,best_yy+1),16);
-
- for (k=0;k<3;k++)
- xcorr[k] = celt_inner_prod(x, x-(T+k-1), N, arch);
- if ((xcorr[2]-xcorr[0]) > MULT16_32_Q15(QCONST16(.7f,15),xcorr[1]-xcorr[0]))
- offset = 1;
- else if ((xcorr[0]-xcorr[2]) > MULT16_32_Q15(QCONST16(.7f,15),xcorr[1]-xcorr[2]))
- offset = -1;
- else
- offset = 0;
- if (pg > g)
- pg = g;
- *T0_ = 2*T+offset;
-
- if (*T0_<minperiod0)
- *T0_=minperiod0;
- RESTORE_STACK;
- return pg;
-}
diff --git a/drivers/opus/celt/pitch.h b/drivers/opus/celt/pitch.h
deleted file mode 100644
index ecae7667b8..0000000000
--- a/drivers/opus/celt/pitch.h
+++ /dev/null
@@ -1,220 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/**
- @file pitch.h
- @brief Pitch 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.
-
- 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 PITCH_H
-#define PITCH_H
-
-#include "opus/celt/modes.h"
-#include "opus/celt/cpu_support.h"
-
-#if (defined(OPUS_X86_MAY_HAVE_SSE) && !defined(FIXED_POINT)) \
- || ((defined(OPUS_X86_MAY_HAVE_SSE4_1) || defined(OPUS_X86_MAY_HAVE_SSE2)) && defined(FIXED_POINT))
-#include "opus/celt/x86/pitch_sse.h"
-#endif
-
-#if defined(MIPSr1_ASM)
-#include "opus/celt/mips/pitch_mipsr1.h"
-#endif
-
-#if ((defined(OPUS_ARM_ASM) && defined(FIXED_POINT)) \
- || defined(OPUS_ARM_MAY_HAVE_NEON_INTR))
-# include "opus/celt/arm/pitch_arm.h"
-#endif
-
-void pitch_downsample(celt_sig * OPUS_RESTRICT x[], opus_val16 * OPUS_RESTRICT x_lp,
- int len, int C, int arch);
-
-void pitch_search(const opus_val16 * OPUS_RESTRICT x_lp, opus_val16 * OPUS_RESTRICT y,
- int len, int max_pitch, int *pitch, int arch);
-
-opus_val16 remove_doubling(opus_val16 *x, int maxperiod, int minperiod,
- int N, int *T0, int prev_period, opus_val16 prev_gain, int arch);
-
-
-/* OPT: This is the kernel you really want to optimize. It gets used a lot
- by the prefilter and by the PLC. */
-static OPUS_INLINE void xcorr_kernel_c(const opus_val16 * x, const opus_val16 * y, opus_val32 sum[4], int len)
-{
- int j;
- opus_val16 y_0, y_1, y_2, y_3;
- celt_assert(len>=3);
- y_3=0; /* gcc doesn't realize that y_3 can't be used uninitialized */
- y_0=*y++;
- y_1=*y++;
- y_2=*y++;
- for (j=0;j<len-3;j+=4)
- {
- opus_val16 tmp;
- tmp = *x++;
- y_3=*y++;
- sum[0] = MAC16_16(sum[0],tmp,y_0);
- sum[1] = MAC16_16(sum[1],tmp,y_1);
- sum[2] = MAC16_16(sum[2],tmp,y_2);
- sum[3] = MAC16_16(sum[3],tmp,y_3);
- tmp=*x++;
- y_0=*y++;
- sum[0] = MAC16_16(sum[0],tmp,y_1);
- sum[1] = MAC16_16(sum[1],tmp,y_2);
- sum[2] = MAC16_16(sum[2],tmp,y_3);
- sum[3] = MAC16_16(sum[3],tmp,y_0);
- tmp=*x++;
- y_1=*y++;
- sum[0] = MAC16_16(sum[0],tmp,y_2);
- sum[1] = MAC16_16(sum[1],tmp,y_3);
- sum[2] = MAC16_16(sum[2],tmp,y_0);
- sum[3] = MAC16_16(sum[3],tmp,y_1);
- tmp=*x++;
- y_2=*y++;
- sum[0] = MAC16_16(sum[0],tmp,y_3);
- sum[1] = MAC16_16(sum[1],tmp,y_0);
- sum[2] = MAC16_16(sum[2],tmp,y_1);
- sum[3] = MAC16_16(sum[3],tmp,y_2);
- }
- if (j++<len)
- {
- opus_val16 tmp = *x++;
- y_3=*y++;
- sum[0] = MAC16_16(sum[0],tmp,y_0);
- sum[1] = MAC16_16(sum[1],tmp,y_1);
- sum[2] = MAC16_16(sum[2],tmp,y_2);
- sum[3] = MAC16_16(sum[3],tmp,y_3);
- }
- if (j++<len)
- {
- opus_val16 tmp=*x++;
- y_0=*y++;
- sum[0] = MAC16_16(sum[0],tmp,y_1);
- sum[1] = MAC16_16(sum[1],tmp,y_2);
- sum[2] = MAC16_16(sum[2],tmp,y_3);
- sum[3] = MAC16_16(sum[3],tmp,y_0);
- }
- if (j<len)
- {
- opus_val16 tmp=*x++;
- y_1=*y++;
- sum[0] = MAC16_16(sum[0],tmp,y_2);
- sum[1] = MAC16_16(sum[1],tmp,y_3);
- sum[2] = MAC16_16(sum[2],tmp,y_0);
- sum[3] = MAC16_16(sum[3],tmp,y_1);
- }
-}
-
-#ifndef OVERRIDE_XCORR_KERNEL
-#define xcorr_kernel(x, y, sum, len, arch) \
- ((void)(arch),xcorr_kernel_c(x, y, sum, len))
-#endif /* OVERRIDE_XCORR_KERNEL */
-
-
-static OPUS_INLINE void dual_inner_prod_c(const opus_val16 *x, const opus_val16 *y01, const opus_val16 *y02,
- int N, opus_val32 *xy1, opus_val32 *xy2)
-{
- int i;
- opus_val32 xy01=0;
- opus_val32 xy02=0;
- for (i=0;i<N;i++)
- {
- xy01 = MAC16_16(xy01, x[i], y01[i]);
- xy02 = MAC16_16(xy02, x[i], y02[i]);
- }
- *xy1 = xy01;
- *xy2 = xy02;
-}
-
-#ifndef OVERRIDE_DUAL_INNER_PROD
-# define dual_inner_prod(x, y01, y02, N, xy1, xy2, arch) \
- ((void)(arch),dual_inner_prod_c(x, y01, y02, N, xy1, xy2))
-#endif
-
-/*We make sure a C version is always available for cases where the overhead of
- vectorization and passing around an arch flag aren't worth it.*/
-static OPUS_INLINE opus_val32 celt_inner_prod_c(const opus_val16 *x,
- const opus_val16 *y, int N)
-{
- int i;
- opus_val32 xy=0;
- for (i=0;i<N;i++)
- xy = MAC16_16(xy, x[i], y[i]);
- return xy;
-}
-
-#if !defined(OVERRIDE_CELT_INNER_PROD)
-# define celt_inner_prod(x, y, N, arch) \
- ((void)(arch),celt_inner_prod_c(x, y, N))
-#endif
-
-#ifdef NON_STATIC_COMB_FILTER_CONST_C
-void comb_filter_const_c(opus_val32 *y, opus_val32 *x, int T, int N,
- opus_val16 g10, opus_val16 g11, opus_val16 g12);
-#endif
-
-
-#ifdef OPUS_FIXED_POINT
-opus_val32
-#else
-void
-#endif
-celt_pitch_xcorr_c(const opus_val16 *_x, const opus_val16 *_y,
- opus_val32 *xcorr, int len, int max_pitch);
-
-#if !defined(OVERRIDE_PITCH_XCORR)
-/*Is run-time CPU detection enabled on this platform?*/
-# if defined(OPUS_HAVE_RTCD) && (defined(OPUS_ARM_ASM) \
- || (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) \
- && !defined(OPUS_ARM_PRESUME_NEON_INTR)))
-extern
-# if defined(FIXED_POINT)
-opus_val32
-# else
-void
-# endif
-(*const CELT_PITCH_XCORR_IMPL[OPUS_ARCHMASK+1])(const opus_val16 *,
- const opus_val16 *, opus_val32 *, int, int);
-
-# define OVERRIDE_PITCH_XCORR
-# define celt_pitch_xcorr(_x, _y, xcorr, len, max_pitch, arch) \
- ((*CELT_PITCH_XCORR_IMPL[(arch)&OPUS_ARCHMASK])(_x, _y, \
- xcorr, len, max_pitch))
-# else
-
-#ifdef OPUS_FIXED_POINT
-opus_val32
-#else
-void
-#endif
-celt_pitch_xcorr(const opus_val16 *_x, const opus_val16 *_y,
- opus_val32 *xcorr, int len, int max_pitch, int arch);
-
-# endif
-#endif
-
-#endif
diff --git a/drivers/opus/celt/quant_bands.c b/drivers/opus/celt/quant_bands.c
deleted file mode 100644
index b38bfa8b8e..0000000000
--- a/drivers/opus/celt/quant_bands.c
+++ /dev/null
@@ -1,553 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/quant_bands.h"
-#include "opus/celt/laplace.h"
-#include <math.h>
-#include "opus/celt/os_support.h"
-#include "opus/celt/arch.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/rate.h"
-
-#ifdef OPUS_FIXED_POINT
-/* Mean energy in each band quantized in Q4 */
-const signed char eMeans[25] = {
- 103,100, 92, 85, 81,
- 77, 72, 70, 78, 75,
- 73, 71, 78, 74, 69,
- 72, 70, 74, 76, 71,
- 60, 60, 60, 60, 60
-};
-#else
-/* Mean energy in each band quantized in Q4 and converted back to float */
-const opus_val16 eMeans[25] = {
- 6.437500f, 6.250000f, 5.750000f, 5.312500f, 5.062500f,
- 4.812500f, 4.500000f, 4.375000f, 4.875000f, 4.687500f,
- 4.562500f, 4.437500f, 4.875000f, 4.625000f, 4.312500f,
- 4.500000f, 4.375000f, 4.625000f, 4.750000f, 4.437500f,
- 3.750000f, 3.750000f, 3.750000f, 3.750000f, 3.750000f
-};
-#endif
-/* prediction coefficients: 0.9, 0.8, 0.65, 0.5 */
-#ifdef OPUS_FIXED_POINT
-static const opus_val16 pred_coef[4] = {29440, 26112, 21248, 16384};
-static const opus_val16 beta_coef[4] = {30147, 22282, 12124, 6554};
-static const opus_val16 beta_intra = 4915;
-#else
-static const opus_val16 pred_coef[4] = {29440/32768., 26112/32768., 21248/32768., 16384/32768.};
-static const opus_val16 beta_coef[4] = {30147/32768., 22282/32768., 12124/32768., 6554/32768.};
-static const opus_val16 beta_intra = 4915/32768.;
-#endif
-
-/*Parameters of the Laplace-like probability models used for the coarse energy.
- There is one pair of parameters for each frame size, prediction type
- (inter/intra), and band number.
- The first number of each pair is the probability of 0, and the second is the
- decay rate, both in Q8 precision.*/
-static const unsigned char e_prob_model[4][2][42] = {
- /*120 sample frames.*/
- {
- /*Inter*/
- {
- 72, 127, 65, 129, 66, 128, 65, 128, 64, 128, 62, 128, 64, 128,
- 64, 128, 92, 78, 92, 79, 92, 78, 90, 79, 116, 41, 115, 40,
- 114, 40, 132, 26, 132, 26, 145, 17, 161, 12, 176, 10, 177, 11
- },
- /*Intra*/
- {
- 24, 179, 48, 138, 54, 135, 54, 132, 53, 134, 56, 133, 55, 132,
- 55, 132, 61, 114, 70, 96, 74, 88, 75, 88, 87, 74, 89, 66,
- 91, 67, 100, 59, 108, 50, 120, 40, 122, 37, 97, 43, 78, 50
- }
- },
- /*240 sample frames.*/
- {
- /*Inter*/
- {
- 83, 78, 84, 81, 88, 75, 86, 74, 87, 71, 90, 73, 93, 74,
- 93, 74, 109, 40, 114, 36, 117, 34, 117, 34, 143, 17, 145, 18,
- 146, 19, 162, 12, 165, 10, 178, 7, 189, 6, 190, 8, 177, 9
- },
- /*Intra*/
- {
- 23, 178, 54, 115, 63, 102, 66, 98, 69, 99, 74, 89, 71, 91,
- 73, 91, 78, 89, 86, 80, 92, 66, 93, 64, 102, 59, 103, 60,
- 104, 60, 117, 52, 123, 44, 138, 35, 133, 31, 97, 38, 77, 45
- }
- },
- /*480 sample frames.*/
- {
- /*Inter*/
- {
- 61, 90, 93, 60, 105, 42, 107, 41, 110, 45, 116, 38, 113, 38,
- 112, 38, 124, 26, 132, 27, 136, 19, 140, 20, 155, 14, 159, 16,
- 158, 18, 170, 13, 177, 10, 187, 8, 192, 6, 175, 9, 159, 10
- },
- /*Intra*/
- {
- 21, 178, 59, 110, 71, 86, 75, 85, 84, 83, 91, 66, 88, 73,
- 87, 72, 92, 75, 98, 72, 105, 58, 107, 54, 115, 52, 114, 55,
- 112, 56, 129, 51, 132, 40, 150, 33, 140, 29, 98, 35, 77, 42
- }
- },
- /*960 sample frames.*/
- {
- /*Inter*/
- {
- 42, 121, 96, 66, 108, 43, 111, 40, 117, 44, 123, 32, 120, 36,
- 119, 33, 127, 33, 134, 34, 139, 21, 147, 23, 152, 20, 158, 25,
- 154, 26, 166, 21, 173, 16, 184, 13, 184, 10, 150, 13, 139, 15
- },
- /*Intra*/
- {
- 22, 178, 63, 114, 74, 82, 84, 83, 92, 82, 103, 62, 96, 72,
- 96, 67, 101, 73, 107, 72, 113, 55, 118, 52, 125, 52, 118, 52,
- 117, 55, 135, 49, 137, 39, 157, 32, 145, 29, 97, 33, 77, 40
- }
- }
-};
-
-static const unsigned char small_energy_icdf[3]={2,1,0};
-
-static opus_val32 loss_distortion(const opus_val16 *eBands, opus_val16 *oldEBands, int start, int end, int len, int C)
-{
- int c, i;
- opus_val32 dist = 0;
- c=0; do {
- for (i=start;i<end;i++)
- {
- opus_val16 d = SUB16(SHR16(eBands[i+c*len], 3), SHR16(oldEBands[i+c*len], 3));
- dist = MAC16_16(dist, d,d);
- }
- } while (++c<C);
- return MIN32(200,SHR32(dist,2*DB_SHIFT-6));
-}
-
-static int quant_coarse_energy_impl(const CELTMode *m, int start, int end,
- const opus_val16 *eBands, opus_val16 *oldEBands,
- opus_int32 budget, opus_int32 tell,
- const unsigned char *prob_model, opus_val16 *error, ec_enc *enc,
- int C, int LM, int intra, opus_val16 max_decay, int lfe)
-{
- int i, c;
- int badness = 0;
- opus_val32 prev[2] = {0,0};
- opus_val16 coef;
- opus_val16 beta;
-
- if (tell+3 <= budget)
- ec_enc_bit_logp(enc, intra, 3);
- if (intra)
- {
- coef = 0;
- beta = beta_intra;
- } else {
- beta = beta_coef[LM];
- coef = pred_coef[LM];
- }
-
- /* Encode at a fixed coarse resolution */
- for (i=start;i<end;i++)
- {
- c=0;
- do {
- int bits_left;
- int qi, qi0;
- opus_val32 q;
- opus_val16 x;
- opus_val32 f, tmp;
- opus_val16 oldE;
- opus_val16 decay_bound;
- x = eBands[i+c*m->nbEBands];
- oldE = MAX16(-QCONST16(9.f,DB_SHIFT), oldEBands[i+c*m->nbEBands]);
-#ifdef OPUS_FIXED_POINT
- f = SHL32(EXTEND32(x),7) - PSHR32(MULT16_16(coef,oldE), 8) - prev[c];
- /* Rounding to nearest integer here is really important! */
- qi = (f+QCONST32(.5f,DB_SHIFT+7))>>(DB_SHIFT+7);
- decay_bound = EXTRACT16(MAX32(-QCONST16(28.f,DB_SHIFT),
- SUB32((opus_val32)oldEBands[i+c*m->nbEBands],max_decay)));
-#else
- f = x-coef*oldE-prev[c];
- /* Rounding to nearest integer here is really important! */
- qi = (int)floor(.5f+f);
- decay_bound = MAX16(-QCONST16(28.f,DB_SHIFT), oldEBands[i+c*m->nbEBands]) - max_decay;
-#endif
- /* Prevent the energy from going down too quickly (e.g. for bands
- that have just one bin) */
- if (qi < 0 && x < decay_bound)
- {
- qi += (int)SHR16(SUB16(decay_bound,x), DB_SHIFT);
- if (qi > 0)
- qi = 0;
- }
- qi0 = qi;
- /* If we don't have enough bits to encode all the energy, just assume
- something safe. */
- tell = ec_tell(enc);
- bits_left = budget-tell-3*C*(end-i);
- if (i!=start && bits_left < 30)
- {
- if (bits_left < 24)
- qi = IMIN(1, qi);
- if (bits_left < 16)
- qi = IMAX(-1, qi);
- }
- if (lfe && i>=2)
- qi = IMIN(qi, 0);
- if (budget-tell >= 15)
- {
- int pi;
- pi = 2*IMIN(i,20);
- ec_laplace_encode(enc, &qi,
- prob_model[pi]<<7, prob_model[pi+1]<<6);
- }
- else if(budget-tell >= 2)
- {
- qi = IMAX(-1, IMIN(qi, 1));
- ec_enc_icdf(enc, 2*qi^-(qi<0), small_energy_icdf, 2);
- }
- else if(budget-tell >= 1)
- {
- qi = IMIN(0, qi);
- ec_enc_bit_logp(enc, -qi, 1);
- }
- else
- qi = -1;
- error[i+c*m->nbEBands] = PSHR32(f,7) - SHL16(qi,DB_SHIFT);
- badness += abs(qi0-qi);
- q = (opus_val32)SHL32(EXTEND32(qi),DB_SHIFT);
-
- tmp = PSHR32(MULT16_16(coef,oldE),8) + prev[c] + SHL32(q,7);
-#ifdef OPUS_FIXED_POINT
- tmp = MAX32(-QCONST32(28.f, DB_SHIFT+7), tmp);
-#endif
- oldEBands[i+c*m->nbEBands] = PSHR32(tmp, 7);
- prev[c] = prev[c] + SHL32(q,7) - MULT16_16(beta,PSHR32(q,8));
- } while (++c < C);
- }
- return lfe ? 0 : badness;
-}
-
-void quant_coarse_energy(const CELTMode *m, int start, int end, int effEnd,
- const opus_val16 *eBands, opus_val16 *oldEBands, opus_uint32 budget,
- opus_val16 *error, ec_enc *enc, int C, int LM, int nbAvailableBytes,
- int force_intra, opus_val32 *delayedIntra, int two_pass, int loss_rate, int lfe)
-{
- int intra;
- opus_val16 max_decay;
- VARDECL(opus_val16, oldEBands_intra);
- VARDECL(opus_val16, error_intra);
- ec_enc enc_start_state;
- opus_uint32 tell;
- int badness1=0;
- opus_int32 intra_bias;
- opus_val32 new_distortion;
- SAVE_STACK;
-
- intra = force_intra || (!two_pass && *delayedIntra>2*C*(end-start) && nbAvailableBytes > (end-start)*C);
- intra_bias = (opus_int32)((budget**delayedIntra*loss_rate)/(C*512));
- new_distortion = loss_distortion(eBands, oldEBands, start, effEnd, m->nbEBands, C);
-
- tell = ec_tell(enc);
- if (tell+3 > budget)
- two_pass = intra = 0;
-
- max_decay = QCONST16(16.f,DB_SHIFT);
- if (end-start>10)
- {
-#ifdef OPUS_FIXED_POINT
- max_decay = MIN32(max_decay, SHL32(EXTEND32(nbAvailableBytes),DB_SHIFT-3));
-#else
- max_decay = MIN32(max_decay, .125f*nbAvailableBytes);
-#endif
- }
- if (lfe)
- max_decay = QCONST16(3.f,DB_SHIFT);
- enc_start_state = *enc;
-
- ALLOC(oldEBands_intra, C*m->nbEBands, opus_val16);
- ALLOC(error_intra, C*m->nbEBands, opus_val16);
- OPUS_COPY(oldEBands_intra, oldEBands, C*m->nbEBands);
-
- if (two_pass || intra)
- {
- badness1 = quant_coarse_energy_impl(m, start, end, eBands, oldEBands_intra, budget,
- tell, e_prob_model[LM][1], error_intra, enc, C, LM, 1, max_decay, lfe);
- }
-
- if (!intra)
- {
- unsigned char *intra_buf;
- ec_enc enc_intra_state;
- opus_int32 tell_intra;
- opus_uint32 nstart_bytes;
- opus_uint32 nintra_bytes;
- opus_uint32 save_bytes;
- int badness2;
- VARDECL(unsigned char, intra_bits);
-
- tell_intra = ec_tell_frac(enc);
-
- enc_intra_state = *enc;
-
- nstart_bytes = ec_range_bytes(&enc_start_state);
- nintra_bytes = ec_range_bytes(&enc_intra_state);
- intra_buf = ec_get_buffer(&enc_intra_state) + nstart_bytes;
- save_bytes = nintra_bytes-nstart_bytes;
- if (save_bytes == 0)
- save_bytes = ALLOC_NONE;
- ALLOC(intra_bits, save_bytes, unsigned char);
- /* Copy bits from intra bit-stream */
- OPUS_COPY(intra_bits, intra_buf, nintra_bytes - nstart_bytes);
-
- *enc = enc_start_state;
-
- badness2 = quant_coarse_energy_impl(m, start, end, eBands, oldEBands, budget,
- tell, e_prob_model[LM][intra], error, enc, C, LM, 0, max_decay, lfe);
-
- if (two_pass && (badness1 < badness2 || (badness1 == badness2 && ((opus_int32)ec_tell_frac(enc))+intra_bias > tell_intra)))
- {
- *enc = enc_intra_state;
- /* Copy intra bits to bit-stream */
- OPUS_COPY(intra_buf, intra_bits, nintra_bytes - nstart_bytes);
- OPUS_COPY(oldEBands, oldEBands_intra, C*m->nbEBands);
- OPUS_COPY(error, error_intra, C*m->nbEBands);
- intra = 1;
- }
- } else {
- OPUS_COPY(oldEBands, oldEBands_intra, C*m->nbEBands);
- OPUS_COPY(error, error_intra, C*m->nbEBands);
- }
-
- if (intra)
- *delayedIntra = new_distortion;
- else
- *delayedIntra = ADD32(MULT16_32_Q15(MULT16_16_Q15(pred_coef[LM], pred_coef[LM]),*delayedIntra),
- new_distortion);
-
- RESTORE_STACK;
-}
-
-void quant_fine_energy(const CELTMode *m, int start, int end, opus_val16 *oldEBands, opus_val16 *error, int *fine_quant, ec_enc *enc, int C)
-{
- int i, c;
-
- /* Encode finer resolution */
- for (i=start;i<end;i++)
- {
- opus_int16 frac = 1<<fine_quant[i];
- if (fine_quant[i] <= 0)
- continue;
- c=0;
- do {
- int q2;
- opus_val16 offset;
-#ifdef OPUS_FIXED_POINT
- /* Has to be without rounding */
- q2 = (error[i+c*m->nbEBands]+QCONST16(.5f,DB_SHIFT))>>(DB_SHIFT-fine_quant[i]);
-#else
- q2 = (int)floor((error[i+c*m->nbEBands]+.5f)*frac);
-#endif
- if (q2 > frac-1)
- q2 = frac-1;
- if (q2<0)
- q2 = 0;
- ec_enc_bits(enc, q2, fine_quant[i]);
-#ifdef OPUS_FIXED_POINT
- offset = SUB16(SHR32(SHL32(EXTEND32(q2),DB_SHIFT)+QCONST16(.5f,DB_SHIFT),fine_quant[i]),QCONST16(.5f,DB_SHIFT));
-#else
- offset = (q2+.5f)*(1<<(14-fine_quant[i]))*(1.f/16384) - .5f;
-#endif
- oldEBands[i+c*m->nbEBands] += offset;
- error[i+c*m->nbEBands] -= offset;
- /*printf ("%f ", error[i] - offset);*/
- } while (++c < C);
- }
-}
-
-void quant_energy_finalise(const CELTMode *m, int start, int end, opus_val16 *oldEBands, opus_val16 *error, int *fine_quant, int *fine_priority, int bits_left, ec_enc *enc, int C)
-{
- int i, prio, c;
-
- /* Use up the remaining bits */
- for (prio=0;prio<2;prio++)
- {
- for (i=start;i<end && bits_left>=C ;i++)
- {
- if (fine_quant[i] >= MAX_FINE_BITS || fine_priority[i]!=prio)
- continue;
- c=0;
- do {
- int q2;
- opus_val16 offset;
- q2 = error[i+c*m->nbEBands]<0 ? 0 : 1;
- ec_enc_bits(enc, q2, 1);
-#ifdef OPUS_FIXED_POINT
- offset = SHR16(SHL16(q2,DB_SHIFT)-QCONST16(.5f,DB_SHIFT),fine_quant[i]+1);
-#else
- offset = (q2-.5f)*(1<<(14-fine_quant[i]-1))*(1.f/16384);
-#endif
- oldEBands[i+c*m->nbEBands] += offset;
- bits_left--;
- } while (++c < C);
- }
- }
-}
-
-void unquant_coarse_energy(const CELTMode *m, int start, int end, opus_val16 *oldEBands, int intra, ec_dec *dec, int C, int LM)
-{
- const unsigned char *prob_model = e_prob_model[LM][intra];
- int i, c;
- opus_val32 prev[2] = {0, 0};
- opus_val16 coef;
- opus_val16 beta;
- opus_int32 budget;
- opus_int32 tell;
-
- if (intra)
- {
- coef = 0;
- beta = beta_intra;
- } else {
- beta = beta_coef[LM];
- coef = pred_coef[LM];
- }
-
- budget = dec->storage*8;
-
- /* Decode at a fixed coarse resolution */
- for (i=start;i<end;i++)
- {
- c=0;
- do {
- int qi;
- opus_val32 q;
- opus_val32 tmp;
- /* It would be better to express this invariant as a
- test on C at function entry, but that isn't enough
- to make the static analyzer happy. */
- celt_assert(c<2);
- tell = ec_tell(dec);
- if(budget-tell>=15)
- {
- int pi;
- pi = 2*IMIN(i,20);
- qi = ec_laplace_decode(dec,
- prob_model[pi]<<7, prob_model[pi+1]<<6);
- }
- else if(budget-tell>=2)
- {
- qi = ec_dec_icdf(dec, small_energy_icdf, 2);
- qi = (qi>>1)^-(qi&1);
- }
- else if(budget-tell>=1)
- {
- qi = -ec_dec_bit_logp(dec, 1);
- }
- else
- qi = -1;
- q = (opus_val32)SHL32(EXTEND32(qi),DB_SHIFT);
-
- oldEBands[i+c*m->nbEBands] = MAX16(-QCONST16(9.f,DB_SHIFT), oldEBands[i+c*m->nbEBands]);
- tmp = PSHR32(MULT16_16(coef,oldEBands[i+c*m->nbEBands]),8) + prev[c] + SHL32(q,7);
-#ifdef OPUS_FIXED_POINT
- tmp = MAX32(-QCONST32(28.f, DB_SHIFT+7), tmp);
-#endif
- oldEBands[i+c*m->nbEBands] = PSHR32(tmp, 7);
- prev[c] = prev[c] + SHL32(q,7) - MULT16_16(beta,PSHR32(q,8));
- } while (++c < C);
- }
-}
-
-void unquant_fine_energy(const CELTMode *m, int start, int end, opus_val16 *oldEBands, int *fine_quant, ec_dec *dec, int C)
-{
- int i, c;
- /* Decode finer resolution */
- for (i=start;i<end;i++)
- {
- if (fine_quant[i] <= 0)
- continue;
- c=0;
- do {
- int q2;
- opus_val16 offset;
- q2 = ec_dec_bits(dec, fine_quant[i]);
-#ifdef OPUS_FIXED_POINT
- offset = SUB16(SHR32(SHL32(EXTEND32(q2),DB_SHIFT)+QCONST16(.5f,DB_SHIFT),fine_quant[i]),QCONST16(.5f,DB_SHIFT));
-#else
- offset = (q2+.5f)*(1<<(14-fine_quant[i]))*(1.f/16384) - .5f;
-#endif
- oldEBands[i+c*m->nbEBands] += offset;
- } while (++c < C);
- }
-}
-
-void unquant_energy_finalise(const CELTMode *m, int start, int end, opus_val16 *oldEBands, int *fine_quant, int *fine_priority, int bits_left, ec_dec *dec, int C)
-{
- int i, prio, c;
-
- /* Use up the remaining bits */
- for (prio=0;prio<2;prio++)
- {
- for (i=start;i<end && bits_left>=C ;i++)
- {
- if (fine_quant[i] >= MAX_FINE_BITS || fine_priority[i]!=prio)
- continue;
- c=0;
- do {
- int q2;
- opus_val16 offset;
- q2 = ec_dec_bits(dec, 1);
-#ifdef OPUS_FIXED_POINT
- offset = SHR16(SHL16(q2,DB_SHIFT)-QCONST16(.5f,DB_SHIFT),fine_quant[i]+1);
-#else
- offset = (q2-.5f)*(1<<(14-fine_quant[i]-1))*(1.f/16384);
-#endif
- oldEBands[i+c*m->nbEBands] += offset;
- bits_left--;
- } while (++c < C);
- }
- }
-}
-
-void amp2Log2(const CELTMode *m, int effEnd, int end,
- celt_ener *bandE, opus_val16 *bandLogE, int C)
-{
- int c, i;
- c=0;
- do {
- for (i=0;i<effEnd;i++)
- bandLogE[i+c*m->nbEBands] =
- celt_log2(SHL32(bandE[i+c*m->nbEBands],2))
- - SHL16((opus_val16)eMeans[i],6);
- for (i=effEnd;i<end;i++)
- bandLogE[c*m->nbEBands+i] = -QCONST16(14.f,DB_SHIFT);
- } while (++c < C);
-}
diff --git a/drivers/opus/celt/quant_bands.h b/drivers/opus/celt/quant_bands.h
deleted file mode 100644
index 31d4b94e41..0000000000
--- a/drivers/opus/celt/quant_bands.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 QUANT_BANDS
-#define QUANT_BANDS
-
-#include "opus/celt/arch.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/entenc.h"
-#include "opus/celt/entdec.h"
-#include "opus/celt/mathops.h"
-
-#ifdef OPUS_FIXED_POINT
-extern const signed char eMeans[25];
-#else
-extern const opus_val16 eMeans[25];
-#endif
-
-void amp2Log2(const CELTMode *m, int effEnd, int end,
- celt_ener *bandE, opus_val16 *bandLogE, int C);
-
-void log2Amp(const CELTMode *m, int start, int end,
- celt_ener *eBands, const opus_val16 *oldEBands, int C);
-
-void quant_coarse_energy(const CELTMode *m, int start, int end, int effEnd,
- const opus_val16 *eBands, opus_val16 *oldEBands, opus_uint32 budget,
- opus_val16 *error, ec_enc *enc, int C, int LM,
- int nbAvailableBytes, int force_intra, opus_val32 *delayedIntra,
- int two_pass, int loss_rate, int lfe);
-
-void quant_fine_energy(const CELTMode *m, int start, int end, opus_val16 *oldEBands, opus_val16 *error, int *fine_quant, ec_enc *enc, int C);
-
-void quant_energy_finalise(const CELTMode *m, int start, int end, opus_val16 *oldEBands, opus_val16 *error, int *fine_quant, int *fine_priority, int bits_left, ec_enc *enc, int C);
-
-void unquant_coarse_energy(const CELTMode *m, int start, int end, opus_val16 *oldEBands, int intra, ec_dec *dec, int C, int LM);
-
-void unquant_fine_energy(const CELTMode *m, int start, int end, opus_val16 *oldEBands, int *fine_quant, ec_dec *dec, int C);
-
-void unquant_energy_finalise(const CELTMode *m, int start, int end, opus_val16 *oldEBands, int *fine_quant, int *fine_priority, int bits_left, ec_dec *dec, int C);
-
-#endif /* QUANT_BANDS */
diff --git a/drivers/opus/celt/rate.c b/drivers/opus/celt/rate.c
deleted file mode 100644
index e69fb3f030..0000000000
--- a/drivers/opus/celt/rate.c
+++ /dev/null
@@ -1,636 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <math.h>
-#include "opus/celt/modes.h"
-#include "opus/celt/cwrs.h"
-#include "opus/celt/arch.h"
-#include "opus/celt/os_support.h"
-
-#include "opus/celt/entcode.h"
-#include "opus/celt/rate.h"
-
-static const unsigned char LOG2_FRAC_TABLE[24]={
- 0,
- 8,13,
- 16,19,21,23,
- 24,26,27,28,29,30,31,32,
- 32,33,34,34,35,36,36,37,37
-};
-
-#ifdef CUSTOM_MODES
-
-/*Determines if V(N,K) fits in a 32-bit unsigned integer.
- N and K are themselves limited to 15 bits.*/
-static int fits_in32(int _n, int _k)
-{
- static const opus_int16 maxN[15] = {
- 32767, 32767, 32767, 1476, 283, 109, 60, 40,
- 29, 24, 20, 18, 16, 14, 13};
- static const opus_int16 maxK[15] = {
- 32767, 32767, 32767, 32767, 1172, 238, 95, 53,
- 36, 27, 22, 18, 16, 15, 13};
- if (_n>=14)
- {
- if (_k>=14)
- return 0;
- else
- return _n <= maxN[_k];
- } else {
- return _k <= maxK[_n];
- }
-}
-
-void compute_pulse_cache(CELTMode *m, int LM)
-{
- int C;
- int i;
- int j;
- int curr=0;
- int nbEntries=0;
- int entryN[100], entryK[100], entryI[100];
- const opus_int16 *eBands = m->eBands;
- PulseCache *cache = &m->cache;
- opus_int16 *cindex;
- unsigned char *bits;
- unsigned char *cap;
-
- cindex = (opus_int16 *)opus_alloc(sizeof(cache->index[0])*m->nbEBands*(LM+2));
- cache->index = cindex;
-
- /* Scan for all unique band sizes */
- for (i=0;i<=LM+1;i++)
- {
- for (j=0;j<m->nbEBands;j++)
- {
- int k;
- int N = (eBands[j+1]-eBands[j])<<i>>1;
- cindex[i*m->nbEBands+j] = -1;
- /* Find other bands that have the same size */
- for (k=0;k<=i;k++)
- {
- int n;
- for (n=0;n<m->nbEBands && (k!=i || n<j);n++)
- {
- if (N == (eBands[n+1]-eBands[n])<<k>>1)
- {
- cindex[i*m->nbEBands+j] = cindex[k*m->nbEBands+n];
- break;
- }
- }
- }
- if (cache->index[i*m->nbEBands+j] == -1 && N!=0)
- {
- int K;
- entryN[nbEntries] = N;
- K = 0;
- while (fits_in32(N,get_pulses(K+1)) && K<MAX_PSEUDO)
- K++;
- entryK[nbEntries] = K;
- cindex[i*m->nbEBands+j] = curr;
- entryI[nbEntries] = curr;
-
- curr += K+1;
- nbEntries++;
- }
- }
- }
- bits = (unsigned char *)opus_alloc(sizeof(unsigned char)*curr);
- cache->bits = bits;
- cache->size = curr;
- /* Compute the cache for all unique sizes */
- for (i=0;i<nbEntries;i++)
- {
- unsigned char *ptr = bits+entryI[i];
- opus_int16 tmp[CELT_MAX_PULSES+1];
- get_required_bits(tmp, entryN[i], get_pulses(entryK[i]), BITRES);
- for (j=1;j<=entryK[i];j++)
- ptr[j] = tmp[get_pulses(j)]-1;
- ptr[0] = entryK[i];
- }
-
- /* Compute the maximum rate for each band at which we'll reliably use as
- many bits as we ask for. */
- cache->caps = cap = (unsigned char *)opus_alloc(sizeof(cache->caps[0])*(LM+1)*2*m->nbEBands);
- for (i=0;i<=LM;i++)
- {
- for (C=1;C<=2;C++)
- {
- for (j=0;j<m->nbEBands;j++)
- {
- int N0;
- int max_bits;
- N0 = m->eBands[j+1]-m->eBands[j];
- /* N=1 bands only have a sign bit and fine bits. */
- if (N0<<i == 1)
- max_bits = C*(1+MAX_FINE_BITS)<<BITRES;
- else
- {
- const unsigned char *pcache;
- opus_int32 num;
- opus_int32 den;
- int LM0;
- int N;
- int offset;
- int ndof;
- int qb;
- int k;
- LM0 = 0;
- /* Even-sized bands bigger than N=2 can be split one more time.
- As of commit 44203907 all bands >1 are even, including custom modes.*/
- if (N0 > 2)
- {
- N0>>=1;
- LM0--;
- }
- /* N0=1 bands can't be split down to N<2. */
- else if (N0 <= 1)
- {
- LM0=IMIN(i,1);
- N0<<=LM0;
- }
- /* Compute the cost for the lowest-level PVQ of a fully split
- band. */
- pcache = bits + cindex[(LM0+1)*m->nbEBands+j];
- max_bits = pcache[pcache[0]]+1;
- /* Add in the cost of coding regular splits. */
- N = N0;
- for(k=0;k<i-LM0;k++){
- max_bits <<= 1;
- /* Offset the number of qtheta bits by log2(N)/2
- + QTHETA_OFFSET compared to their "fair share" of
- total/N */
- offset = ((m->logN[j]+((LM0+k)<<BITRES))>>1)-QTHETA_OFFSET;
- /* The number of qtheta bits we'll allocate if the remainder
- is to be max_bits.
- The average measured cost for theta is 0.89701 times qb,
- approximated here as 459/512. */
- num=459*(opus_int32)((2*N-1)*offset+max_bits);
- den=((opus_int32)(2*N-1)<<9)-459;
- qb = IMIN((num+(den>>1))/den, 57);
- celt_assert(qb >= 0);
- max_bits += qb;
- N <<= 1;
- }
- /* Add in the cost of a stereo split, if necessary. */
- if (C==2)
- {
- max_bits <<= 1;
- offset = ((m->logN[j]+(i<<BITRES))>>1)-(N==2?QTHETA_OFFSET_TWOPHASE:QTHETA_OFFSET);
- ndof = 2*N-1-(N==2);
- /* The average measured cost for theta with the step PDF is
- 0.95164 times qb, approximated here as 487/512. */
- num = (N==2?512:487)*(opus_int32)(max_bits+ndof*offset);
- den = ((opus_int32)ndof<<9)-(N==2?512:487);
- qb = IMIN((num+(den>>1))/den, (N==2?64:61));
- celt_assert(qb >= 0);
- max_bits += qb;
- }
- /* Add the fine bits we'll use. */
- /* Compensate for the extra DoF in stereo */
- ndof = C*N + ((C==2 && N>2) ? 1 : 0);
- /* Offset the number of fine bits by log2(N)/2 + FINE_OFFSET
- compared to their "fair share" of total/N */
- offset = ((m->logN[j] + (i<<BITRES))>>1)-FINE_OFFSET;
- /* N=2 is the only point that doesn't match the curve */
- if (N==2)
- offset += 1<<BITRES>>2;
- /* The number of fine bits we'll allocate if the remainder is
- to be max_bits. */
- num = max_bits+ndof*offset;
- den = (ndof-1)<<BITRES;
- qb = IMIN((num+(den>>1))/den, MAX_FINE_BITS);
- celt_assert(qb >= 0);
- max_bits += C*qb<<BITRES;
- }
- max_bits = (4*max_bits/(C*((m->eBands[j+1]-m->eBands[j])<<i)))-64;
- celt_assert(max_bits >= 0);
- celt_assert(max_bits < 256);
- *cap++ = (unsigned char)max_bits;
- }
- }
- }
-}
-
-#endif /* CUSTOM_MODES */
-
-#define ALLOC_STEPS 6
-
-static OPUS_INLINE int interp_bits2pulses(const CELTMode *m, int start, int end, int skip_start,
- const int *bits1, const int *bits2, const int *thresh, const int *cap, opus_int32 total, opus_int32 *_balance,
- int skip_rsv, int *intensity, int intensity_rsv, int *dual_stereo, int dual_stereo_rsv, int *bits,
- int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth)
-{
- opus_int32 psum;
- int lo, hi;
- int i, j;
- int logM;
- int stereo;
- int codedBands=-1;
- int alloc_floor;
- opus_int32 left, percoeff;
- int done;
- opus_int32 balance;
- SAVE_STACK;
-
- alloc_floor = C<<BITRES;
- stereo = C>1;
-
- logM = LM<<BITRES;
- lo = 0;
- hi = 1<<ALLOC_STEPS;
- for (i=0;i<ALLOC_STEPS;i++)
- {
- int mid = (lo+hi)>>1;
- psum = 0;
- done = 0;
- for (j=end;j-->start;)
- {
- int tmp = bits1[j] + (mid*(opus_int32)bits2[j]>>ALLOC_STEPS);
- if (tmp >= thresh[j] || done)
- {
- done = 1;
- /* Don't allocate more than we can actually use */
- psum += IMIN(tmp, cap[j]);
- } else {
- if (tmp >= alloc_floor)
- psum += alloc_floor;
- }
- }
- if (psum > total)
- hi = mid;
- else
- lo = mid;
- }
- psum = 0;
- /*printf ("interp bisection gave %d\n", lo);*/
- done = 0;
- for (j=end;j-->start;)
- {
- int tmp = bits1[j] + (lo*bits2[j]>>ALLOC_STEPS);
- if (tmp < thresh[j] && !done)
- {
- if (tmp >= alloc_floor)
- tmp = alloc_floor;
- else
- tmp = 0;
- } else
- done = 1;
- /* Don't allocate more than we can actually use */
- tmp = IMIN(tmp, cap[j]);
- bits[j] = tmp;
- psum += tmp;
- }
-
- /* Decide which bands to skip, working backwards from the end. */
- for (codedBands=end;;codedBands--)
- {
- int band_width;
- int band_bits;
- int rem;
- j = codedBands-1;
- /* Never skip the first band, nor a band that has been boosted by
- dynalloc.
- In the first case, we'd be coding a bit to signal we're going to waste
- all the other bits.
- In the second case, we'd be coding a bit to redistribute all the bits
- we just signaled should be cocentrated in this band. */
- if (j<=skip_start)
- {
- /* Give the bit we reserved to end skipping back. */
- total += skip_rsv;
- break;
- }
- /*Figure out how many left-over bits we would be adding to this band.
- This can include bits we've stolen back from higher, skipped bands.*/
- left = total-psum;
- percoeff = celt_udiv(left, m->eBands[codedBands]-m->eBands[start]);
- left -= (m->eBands[codedBands]-m->eBands[start])*percoeff;
- rem = IMAX(left-(m->eBands[j]-m->eBands[start]),0);
- band_width = m->eBands[codedBands]-m->eBands[j];
- band_bits = (int)(bits[j] + percoeff*band_width + rem);
- /*Only code a skip decision if we're above the threshold for this band.
- Otherwise it is force-skipped.
- This ensures that we have enough bits to code the skip flag.*/
- if (band_bits >= IMAX(thresh[j], alloc_floor+(1<<BITRES)))
- {
- if (encode)
- {
- /*This if() block is the only part of the allocation function that
- is not a mandatory part of the bitstream: any bands we choose to
- skip here must be explicitly signaled.*/
- /*Choose a threshold with some hysteresis to keep bands from
- fluctuating in and out.*/
-#ifdef FUZZING
- if ((rand()&0x1) == 0)
-#else
- if (codedBands<=start+2 || (band_bits > ((j<prev?7:9)*band_width<<LM<<BITRES)>>4 && j<=signalBandwidth))
-#endif
- {
- ec_enc_bit_logp(ec, 1, 1);
- break;
- }
- ec_enc_bit_logp(ec, 0, 1);
- } else if (ec_dec_bit_logp(ec, 1)) {
- break;
- }
- /*We used a bit to skip this band.*/
- psum += 1<<BITRES;
- band_bits -= 1<<BITRES;
- }
- /*Reclaim the bits originally allocated to this band.*/
- psum -= bits[j]+intensity_rsv;
- if (intensity_rsv > 0)
- intensity_rsv = LOG2_FRAC_TABLE[j-start];
- psum += intensity_rsv;
- if (band_bits >= alloc_floor)
- {
- /*If we have enough for a fine energy bit per channel, use it.*/
- psum += alloc_floor;
- bits[j] = alloc_floor;
- } else {
- /*Otherwise this band gets nothing at all.*/
- bits[j] = 0;
- }
- }
-
- celt_assert(codedBands > start);
- /* Code the intensity and dual stereo parameters. */
- if (intensity_rsv > 0)
- {
- if (encode)
- {
- *intensity = IMIN(*intensity, codedBands);
- ec_enc_uint(ec, *intensity-start, codedBands+1-start);
- }
- else
- *intensity = start+ec_dec_uint(ec, codedBands+1-start);
- }
- else
- *intensity = 0;
- if (*intensity <= start)
- {
- total += dual_stereo_rsv;
- dual_stereo_rsv = 0;
- }
- if (dual_stereo_rsv > 0)
- {
- if (encode)
- ec_enc_bit_logp(ec, *dual_stereo, 1);
- else
- *dual_stereo = ec_dec_bit_logp(ec, 1);
- }
- else
- *dual_stereo = 0;
-
- /* Allocate the remaining bits */
- left = total-psum;
- percoeff = celt_udiv(left, m->eBands[codedBands]-m->eBands[start]);
- left -= (m->eBands[codedBands]-m->eBands[start])*percoeff;
- for (j=start;j<codedBands;j++)
- bits[j] += ((int)percoeff*(m->eBands[j+1]-m->eBands[j]));
- for (j=start;j<codedBands;j++)
- {
- int tmp = (int)IMIN(left, m->eBands[j+1]-m->eBands[j]);
- bits[j] += tmp;
- left -= tmp;
- }
- /*for (j=0;j<end;j++)printf("%d ", bits[j]);printf("\n");*/
-
- balance = 0;
- for (j=start;j<codedBands;j++)
- {
- int N0, N, den;
- int offset;
- int NClogN;
- opus_int32 excess, bit;
-
- celt_assert(bits[j] >= 0);
- N0 = m->eBands[j+1]-m->eBands[j];
- N=N0<<LM;
- bit = (opus_int32)bits[j]+balance;
-
- if (N>1)
- {
- excess = MAX32(bit-cap[j],0);
- bits[j] = bit-excess;
-
- /* Compensate for the extra DoF in stereo */
- den=(C*N+ ((C==2 && N>2 && !*dual_stereo && j<*intensity) ? 1 : 0));
-
- NClogN = den*(m->logN[j] + logM);
-
- /* Offset for the number of fine bits by log2(N)/2 + FINE_OFFSET
- compared to their "fair share" of total/N */
- offset = (NClogN>>1)-den*FINE_OFFSET;
-
- /* N=2 is the only point that doesn't match the curve */
- if (N==2)
- offset += den<<BITRES>>2;
-
- /* Changing the offset for allocating the second and third
- fine energy bit */
- if (bits[j] + offset < den*2<<BITRES)
- offset += NClogN>>2;
- else if (bits[j] + offset < den*3<<BITRES)
- offset += NClogN>>3;
-
- /* Divide with rounding */
- ebits[j] = IMAX(0, (bits[j] + offset + (den<<(BITRES-1))));
- ebits[j] = celt_udiv(ebits[j], den)>>BITRES;
-
- /* Make sure not to bust */
- if (C*ebits[j] > (bits[j]>>BITRES))
- ebits[j] = bits[j] >> stereo >> BITRES;
-
- /* More than that is useless because that's about as far as PVQ can go */
- ebits[j] = IMIN(ebits[j], MAX_FINE_BITS);
-
- /* If we rounded down or capped this band, make it a candidate for the
- final fine energy pass */
- fine_priority[j] = ebits[j]*(den<<BITRES) >= bits[j]+offset;
-
- /* Remove the allocated fine bits; the rest are assigned to PVQ */
- bits[j] -= C*ebits[j]<<BITRES;
-
- } else {
- /* For N=1, all bits go to fine energy except for a single sign bit */
- excess = MAX32(0,bit-(C<<BITRES));
- bits[j] = bit-excess;
- ebits[j] = 0;
- fine_priority[j] = 1;
- }
-
- /* Fine energy can't take advantage of the re-balancing in
- quant_all_bands().
- Instead, do the re-balancing here.*/
- if(excess > 0)
- {
- int extra_fine;
- int extra_bits;
- extra_fine = IMIN(excess>>(stereo+BITRES),MAX_FINE_BITS-ebits[j]);
- ebits[j] += extra_fine;
- extra_bits = extra_fine*C<<BITRES;
- fine_priority[j] = extra_bits >= excess-balance;
- excess -= extra_bits;
- }
- balance = excess;
-
- celt_assert(bits[j] >= 0);
- celt_assert(ebits[j] >= 0);
- }
- /* Save any remaining bits over the cap for the rebalancing in
- quant_all_bands(). */
- *_balance = balance;
-
- /* The skipped bands use all their bits for fine energy. */
- for (;j<end;j++)
- {
- ebits[j] = bits[j] >> stereo >> BITRES;
- celt_assert(C*ebits[j]<<BITRES == bits[j]);
- bits[j] = 0;
- fine_priority[j] = ebits[j]<1;
- }
- RESTORE_STACK;
- return codedBands;
-}
-
-int compute_allocation(const CELTMode *m, int start, int end, const int *offsets, const int *cap, int alloc_trim, int *intensity, int *dual_stereo,
- opus_int32 total, opus_int32 *balance, int *pulses, int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth)
-{
- int lo, hi, len, j;
- int codedBands;
- int skip_start;
- int skip_rsv;
- int intensity_rsv;
- int dual_stereo_rsv;
- VARDECL(int, bits1);
- VARDECL(int, bits2);
- VARDECL(int, thresh);
- VARDECL(int, trim_offset);
- SAVE_STACK;
-
- total = IMAX(total, 0);
- len = m->nbEBands;
- skip_start = start;
- /* Reserve a bit to signal the end of manually skipped bands. */
- skip_rsv = total >= 1<<BITRES ? 1<<BITRES : 0;
- total -= skip_rsv;
- /* Reserve bits for the intensity and dual stereo parameters. */
- intensity_rsv = dual_stereo_rsv = 0;
- if (C==2)
- {
- intensity_rsv = LOG2_FRAC_TABLE[end-start];
- if (intensity_rsv>total)
- intensity_rsv = 0;
- else
- {
- total -= intensity_rsv;
- dual_stereo_rsv = total>=1<<BITRES ? 1<<BITRES : 0;
- total -= dual_stereo_rsv;
- }
- }
- ALLOC(bits1, len, int);
- ALLOC(bits2, len, int);
- ALLOC(thresh, len, int);
- ALLOC(trim_offset, len, int);
-
- for (j=start;j<end;j++)
- {
- /* Below this threshold, we're sure not to allocate any PVQ bits */
- thresh[j] = IMAX((C)<<BITRES, (3*(m->eBands[j+1]-m->eBands[j])<<LM<<BITRES)>>4);
- /* Tilt of the allocation curve */
- trim_offset[j] = C*(m->eBands[j+1]-m->eBands[j])*(alloc_trim-5-LM)*(end-j-1)
- *(1<<(LM+BITRES))>>6;
- /* Giving less resolution to single-coefficient bands because they get
- more benefit from having one coarse value per coefficient*/
- if ((m->eBands[j+1]-m->eBands[j])<<LM==1)
- trim_offset[j] -= C<<BITRES;
- }
- lo = 1;
- hi = m->nbAllocVectors - 1;
- do
- {
- int done = 0;
- int psum = 0;
- int mid = (lo+hi) >> 1;
- for (j=end;j-->start;)
- {
- int bitsj;
- int N = m->eBands[j+1]-m->eBands[j];
- bitsj = C*N*m->allocVectors[mid*len+j]<<LM>>2;
- if (bitsj > 0)
- bitsj = IMAX(0, bitsj + trim_offset[j]);
- bitsj += offsets[j];
- if (bitsj >= thresh[j] || done)
- {
- done = 1;
- /* Don't allocate more than we can actually use */
- psum += IMIN(bitsj, cap[j]);
- } else {
- if (bitsj >= C<<BITRES)
- psum += C<<BITRES;
- }
- }
- if (psum > total)
- hi = mid - 1;
- else
- lo = mid + 1;
- /*printf ("lo = %d, hi = %d\n", lo, hi);*/
- }
- while (lo <= hi);
- hi = lo--;
- /*printf ("interp between %d and %d\n", lo, hi);*/
- for (j=start;j<end;j++)
- {
- int bits1j, bits2j;
- int N = m->eBands[j+1]-m->eBands[j];
- bits1j = C*N*m->allocVectors[lo*len+j]<<LM>>2;
- bits2j = hi>=m->nbAllocVectors ?
- cap[j] : C*N*m->allocVectors[hi*len+j]<<LM>>2;
- if (bits1j > 0)
- bits1j = IMAX(0, bits1j + trim_offset[j]);
- if (bits2j > 0)
- bits2j = IMAX(0, bits2j + trim_offset[j]);
- if (lo > 0)
- bits1j += offsets[j];
- bits2j += offsets[j];
- if (offsets[j]>0)
- skip_start = j;
- bits2j = IMAX(0,bits2j-bits1j);
- bits1[j] = bits1j;
- bits2[j] = bits2j;
- }
- codedBands = interp_bits2pulses(m, start, end, skip_start, bits1, bits2, thresh, cap,
- total, balance, skip_rsv, intensity, intensity_rsv, dual_stereo, dual_stereo_rsv,
- pulses, ebits, fine_priority, C, LM, ec, encode, prev, signalBandwidth);
- RESTORE_STACK;
- return codedBands;
-}
-
diff --git a/drivers/opus/celt/rate.h b/drivers/opus/celt/rate.h
deleted file mode 100644
index cf8085fccf..0000000000
--- a/drivers/opus/celt/rate.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 RATE_H
-#define RATE_H
-
-#define MAX_PSEUDO 40
-#define LOG_MAX_PSEUDO 6
-
-#define CELT_MAX_PULSES 128
-
-#define MAX_FINE_BITS 8
-
-#define FINE_OFFSET 21
-#define QTHETA_OFFSET 4
-#define QTHETA_OFFSET_TWOPHASE 16
-
-#include "opus/celt/cwrs.h"
-#include "opus/celt/modes.h"
-
-void compute_pulse_cache(CELTMode *m, int LM);
-
-static OPUS_INLINE int get_pulses(int i)
-{
- return i<8 ? i : (8 + (i&7)) << ((i>>3)-1);
-}
-
-static OPUS_INLINE int bits2pulses(const CELTMode *m, int band, int LM, int bits)
-{
- int i;
- int lo, hi;
- const unsigned char *cache;
-
- LM++;
- cache = m->cache.bits + m->cache.index[LM*m->nbEBands+band];
-
- lo = 0;
- hi = cache[0];
- bits--;
- for (i=0;i<LOG_MAX_PSEUDO;i++)
- {
- int mid = (lo+hi+1)>>1;
- /* OPT: Make sure this is implemented with a conditional move */
- if ((int)cache[mid] >= bits)
- hi = mid;
- else
- lo = mid;
- }
- if (bits- (lo == 0 ? -1 : (int)cache[lo]) <= (int)cache[hi]-bits)
- return lo;
- else
- return hi;
-}
-
-static OPUS_INLINE int pulses2bits(const CELTMode *m, int band, int LM, int pulses)
-{
- const unsigned char *cache;
-
- LM++;
- cache = m->cache.bits + m->cache.index[LM*m->nbEBands+band];
- return pulses == 0 ? 0 : cache[pulses]+1;
-}
-
-/** Compute the pulse allocation, i.e. how many pulses will go in each
- * band.
- @param m mode
- @param offsets Requested increase or decrease in the number of bits for
- each band
- @param total Number of bands
- @param pulses Number of pulses per band (returned)
- @return Total number of bits allocated
-*/
-int compute_allocation(const CELTMode *m, int start, int end, const int *offsets, const int *cap, int alloc_trim, int *intensity, int *dual_stero,
- opus_int32 total, opus_int32 *balance, int *pulses, int *ebits, int *fine_priority, int C, int LM, ec_ctx *ec, int encode, int prev, int signalBandwidth);
-
-#endif
diff --git a/drivers/opus/celt/stack_alloc.h b/drivers/opus/celt/stack_alloc.h
deleted file mode 100644
index 7cd6c56ccf..0000000000
--- a/drivers/opus/celt/stack_alloc.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Copyright (C) 2002-2003 Jean-Marc Valin
- Copyright (C) 2007-2009 Xiph.Org Foundation */
-/**
- @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.
-
- 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 STACK_ALLOC_H
-#define STACK_ALLOC_H
-
-#include "opus/opus_types.h"
-#include "opus/opus_defines.h"
-
-#if (!defined (VAR_ARRAYS) && !defined (USE_ALLOCA) && !defined (NONTHREADSAFE_PSEUDOSTACK))
-#error "Opus requires one of VAR_ARRAYS, USE_ALLOCA, or NONTHREADSAFE_PSEUDOSTACK be defined to select the temporary allocation mode."
-#endif
-
-#ifdef USE_ALLOCA
-# ifdef WIN32
-# include <malloc.h>
-# else
-# ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-# else
-# include <stdlib.h>
-# endif
-# endif
-#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 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
- */
-
-#if defined(VAR_ARRAYS)
-
-#define VARDECL(type, var)
-#define ALLOC(var, size, type) type var[size]
-#define SAVE_STACK
-#define RESTORE_STACK
-#define ALLOC_STACK
-/* C99 does not allow VLAs of size zero */
-#define ALLOC_NONE 1
-
-#elif defined(USE_ALLOCA)
-
-#define VARDECL(type, var) type *var
-
-# ifdef WIN32
-# define ALLOC(var, size, type) var = ((type*)_alloca(sizeof(type)*(size)))
-# else
-# define ALLOC(var, size, type) var = ((type*)alloca(sizeof(type)*(size)))
-# endif
-
-#define SAVE_STACK
-#define RESTORE_STACK
-#define ALLOC_STACK
-#define ALLOC_NONE 0
-
-#else
-
-#ifdef CELT_C
-char *scratch_ptr=0;
-char *global_stack=0;
-#else
-extern char *global_stack;
-extern char *scratch_ptr;
-#endif /* CELT_C */
-
-#ifdef ENABLE_VALGRIND
-
-#include <valgrind/memcheck.h>
-
-#ifdef CELT_C
-char *global_stack_top=0;
-#else
-extern char *global_stack_top;
-#endif /* CELT_C */
-
-#define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1))
-#define PUSH(stack, size, type) (VALGRIND_MAKE_MEM_NOACCESS(stack, global_stack_top-stack),ALIGN((stack),sizeof(type)/sizeof(char)),VALGRIND_MAKE_MEM_UNDEFINED(stack, ((size)*sizeof(type)/sizeof(char))),(stack)+=(2*(size)*sizeof(type)/sizeof(char)),(type*)((stack)-(2*(size)*sizeof(type)/sizeof(char))))
-#define RESTORE_STACK ((global_stack = _saved_stack),VALGRIND_MAKE_MEM_NOACCESS(global_stack, global_stack_top-global_stack))
-#define ALLOC_STACK char *_saved_stack; ((global_stack = (global_stack==0) ? ((global_stack_top=opus_alloc_scratch(GLOBAL_STACK_SIZE*2)+(GLOBAL_STACK_SIZE*2))-(GLOBAL_STACK_SIZE*2)) : global_stack),VALGRIND_MAKE_MEM_NOACCESS(global_stack, global_stack_top-global_stack)); _saved_stack = global_stack;
-
-#else
-
-#define ALIGN(stack, size) ((stack) += ((size) - (long)(stack)) & ((size) - 1))
-#define PUSH(stack, size, type) (ALIGN((stack),sizeof(type)/sizeof(char)),(stack)+=(size)*(sizeof(type)/sizeof(char)),(type*)((stack)-(size)*(sizeof(type)/sizeof(char))))
-#if 0 /* Set this to 1 to instrument pseudostack usage */
-#define RESTORE_STACK (printf("%ld %s:%d\n", global_stack-scratch_ptr, __FILE__, __LINE__),global_stack = _saved_stack)
-#else
-#define RESTORE_STACK (global_stack = _saved_stack)
-#endif
-#define ALLOC_STACK char *_saved_stack; (global_stack = (global_stack==0) ? (scratch_ptr=opus_alloc_scratch(GLOBAL_STACK_SIZE)) : global_stack); _saved_stack = global_stack;
-
-#endif /* ENABLE_VALGRIND */
-
-#include "opus/celt/os_support.h"
-#define VARDECL(type, var) type *var
-#define ALLOC(var, size, type) var = PUSH(global_stack, size, type)
-#define SAVE_STACK char *_saved_stack = global_stack;
-#define ALLOC_NONE 0
-
-#endif /* VAR_ARRAYS */
-
-
-#ifdef ENABLE_VALGRIND
-
-#include <valgrind/memcheck.h>
-#define OPUS_CHECK_ARRAY(ptr, len) VALGRIND_CHECK_MEM_IS_DEFINED(ptr, len*sizeof(*ptr))
-#define OPUS_CHECK_VALUE(value) VALGRIND_CHECK_VALUE_IS_DEFINED(value)
-#define OPUS_CHECK_ARRAY_COND(ptr, len) VALGRIND_CHECK_MEM_IS_DEFINED(ptr, len*sizeof(*ptr))
-#define OPUS_CHECK_VALUE_COND(value) VALGRIND_CHECK_VALUE_IS_DEFINED(value)
-#define OPUS_PRINT_INT(value) do {fprintf(stderr, #value " = %d at %s:%d\n", value, __FILE__, __LINE__);}while(0)
-#define OPUS_FPRINTF fprintf
-
-#else
-
-static OPUS_INLINE int _opus_false(void) {return 0;}
-#define OPUS_CHECK_ARRAY(ptr, len) _opus_false()
-#define OPUS_CHECK_VALUE(value) _opus_false()
-#define OPUS_PRINT_INT(value) do{}while(0)
-#define OPUS_FPRINTF (void)
-
-#endif
-
-
-#endif /* STACK_ALLOC_H */
diff --git a/drivers/opus/celt/static_modes_fixed.h b/drivers/opus/celt/static_modes_fixed.h
deleted file mode 100644
index 352642f507..0000000000
--- a/drivers/opus/celt/static_modes_fixed.h
+++ /dev/null
@@ -1,892 +0,0 @@
-/* The contents of this file was automatically generated by dump_modes.c
- with arguments: 48000 960
- It contains static definitions for some pre-defined modes. */
-#include "opus/celt/modes.h"
-#include "opus/celt/rate.h"
-
-#ifdef HAVE_ARM_NE10
-#define OVERRIDE_FFT 1
-#include "opus/celt/static_modes_fixed_arm_ne10.h"
-#endif
-
-#ifndef DEF_WINDOW120
-#define DEF_WINDOW120
-static const opus_val16 window120[120] = {
-2, 20, 55, 108, 178,
-266, 372, 494, 635, 792,
-966, 1157, 1365, 1590, 1831,
-2089, 2362, 2651, 2956, 3276,
-3611, 3961, 4325, 4703, 5094,
-5499, 5916, 6346, 6788, 7241,
-7705, 8179, 8663, 9156, 9657,
-10167, 10684, 11207, 11736, 12271,
-12810, 13353, 13899, 14447, 14997,
-15547, 16098, 16648, 17197, 17744,
-18287, 18827, 19363, 19893, 20418,
-20936, 21447, 21950, 22445, 22931,
-23407, 23874, 24330, 24774, 25208,
-25629, 26039, 26435, 26819, 27190,
-27548, 27893, 28224, 28541, 28845,
-29135, 29411, 29674, 29924, 30160,
-30384, 30594, 30792, 30977, 31151,
-31313, 31463, 31602, 31731, 31849,
-31958, 32057, 32148, 32229, 32303,
-32370, 32429, 32481, 32528, 32568,
-32604, 32634, 32661, 32683, 32701,
-32717, 32729, 32740, 32748, 32754,
-32758, 32762, 32764, 32766, 32767,
-32767, 32767, 32767, 32767, 32767,
-};
-#endif
-
-#ifndef DEF_LOGN400
-#define DEF_LOGN400
-static const opus_int16 logN400[21] = {
-0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 16, 16, 16, 21, 21, 24, 29, 34, 36, };
-#endif
-
-#ifndef DEF_PULSE_CACHE50
-#define DEF_PULSE_CACHE50
-static const opus_int16 cache_index50[105] = {
--1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 41, 41, 41,
-82, 82, 123, 164, 200, 222, 0, 0, 0, 0, 0, 0, 0, 0, 41,
-41, 41, 41, 123, 123, 123, 164, 164, 240, 266, 283, 295, 41, 41, 41,
-41, 41, 41, 41, 41, 123, 123, 123, 123, 240, 240, 240, 266, 266, 305,
-318, 328, 336, 123, 123, 123, 123, 123, 123, 123, 123, 240, 240, 240, 240,
-305, 305, 305, 318, 318, 343, 351, 358, 364, 240, 240, 240, 240, 240, 240,
-240, 240, 305, 305, 305, 305, 343, 343, 343, 351, 351, 370, 376, 382, 387,
-};
-static const unsigned char cache_bits50[392] = {
-40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 15, 23, 28,
-31, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 47, 49, 50,
-51, 52, 53, 54, 55, 55, 57, 58, 59, 60, 61, 62, 63, 63, 65,
-66, 67, 68, 69, 70, 71, 71, 40, 20, 33, 41, 48, 53, 57, 61,
-64, 66, 69, 71, 73, 75, 76, 78, 80, 82, 85, 87, 89, 91, 92,
-94, 96, 98, 101, 103, 105, 107, 108, 110, 112, 114, 117, 119, 121, 123,
-124, 126, 128, 40, 23, 39, 51, 60, 67, 73, 79, 83, 87, 91, 94,
-97, 100, 102, 105, 107, 111, 115, 118, 121, 124, 126, 129, 131, 135, 139,
-142, 145, 148, 150, 153, 155, 159, 163, 166, 169, 172, 174, 177, 179, 35,
-28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145, 149,
-153, 159, 165, 171, 176, 180, 185, 189, 192, 199, 205, 211, 216, 220, 225,
-229, 232, 239, 245, 251, 21, 33, 58, 79, 97, 112, 125, 137, 148, 157,
-166, 174, 182, 189, 195, 201, 207, 217, 227, 235, 243, 251, 17, 35, 63,
-86, 106, 123, 139, 152, 165, 177, 187, 197, 206, 214, 222, 230, 237, 250,
-25, 31, 55, 75, 91, 105, 117, 128, 138, 146, 154, 161, 168, 174, 180,
-185, 190, 200, 208, 215, 222, 229, 235, 240, 245, 255, 16, 36, 65, 89,
-110, 128, 144, 159, 173, 185, 196, 207, 217, 226, 234, 242, 250, 11, 41,
-74, 103, 128, 151, 172, 191, 209, 225, 241, 255, 9, 43, 79, 110, 138,
-163, 186, 207, 227, 246, 12, 39, 71, 99, 123, 144, 164, 182, 198, 214,
-228, 241, 253, 9, 44, 81, 113, 142, 168, 192, 214, 235, 255, 7, 49,
-90, 127, 160, 191, 220, 247, 6, 51, 95, 134, 170, 203, 234, 7, 47,
-87, 123, 155, 184, 212, 237, 6, 52, 97, 137, 174, 208, 240, 5, 57,
-106, 151, 192, 231, 5, 59, 111, 158, 202, 243, 5, 55, 103, 147, 187,
-224, 5, 60, 113, 161, 206, 248, 4, 65, 122, 175, 224, 4, 67, 127,
-182, 234, };
-static const unsigned char cache_caps50[168] = {
-224, 224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 185, 185, 185,
-178, 178, 168, 134, 61, 37, 224, 224, 224, 224, 224, 224, 224, 224, 240,
-240, 240, 240, 207, 207, 207, 198, 198, 183, 144, 66, 40, 160, 160, 160,
-160, 160, 160, 160, 160, 185, 185, 185, 185, 193, 193, 193, 183, 183, 172,
-138, 64, 38, 240, 240, 240, 240, 240, 240, 240, 240, 207, 207, 207, 207,
-204, 204, 204, 193, 193, 180, 143, 66, 40, 185, 185, 185, 185, 185, 185,
-185, 185, 193, 193, 193, 193, 193, 193, 193, 183, 183, 172, 138, 65, 39,
-207, 207, 207, 207, 207, 207, 207, 207, 204, 204, 204, 204, 201, 201, 201,
-188, 188, 176, 141, 66, 40, 193, 193, 193, 193, 193, 193, 193, 193, 193,
-193, 193, 193, 194, 194, 194, 184, 184, 173, 139, 65, 39, 204, 204, 204,
-204, 204, 204, 204, 204, 201, 201, 201, 201, 198, 198, 198, 187, 187, 175,
-140, 66, 40, };
-#endif
-
-#ifndef FFT_TWIDDLES48000_960
-#define FFT_TWIDDLES48000_960
-static const kiss_twiddle_cpx fft_twiddles48000_960[480] = {
-{32767, 0}, {32766, -429},
-{32757, -858}, {32743, -1287},
-{32724, -1715}, {32698, -2143},
-{32667, -2570}, {32631, -2998},
-{32588, -3425}, {32541, -3851},
-{32488, -4277}, {32429, -4701},
-{32364, -5125}, {32295, -5548},
-{32219, -5971}, {32138, -6393},
-{32051, -6813}, {31960, -7231},
-{31863, -7650}, {31760, -8067},
-{31652, -8481}, {31539, -8895},
-{31419, -9306}, {31294, -9716},
-{31165, -10126}, {31030, -10532},
-{30889, -10937}, {30743, -11340},
-{30592, -11741}, {30436, -12141},
-{30274, -12540}, {30107, -12935},
-{29936, -13328}, {29758, -13718},
-{29577, -14107}, {29390, -14493},
-{29197, -14875}, {29000, -15257},
-{28797, -15635}, {28590, -16010},
-{28379, -16384}, {28162, -16753},
-{27940, -17119}, {27714, -17484},
-{27482, -17845}, {27246, -18205},
-{27006, -18560}, {26760, -18911},
-{26510, -19260}, {26257, -19606},
-{25997, -19947}, {25734, -20286},
-{25466, -20621}, {25194, -20952},
-{24918, -21281}, {24637, -21605},
-{24353, -21926}, {24063, -22242},
-{23770, -22555}, {23473, -22865},
-{23171, -23171}, {22866, -23472},
-{22557, -23769}, {22244, -24063},
-{21927, -24352}, {21606, -24636},
-{21282, -24917}, {20954, -25194},
-{20622, -25465}, {20288, -25733},
-{19949, -25997}, {19607, -26255},
-{19261, -26509}, {18914, -26760},
-{18561, -27004}, {18205, -27246},
-{17846, -27481}, {17485, -27713},
-{17122, -27940}, {16755, -28162},
-{16385, -28378}, {16012, -28590},
-{15636, -28797}, {15258, -28999},
-{14878, -29197}, {14494, -29389},
-{14108, -29576}, {13720, -29757},
-{13329, -29934}, {12937, -30107},
-{12540, -30274}, {12142, -30435},
-{11744, -30592}, {11342, -30743},
-{10939, -30889}, {10534, -31030},
-{10127, -31164}, {9718, -31294},
-{9307, -31418}, {8895, -31537},
-{8482, -31652}, {8067, -31759},
-{7650, -31862}, {7233, -31960},
-{6815, -32051}, {6393, -32138},
-{5973, -32219}, {5549, -32294},
-{5127, -32364}, {4703, -32429},
-{4278, -32487}, {3852, -32541},
-{3426, -32588}, {2999, -32630},
-{2572, -32667}, {2144, -32698},
-{1716, -32724}, {1287, -32742},
-{860, -32757}, {430, -32766},
-{0, -32767}, {-429, -32766},
-{-858, -32757}, {-1287, -32743},
-{-1715, -32724}, {-2143, -32698},
-{-2570, -32667}, {-2998, -32631},
-{-3425, -32588}, {-3851, -32541},
-{-4277, -32488}, {-4701, -32429},
-{-5125, -32364}, {-5548, -32295},
-{-5971, -32219}, {-6393, -32138},
-{-6813, -32051}, {-7231, -31960},
-{-7650, -31863}, {-8067, -31760},
-{-8481, -31652}, {-8895, -31539},
-{-9306, -31419}, {-9716, -31294},
-{-10126, -31165}, {-10532, -31030},
-{-10937, -30889}, {-11340, -30743},
-{-11741, -30592}, {-12141, -30436},
-{-12540, -30274}, {-12935, -30107},
-{-13328, -29936}, {-13718, -29758},
-{-14107, -29577}, {-14493, -29390},
-{-14875, -29197}, {-15257, -29000},
-{-15635, -28797}, {-16010, -28590},
-{-16384, -28379}, {-16753, -28162},
-{-17119, -27940}, {-17484, -27714},
-{-17845, -27482}, {-18205, -27246},
-{-18560, -27006}, {-18911, -26760},
-{-19260, -26510}, {-19606, -26257},
-{-19947, -25997}, {-20286, -25734},
-{-20621, -25466}, {-20952, -25194},
-{-21281, -24918}, {-21605, -24637},
-{-21926, -24353}, {-22242, -24063},
-{-22555, -23770}, {-22865, -23473},
-{-23171, -23171}, {-23472, -22866},
-{-23769, -22557}, {-24063, -22244},
-{-24352, -21927}, {-24636, -21606},
-{-24917, -21282}, {-25194, -20954},
-{-25465, -20622}, {-25733, -20288},
-{-25997, -19949}, {-26255, -19607},
-{-26509, -19261}, {-26760, -18914},
-{-27004, -18561}, {-27246, -18205},
-{-27481, -17846}, {-27713, -17485},
-{-27940, -17122}, {-28162, -16755},
-{-28378, -16385}, {-28590, -16012},
-{-28797, -15636}, {-28999, -15258},
-{-29197, -14878}, {-29389, -14494},
-{-29576, -14108}, {-29757, -13720},
-{-29934, -13329}, {-30107, -12937},
-{-30274, -12540}, {-30435, -12142},
-{-30592, -11744}, {-30743, -11342},
-{-30889, -10939}, {-31030, -10534},
-{-31164, -10127}, {-31294, -9718},
-{-31418, -9307}, {-31537, -8895},
-{-31652, -8482}, {-31759, -8067},
-{-31862, -7650}, {-31960, -7233},
-{-32051, -6815}, {-32138, -6393},
-{-32219, -5973}, {-32294, -5549},
-{-32364, -5127}, {-32429, -4703},
-{-32487, -4278}, {-32541, -3852},
-{-32588, -3426}, {-32630, -2999},
-{-32667, -2572}, {-32698, -2144},
-{-32724, -1716}, {-32742, -1287},
-{-32757, -860}, {-32766, -430},
-{-32767, 0}, {-32766, 429},
-{-32757, 858}, {-32743, 1287},
-{-32724, 1715}, {-32698, 2143},
-{-32667, 2570}, {-32631, 2998},
-{-32588, 3425}, {-32541, 3851},
-{-32488, 4277}, {-32429, 4701},
-{-32364, 5125}, {-32295, 5548},
-{-32219, 5971}, {-32138, 6393},
-{-32051, 6813}, {-31960, 7231},
-{-31863, 7650}, {-31760, 8067},
-{-31652, 8481}, {-31539, 8895},
-{-31419, 9306}, {-31294, 9716},
-{-31165, 10126}, {-31030, 10532},
-{-30889, 10937}, {-30743, 11340},
-{-30592, 11741}, {-30436, 12141},
-{-30274, 12540}, {-30107, 12935},
-{-29936, 13328}, {-29758, 13718},
-{-29577, 14107}, {-29390, 14493},
-{-29197, 14875}, {-29000, 15257},
-{-28797, 15635}, {-28590, 16010},
-{-28379, 16384}, {-28162, 16753},
-{-27940, 17119}, {-27714, 17484},
-{-27482, 17845}, {-27246, 18205},
-{-27006, 18560}, {-26760, 18911},
-{-26510, 19260}, {-26257, 19606},
-{-25997, 19947}, {-25734, 20286},
-{-25466, 20621}, {-25194, 20952},
-{-24918, 21281}, {-24637, 21605},
-{-24353, 21926}, {-24063, 22242},
-{-23770, 22555}, {-23473, 22865},
-{-23171, 23171}, {-22866, 23472},
-{-22557, 23769}, {-22244, 24063},
-{-21927, 24352}, {-21606, 24636},
-{-21282, 24917}, {-20954, 25194},
-{-20622, 25465}, {-20288, 25733},
-{-19949, 25997}, {-19607, 26255},
-{-19261, 26509}, {-18914, 26760},
-{-18561, 27004}, {-18205, 27246},
-{-17846, 27481}, {-17485, 27713},
-{-17122, 27940}, {-16755, 28162},
-{-16385, 28378}, {-16012, 28590},
-{-15636, 28797}, {-15258, 28999},
-{-14878, 29197}, {-14494, 29389},
-{-14108, 29576}, {-13720, 29757},
-{-13329, 29934}, {-12937, 30107},
-{-12540, 30274}, {-12142, 30435},
-{-11744, 30592}, {-11342, 30743},
-{-10939, 30889}, {-10534, 31030},
-{-10127, 31164}, {-9718, 31294},
-{-9307, 31418}, {-8895, 31537},
-{-8482, 31652}, {-8067, 31759},
-{-7650, 31862}, {-7233, 31960},
-{-6815, 32051}, {-6393, 32138},
-{-5973, 32219}, {-5549, 32294},
-{-5127, 32364}, {-4703, 32429},
-{-4278, 32487}, {-3852, 32541},
-{-3426, 32588}, {-2999, 32630},
-{-2572, 32667}, {-2144, 32698},
-{-1716, 32724}, {-1287, 32742},
-{-860, 32757}, {-430, 32766},
-{0, 32767}, {429, 32766},
-{858, 32757}, {1287, 32743},
-{1715, 32724}, {2143, 32698},
-{2570, 32667}, {2998, 32631},
-{3425, 32588}, {3851, 32541},
-{4277, 32488}, {4701, 32429},
-{5125, 32364}, {5548, 32295},
-{5971, 32219}, {6393, 32138},
-{6813, 32051}, {7231, 31960},
-{7650, 31863}, {8067, 31760},
-{8481, 31652}, {8895, 31539},
-{9306, 31419}, {9716, 31294},
-{10126, 31165}, {10532, 31030},
-{10937, 30889}, {11340, 30743},
-{11741, 30592}, {12141, 30436},
-{12540, 30274}, {12935, 30107},
-{13328, 29936}, {13718, 29758},
-{14107, 29577}, {14493, 29390},
-{14875, 29197}, {15257, 29000},
-{15635, 28797}, {16010, 28590},
-{16384, 28379}, {16753, 28162},
-{17119, 27940}, {17484, 27714},
-{17845, 27482}, {18205, 27246},
-{18560, 27006}, {18911, 26760},
-{19260, 26510}, {19606, 26257},
-{19947, 25997}, {20286, 25734},
-{20621, 25466}, {20952, 25194},
-{21281, 24918}, {21605, 24637},
-{21926, 24353}, {22242, 24063},
-{22555, 23770}, {22865, 23473},
-{23171, 23171}, {23472, 22866},
-{23769, 22557}, {24063, 22244},
-{24352, 21927}, {24636, 21606},
-{24917, 21282}, {25194, 20954},
-{25465, 20622}, {25733, 20288},
-{25997, 19949}, {26255, 19607},
-{26509, 19261}, {26760, 18914},
-{27004, 18561}, {27246, 18205},
-{27481, 17846}, {27713, 17485},
-{27940, 17122}, {28162, 16755},
-{28378, 16385}, {28590, 16012},
-{28797, 15636}, {28999, 15258},
-{29197, 14878}, {29389, 14494},
-{29576, 14108}, {29757, 13720},
-{29934, 13329}, {30107, 12937},
-{30274, 12540}, {30435, 12142},
-{30592, 11744}, {30743, 11342},
-{30889, 10939}, {31030, 10534},
-{31164, 10127}, {31294, 9718},
-{31418, 9307}, {31537, 8895},
-{31652, 8482}, {31759, 8067},
-{31862, 7650}, {31960, 7233},
-{32051, 6815}, {32138, 6393},
-{32219, 5973}, {32294, 5549},
-{32364, 5127}, {32429, 4703},
-{32487, 4278}, {32541, 3852},
-{32588, 3426}, {32630, 2999},
-{32667, 2572}, {32698, 2144},
-{32724, 1716}, {32742, 1287},
-{32757, 860}, {32766, 430},
-};
-#ifndef FFT_BITREV480
-#define FFT_BITREV480
-static const opus_int16 fft_bitrev480[480] = {
-0, 96, 192, 288, 384, 32, 128, 224, 320, 416, 64, 160, 256, 352, 448,
-8, 104, 200, 296, 392, 40, 136, 232, 328, 424, 72, 168, 264, 360, 456,
-16, 112, 208, 304, 400, 48, 144, 240, 336, 432, 80, 176, 272, 368, 464,
-24, 120, 216, 312, 408, 56, 152, 248, 344, 440, 88, 184, 280, 376, 472,
-4, 100, 196, 292, 388, 36, 132, 228, 324, 420, 68, 164, 260, 356, 452,
-12, 108, 204, 300, 396, 44, 140, 236, 332, 428, 76, 172, 268, 364, 460,
-20, 116, 212, 308, 404, 52, 148, 244, 340, 436, 84, 180, 276, 372, 468,
-28, 124, 220, 316, 412, 60, 156, 252, 348, 444, 92, 188, 284, 380, 476,
-1, 97, 193, 289, 385, 33, 129, 225, 321, 417, 65, 161, 257, 353, 449,
-9, 105, 201, 297, 393, 41, 137, 233, 329, 425, 73, 169, 265, 361, 457,
-17, 113, 209, 305, 401, 49, 145, 241, 337, 433, 81, 177, 273, 369, 465,
-25, 121, 217, 313, 409, 57, 153, 249, 345, 441, 89, 185, 281, 377, 473,
-5, 101, 197, 293, 389, 37, 133, 229, 325, 421, 69, 165, 261, 357, 453,
-13, 109, 205, 301, 397, 45, 141, 237, 333, 429, 77, 173, 269, 365, 461,
-21, 117, 213, 309, 405, 53, 149, 245, 341, 437, 85, 181, 277, 373, 469,
-29, 125, 221, 317, 413, 61, 157, 253, 349, 445, 93, 189, 285, 381, 477,
-2, 98, 194, 290, 386, 34, 130, 226, 322, 418, 66, 162, 258, 354, 450,
-10, 106, 202, 298, 394, 42, 138, 234, 330, 426, 74, 170, 266, 362, 458,
-18, 114, 210, 306, 402, 50, 146, 242, 338, 434, 82, 178, 274, 370, 466,
-26, 122, 218, 314, 410, 58, 154, 250, 346, 442, 90, 186, 282, 378, 474,
-6, 102, 198, 294, 390, 38, 134, 230, 326, 422, 70, 166, 262, 358, 454,
-14, 110, 206, 302, 398, 46, 142, 238, 334, 430, 78, 174, 270, 366, 462,
-22, 118, 214, 310, 406, 54, 150, 246, 342, 438, 86, 182, 278, 374, 470,
-30, 126, 222, 318, 414, 62, 158, 254, 350, 446, 94, 190, 286, 382, 478,
-3, 99, 195, 291, 387, 35, 131, 227, 323, 419, 67, 163, 259, 355, 451,
-11, 107, 203, 299, 395, 43, 139, 235, 331, 427, 75, 171, 267, 363, 459,
-19, 115, 211, 307, 403, 51, 147, 243, 339, 435, 83, 179, 275, 371, 467,
-27, 123, 219, 315, 411, 59, 155, 251, 347, 443, 91, 187, 283, 379, 475,
-7, 103, 199, 295, 391, 39, 135, 231, 327, 423, 71, 167, 263, 359, 455,
-15, 111, 207, 303, 399, 47, 143, 239, 335, 431, 79, 175, 271, 367, 463,
-23, 119, 215, 311, 407, 55, 151, 247, 343, 439, 87, 183, 279, 375, 471,
-31, 127, 223, 319, 415, 63, 159, 255, 351, 447, 95, 191, 287, 383, 479,
-};
-#endif
-
-#ifndef FFT_BITREV240
-#define FFT_BITREV240
-static const opus_int16 fft_bitrev240[240] = {
-0, 48, 96, 144, 192, 16, 64, 112, 160, 208, 32, 80, 128, 176, 224,
-4, 52, 100, 148, 196, 20, 68, 116, 164, 212, 36, 84, 132, 180, 228,
-8, 56, 104, 152, 200, 24, 72, 120, 168, 216, 40, 88, 136, 184, 232,
-12, 60, 108, 156, 204, 28, 76, 124, 172, 220, 44, 92, 140, 188, 236,
-1, 49, 97, 145, 193, 17, 65, 113, 161, 209, 33, 81, 129, 177, 225,
-5, 53, 101, 149, 197, 21, 69, 117, 165, 213, 37, 85, 133, 181, 229,
-9, 57, 105, 153, 201, 25, 73, 121, 169, 217, 41, 89, 137, 185, 233,
-13, 61, 109, 157, 205, 29, 77, 125, 173, 221, 45, 93, 141, 189, 237,
-2, 50, 98, 146, 194, 18, 66, 114, 162, 210, 34, 82, 130, 178, 226,
-6, 54, 102, 150, 198, 22, 70, 118, 166, 214, 38, 86, 134, 182, 230,
-10, 58, 106, 154, 202, 26, 74, 122, 170, 218, 42, 90, 138, 186, 234,
-14, 62, 110, 158, 206, 30, 78, 126, 174, 222, 46, 94, 142, 190, 238,
-3, 51, 99, 147, 195, 19, 67, 115, 163, 211, 35, 83, 131, 179, 227,
-7, 55, 103, 151, 199, 23, 71, 119, 167, 215, 39, 87, 135, 183, 231,
-11, 59, 107, 155, 203, 27, 75, 123, 171, 219, 43, 91, 139, 187, 235,
-15, 63, 111, 159, 207, 31, 79, 127, 175, 223, 47, 95, 143, 191, 239,
-};
-#endif
-
-#ifndef FFT_BITREV120
-#define FFT_BITREV120
-static const opus_int16 fft_bitrev120[120] = {
-0, 24, 48, 72, 96, 8, 32, 56, 80, 104, 16, 40, 64, 88, 112,
-4, 28, 52, 76, 100, 12, 36, 60, 84, 108, 20, 44, 68, 92, 116,
-1, 25, 49, 73, 97, 9, 33, 57, 81, 105, 17, 41, 65, 89, 113,
-5, 29, 53, 77, 101, 13, 37, 61, 85, 109, 21, 45, 69, 93, 117,
-2, 26, 50, 74, 98, 10, 34, 58, 82, 106, 18, 42, 66, 90, 114,
-6, 30, 54, 78, 102, 14, 38, 62, 86, 110, 22, 46, 70, 94, 118,
-3, 27, 51, 75, 99, 11, 35, 59, 83, 107, 19, 43, 67, 91, 115,
-7, 31, 55, 79, 103, 15, 39, 63, 87, 111, 23, 47, 71, 95, 119,
-};
-#endif
-
-#ifndef FFT_BITREV60
-#define FFT_BITREV60
-static const opus_int16 fft_bitrev60[60] = {
-0, 12, 24, 36, 48, 4, 16, 28, 40, 52, 8, 20, 32, 44, 56,
-1, 13, 25, 37, 49, 5, 17, 29, 41, 53, 9, 21, 33, 45, 57,
-2, 14, 26, 38, 50, 6, 18, 30, 42, 54, 10, 22, 34, 46, 58,
-3, 15, 27, 39, 51, 7, 19, 31, 43, 55, 11, 23, 35, 47, 59,
-};
-#endif
-
-#ifndef FFT_STATE48000_960_0
-#define FFT_STATE48000_960_0
-static const kiss_fft_state fft_state48000_960_0 = {
-480, /* nfft */
-17476, /* scale */
-8, /* scale_shift */
--1, /* shift */
-{5, 96, 3, 32, 4, 8, 2, 4, 4, 1, 0, 0, 0, 0, 0, 0, }, /* factors */
-fft_bitrev480, /* bitrev */
-fft_twiddles48000_960, /* bitrev */
-#ifdef OVERRIDE_FFT
-(arch_fft_state *)&cfg_arch_480,
-#else
-NULL,
-#endif
-};
-#endif
-
-#ifndef FFT_STATE48000_960_1
-#define FFT_STATE48000_960_1
-static const kiss_fft_state fft_state48000_960_1 = {
-240, /* nfft */
-17476, /* scale */
-7, /* scale_shift */
-1, /* shift */
-{5, 48, 3, 16, 4, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, }, /* factors */
-fft_bitrev240, /* bitrev */
-fft_twiddles48000_960, /* bitrev */
-#ifdef OVERRIDE_FFT
-(arch_fft_state *)&cfg_arch_240,
-#else
-NULL,
-#endif
-};
-#endif
-
-#ifndef FFT_STATE48000_960_2
-#define FFT_STATE48000_960_2
-static const kiss_fft_state fft_state48000_960_2 = {
-120, /* nfft */
-17476, /* scale */
-6, /* scale_shift */
-2, /* shift */
-{5, 24, 3, 8, 2, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, }, /* factors */
-fft_bitrev120, /* bitrev */
-fft_twiddles48000_960, /* bitrev */
-#ifdef OVERRIDE_FFT
-(arch_fft_state *)&cfg_arch_120,
-#else
-NULL,
-#endif
-};
-#endif
-
-#ifndef FFT_STATE48000_960_3
-#define FFT_STATE48000_960_3
-static const kiss_fft_state fft_state48000_960_3 = {
-60, /* nfft */
-17476, /* scale */
-5, /* scale_shift */
-3, /* shift */
-{5, 12, 3, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* factors */
-fft_bitrev60, /* bitrev */
-fft_twiddles48000_960, /* bitrev */
-#ifdef OVERRIDE_FFT
-(arch_fft_state *)&cfg_arch_60,
-#else
-NULL,
-#endif
-};
-#endif
-
-#endif
-
-#ifndef MDCT_TWIDDLES960
-#define MDCT_TWIDDLES960
-static const opus_val16 mdct_twiddles960[1800] = {
-32767, 32767, 32767, 32766, 32765,
-32763, 32761, 32759, 32756, 32753,
-32750, 32746, 32742, 32738, 32733,
-32728, 32722, 32717, 32710, 32704,
-32697, 32690, 32682, 32674, 32666,
-32657, 32648, 32639, 32629, 32619,
-32609, 32598, 32587, 32576, 32564,
-32552, 32539, 32526, 32513, 32500,
-32486, 32472, 32457, 32442, 32427,
-32411, 32395, 32379, 32362, 32345,
-32328, 32310, 32292, 32274, 32255,
-32236, 32217, 32197, 32177, 32157,
-32136, 32115, 32093, 32071, 32049,
-32027, 32004, 31981, 31957, 31933,
-31909, 31884, 31859, 31834, 31809,
-31783, 31756, 31730, 31703, 31676,
-31648, 31620, 31592, 31563, 31534,
-31505, 31475, 31445, 31415, 31384,
-31353, 31322, 31290, 31258, 31226,
-31193, 31160, 31127, 31093, 31059,
-31025, 30990, 30955, 30920, 30884,
-30848, 30812, 30775, 30738, 30701,
-30663, 30625, 30587, 30548, 30509,
-30470, 30430, 30390, 30350, 30309,
-30269, 30227, 30186, 30144, 30102,
-30059, 30016, 29973, 29930, 29886,
-29842, 29797, 29752, 29707, 29662,
-29616, 29570, 29524, 29477, 29430,
-29383, 29335, 29287, 29239, 29190,
-29142, 29092, 29043, 28993, 28943,
-28892, 28842, 28791, 28739, 28688,
-28636, 28583, 28531, 28478, 28425,
-28371, 28317, 28263, 28209, 28154,
-28099, 28044, 27988, 27932, 27876,
-27820, 27763, 27706, 27648, 27591,
-27533, 27474, 27416, 27357, 27298,
-27238, 27178, 27118, 27058, 26997,
-26936, 26875, 26814, 26752, 26690,
-26628, 26565, 26502, 26439, 26375,
-26312, 26247, 26183, 26119, 26054,
-25988, 25923, 25857, 25791, 25725,
-25658, 25592, 25524, 25457, 25389,
-25322, 25253, 25185, 25116, 25047,
-24978, 24908, 24838, 24768, 24698,
-24627, 24557, 24485, 24414, 24342,
-24270, 24198, 24126, 24053, 23980,
-23907, 23834, 23760, 23686, 23612,
-23537, 23462, 23387, 23312, 23237,
-23161, 23085, 23009, 22932, 22856,
-22779, 22701, 22624, 22546, 22468,
-22390, 22312, 22233, 22154, 22075,
-21996, 21916, 21836, 21756, 21676,
-21595, 21515, 21434, 21352, 21271,
-21189, 21107, 21025, 20943, 20860,
-20777, 20694, 20611, 20528, 20444,
-20360, 20276, 20192, 20107, 20022,
-19937, 19852, 19767, 19681, 19595,
-19509, 19423, 19336, 19250, 19163,
-19076, 18988, 18901, 18813, 18725,
-18637, 18549, 18460, 18372, 18283,
-18194, 18104, 18015, 17925, 17835,
-17745, 17655, 17565, 17474, 17383,
-17292, 17201, 17110, 17018, 16927,
-16835, 16743, 16650, 16558, 16465,
-16372, 16279, 16186, 16093, 15999,
-15906, 15812, 15718, 15624, 15529,
-15435, 15340, 15245, 15150, 15055,
-14960, 14864, 14769, 14673, 14577,
-14481, 14385, 14288, 14192, 14095,
-13998, 13901, 13804, 13706, 13609,
-13511, 13414, 13316, 13218, 13119,
-13021, 12923, 12824, 12725, 12626,
-12527, 12428, 12329, 12230, 12130,
-12030, 11930, 11831, 11730, 11630,
-11530, 11430, 11329, 11228, 11128,
-11027, 10926, 10824, 10723, 10622,
-10520, 10419, 10317, 10215, 10113,
-10011, 9909, 9807, 9704, 9602,
-9499, 9397, 9294, 9191, 9088,
-8985, 8882, 8778, 8675, 8572,
-8468, 8364, 8261, 8157, 8053,
-7949, 7845, 7741, 7637, 7532,
-7428, 7323, 7219, 7114, 7009,
-6905, 6800, 6695, 6590, 6485,
-6380, 6274, 6169, 6064, 5958,
-5853, 5747, 5642, 5536, 5430,
-5325, 5219, 5113, 5007, 4901,
-4795, 4689, 4583, 4476, 4370,
-4264, 4157, 4051, 3945, 3838,
-3732, 3625, 3518, 3412, 3305,
-3198, 3092, 2985, 2878, 2771,
-2664, 2558, 2451, 2344, 2237,
-2130, 2023, 1916, 1809, 1702,
-1594, 1487, 1380, 1273, 1166,
-1059, 952, 844, 737, 630,
-523, 416, 308, 201, 94,
--13, -121, -228, -335, -442,
--550, -657, -764, -871, -978,
--1086, -1193, -1300, -1407, -1514,
--1621, -1728, -1835, -1942, -2049,
--2157, -2263, -2370, -2477, -2584,
--2691, -2798, -2905, -3012, -3118,
--3225, -3332, -3439, -3545, -3652,
--3758, -3865, -3971, -4078, -4184,
--4290, -4397, -4503, -4609, -4715,
--4821, -4927, -5033, -5139, -5245,
--5351, -5457, -5562, -5668, -5774,
--5879, -5985, -6090, -6195, -6301,
--6406, -6511, -6616, -6721, -6826,
--6931, -7036, -7140, -7245, -7349,
--7454, -7558, -7663, -7767, -7871,
--7975, -8079, -8183, -8287, -8390,
--8494, -8597, -8701, -8804, -8907,
--9011, -9114, -9217, -9319, -9422,
--9525, -9627, -9730, -9832, -9934,
--10037, -10139, -10241, -10342, -10444,
--10546, -10647, -10748, -10850, -10951,
--11052, -11153, -11253, -11354, -11455,
--11555, -11655, -11756, -11856, -11955,
--12055, -12155, -12254, -12354, -12453,
--12552, -12651, -12750, -12849, -12947,
--13046, -13144, -13242, -13340, -13438,
--13536, -13633, -13731, -13828, -13925,
--14022, -14119, -14216, -14312, -14409,
--14505, -14601, -14697, -14793, -14888,
--14984, -15079, -15174, -15269, -15364,
--15459, -15553, -15647, -15741, -15835,
--15929, -16023, -16116, -16210, -16303,
--16396, -16488, -16581, -16673, -16766,
--16858, -16949, -17041, -17133, -17224,
--17315, -17406, -17497, -17587, -17678,
--17768, -17858, -17948, -18037, -18127,
--18216, -18305, -18394, -18483, -18571,
--18659, -18747, -18835, -18923, -19010,
--19098, -19185, -19271, -19358, -19444,
--19531, -19617, -19702, -19788, -19873,
--19959, -20043, -20128, -20213, -20297,
--20381, -20465, -20549, -20632, -20715,
--20798, -20881, -20963, -21046, -21128,
--21210, -21291, -21373, -21454, -21535,
--21616, -21696, -21776, -21856, -21936,
--22016, -22095, -22174, -22253, -22331,
--22410, -22488, -22566, -22643, -22721,
--22798, -22875, -22951, -23028, -23104,
--23180, -23256, -23331, -23406, -23481,
--23556, -23630, -23704, -23778, -23852,
--23925, -23998, -24071, -24144, -24216,
--24288, -24360, -24432, -24503, -24574,
--24645, -24716, -24786, -24856, -24926,
--24995, -25064, -25133, -25202, -25270,
--25339, -25406, -25474, -25541, -25608,
--25675, -25742, -25808, -25874, -25939,
--26005, -26070, -26135, -26199, -26264,
--26327, -26391, -26455, -26518, -26581,
--26643, -26705, -26767, -26829, -26891,
--26952, -27013, -27073, -27133, -27193,
--27253, -27312, -27372, -27430, -27489,
--27547, -27605, -27663, -27720, -27777,
--27834, -27890, -27946, -28002, -28058,
--28113, -28168, -28223, -28277, -28331,
--28385, -28438, -28491, -28544, -28596,
--28649, -28701, -28752, -28803, -28854,
--28905, -28955, -29006, -29055, -29105,
--29154, -29203, -29251, -29299, -29347,
--29395, -29442, -29489, -29535, -29582,
--29628, -29673, -29719, -29764, -29808,
--29853, -29897, -29941, -29984, -30027,
--30070, -30112, -30154, -30196, -30238,
--30279, -30320, -30360, -30400, -30440,
--30480, -30519, -30558, -30596, -30635,
--30672, -30710, -30747, -30784, -30821,
--30857, -30893, -30929, -30964, -30999,
--31033, -31068, -31102, -31135, -31168,
--31201, -31234, -31266, -31298, -31330,
--31361, -31392, -31422, -31453, -31483,
--31512, -31541, -31570, -31599, -31627,
--31655, -31682, -31710, -31737, -31763,
--31789, -31815, -31841, -31866, -31891,
--31915, -31939, -31963, -31986, -32010,
--32032, -32055, -32077, -32099, -32120,
--32141, -32162, -32182, -32202, -32222,
--32241, -32260, -32279, -32297, -32315,
--32333, -32350, -32367, -32383, -32399,
--32415, -32431, -32446, -32461, -32475,
--32489, -32503, -32517, -32530, -32542,
--32555, -32567, -32579, -32590, -32601,
--32612, -32622, -32632, -32641, -32651,
--32659, -32668, -32676, -32684, -32692,
--32699, -32706, -32712, -32718, -32724,
--32729, -32734, -32739, -32743, -32747,
--32751, -32754, -32757, -32760, -32762,
--32764, -32765, -32767, -32767, -32767,
-32767, 32767, 32765, 32761, 32756,
-32750, 32742, 32732, 32722, 32710,
-32696, 32681, 32665, 32647, 32628,
-32608, 32586, 32562, 32538, 32512,
-32484, 32455, 32425, 32393, 32360,
-32326, 32290, 32253, 32214, 32174,
-32133, 32090, 32046, 32001, 31954,
-31906, 31856, 31805, 31753, 31700,
-31645, 31588, 31530, 31471, 31411,
-31349, 31286, 31222, 31156, 31089,
-31020, 30951, 30880, 30807, 30733,
-30658, 30582, 30504, 30425, 30345,
-30263, 30181, 30096, 30011, 29924,
-29836, 29747, 29656, 29564, 29471,
-29377, 29281, 29184, 29086, 28987,
-28886, 28784, 28681, 28577, 28471,
-28365, 28257, 28147, 28037, 27925,
-27812, 27698, 27583, 27467, 27349,
-27231, 27111, 26990, 26868, 26744,
-26620, 26494, 26367, 26239, 26110,
-25980, 25849, 25717, 25583, 25449,
-25313, 25176, 25038, 24900, 24760,
-24619, 24477, 24333, 24189, 24044,
-23898, 23751, 23602, 23453, 23303,
-23152, 22999, 22846, 22692, 22537,
-22380, 22223, 22065, 21906, 21746,
-21585, 21423, 21261, 21097, 20933,
-20767, 20601, 20434, 20265, 20096,
-19927, 19756, 19584, 19412, 19239,
-19065, 18890, 18714, 18538, 18361,
-18183, 18004, 17824, 17644, 17463,
-17281, 17098, 16915, 16731, 16546,
-16361, 16175, 15988, 15800, 15612,
-15423, 15234, 15043, 14852, 14661,
-14469, 14276, 14083, 13889, 13694,
-13499, 13303, 13107, 12910, 12713,
-12515, 12317, 12118, 11918, 11718,
-11517, 11316, 11115, 10913, 10710,
-10508, 10304, 10100, 9896, 9691,
-9486, 9281, 9075, 8869, 8662,
-8455, 8248, 8040, 7832, 7623,
-7415, 7206, 6996, 6787, 6577,
-6366, 6156, 5945, 5734, 5523,
-5311, 5100, 4888, 4675, 4463,
-4251, 4038, 3825, 3612, 3399,
-3185, 2972, 2758, 2544, 2330,
-2116, 1902, 1688, 1474, 1260,
-1045, 831, 617, 402, 188,
--27, -241, -456, -670, -885,
--1099, -1313, -1528, -1742, -1956,
--2170, -2384, -2598, -2811, -3025,
--3239, -3452, -3665, -3878, -4091,
--4304, -4516, -4728, -4941, -5153,
--5364, -5576, -5787, -5998, -6209,
--6419, -6629, -6839, -7049, -7258,
--7467, -7676, -7884, -8092, -8300,
--8507, -8714, -8920, -9127, -9332,
--9538, -9743, -9947, -10151, -10355,
--10558, -10761, -10963, -11165, -11367,
--11568, -11768, -11968, -12167, -12366,
--12565, -12762, -12960, -13156, -13352,
--13548, -13743, -13937, -14131, -14324,
--14517, -14709, -14900, -15091, -15281,
--15470, -15659, -15847, -16035, -16221,
--16407, -16593, -16777, -16961, -17144,
--17326, -17508, -17689, -17869, -18049,
--18227, -18405, -18582, -18758, -18934,
--19108, -19282, -19455, -19627, -19799,
--19969, -20139, -20308, -20475, -20642,
--20809, -20974, -21138, -21301, -21464,
--21626, -21786, -21946, -22105, -22263,
--22420, -22575, -22730, -22884, -23037,
--23189, -23340, -23490, -23640, -23788,
--23935, -24080, -24225, -24369, -24512,
--24654, -24795, -24934, -25073, -25211,
--25347, -25482, -25617, -25750, -25882,
--26013, -26143, -26272, -26399, -26526,
--26651, -26775, -26898, -27020, -27141,
--27260, -27379, -27496, -27612, -27727,
--27841, -27953, -28065, -28175, -28284,
--28391, -28498, -28603, -28707, -28810,
--28911, -29012, -29111, -29209, -29305,
--29401, -29495, -29587, -29679, -29769,
--29858, -29946, -30032, -30118, -30201,
--30284, -30365, -30445, -30524, -30601,
--30677, -30752, -30825, -30897, -30968,
--31038, -31106, -31172, -31238, -31302,
--31365, -31426, -31486, -31545, -31602,
--31658, -31713, -31766, -31818, -31869,
--31918, -31966, -32012, -32058, -32101,
--32144, -32185, -32224, -32262, -32299,
--32335, -32369, -32401, -32433, -32463,
--32491, -32518, -32544, -32568, -32591,
--32613, -32633, -32652, -32669, -32685,
--32700, -32713, -32724, -32735, -32744,
--32751, -32757, -32762, -32766, -32767,
-32767, 32764, 32755, 32741, 32720,
-32694, 32663, 32626, 32583, 32535,
-32481, 32421, 32356, 32286, 32209,
-32128, 32041, 31948, 31850, 31747,
-31638, 31523, 31403, 31278, 31148,
-31012, 30871, 30724, 30572, 30415,
-30253, 30086, 29913, 29736, 29553,
-29365, 29172, 28974, 28771, 28564,
-28351, 28134, 27911, 27684, 27452,
-27216, 26975, 26729, 26478, 26223,
-25964, 25700, 25432, 25159, 24882,
-24601, 24315, 24026, 23732, 23434,
-23133, 22827, 22517, 22204, 21886,
-21565, 21240, 20912, 20580, 20244,
-19905, 19563, 19217, 18868, 18516,
-18160, 17802, 17440, 17075, 16708,
-16338, 15964, 15588, 15210, 14829,
-14445, 14059, 13670, 13279, 12886,
-12490, 12093, 11693, 11291, 10888,
-10482, 10075, 9666, 9255, 8843,
-8429, 8014, 7597, 7180, 6760,
-6340, 5919, 5496, 5073, 4649,
-4224, 3798, 3372, 2945, 2517,
-2090, 1661, 1233, 804, 375,
--54, -483, -911, -1340, -1768,
--2197, -2624, -3052, -3479, -3905,
--4330, -4755, -5179, -5602, -6024,
--6445, -6865, -7284, -7702, -8118,
--8533, -8946, -9358, -9768, -10177,
--10584, -10989, -11392, -11793, -12192,
--12589, -12984, -13377, -13767, -14155,
--14541, -14924, -15305, -15683, -16058,
--16430, -16800, -17167, -17531, -17892,
--18249, -18604, -18956, -19304, -19649,
--19990, -20329, -20663, -20994, -21322,
--21646, -21966, -22282, -22595, -22904,
--23208, -23509, -23806, -24099, -24387,
--24672, -24952, -25228, -25499, -25766,
--26029, -26288, -26541, -26791, -27035,
--27275, -27511, -27741, -27967, -28188,
--28405, -28616, -28823, -29024, -29221,
--29412, -29599, -29780, -29957, -30128,
--30294, -30455, -30611, -30761, -30906,
--31046, -31181, -31310, -31434, -31552,
--31665, -31773, -31875, -31972, -32063,
--32149, -32229, -32304, -32373, -32437,
--32495, -32547, -32594, -32635, -32671,
--32701, -32726, -32745, -32758, -32766,
-32767, 32754, 32717, 32658, 32577,
-32473, 32348, 32200, 32029, 31837,
-31624, 31388, 31131, 30853, 30553,
-30232, 29891, 29530, 29148, 28746,
-28324, 27883, 27423, 26944, 26447,
-25931, 25398, 24847, 24279, 23695,
-23095, 22478, 21846, 21199, 20538,
-19863, 19174, 18472, 17757, 17030,
-16291, 15541, 14781, 14010, 13230,
-12441, 11643, 10837, 10024, 9204,
-8377, 7545, 6708, 5866, 5020,
-4171, 3319, 2464, 1608, 751,
--107, -965, -1822, -2678, -3532,
--4383, -5232, -6077, -6918, -7754,
--8585, -9409, -10228, -11039, -11843,
--12639, -13426, -14204, -14972, -15730,
--16477, -17213, -17937, -18648, -19347,
--20033, -20705, -21363, -22006, -22634,
--23246, -23843, -24423, -24986, -25533,
--26062, -26573, -27066, -27540, -27995,
--28431, -28848, -29245, -29622, -29979,
--30315, -30630, -30924, -31197, -31449,
--31679, -31887, -32074, -32239, -32381,
--32501, -32600, -32675, -32729, -32759,
-};
-#endif
-
-static const CELTMode mode48000_960_120 = {
-48000, /* Fs */
-120, /* overlap */
-21, /* nbEBands */
-21, /* effEBands */
-{27853, 0, 4096, 8192, }, /* preemph */
-eband5ms, /* eBands */
-3, /* maxLM */
-8, /* nbShortMdcts */
-120, /* shortMdctSize */
-11, /* nbAllocVectors */
-band_allocation, /* allocVectors */
-logN400, /* logN */
-window120, /* window */
-{1920, 3, {&fft_state48000_960_0, &fft_state48000_960_1, &fft_state48000_960_2, &fft_state48000_960_3, }, mdct_twiddles960}, /* mdct */
-{392, cache_index50, cache_bits50, cache_caps50}, /* cache */
-};
-
-/* List of all the available modes */
-#define TOTAL_MODES 1
-static const CELTMode * const static_mode_list[TOTAL_MODES] = {
-&mode48000_960_120,
-};
diff --git a/drivers/opus/celt/static_modes_fixed_arm_ne10.h b/drivers/opus/celt/static_modes_fixed_arm_ne10.h
deleted file mode 100644
index b8ef0cee98..0000000000
--- a/drivers/opus/celt/static_modes_fixed_arm_ne10.h
+++ /dev/null
@@ -1,388 +0,0 @@
-/* The contents of this file was automatically generated by
- * dump_mode_arm_ne10.c with arguments: 48000 960
- * It contains static definitions for some pre-defined modes. */
-#include <NE10_init.h>
-
-#ifndef NE10_FFT_PARAMS48000_960
-#define NE10_FFT_PARAMS48000_960
-static const ne10_int32_t ne10_factors_480[64] = {
-4, 40, 4, 30, 2, 15, 5, 3, 3, 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, };
-static const ne10_int32_t ne10_factors_240[64] = {
-3, 20, 4, 15, 5, 3, 3, 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, };
-static const ne10_int32_t ne10_factors_120[64] = {
-3, 10, 2, 15, 5, 3, 3, 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, };
-static const ne10_int32_t ne10_factors_60[64] = {
-2, 5, 5, 3, 3, 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, };
-static const ne10_fft_cpx_int32_t ne10_twiddles_480[480] = {
-{0,0}, {2147483647,0}, {2147483647,0},
-{2147483647,0}, {1961823921,-873460313}, {1436946998,-1595891394},
-{2147483647,0}, {1436946998,-1595891394}, {-224473265,-2135719496},
-{2147483647,0}, {663608871,-2042378339}, {-1737350854,-1262259096},
-{2147483647,0}, {-224473265,-2135719496}, {-2100555935,446487152},
-{2147483647,0}, {2100555974,-446486968}, {1961823921,-873460313},
-{1737350743,-1262259248}, {1436946998,-1595891394}, {1073741769,-1859775424},
-{663608871,-2042378339}, {224473078,-2135719516}, {-224473265,-2135719496},
-{-663609049,-2042378281}, {-1073741932,-1859775330}, {-1436947137,-1595891268},
-{-1737350854,-1262259096}, {-1961823997,-873460141}, {-2100556013,-446486785},
-{2147483647,0}, {2144540595,-112390613}, {2135719506,-224473172},
-{2121044558,-335940465}, {2100555974,-446486968}, {2074309912,-555809682},
-{2042378310,-663608960}, {2004848691,-769589332}, {1961823921,-873460313},
-{1913421927,-974937199}, {1859775377,-1073741851}, {1801031311,-1169603450},
-{1737350743,-1262259248}, {1668908218,-1351455280}, {1595891331,-1436947067},
-{1518500216,-1518500282}, {1436946998,-1595891394}, {1351455207,-1668908277},
-{1262259172,-1737350799}, {1169603371,-1801031362}, {1073741769,-1859775424},
-{974937230,-1913421912}, {873460227,-1961823959}, {769589125,-2004848771},
-{663608871,-2042378339}, {555809715,-2074309903}, {446486876,-2100555994},
-{335940246,-2121044593}, {224473078,-2135719516}, {112390647,-2144540593},
-{2147483647,0}, {2135719506,-224473172}, {2100555974,-446486968},
-{2042378310,-663608960}, {1961823921,-873460313}, {1859775377,-1073741851},
-{1737350743,-1262259248}, {1595891331,-1436947067}, {1436946998,-1595891394},
-{1262259172,-1737350799}, {1073741769,-1859775424}, {873460227,-1961823959},
-{663608871,-2042378339}, {446486876,-2100555994}, {224473078,-2135719516},
-{-94,-2147483647}, {-224473265,-2135719496}, {-446487060,-2100555955},
-{-663609049,-2042378281}, {-873460398,-1961823883}, {-1073741932,-1859775330},
-{-1262259116,-1737350839}, {-1436947137,-1595891268}, {-1595891628,-1436946738},
-{-1737350854,-1262259096}, {-1859775343,-1073741910}, {-1961823997,-873460141},
-{-2042378447,-663608538}, {-2100556013,-446486785}, {-2135719499,-224473240},
-{2147483647,0}, {2121044558,-335940465}, {2042378310,-663608960},
-{1913421927,-974937199}, {1737350743,-1262259248}, {1518500216,-1518500282},
-{1262259172,-1737350799}, {974937230,-1913421912}, {663608871,-2042378339},
-{335940246,-2121044593}, {-94,-2147483647}, {-335940431,-2121044564},
-{-663609049,-2042378281}, {-974937397,-1913421827}, {-1262259116,-1737350839},
-{-1518500258,-1518500240}, {-1737350854,-1262259096}, {-1913422071,-974936918},
-{-2042378447,-663608538}, {-2121044568,-335940406}, {-2147483647,188},
-{-2121044509,335940777}, {-2042378331,663608895}, {-1913421900,974937252},
-{-1737350633,1262259400}, {-1518499993,1518500506}, {-1262258813,1737351059},
-{-974936606,1913422229}, {-663609179,2042378239}, {-335940566,2121044542},
-{2147483647,0}, {2147299667,-28109693}, {2146747758,-56214570},
-{2145828015,-84309815}, {2144540595,-112390613}, {2142885719,-140452154},
-{2140863671,-168489630}, {2138474797,-196498235}, {2135719506,-224473172},
-{2132598271,-252409646}, {2129111626,-280302871}, {2125260168,-308148068},
-{2121044558,-335940465}, {2116465518,-363675300}, {2111523833,-391347822},
-{2106220349,-418953288}, {2100555974,-446486968}, {2094531681,-473944146},
-{2088148500,-501320115}, {2081407525,-528610186}, {2074309912,-555809682},
-{2066856885,-582913912}, {2059049696,-609918325}, {2050889698,-636818231},
-{2042378310,-663608960}, {2033516972,-690285983}, {2024307180,-716844791},
-{2014750533,-743280770}, {2004848691,-769589332}, {1994603329,-795766029},
-{1984016179,-821806435}, {1973089077,-847706028}, {1961823921,-873460313},
-{1950222618,-899064934}, {1938287127,-924515564}, {1926019520,-949807783},
-{1913421927,-974937199}, {1900496481,-999899565}, {1887245364,-1024690661},
-{1873670877,-1049306180}, {1859775377,-1073741851}, {1845561215,-1097993541},
-{1831030826,-1122057097}, {1816186632,-1145928502}, {1801031311,-1169603450},
-{1785567394,-1193077993}, {1769797456,-1216348214}, {1753724345,-1239409914},
-{1737350743,-1262259248}, {1720679456,-1284892300}, {1703713340,-1307305194},
-{1686455222,-1329494189}, {1668908218,-1351455280}, {1651075255,-1373184807},
-{1632959307,-1394679144}, {1614563642,-1415934412}, {1595891331,-1436947067},
-{1576945572,-1457713510}, {1557729613,-1478230181}, {1538246655,-1498493658},
-{1518500216,-1518500282}, {1498493590,-1538246721}, {1478230113,-1557729677},
-{1457713441,-1576945636}, {1436946998,-1595891394}, {1415934341,-1614563704},
-{1394679073,-1632959368}, {1373184735,-1651075315}, {1351455207,-1668908277},
-{1329494115,-1686455280}, {1307305120,-1703713397}, {1284892225,-1720679512},
-{1262259172,-1737350799}, {1239409837,-1753724400}, {1216348136,-1769797510},
-{1193077915,-1785567446}, {1169603371,-1801031362}, {1145928423,-1816186682},
-{1122057017,-1831030875}, {1097993571,-1845561197}, {1073741769,-1859775424},
-{1049305987,-1873670985}, {1024690635,-1887245378}, {999899482,-1900496524},
-{974937230,-1913421912}, {949807699,-1926019561}, {924515422,-1938287195},
-{899064965,-1950222603}, {873460227,-1961823959}, {847705824,-1973089164},
-{821806407,-1984016190}, {795765941,-1994603364}, {769589125,-2004848771},
-{743280682,-2014750566}, {716844642,-2024307233}, {690286016,-2033516961},
-{663608871,-2042378339}, {636818019,-2050889764}, {609918296,-2059049705},
-{582913822,-2066856911}, {555809715,-2074309903}, {528610126,-2081407540},
-{501319962,-2088148536}, {473944148,-2094531680}, {446486876,-2100555994},
-{418953102,-2106220386}, {391347792,-2111523838}, {363675176,-2116465540},
-{335940246,-2121044593}, {308148006,-2125260177}, {280302715,-2129111646},
-{252409648,-2132598271}, {224473078,-2135719516}, {196498046,-2138474814},
-{168489600,-2140863674}, {140452029,-2142885728}, {112390647,-2144540593},
-{84309753,-2145828017}, {56214412,-2146747762}, {28109695,-2147299667},
-{2147483647,0}, {2146747758,-56214570}, {2144540595,-112390613},
-{2140863671,-168489630}, {2135719506,-224473172}, {2129111626,-280302871},
-{2121044558,-335940465}, {2111523833,-391347822}, {2100555974,-446486968},
-{2088148500,-501320115}, {2074309912,-555809682}, {2059049696,-609918325},
-{2042378310,-663608960}, {2024307180,-716844791}, {2004848691,-769589332},
-{1984016179,-821806435}, {1961823921,-873460313}, {1938287127,-924515564},
-{1913421927,-974937199}, {1887245364,-1024690661}, {1859775377,-1073741851},
-{1831030826,-1122057097}, {1801031311,-1169603450}, {1769797456,-1216348214},
-{1737350743,-1262259248}, {1703713340,-1307305194}, {1668908218,-1351455280},
-{1632959307,-1394679144}, {1595891331,-1436947067}, {1557729613,-1478230181},
-{1518500216,-1518500282}, {1478230113,-1557729677}, {1436946998,-1595891394},
-{1394679073,-1632959368}, {1351455207,-1668908277}, {1307305120,-1703713397},
-{1262259172,-1737350799}, {1216348136,-1769797510}, {1169603371,-1801031362},
-{1122057017,-1831030875}, {1073741769,-1859775424}, {1024690635,-1887245378},
-{974937230,-1913421912}, {924515422,-1938287195}, {873460227,-1961823959},
-{821806407,-1984016190}, {769589125,-2004848771}, {716844642,-2024307233},
-{663608871,-2042378339}, {609918296,-2059049705}, {555809715,-2074309903},
-{501319962,-2088148536}, {446486876,-2100555994}, {391347792,-2111523838},
-{335940246,-2121044593}, {280302715,-2129111646}, {224473078,-2135719516},
-{168489600,-2140863674}, {112390647,-2144540593}, {56214412,-2146747762},
-{-94,-2147483647}, {-56214600,-2146747757}, {-112390835,-2144540584},
-{-168489787,-2140863659}, {-224473265,-2135719496}, {-280302901,-2129111622},
-{-335940431,-2121044564}, {-391347977,-2111523804}, {-446487060,-2100555955},
-{-501320144,-2088148493}, {-555809896,-2074309855}, {-609918476,-2059049651},
-{-663609049,-2042378281}, {-716844819,-2024307170}, {-769589300,-2004848703},
-{-821806581,-1984016118}, {-873460398,-1961823883}, {-924515591,-1938287114},
-{-974937397,-1913421827}, {-1024690575,-1887245411}, {-1073741932,-1859775330},
-{-1122057395,-1831030643}, {-1169603421,-1801031330}, {-1216348291,-1769797403},
-{-1262259116,-1737350839}, {-1307305268,-1703713283}, {-1351455453,-1668908078},
-{-1394679021,-1632959413}, {-1436947137,-1595891268}, {-1478230435,-1557729372},
-{-1518500258,-1518500240}, {-1557729742,-1478230045}, {-1595891628,-1436946738},
-{-1632959429,-1394679001}, {-1668908417,-1351455035}, {-1703713298,-1307305248},
-{-1737350854,-1262259096}, {-1769797708,-1216347848}, {-1801031344,-1169603400},
-{-1831030924,-1122056937}, {-1859775343,-1073741910}, {-1887245423,-1024690552},
-{-1913422071,-974936918}, {-1938287125,-924515568}, {-1961823997,-873460141},
-{-1984016324,-821806084}, {-2004848713,-769589276}, {-2024307264,-716844553},
-{-2042378447,-663608538}, {-2059049731,-609918206}, {-2074309994,-555809377},
-{-2088148499,-501320119}, {-2100556013,-446486785}, {-2111523902,-391347448},
-{-2121044568,-335940406}, {-2129111659,-280302621}, {-2135719499,-224473240},
-{-2140863681,-168489506}, {-2144540612,-112390298}, {-2146747758,-56214574},
-{2147483647,0}, {2145828015,-84309815}, {2140863671,-168489630},
-{2132598271,-252409646}, {2121044558,-335940465}, {2106220349,-418953288},
-{2088148500,-501320115}, {2066856885,-582913912}, {2042378310,-663608960},
-{2014750533,-743280770}, {1984016179,-821806435}, {1950222618,-899064934},
-{1913421927,-974937199}, {1873670877,-1049306180}, {1831030826,-1122057097},
-{1785567394,-1193077993}, {1737350743,-1262259248}, {1686455222,-1329494189},
-{1632959307,-1394679144}, {1576945572,-1457713510}, {1518500216,-1518500282},
-{1457713441,-1576945636}, {1394679073,-1632959368}, {1329494115,-1686455280},
-{1262259172,-1737350799}, {1193077915,-1785567446}, {1122057017,-1831030875},
-{1049305987,-1873670985}, {974937230,-1913421912}, {899064965,-1950222603},
-{821806407,-1984016190}, {743280682,-2014750566}, {663608871,-2042378339},
-{582913822,-2066856911}, {501319962,-2088148536}, {418953102,-2106220386},
-{335940246,-2121044593}, {252409648,-2132598271}, {168489600,-2140863674},
-{84309753,-2145828017}, {-94,-2147483647}, {-84309940,-2145828010},
-{-168489787,-2140863659}, {-252409834,-2132598249}, {-335940431,-2121044564},
-{-418953286,-2106220349}, {-501320144,-2088148493}, {-582914003,-2066856860},
-{-663609049,-2042378281}, {-743280858,-2014750501}, {-821806581,-1984016118},
-{-899065136,-1950222525}, {-974937397,-1913421827}, {-1049306374,-1873670768},
-{-1122057395,-1831030643}, {-1193078284,-1785567199}, {-1262259116,-1737350839},
-{-1329494061,-1686455323}, {-1394679021,-1632959413}, {-1457713485,-1576945595},
-{-1518500258,-1518500240}, {-1576945613,-1457713466}, {-1632959429,-1394679001},
-{-1686455338,-1329494041}, {-1737350854,-1262259096}, {-1785567498,-1193077837},
-{-1831030924,-1122056937}, {-1873671031,-1049305905}, {-1913422071,-974936918},
-{-1950222750,-899064648}, {-1984016324,-821806084}, {-2014750687,-743280354},
-{-2042378447,-663608538}, {-2066856867,-582913978}, {-2088148499,-501320119},
-{-2106220354,-418953261}, {-2121044568,-335940406}, {-2132598282,-252409555},
-{-2140863681,-168489506}, {-2145828021,-84309659}, {-2147483647,188},
-{-2145828006,84310034}, {-2140863651,168489881}, {-2132598237,252409928},
-{-2121044509,335940777}, {-2106220281,418953629}, {-2088148411,501320484},
-{-2066856765,582914339}, {-2042378331,663608895}, {-2014750557,743280706},
-{-1984016181,821806431}, {-1950222593,899064989}, {-1913421900,974937252},
-{-1873670848,1049306232}, {-1831030728,1122057257}, {-1785567289,1193078149},
-{-1737350633,1262259400}, {-1686455106,1329494336}, {-1632959185,1394679287},
-{-1576945358,1457713742}, {-1518499993,1518500506}, {-1457713209,1576945850},
-{-1394678735,1632959656}, {-1329493766,1686455555}, {-1262258813,1737351059},
-{-1193077546,1785567692}, {-1122056638,1831031107}, {-1049305599,1873671202},
-{-974936606,1913422229}, {-899064330,1950222896}, {-821805761,1984016458},
-{-743280025,2014750808}, {-663609179,2042378239}, {-582914134,2066856823},
-{-501320277,2088148461}, {-418953420,2106220322}, {-335940566,2121044542},
-{-252409716,2132598263}, {-168489668,2140863668}, {-84309821,2145828015},
-};
-static const ne10_fft_cpx_int32_t ne10_twiddles_240[240] = {
-{0,0}, {2147483647,0}, {2147483647,0},
-{2147483647,0}, {1961823921,-873460313}, {1436946998,-1595891394},
-{2147483647,0}, {1436946998,-1595891394}, {-224473265,-2135719496},
-{2147483647,0}, {663608871,-2042378339}, {-1737350854,-1262259096},
-{2147483647,0}, {-224473265,-2135719496}, {-2100555935,446487152},
-{2147483647,0}, {2135719506,-224473172}, {2100555974,-446486968},
-{2042378310,-663608960}, {1961823921,-873460313}, {1859775377,-1073741851},
-{1737350743,-1262259248}, {1595891331,-1436947067}, {1436946998,-1595891394},
-{1262259172,-1737350799}, {1073741769,-1859775424}, {873460227,-1961823959},
-{663608871,-2042378339}, {446486876,-2100555994}, {224473078,-2135719516},
-{2147483647,0}, {2100555974,-446486968}, {1961823921,-873460313},
-{1737350743,-1262259248}, {1436946998,-1595891394}, {1073741769,-1859775424},
-{663608871,-2042378339}, {224473078,-2135719516}, {-224473265,-2135719496},
-{-663609049,-2042378281}, {-1073741932,-1859775330}, {-1436947137,-1595891268},
-{-1737350854,-1262259096}, {-1961823997,-873460141}, {-2100556013,-446486785},
-{2147483647,0}, {2042378310,-663608960}, {1737350743,-1262259248},
-{1262259172,-1737350799}, {663608871,-2042378339}, {-94,-2147483647},
-{-663609049,-2042378281}, {-1262259116,-1737350839}, {-1737350854,-1262259096},
-{-2042378447,-663608538}, {-2147483647,188}, {-2042378331,663608895},
-{-1737350633,1262259400}, {-1262258813,1737351059}, {-663609179,2042378239},
-{2147483647,0}, {2146747758,-56214570}, {2144540595,-112390613},
-{2140863671,-168489630}, {2135719506,-224473172}, {2129111626,-280302871},
-{2121044558,-335940465}, {2111523833,-391347822}, {2100555974,-446486968},
-{2088148500,-501320115}, {2074309912,-555809682}, {2059049696,-609918325},
-{2042378310,-663608960}, {2024307180,-716844791}, {2004848691,-769589332},
-{1984016179,-821806435}, {1961823921,-873460313}, {1938287127,-924515564},
-{1913421927,-974937199}, {1887245364,-1024690661}, {1859775377,-1073741851},
-{1831030826,-1122057097}, {1801031311,-1169603450}, {1769797456,-1216348214},
-{1737350743,-1262259248}, {1703713340,-1307305194}, {1668908218,-1351455280},
-{1632959307,-1394679144}, {1595891331,-1436947067}, {1557729613,-1478230181},
-{1518500216,-1518500282}, {1478230113,-1557729677}, {1436946998,-1595891394},
-{1394679073,-1632959368}, {1351455207,-1668908277}, {1307305120,-1703713397},
-{1262259172,-1737350799}, {1216348136,-1769797510}, {1169603371,-1801031362},
-{1122057017,-1831030875}, {1073741769,-1859775424}, {1024690635,-1887245378},
-{974937230,-1913421912}, {924515422,-1938287195}, {873460227,-1961823959},
-{821806407,-1984016190}, {769589125,-2004848771}, {716844642,-2024307233},
-{663608871,-2042378339}, {609918296,-2059049705}, {555809715,-2074309903},
-{501319962,-2088148536}, {446486876,-2100555994}, {391347792,-2111523838},
-{335940246,-2121044593}, {280302715,-2129111646}, {224473078,-2135719516},
-{168489600,-2140863674}, {112390647,-2144540593}, {56214412,-2146747762},
-{2147483647,0}, {2144540595,-112390613}, {2135719506,-224473172},
-{2121044558,-335940465}, {2100555974,-446486968}, {2074309912,-555809682},
-{2042378310,-663608960}, {2004848691,-769589332}, {1961823921,-873460313},
-{1913421927,-974937199}, {1859775377,-1073741851}, {1801031311,-1169603450},
-{1737350743,-1262259248}, {1668908218,-1351455280}, {1595891331,-1436947067},
-{1518500216,-1518500282}, {1436946998,-1595891394}, {1351455207,-1668908277},
-{1262259172,-1737350799}, {1169603371,-1801031362}, {1073741769,-1859775424},
-{974937230,-1913421912}, {873460227,-1961823959}, {769589125,-2004848771},
-{663608871,-2042378339}, {555809715,-2074309903}, {446486876,-2100555994},
-{335940246,-2121044593}, {224473078,-2135719516}, {112390647,-2144540593},
-{-94,-2147483647}, {-112390835,-2144540584}, {-224473265,-2135719496},
-{-335940431,-2121044564}, {-446487060,-2100555955}, {-555809896,-2074309855},
-{-663609049,-2042378281}, {-769589300,-2004848703}, {-873460398,-1961823883},
-{-974937397,-1913421827}, {-1073741932,-1859775330}, {-1169603421,-1801031330},
-{-1262259116,-1737350839}, {-1351455453,-1668908078}, {-1436947137,-1595891268},
-{-1518500258,-1518500240}, {-1595891628,-1436946738}, {-1668908417,-1351455035},
-{-1737350854,-1262259096}, {-1801031344,-1169603400}, {-1859775343,-1073741910},
-{-1913422071,-974936918}, {-1961823997,-873460141}, {-2004848713,-769589276},
-{-2042378447,-663608538}, {-2074309994,-555809377}, {-2100556013,-446486785},
-{-2121044568,-335940406}, {-2135719499,-224473240}, {-2144540612,-112390298},
-{2147483647,0}, {2140863671,-168489630}, {2121044558,-335940465},
-{2088148500,-501320115}, {2042378310,-663608960}, {1984016179,-821806435},
-{1913421927,-974937199}, {1831030826,-1122057097}, {1737350743,-1262259248},
-{1632959307,-1394679144}, {1518500216,-1518500282}, {1394679073,-1632959368},
-{1262259172,-1737350799}, {1122057017,-1831030875}, {974937230,-1913421912},
-{821806407,-1984016190}, {663608871,-2042378339}, {501319962,-2088148536},
-{335940246,-2121044593}, {168489600,-2140863674}, {-94,-2147483647},
-{-168489787,-2140863659}, {-335940431,-2121044564}, {-501320144,-2088148493},
-{-663609049,-2042378281}, {-821806581,-1984016118}, {-974937397,-1913421827},
-{-1122057395,-1831030643}, {-1262259116,-1737350839}, {-1394679021,-1632959413},
-{-1518500258,-1518500240}, {-1632959429,-1394679001}, {-1737350854,-1262259096},
-{-1831030924,-1122056937}, {-1913422071,-974936918}, {-1984016324,-821806084},
-{-2042378447,-663608538}, {-2088148499,-501320119}, {-2121044568,-335940406},
-{-2140863681,-168489506}, {-2147483647,188}, {-2140863651,168489881},
-{-2121044509,335940777}, {-2088148411,501320484}, {-2042378331,663608895},
-{-1984016181,821806431}, {-1913421900,974937252}, {-1831030728,1122057257},
-{-1737350633,1262259400}, {-1632959185,1394679287}, {-1518499993,1518500506},
-{-1394678735,1632959656}, {-1262258813,1737351059}, {-1122056638,1831031107},
-{-974936606,1913422229}, {-821805761,1984016458}, {-663609179,2042378239},
-{-501320277,2088148461}, {-335940566,2121044542}, {-168489668,2140863668},
-};
-static const ne10_fft_cpx_int32_t ne10_twiddles_120[120] = {
-{0,0}, {2147483647,0}, {2147483647,0},
-{2147483647,0}, {1961823921,-873460313}, {1436946998,-1595891394},
-{2147483647,0}, {1436946998,-1595891394}, {-224473265,-2135719496},
-{2147483647,0}, {663608871,-2042378339}, {-1737350854,-1262259096},
-{2147483647,0}, {-224473265,-2135719496}, {-2100555935,446487152},
-{2147483647,0}, {2100555974,-446486968}, {1961823921,-873460313},
-{1737350743,-1262259248}, {1436946998,-1595891394}, {1073741769,-1859775424},
-{663608871,-2042378339}, {224473078,-2135719516}, {-224473265,-2135719496},
-{-663609049,-2042378281}, {-1073741932,-1859775330}, {-1436947137,-1595891268},
-{-1737350854,-1262259096}, {-1961823997,-873460141}, {-2100556013,-446486785},
-{2147483647,0}, {2144540595,-112390613}, {2135719506,-224473172},
-{2121044558,-335940465}, {2100555974,-446486968}, {2074309912,-555809682},
-{2042378310,-663608960}, {2004848691,-769589332}, {1961823921,-873460313},
-{1913421927,-974937199}, {1859775377,-1073741851}, {1801031311,-1169603450},
-{1737350743,-1262259248}, {1668908218,-1351455280}, {1595891331,-1436947067},
-{1518500216,-1518500282}, {1436946998,-1595891394}, {1351455207,-1668908277},
-{1262259172,-1737350799}, {1169603371,-1801031362}, {1073741769,-1859775424},
-{974937230,-1913421912}, {873460227,-1961823959}, {769589125,-2004848771},
-{663608871,-2042378339}, {555809715,-2074309903}, {446486876,-2100555994},
-{335940246,-2121044593}, {224473078,-2135719516}, {112390647,-2144540593},
-{2147483647,0}, {2135719506,-224473172}, {2100555974,-446486968},
-{2042378310,-663608960}, {1961823921,-873460313}, {1859775377,-1073741851},
-{1737350743,-1262259248}, {1595891331,-1436947067}, {1436946998,-1595891394},
-{1262259172,-1737350799}, {1073741769,-1859775424}, {873460227,-1961823959},
-{663608871,-2042378339}, {446486876,-2100555994}, {224473078,-2135719516},
-{-94,-2147483647}, {-224473265,-2135719496}, {-446487060,-2100555955},
-{-663609049,-2042378281}, {-873460398,-1961823883}, {-1073741932,-1859775330},
-{-1262259116,-1737350839}, {-1436947137,-1595891268}, {-1595891628,-1436946738},
-{-1737350854,-1262259096}, {-1859775343,-1073741910}, {-1961823997,-873460141},
-{-2042378447,-663608538}, {-2100556013,-446486785}, {-2135719499,-224473240},
-{2147483647,0}, {2121044558,-335940465}, {2042378310,-663608960},
-{1913421927,-974937199}, {1737350743,-1262259248}, {1518500216,-1518500282},
-{1262259172,-1737350799}, {974937230,-1913421912}, {663608871,-2042378339},
-{335940246,-2121044593}, {-94,-2147483647}, {-335940431,-2121044564},
-{-663609049,-2042378281}, {-974937397,-1913421827}, {-1262259116,-1737350839},
-{-1518500258,-1518500240}, {-1737350854,-1262259096}, {-1913422071,-974936918},
-{-2042378447,-663608538}, {-2121044568,-335940406}, {-2147483647,188},
-{-2121044509,335940777}, {-2042378331,663608895}, {-1913421900,974937252},
-{-1737350633,1262259400}, {-1518499993,1518500506}, {-1262258813,1737351059},
-{-974936606,1913422229}, {-663609179,2042378239}, {-335940566,2121044542},
-};
-static const ne10_fft_cpx_int32_t ne10_twiddles_60[60] = {
-{0,0}, {2147483647,0}, {2147483647,0},
-{2147483647,0}, {1961823921,-873460313}, {1436946998,-1595891394},
-{2147483647,0}, {1436946998,-1595891394}, {-224473265,-2135719496},
-{2147483647,0}, {663608871,-2042378339}, {-1737350854,-1262259096},
-{2147483647,0}, {-224473265,-2135719496}, {-2100555935,446487152},
-{2147483647,0}, {2135719506,-224473172}, {2100555974,-446486968},
-{2042378310,-663608960}, {1961823921,-873460313}, {1859775377,-1073741851},
-{1737350743,-1262259248}, {1595891331,-1436947067}, {1436946998,-1595891394},
-{1262259172,-1737350799}, {1073741769,-1859775424}, {873460227,-1961823959},
-{663608871,-2042378339}, {446486876,-2100555994}, {224473078,-2135719516},
-{2147483647,0}, {2100555974,-446486968}, {1961823921,-873460313},
-{1737350743,-1262259248}, {1436946998,-1595891394}, {1073741769,-1859775424},
-{663608871,-2042378339}, {224473078,-2135719516}, {-224473265,-2135719496},
-{-663609049,-2042378281}, {-1073741932,-1859775330}, {-1436947137,-1595891268},
-{-1737350854,-1262259096}, {-1961823997,-873460141}, {-2100556013,-446486785},
-{2147483647,0}, {2042378310,-663608960}, {1737350743,-1262259248},
-{1262259172,-1737350799}, {663608871,-2042378339}, {-94,-2147483647},
-{-663609049,-2042378281}, {-1262259116,-1737350839}, {-1737350854,-1262259096},
-{-2042378447,-663608538}, {-2147483647,188}, {-2042378331,663608895},
-{-1737350633,1262259400}, {-1262258813,1737351059}, {-663609179,2042378239},
-};
-static const ne10_fft_state_int32_t ne10_fft_state_int32_t_480 = {
-120,
-(ne10_int32_t *)ne10_factors_480,
-(ne10_fft_cpx_int32_t *)ne10_twiddles_480,
-NULL,
-(ne10_fft_cpx_int32_t *)&ne10_twiddles_480[120],
-};
-static const arch_fft_state cfg_arch_480 = {
-1,
-(void *)&ne10_fft_state_int32_t_480,
-};
-
-static const ne10_fft_state_int32_t ne10_fft_state_int32_t_240 = {
-60,
-(ne10_int32_t *)ne10_factors_240,
-(ne10_fft_cpx_int32_t *)ne10_twiddles_240,
-NULL,
-(ne10_fft_cpx_int32_t *)&ne10_twiddles_240[60],
-};
-static const arch_fft_state cfg_arch_240 = {
-1,
-(void *)&ne10_fft_state_int32_t_240,
-};
-
-static const ne10_fft_state_int32_t ne10_fft_state_int32_t_120 = {
-30,
-(ne10_int32_t *)ne10_factors_120,
-(ne10_fft_cpx_int32_t *)ne10_twiddles_120,
-NULL,
-(ne10_fft_cpx_int32_t *)&ne10_twiddles_120[30],
-};
-static const arch_fft_state cfg_arch_120 = {
-1,
-(void *)&ne10_fft_state_int32_t_120,
-};
-
-static const ne10_fft_state_int32_t ne10_fft_state_int32_t_60 = {
-15,
-(ne10_int32_t *)ne10_factors_60,
-(ne10_fft_cpx_int32_t *)ne10_twiddles_60,
-NULL,
-(ne10_fft_cpx_int32_t *)&ne10_twiddles_60[15],
-};
-static const arch_fft_state cfg_arch_60 = {
-1,
-(void *)&ne10_fft_state_int32_t_60,
-};
-
-#endif /* end NE10_FFT_PARAMS48000_960 */
diff --git a/drivers/opus/celt/static_modes_float.h b/drivers/opus/celt/static_modes_float.h
deleted file mode 100644
index f7d501a993..0000000000
--- a/drivers/opus/celt/static_modes_float.h
+++ /dev/null
@@ -1,888 +0,0 @@
-/* The contents of this file was automatically generated by dump_modes.c
- with arguments: 48000 960
- It contains static definitions for some pre-defined modes. */
-#include "opus/celt/modes.h"
-#include "opus/celt/rate.h"
-
-#ifdef HAVE_ARM_NE10
-#define OVERRIDE_FFT 1
-#include "opus/celt/static_modes_float_arm_ne10.h"
-#endif
-
-#ifndef DEF_WINDOW120
-#define DEF_WINDOW120
-static const opus_val16 window120[120] = {
-6.7286966e-05f, 0.00060551348f, 0.0016815970f, 0.0032947962f, 0.0054439943f,
-0.0081276923f, 0.011344001f, 0.015090633f, 0.019364886f, 0.024163635f,
-0.029483315f, 0.035319905f, 0.041668911f, 0.048525347f, 0.055883718f,
-0.063737999f, 0.072081616f, 0.080907428f, 0.090207705f, 0.099974111f,
-0.11019769f, 0.12086883f, 0.13197729f, 0.14351214f, 0.15546177f,
-0.16781389f, 0.18055550f, 0.19367290f, 0.20715171f, 0.22097682f,
-0.23513243f, 0.24960208f, 0.26436860f, 0.27941419f, 0.29472040f,
-0.31026818f, 0.32603788f, 0.34200931f, 0.35816177f, 0.37447407f,
-0.39092462f, 0.40749142f, 0.42415215f, 0.44088423f, 0.45766484f,
-0.47447104f, 0.49127978f, 0.50806798f, 0.52481261f, 0.54149077f,
-0.55807973f, 0.57455701f, 0.59090049f, 0.60708841f, 0.62309951f,
-0.63891306f, 0.65450896f, 0.66986776f, 0.68497077f, 0.69980010f,
-0.71433873f, 0.72857055f, 0.74248043f, 0.75605424f, 0.76927895f,
-0.78214257f, 0.79463430f, 0.80674445f, 0.81846456f, 0.82978733f,
-0.84070669f, 0.85121779f, 0.86131698f, 0.87100183f, 0.88027111f,
-0.88912479f, 0.89756398f, 0.90559094f, 0.91320904f, 0.92042270f,
-0.92723738f, 0.93365955f, 0.93969656f, 0.94535671f, 0.95064907f,
-0.95558353f, 0.96017067f, 0.96442171f, 0.96834849f, 0.97196334f,
-0.97527906f, 0.97830883f, 0.98106616f, 0.98356480f, 0.98581869f,
-0.98784191f, 0.98964856f, 0.99125274f, 0.99266849f, 0.99390969f,
-0.99499004f, 0.99592297f, 0.99672162f, 0.99739874f, 0.99796667f,
-0.99843728f, 0.99882195f, 0.99913147f, 0.99937606f, 0.99956527f,
-0.99970802f, 0.99981248f, 0.99988613f, 0.99993565f, 0.99996697f,
-0.99998518f, 0.99999457f, 0.99999859f, 0.99999982f, 1.0000000f,
-};
-#endif
-
-#ifndef DEF_LOGN400
-#define DEF_LOGN400
-static const opus_int16 logN400[21] = {
-0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 16, 16, 16, 21, 21, 24, 29, 34, 36, };
-#endif
-
-#ifndef DEF_PULSE_CACHE50
-#define DEF_PULSE_CACHE50
-static const opus_int16 cache_index50[105] = {
--1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 41, 41, 41,
-82, 82, 123, 164, 200, 222, 0, 0, 0, 0, 0, 0, 0, 0, 41,
-41, 41, 41, 123, 123, 123, 164, 164, 240, 266, 283, 295, 41, 41, 41,
-41, 41, 41, 41, 41, 123, 123, 123, 123, 240, 240, 240, 266, 266, 305,
-318, 328, 336, 123, 123, 123, 123, 123, 123, 123, 123, 240, 240, 240, 240,
-305, 305, 305, 318, 318, 343, 351, 358, 364, 240, 240, 240, 240, 240, 240,
-240, 240, 305, 305, 305, 305, 343, 343, 343, 351, 351, 370, 376, 382, 387,
-};
-static const unsigned char cache_bits50[392] = {
-40, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 40, 15, 23, 28,
-31, 34, 36, 38, 39, 41, 42, 43, 44, 45, 46, 47, 47, 49, 50,
-51, 52, 53, 54, 55, 55, 57, 58, 59, 60, 61, 62, 63, 63, 65,
-66, 67, 68, 69, 70, 71, 71, 40, 20, 33, 41, 48, 53, 57, 61,
-64, 66, 69, 71, 73, 75, 76, 78, 80, 82, 85, 87, 89, 91, 92,
-94, 96, 98, 101, 103, 105, 107, 108, 110, 112, 114, 117, 119, 121, 123,
-124, 126, 128, 40, 23, 39, 51, 60, 67, 73, 79, 83, 87, 91, 94,
-97, 100, 102, 105, 107, 111, 115, 118, 121, 124, 126, 129, 131, 135, 139,
-142, 145, 148, 150, 153, 155, 159, 163, 166, 169, 172, 174, 177, 179, 35,
-28, 49, 65, 78, 89, 99, 107, 114, 120, 126, 132, 136, 141, 145, 149,
-153, 159, 165, 171, 176, 180, 185, 189, 192, 199, 205, 211, 216, 220, 225,
-229, 232, 239, 245, 251, 21, 33, 58, 79, 97, 112, 125, 137, 148, 157,
-166, 174, 182, 189, 195, 201, 207, 217, 227, 235, 243, 251, 17, 35, 63,
-86, 106, 123, 139, 152, 165, 177, 187, 197, 206, 214, 222, 230, 237, 250,
-25, 31, 55, 75, 91, 105, 117, 128, 138, 146, 154, 161, 168, 174, 180,
-185, 190, 200, 208, 215, 222, 229, 235, 240, 245, 255, 16, 36, 65, 89,
-110, 128, 144, 159, 173, 185, 196, 207, 217, 226, 234, 242, 250, 11, 41,
-74, 103, 128, 151, 172, 191, 209, 225, 241, 255, 9, 43, 79, 110, 138,
-163, 186, 207, 227, 246, 12, 39, 71, 99, 123, 144, 164, 182, 198, 214,
-228, 241, 253, 9, 44, 81, 113, 142, 168, 192, 214, 235, 255, 7, 49,
-90, 127, 160, 191, 220, 247, 6, 51, 95, 134, 170, 203, 234, 7, 47,
-87, 123, 155, 184, 212, 237, 6, 52, 97, 137, 174, 208, 240, 5, 57,
-106, 151, 192, 231, 5, 59, 111, 158, 202, 243, 5, 55, 103, 147, 187,
-224, 5, 60, 113, 161, 206, 248, 4, 65, 122, 175, 224, 4, 67, 127,
-182, 234, };
-static const unsigned char cache_caps50[168] = {
-224, 224, 224, 224, 224, 224, 224, 224, 160, 160, 160, 160, 185, 185, 185,
-178, 178, 168, 134, 61, 37, 224, 224, 224, 224, 224, 224, 224, 224, 240,
-240, 240, 240, 207, 207, 207, 198, 198, 183, 144, 66, 40, 160, 160, 160,
-160, 160, 160, 160, 160, 185, 185, 185, 185, 193, 193, 193, 183, 183, 172,
-138, 64, 38, 240, 240, 240, 240, 240, 240, 240, 240, 207, 207, 207, 207,
-204, 204, 204, 193, 193, 180, 143, 66, 40, 185, 185, 185, 185, 185, 185,
-185, 185, 193, 193, 193, 193, 193, 193, 193, 183, 183, 172, 138, 65, 39,
-207, 207, 207, 207, 207, 207, 207, 207, 204, 204, 204, 204, 201, 201, 201,
-188, 188, 176, 141, 66, 40, 193, 193, 193, 193, 193, 193, 193, 193, 193,
-193, 193, 193, 194, 194, 194, 184, 184, 173, 139, 65, 39, 204, 204, 204,
-204, 204, 204, 204, 204, 201, 201, 201, 201, 198, 198, 198, 187, 187, 175,
-140, 66, 40, };
-#endif
-
-#ifndef FFT_TWIDDLES48000_960
-#define FFT_TWIDDLES48000_960
-static const kiss_twiddle_cpx fft_twiddles48000_960[480] = {
-{1.0000000f, -0.0000000f}, {0.99991433f, -0.013089596f},
-{0.99965732f, -0.026176948f}, {0.99922904f, -0.039259816f},
-{0.99862953f, -0.052335956f}, {0.99785892f, -0.065403129f},
-{0.99691733f, -0.078459096f}, {0.99580493f, -0.091501619f},
-{0.99452190f, -0.10452846f}, {0.99306846f, -0.11753740f},
-{0.99144486f, -0.13052619f}, {0.98965139f, -0.14349262f},
-{0.98768834f, -0.15643447f}, {0.98555606f, -0.16934950f},
-{0.98325491f, -0.18223553f}, {0.98078528f, -0.19509032f},
-{0.97814760f, -0.20791169f}, {0.97534232f, -0.22069744f},
-{0.97236992f, -0.23344536f}, {0.96923091f, -0.24615329f},
-{0.96592583f, -0.25881905f}, {0.96245524f, -0.27144045f},
-{0.95881973f, -0.28401534f}, {0.95501994f, -0.29654157f},
-{0.95105652f, -0.30901699f}, {0.94693013f, -0.32143947f},
-{0.94264149f, -0.33380686f}, {0.93819134f, -0.34611706f},
-{0.93358043f, -0.35836795f}, {0.92880955f, -0.37055744f},
-{0.92387953f, -0.38268343f}, {0.91879121f, -0.39474386f},
-{0.91354546f, -0.40673664f}, {0.90814317f, -0.41865974f},
-{0.90258528f, -0.43051110f}, {0.89687274f, -0.44228869f},
-{0.89100652f, -0.45399050f}, {0.88498764f, -0.46561452f},
-{0.87881711f, -0.47715876f}, {0.87249601f, -0.48862124f},
-{0.86602540f, -0.50000000f}, {0.85940641f, -0.51129309f},
-{0.85264016f, -0.52249856f}, {0.84572782f, -0.53361452f},
-{0.83867057f, -0.54463904f}, {0.83146961f, -0.55557023f},
-{0.82412619f, -0.56640624f}, {0.81664156f, -0.57714519f},
-{0.80901699f, -0.58778525f}, {0.80125381f, -0.59832460f},
-{0.79335334f, -0.60876143f}, {0.78531693f, -0.61909395f},
-{0.77714596f, -0.62932039f}, {0.76884183f, -0.63943900f},
-{0.76040597f, -0.64944805f}, {0.75183981f, -0.65934582f},
-{0.74314483f, -0.66913061f}, {0.73432251f, -0.67880075f},
-{0.72537437f, -0.68835458f}, {0.71630194f, -0.69779046f},
-{0.70710678f, -0.70710678f}, {0.69779046f, -0.71630194f},
-{0.68835458f, -0.72537437f}, {0.67880075f, -0.73432251f},
-{0.66913061f, -0.74314483f}, {0.65934582f, -0.75183981f},
-{0.64944805f, -0.76040597f}, {0.63943900f, -0.76884183f},
-{0.62932039f, -0.77714596f}, {0.61909395f, -0.78531693f},
-{0.60876143f, -0.79335334f}, {0.59832460f, -0.80125381f},
-{0.58778525f, -0.80901699f}, {0.57714519f, -0.81664156f},
-{0.56640624f, -0.82412619f}, {0.55557023f, -0.83146961f},
-{0.54463904f, -0.83867057f}, {0.53361452f, -0.84572782f},
-{0.52249856f, -0.85264016f}, {0.51129309f, -0.85940641f},
-{0.50000000f, -0.86602540f}, {0.48862124f, -0.87249601f},
-{0.47715876f, -0.87881711f}, {0.46561452f, -0.88498764f},
-{0.45399050f, -0.89100652f}, {0.44228869f, -0.89687274f},
-{0.43051110f, -0.90258528f}, {0.41865974f, -0.90814317f},
-{0.40673664f, -0.91354546f}, {0.39474386f, -0.91879121f},
-{0.38268343f, -0.92387953f}, {0.37055744f, -0.92880955f},
-{0.35836795f, -0.93358043f}, {0.34611706f, -0.93819134f},
-{0.33380686f, -0.94264149f}, {0.32143947f, -0.94693013f},
-{0.30901699f, -0.95105652f}, {0.29654157f, -0.95501994f},
-{0.28401534f, -0.95881973f}, {0.27144045f, -0.96245524f},
-{0.25881905f, -0.96592583f}, {0.24615329f, -0.96923091f},
-{0.23344536f, -0.97236992f}, {0.22069744f, -0.97534232f},
-{0.20791169f, -0.97814760f}, {0.19509032f, -0.98078528f},
-{0.18223553f, -0.98325491f}, {0.16934950f, -0.98555606f},
-{0.15643447f, -0.98768834f}, {0.14349262f, -0.98965139f},
-{0.13052619f, -0.99144486f}, {0.11753740f, -0.99306846f},
-{0.10452846f, -0.99452190f}, {0.091501619f, -0.99580493f},
-{0.078459096f, -0.99691733f}, {0.065403129f, -0.99785892f},
-{0.052335956f, -0.99862953f}, {0.039259816f, -0.99922904f},
-{0.026176948f, -0.99965732f}, {0.013089596f, -0.99991433f},
-{6.1230318e-17f, -1.0000000f}, {-0.013089596f, -0.99991433f},
-{-0.026176948f, -0.99965732f}, {-0.039259816f, -0.99922904f},
-{-0.052335956f, -0.99862953f}, {-0.065403129f, -0.99785892f},
-{-0.078459096f, -0.99691733f}, {-0.091501619f, -0.99580493f},
-{-0.10452846f, -0.99452190f}, {-0.11753740f, -0.99306846f},
-{-0.13052619f, -0.99144486f}, {-0.14349262f, -0.98965139f},
-{-0.15643447f, -0.98768834f}, {-0.16934950f, -0.98555606f},
-{-0.18223553f, -0.98325491f}, {-0.19509032f, -0.98078528f},
-{-0.20791169f, -0.97814760f}, {-0.22069744f, -0.97534232f},
-{-0.23344536f, -0.97236992f}, {-0.24615329f, -0.96923091f},
-{-0.25881905f, -0.96592583f}, {-0.27144045f, -0.96245524f},
-{-0.28401534f, -0.95881973f}, {-0.29654157f, -0.95501994f},
-{-0.30901699f, -0.95105652f}, {-0.32143947f, -0.94693013f},
-{-0.33380686f, -0.94264149f}, {-0.34611706f, -0.93819134f},
-{-0.35836795f, -0.93358043f}, {-0.37055744f, -0.92880955f},
-{-0.38268343f, -0.92387953f}, {-0.39474386f, -0.91879121f},
-{-0.40673664f, -0.91354546f}, {-0.41865974f, -0.90814317f},
-{-0.43051110f, -0.90258528f}, {-0.44228869f, -0.89687274f},
-{-0.45399050f, -0.89100652f}, {-0.46561452f, -0.88498764f},
-{-0.47715876f, -0.87881711f}, {-0.48862124f, -0.87249601f},
-{-0.50000000f, -0.86602540f}, {-0.51129309f, -0.85940641f},
-{-0.52249856f, -0.85264016f}, {-0.53361452f, -0.84572782f},
-{-0.54463904f, -0.83867057f}, {-0.55557023f, -0.83146961f},
-{-0.56640624f, -0.82412619f}, {-0.57714519f, -0.81664156f},
-{-0.58778525f, -0.80901699f}, {-0.59832460f, -0.80125381f},
-{-0.60876143f, -0.79335334f}, {-0.61909395f, -0.78531693f},
-{-0.62932039f, -0.77714596f}, {-0.63943900f, -0.76884183f},
-{-0.64944805f, -0.76040597f}, {-0.65934582f, -0.75183981f},
-{-0.66913061f, -0.74314483f}, {-0.67880075f, -0.73432251f},
-{-0.68835458f, -0.72537437f}, {-0.69779046f, -0.71630194f},
-{-0.70710678f, -0.70710678f}, {-0.71630194f, -0.69779046f},
-{-0.72537437f, -0.68835458f}, {-0.73432251f, -0.67880075f},
-{-0.74314483f, -0.66913061f}, {-0.75183981f, -0.65934582f},
-{-0.76040597f, -0.64944805f}, {-0.76884183f, -0.63943900f},
-{-0.77714596f, -0.62932039f}, {-0.78531693f, -0.61909395f},
-{-0.79335334f, -0.60876143f}, {-0.80125381f, -0.59832460f},
-{-0.80901699f, -0.58778525f}, {-0.81664156f, -0.57714519f},
-{-0.82412619f, -0.56640624f}, {-0.83146961f, -0.55557023f},
-{-0.83867057f, -0.54463904f}, {-0.84572782f, -0.53361452f},
-{-0.85264016f, -0.52249856f}, {-0.85940641f, -0.51129309f},
-{-0.86602540f, -0.50000000f}, {-0.87249601f, -0.48862124f},
-{-0.87881711f, -0.47715876f}, {-0.88498764f, -0.46561452f},
-{-0.89100652f, -0.45399050f}, {-0.89687274f, -0.44228869f},
-{-0.90258528f, -0.43051110f}, {-0.90814317f, -0.41865974f},
-{-0.91354546f, -0.40673664f}, {-0.91879121f, -0.39474386f},
-{-0.92387953f, -0.38268343f}, {-0.92880955f, -0.37055744f},
-{-0.93358043f, -0.35836795f}, {-0.93819134f, -0.34611706f},
-{-0.94264149f, -0.33380686f}, {-0.94693013f, -0.32143947f},
-{-0.95105652f, -0.30901699f}, {-0.95501994f, -0.29654157f},
-{-0.95881973f, -0.28401534f}, {-0.96245524f, -0.27144045f},
-{-0.96592583f, -0.25881905f}, {-0.96923091f, -0.24615329f},
-{-0.97236992f, -0.23344536f}, {-0.97534232f, -0.22069744f},
-{-0.97814760f, -0.20791169f}, {-0.98078528f, -0.19509032f},
-{-0.98325491f, -0.18223553f}, {-0.98555606f, -0.16934950f},
-{-0.98768834f, -0.15643447f}, {-0.98965139f, -0.14349262f},
-{-0.99144486f, -0.13052619f}, {-0.99306846f, -0.11753740f},
-{-0.99452190f, -0.10452846f}, {-0.99580493f, -0.091501619f},
-{-0.99691733f, -0.078459096f}, {-0.99785892f, -0.065403129f},
-{-0.99862953f, -0.052335956f}, {-0.99922904f, -0.039259816f},
-{-0.99965732f, -0.026176948f}, {-0.99991433f, -0.013089596f},
-{-1.0000000f, -1.2246064e-16f}, {-0.99991433f, 0.013089596f},
-{-0.99965732f, 0.026176948f}, {-0.99922904f, 0.039259816f},
-{-0.99862953f, 0.052335956f}, {-0.99785892f, 0.065403129f},
-{-0.99691733f, 0.078459096f}, {-0.99580493f, 0.091501619f},
-{-0.99452190f, 0.10452846f}, {-0.99306846f, 0.11753740f},
-{-0.99144486f, 0.13052619f}, {-0.98965139f, 0.14349262f},
-{-0.98768834f, 0.15643447f}, {-0.98555606f, 0.16934950f},
-{-0.98325491f, 0.18223553f}, {-0.98078528f, 0.19509032f},
-{-0.97814760f, 0.20791169f}, {-0.97534232f, 0.22069744f},
-{-0.97236992f, 0.23344536f}, {-0.96923091f, 0.24615329f},
-{-0.96592583f, 0.25881905f}, {-0.96245524f, 0.27144045f},
-{-0.95881973f, 0.28401534f}, {-0.95501994f, 0.29654157f},
-{-0.95105652f, 0.30901699f}, {-0.94693013f, 0.32143947f},
-{-0.94264149f, 0.33380686f}, {-0.93819134f, 0.34611706f},
-{-0.93358043f, 0.35836795f}, {-0.92880955f, 0.37055744f},
-{-0.92387953f, 0.38268343f}, {-0.91879121f, 0.39474386f},
-{-0.91354546f, 0.40673664f}, {-0.90814317f, 0.41865974f},
-{-0.90258528f, 0.43051110f}, {-0.89687274f, 0.44228869f},
-{-0.89100652f, 0.45399050f}, {-0.88498764f, 0.46561452f},
-{-0.87881711f, 0.47715876f}, {-0.87249601f, 0.48862124f},
-{-0.86602540f, 0.50000000f}, {-0.85940641f, 0.51129309f},
-{-0.85264016f, 0.52249856f}, {-0.84572782f, 0.53361452f},
-{-0.83867057f, 0.54463904f}, {-0.83146961f, 0.55557023f},
-{-0.82412619f, 0.56640624f}, {-0.81664156f, 0.57714519f},
-{-0.80901699f, 0.58778525f}, {-0.80125381f, 0.59832460f},
-{-0.79335334f, 0.60876143f}, {-0.78531693f, 0.61909395f},
-{-0.77714596f, 0.62932039f}, {-0.76884183f, 0.63943900f},
-{-0.76040597f, 0.64944805f}, {-0.75183981f, 0.65934582f},
-{-0.74314483f, 0.66913061f}, {-0.73432251f, 0.67880075f},
-{-0.72537437f, 0.68835458f}, {-0.71630194f, 0.69779046f},
-{-0.70710678f, 0.70710678f}, {-0.69779046f, 0.71630194f},
-{-0.68835458f, 0.72537437f}, {-0.67880075f, 0.73432251f},
-{-0.66913061f, 0.74314483f}, {-0.65934582f, 0.75183981f},
-{-0.64944805f, 0.76040597f}, {-0.63943900f, 0.76884183f},
-{-0.62932039f, 0.77714596f}, {-0.61909395f, 0.78531693f},
-{-0.60876143f, 0.79335334f}, {-0.59832460f, 0.80125381f},
-{-0.58778525f, 0.80901699f}, {-0.57714519f, 0.81664156f},
-{-0.56640624f, 0.82412619f}, {-0.55557023f, 0.83146961f},
-{-0.54463904f, 0.83867057f}, {-0.53361452f, 0.84572782f},
-{-0.52249856f, 0.85264016f}, {-0.51129309f, 0.85940641f},
-{-0.50000000f, 0.86602540f}, {-0.48862124f, 0.87249601f},
-{-0.47715876f, 0.87881711f}, {-0.46561452f, 0.88498764f},
-{-0.45399050f, 0.89100652f}, {-0.44228869f, 0.89687274f},
-{-0.43051110f, 0.90258528f}, {-0.41865974f, 0.90814317f},
-{-0.40673664f, 0.91354546f}, {-0.39474386f, 0.91879121f},
-{-0.38268343f, 0.92387953f}, {-0.37055744f, 0.92880955f},
-{-0.35836795f, 0.93358043f}, {-0.34611706f, 0.93819134f},
-{-0.33380686f, 0.94264149f}, {-0.32143947f, 0.94693013f},
-{-0.30901699f, 0.95105652f}, {-0.29654157f, 0.95501994f},
-{-0.28401534f, 0.95881973f}, {-0.27144045f, 0.96245524f},
-{-0.25881905f, 0.96592583f}, {-0.24615329f, 0.96923091f},
-{-0.23344536f, 0.97236992f}, {-0.22069744f, 0.97534232f},
-{-0.20791169f, 0.97814760f}, {-0.19509032f, 0.98078528f},
-{-0.18223553f, 0.98325491f}, {-0.16934950f, 0.98555606f},
-{-0.15643447f, 0.98768834f}, {-0.14349262f, 0.98965139f},
-{-0.13052619f, 0.99144486f}, {-0.11753740f, 0.99306846f},
-{-0.10452846f, 0.99452190f}, {-0.091501619f, 0.99580493f},
-{-0.078459096f, 0.99691733f}, {-0.065403129f, 0.99785892f},
-{-0.052335956f, 0.99862953f}, {-0.039259816f, 0.99922904f},
-{-0.026176948f, 0.99965732f}, {-0.013089596f, 0.99991433f},
-{-1.8369095e-16f, 1.0000000f}, {0.013089596f, 0.99991433f},
-{0.026176948f, 0.99965732f}, {0.039259816f, 0.99922904f},
-{0.052335956f, 0.99862953f}, {0.065403129f, 0.99785892f},
-{0.078459096f, 0.99691733f}, {0.091501619f, 0.99580493f},
-{0.10452846f, 0.99452190f}, {0.11753740f, 0.99306846f},
-{0.13052619f, 0.99144486f}, {0.14349262f, 0.98965139f},
-{0.15643447f, 0.98768834f}, {0.16934950f, 0.98555606f},
-{0.18223553f, 0.98325491f}, {0.19509032f, 0.98078528f},
-{0.20791169f, 0.97814760f}, {0.22069744f, 0.97534232f},
-{0.23344536f, 0.97236992f}, {0.24615329f, 0.96923091f},
-{0.25881905f, 0.96592583f}, {0.27144045f, 0.96245524f},
-{0.28401534f, 0.95881973f}, {0.29654157f, 0.95501994f},
-{0.30901699f, 0.95105652f}, {0.32143947f, 0.94693013f},
-{0.33380686f, 0.94264149f}, {0.34611706f, 0.93819134f},
-{0.35836795f, 0.93358043f}, {0.37055744f, 0.92880955f},
-{0.38268343f, 0.92387953f}, {0.39474386f, 0.91879121f},
-{0.40673664f, 0.91354546f}, {0.41865974f, 0.90814317f},
-{0.43051110f, 0.90258528f}, {0.44228869f, 0.89687274f},
-{0.45399050f, 0.89100652f}, {0.46561452f, 0.88498764f},
-{0.47715876f, 0.87881711f}, {0.48862124f, 0.87249601f},
-{0.50000000f, 0.86602540f}, {0.51129309f, 0.85940641f},
-{0.52249856f, 0.85264016f}, {0.53361452f, 0.84572782f},
-{0.54463904f, 0.83867057f}, {0.55557023f, 0.83146961f},
-{0.56640624f, 0.82412619f}, {0.57714519f, 0.81664156f},
-{0.58778525f, 0.80901699f}, {0.59832460f, 0.80125381f},
-{0.60876143f, 0.79335334f}, {0.61909395f, 0.78531693f},
-{0.62932039f, 0.77714596f}, {0.63943900f, 0.76884183f},
-{0.64944805f, 0.76040597f}, {0.65934582f, 0.75183981f},
-{0.66913061f, 0.74314483f}, {0.67880075f, 0.73432251f},
-{0.68835458f, 0.72537437f}, {0.69779046f, 0.71630194f},
-{0.70710678f, 0.70710678f}, {0.71630194f, 0.69779046f},
-{0.72537437f, 0.68835458f}, {0.73432251f, 0.67880075f},
-{0.74314483f, 0.66913061f}, {0.75183981f, 0.65934582f},
-{0.76040597f, 0.64944805f}, {0.76884183f, 0.63943900f},
-{0.77714596f, 0.62932039f}, {0.78531693f, 0.61909395f},
-{0.79335334f, 0.60876143f}, {0.80125381f, 0.59832460f},
-{0.80901699f, 0.58778525f}, {0.81664156f, 0.57714519f},
-{0.82412619f, 0.56640624f}, {0.83146961f, 0.55557023f},
-{0.83867057f, 0.54463904f}, {0.84572782f, 0.53361452f},
-{0.85264016f, 0.52249856f}, {0.85940641f, 0.51129309f},
-{0.86602540f, 0.50000000f}, {0.87249601f, 0.48862124f},
-{0.87881711f, 0.47715876f}, {0.88498764f, 0.46561452f},
-{0.89100652f, 0.45399050f}, {0.89687274f, 0.44228869f},
-{0.90258528f, 0.43051110f}, {0.90814317f, 0.41865974f},
-{0.91354546f, 0.40673664f}, {0.91879121f, 0.39474386f},
-{0.92387953f, 0.38268343f}, {0.92880955f, 0.37055744f},
-{0.93358043f, 0.35836795f}, {0.93819134f, 0.34611706f},
-{0.94264149f, 0.33380686f}, {0.94693013f, 0.32143947f},
-{0.95105652f, 0.30901699f}, {0.95501994f, 0.29654157f},
-{0.95881973f, 0.28401534f}, {0.96245524f, 0.27144045f},
-{0.96592583f, 0.25881905f}, {0.96923091f, 0.24615329f},
-{0.97236992f, 0.23344536f}, {0.97534232f, 0.22069744f},
-{0.97814760f, 0.20791169f}, {0.98078528f, 0.19509032f},
-{0.98325491f, 0.18223553f}, {0.98555606f, 0.16934950f},
-{0.98768834f, 0.15643447f}, {0.98965139f, 0.14349262f},
-{0.99144486f, 0.13052619f}, {0.99306846f, 0.11753740f},
-{0.99452190f, 0.10452846f}, {0.99580493f, 0.091501619f},
-{0.99691733f, 0.078459096f}, {0.99785892f, 0.065403129f},
-{0.99862953f, 0.052335956f}, {0.99922904f, 0.039259816f},
-{0.99965732f, 0.026176948f}, {0.99991433f, 0.013089596f},
-};
-#ifndef FFT_BITREV480
-#define FFT_BITREV480
-static const opus_int16 fft_bitrev480[480] = {
-0, 96, 192, 288, 384, 32, 128, 224, 320, 416, 64, 160, 256, 352, 448,
-8, 104, 200, 296, 392, 40, 136, 232, 328, 424, 72, 168, 264, 360, 456,
-16, 112, 208, 304, 400, 48, 144, 240, 336, 432, 80, 176, 272, 368, 464,
-24, 120, 216, 312, 408, 56, 152, 248, 344, 440, 88, 184, 280, 376, 472,
-4, 100, 196, 292, 388, 36, 132, 228, 324, 420, 68, 164, 260, 356, 452,
-12, 108, 204, 300, 396, 44, 140, 236, 332, 428, 76, 172, 268, 364, 460,
-20, 116, 212, 308, 404, 52, 148, 244, 340, 436, 84, 180, 276, 372, 468,
-28, 124, 220, 316, 412, 60, 156, 252, 348, 444, 92, 188, 284, 380, 476,
-1, 97, 193, 289, 385, 33, 129, 225, 321, 417, 65, 161, 257, 353, 449,
-9, 105, 201, 297, 393, 41, 137, 233, 329, 425, 73, 169, 265, 361, 457,
-17, 113, 209, 305, 401, 49, 145, 241, 337, 433, 81, 177, 273, 369, 465,
-25, 121, 217, 313, 409, 57, 153, 249, 345, 441, 89, 185, 281, 377, 473,
-5, 101, 197, 293, 389, 37, 133, 229, 325, 421, 69, 165, 261, 357, 453,
-13, 109, 205, 301, 397, 45, 141, 237, 333, 429, 77, 173, 269, 365, 461,
-21, 117, 213, 309, 405, 53, 149, 245, 341, 437, 85, 181, 277, 373, 469,
-29, 125, 221, 317, 413, 61, 157, 253, 349, 445, 93, 189, 285, 381, 477,
-2, 98, 194, 290, 386, 34, 130, 226, 322, 418, 66, 162, 258, 354, 450,
-10, 106, 202, 298, 394, 42, 138, 234, 330, 426, 74, 170, 266, 362, 458,
-18, 114, 210, 306, 402, 50, 146, 242, 338, 434, 82, 178, 274, 370, 466,
-26, 122, 218, 314, 410, 58, 154, 250, 346, 442, 90, 186, 282, 378, 474,
-6, 102, 198, 294, 390, 38, 134, 230, 326, 422, 70, 166, 262, 358, 454,
-14, 110, 206, 302, 398, 46, 142, 238, 334, 430, 78, 174, 270, 366, 462,
-22, 118, 214, 310, 406, 54, 150, 246, 342, 438, 86, 182, 278, 374, 470,
-30, 126, 222, 318, 414, 62, 158, 254, 350, 446, 94, 190, 286, 382, 478,
-3, 99, 195, 291, 387, 35, 131, 227, 323, 419, 67, 163, 259, 355, 451,
-11, 107, 203, 299, 395, 43, 139, 235, 331, 427, 75, 171, 267, 363, 459,
-19, 115, 211, 307, 403, 51, 147, 243, 339, 435, 83, 179, 275, 371, 467,
-27, 123, 219, 315, 411, 59, 155, 251, 347, 443, 91, 187, 283, 379, 475,
-7, 103, 199, 295, 391, 39, 135, 231, 327, 423, 71, 167, 263, 359, 455,
-15, 111, 207, 303, 399, 47, 143, 239, 335, 431, 79, 175, 271, 367, 463,
-23, 119, 215, 311, 407, 55, 151, 247, 343, 439, 87, 183, 279, 375, 471,
-31, 127, 223, 319, 415, 63, 159, 255, 351, 447, 95, 191, 287, 383, 479,
-};
-#endif
-
-#ifndef FFT_BITREV240
-#define FFT_BITREV240
-static const opus_int16 fft_bitrev240[240] = {
-0, 48, 96, 144, 192, 16, 64, 112, 160, 208, 32, 80, 128, 176, 224,
-4, 52, 100, 148, 196, 20, 68, 116, 164, 212, 36, 84, 132, 180, 228,
-8, 56, 104, 152, 200, 24, 72, 120, 168, 216, 40, 88, 136, 184, 232,
-12, 60, 108, 156, 204, 28, 76, 124, 172, 220, 44, 92, 140, 188, 236,
-1, 49, 97, 145, 193, 17, 65, 113, 161, 209, 33, 81, 129, 177, 225,
-5, 53, 101, 149, 197, 21, 69, 117, 165, 213, 37, 85, 133, 181, 229,
-9, 57, 105, 153, 201, 25, 73, 121, 169, 217, 41, 89, 137, 185, 233,
-13, 61, 109, 157, 205, 29, 77, 125, 173, 221, 45, 93, 141, 189, 237,
-2, 50, 98, 146, 194, 18, 66, 114, 162, 210, 34, 82, 130, 178, 226,
-6, 54, 102, 150, 198, 22, 70, 118, 166, 214, 38, 86, 134, 182, 230,
-10, 58, 106, 154, 202, 26, 74, 122, 170, 218, 42, 90, 138, 186, 234,
-14, 62, 110, 158, 206, 30, 78, 126, 174, 222, 46, 94, 142, 190, 238,
-3, 51, 99, 147, 195, 19, 67, 115, 163, 211, 35, 83, 131, 179, 227,
-7, 55, 103, 151, 199, 23, 71, 119, 167, 215, 39, 87, 135, 183, 231,
-11, 59, 107, 155, 203, 27, 75, 123, 171, 219, 43, 91, 139, 187, 235,
-15, 63, 111, 159, 207, 31, 79, 127, 175, 223, 47, 95, 143, 191, 239,
-};
-#endif
-
-#ifndef FFT_BITREV120
-#define FFT_BITREV120
-static const opus_int16 fft_bitrev120[120] = {
-0, 24, 48, 72, 96, 8, 32, 56, 80, 104, 16, 40, 64, 88, 112,
-4, 28, 52, 76, 100, 12, 36, 60, 84, 108, 20, 44, 68, 92, 116,
-1, 25, 49, 73, 97, 9, 33, 57, 81, 105, 17, 41, 65, 89, 113,
-5, 29, 53, 77, 101, 13, 37, 61, 85, 109, 21, 45, 69, 93, 117,
-2, 26, 50, 74, 98, 10, 34, 58, 82, 106, 18, 42, 66, 90, 114,
-6, 30, 54, 78, 102, 14, 38, 62, 86, 110, 22, 46, 70, 94, 118,
-3, 27, 51, 75, 99, 11, 35, 59, 83, 107, 19, 43, 67, 91, 115,
-7, 31, 55, 79, 103, 15, 39, 63, 87, 111, 23, 47, 71, 95, 119,
-};
-#endif
-
-#ifndef FFT_BITREV60
-#define FFT_BITREV60
-static const opus_int16 fft_bitrev60[60] = {
-0, 12, 24, 36, 48, 4, 16, 28, 40, 52, 8, 20, 32, 44, 56,
-1, 13, 25, 37, 49, 5, 17, 29, 41, 53, 9, 21, 33, 45, 57,
-2, 14, 26, 38, 50, 6, 18, 30, 42, 54, 10, 22, 34, 46, 58,
-3, 15, 27, 39, 51, 7, 19, 31, 43, 55, 11, 23, 35, 47, 59,
-};
-#endif
-
-#ifndef FFT_STATE48000_960_0
-#define FFT_STATE48000_960_0
-static const kiss_fft_state fft_state48000_960_0 = {
-480, /* nfft */
-0.002083333f, /* scale */
--1, /* shift */
-{5, 96, 3, 32, 4, 8, 2, 4, 4, 1, 0, 0, 0, 0, 0, 0, }, /* factors */
-fft_bitrev480, /* bitrev */
-fft_twiddles48000_960, /* bitrev */
-#ifdef OVERRIDE_FFT
-(arch_fft_state *)&cfg_arch_480,
-#else
-NULL,
-#endif
-};
-#endif
-
-#ifndef FFT_STATE48000_960_1
-#define FFT_STATE48000_960_1
-static const kiss_fft_state fft_state48000_960_1 = {
-240, /* nfft */
-0.004166667f, /* scale */
-1, /* shift */
-{5, 48, 3, 16, 4, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, }, /* factors */
-fft_bitrev240, /* bitrev */
-fft_twiddles48000_960, /* bitrev */
-#ifdef OVERRIDE_FFT
-(arch_fft_state *)&cfg_arch_240,
-#else
-NULL,
-#endif
-};
-#endif
-
-#ifndef FFT_STATE48000_960_2
-#define FFT_STATE48000_960_2
-static const kiss_fft_state fft_state48000_960_2 = {
-120, /* nfft */
-0.008333333f, /* scale */
-2, /* shift */
-{5, 24, 3, 8, 2, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, }, /* factors */
-fft_bitrev120, /* bitrev */
-fft_twiddles48000_960, /* bitrev */
-#ifdef OVERRIDE_FFT
-(arch_fft_state *)&cfg_arch_120,
-#else
-NULL,
-#endif
-};
-#endif
-
-#ifndef FFT_STATE48000_960_3
-#define FFT_STATE48000_960_3
-static const kiss_fft_state fft_state48000_960_3 = {
-60, /* nfft */
-0.016666667f, /* scale */
-3, /* shift */
-{5, 12, 3, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, /* factors */
-fft_bitrev60, /* bitrev */
-fft_twiddles48000_960, /* bitrev */
-#ifdef OVERRIDE_FFT
-(arch_fft_state *)&cfg_arch_60,
-#else
-NULL,
-#endif
-};
-#endif
-
-#endif
-
-#ifndef MDCT_TWIDDLES960
-#define MDCT_TWIDDLES960
-static const opus_val16 mdct_twiddles960[1800] = {
-0.99999994f, 0.99999321f, 0.99997580f, 0.99994773f, 0.99990886f,
-0.99985933f, 0.99979913f, 0.99972820f, 0.99964654f, 0.99955416f,
-0.99945110f, 0.99933738f, 0.99921292f, 0.99907774f, 0.99893188f,
-0.99877530f, 0.99860805f, 0.99843007f, 0.99824142f, 0.99804211f,
-0.99783206f, 0.99761140f, 0.99737996f, 0.99713790f, 0.99688518f,
-0.99662173f, 0.99634761f, 0.99606287f, 0.99576741f, 0.99546129f,
-0.99514455f, 0.99481714f, 0.99447906f, 0.99413031f, 0.99377096f,
-0.99340093f, 0.99302030f, 0.99262899f, 0.99222708f, 0.99181455f,
-0.99139136f, 0.99095762f, 0.99051321f, 0.99005818f, 0.98959261f,
-0.98911643f, 0.98862964f, 0.98813224f, 0.98762429f, 0.98710573f,
-0.98657662f, 0.98603696f, 0.98548669f, 0.98492593f, 0.98435456f,
-0.98377270f, 0.98318028f, 0.98257732f, 0.98196387f, 0.98133987f,
-0.98070538f, 0.98006040f, 0.97940493f, 0.97873890f, 0.97806245f,
-0.97737551f, 0.97667813f, 0.97597027f, 0.97525197f, 0.97452319f,
-0.97378403f, 0.97303438f, 0.97227436f, 0.97150391f, 0.97072303f,
-0.96993178f, 0.96913016f, 0.96831810f, 0.96749574f, 0.96666300f,
-0.96581990f, 0.96496642f, 0.96410263f, 0.96322852f, 0.96234411f,
-0.96144938f, 0.96054435f, 0.95962906f, 0.95870346f, 0.95776761f,
-0.95682150f, 0.95586514f, 0.95489854f, 0.95392174f, 0.95293468f,
-0.95193744f, 0.95093000f, 0.94991243f, 0.94888461f, 0.94784665f,
-0.94679856f, 0.94574034f, 0.94467193f, 0.94359344f, 0.94250488f,
-0.94140619f, 0.94029742f, 0.93917859f, 0.93804967f, 0.93691075f,
-0.93576175f, 0.93460274f, 0.93343377f, 0.93225473f, 0.93106574f,
-0.92986679f, 0.92865789f, 0.92743903f, 0.92621022f, 0.92497152f,
-0.92372292f, 0.92246443f, 0.92119598f, 0.91991776f, 0.91862965f,
-0.91733170f, 0.91602397f, 0.91470635f, 0.91337901f, 0.91204184f,
-0.91069490f, 0.90933824f, 0.90797186f, 0.90659571f, 0.90520984f,
-0.90381432f, 0.90240908f, 0.90099424f, 0.89956969f, 0.89813554f,
-0.89669174f, 0.89523834f, 0.89377540f, 0.89230281f, 0.89082074f,
-0.88932908f, 0.88782793f, 0.88631725f, 0.88479710f, 0.88326746f,
-0.88172835f, 0.88017982f, 0.87862182f, 0.87705445f, 0.87547767f,
-0.87389153f, 0.87229604f, 0.87069118f, 0.86907703f, 0.86745358f,
-0.86582077f, 0.86417878f, 0.86252749f, 0.86086690f, 0.85919720f,
-0.85751826f, 0.85583007f, 0.85413277f, 0.85242635f, 0.85071075f,
-0.84898609f, 0.84725231f, 0.84550947f, 0.84375757f, 0.84199661f,
-0.84022665f, 0.83844769f, 0.83665979f, 0.83486289f, 0.83305705f,
-0.83124226f, 0.82941860f, 0.82758605f, 0.82574469f, 0.82389444f,
-0.82203537f, 0.82016748f, 0.81829083f, 0.81640542f, 0.81451124f,
-0.81260836f, 0.81069672f, 0.80877650f, 0.80684757f, 0.80490994f,
-0.80296379f, 0.80100900f, 0.79904562f, 0.79707366f, 0.79509324f,
-0.79310423f, 0.79110676f, 0.78910083f, 0.78708643f, 0.78506362f,
-0.78303236f, 0.78099275f, 0.77894479f, 0.77688843f, 0.77482378f,
-0.77275085f, 0.77066964f, 0.76858020f, 0.76648247f, 0.76437658f,
-0.76226246f, 0.76014024f, 0.75800985f, 0.75587130f, 0.75372469f,
-0.75157005f, 0.74940729f, 0.74723655f, 0.74505776f, 0.74287105f,
-0.74067634f, 0.73847371f, 0.73626316f, 0.73404479f, 0.73181850f,
-0.72958434f, 0.72734243f, 0.72509271f, 0.72283524f, 0.72057003f,
-0.71829706f, 0.71601641f, 0.71372813f, 0.71143216f, 0.70912862f,
-0.70681745f, 0.70449871f, 0.70217246f, 0.69983864f, 0.69749737f,
-0.69514859f, 0.69279242f, 0.69042879f, 0.68805778f, 0.68567938f,
-0.68329364f, 0.68090063f, 0.67850029f, 0.67609268f, 0.67367786f,
-0.67125577f, 0.66882652f, 0.66639012f, 0.66394657f, 0.66149592f,
-0.65903819f, 0.65657341f, 0.65410155f, 0.65162271f, 0.64913690f,
-0.64664418f, 0.64414448f, 0.64163786f, 0.63912445f, 0.63660413f,
-0.63407701f, 0.63154310f, 0.62900239f, 0.62645501f, 0.62390089f,
-0.62134010f, 0.61877263f, 0.61619854f, 0.61361790f, 0.61103064f,
-0.60843682f, 0.60583651f, 0.60322970f, 0.60061646f, 0.59799677f,
-0.59537065f, 0.59273821f, 0.59009939f, 0.58745426f, 0.58480281f,
-0.58214509f, 0.57948118f, 0.57681108f, 0.57413477f, 0.57145232f,
-0.56876373f, 0.56606907f, 0.56336832f, 0.56066155f, 0.55794877f,
-0.55523002f, 0.55250537f, 0.54977477f, 0.54703826f, 0.54429591f,
-0.54154772f, 0.53879374f, 0.53603399f, 0.53326851f, 0.53049731f,
-0.52772039f, 0.52493787f, 0.52214974f, 0.51935595f, 0.51655668f,
-0.51375180f, 0.51094145f, 0.50812566f, 0.50530440f, 0.50247771f,
-0.49964568f, 0.49680826f, 0.49396557f, 0.49111754f, 0.48826426f,
-0.48540577f, 0.48254207f, 0.47967321f, 0.47679919f, 0.47392011f,
-0.47103590f, 0.46814668f, 0.46525243f, 0.46235323f, 0.45944905f,
-0.45653993f, 0.45362595f, 0.45070711f, 0.44778344f, 0.44485497f,
-0.44192174f, 0.43898380f, 0.43604112f, 0.43309379f, 0.43014181f,
-0.42718524f, 0.42422408f, 0.42125839f, 0.41828820f, 0.41531351f,
-0.41233435f, 0.40935081f, 0.40636289f, 0.40337059f, 0.40037400f,
-0.39737311f, 0.39436796f, 0.39135858f, 0.38834500f, 0.38532731f,
-0.38230544f, 0.37927949f, 0.37624949f, 0.37321547f, 0.37017745f,
-0.36713544f, 0.36408952f, 0.36103970f, 0.35798600f, 0.35492846f,
-0.35186714f, 0.34880206f, 0.34573323f, 0.34266070f, 0.33958447f,
-0.33650464f, 0.33342120f, 0.33033419f, 0.32724363f, 0.32414958f,
-0.32105204f, 0.31795108f, 0.31484672f, 0.31173897f, 0.30862790f,
-0.30551350f, 0.30239585f, 0.29927495f, 0.29615086f, 0.29302359f,
-0.28989318f, 0.28675964f, 0.28362307f, 0.28048345f, 0.27734083f,
-0.27419522f, 0.27104670f, 0.26789525f, 0.26474094f, 0.26158381f,
-0.25842386f, 0.25526115f, 0.25209570f, 0.24892756f, 0.24575676f,
-0.24258332f, 0.23940729f, 0.23622867f, 0.23304754f, 0.22986393f,
-0.22667783f, 0.22348931f, 0.22029841f, 0.21710514f, 0.21390954f,
-0.21071166f, 0.20751151f, 0.20430915f, 0.20110460f, 0.19789790f,
-0.19468907f, 0.19147816f, 0.18826519f, 0.18505022f, 0.18183327f,
-0.17861435f, 0.17539354f, 0.17217083f, 0.16894630f, 0.16571994f,
-0.16249183f, 0.15926196f, 0.15603039f, 0.15279715f, 0.14956227f,
-0.14632578f, 0.14308774f, 0.13984816f, 0.13660708f, 0.13336454f,
-0.13012058f, 0.12687522f, 0.12362850f, 0.12038045f, 0.11713112f,
-0.11388054f, 0.11062872f, 0.10737573f, 0.10412160f, 0.10086634f,
-0.097609997f, 0.094352618f, 0.091094226f, 0.087834857f, 0.084574550f,
-0.081313334f, 0.078051247f, 0.074788325f, 0.071524605f, 0.068260118f,
-0.064994894f, 0.061728980f, 0.058462404f, 0.055195201f, 0.051927410f,
-0.048659060f, 0.045390189f, 0.042120833f, 0.038851023f, 0.035580799f,
-0.032310195f, 0.029039243f, 0.025767982f, 0.022496443f, 0.019224664f,
-0.015952680f, 0.012680525f, 0.0094082337f, 0.0061358409f, 0.0028633832f,
--0.00040910527f, -0.0036815894f, -0.0069540343f, -0.010226404f, -0.013498665f,
--0.016770782f, -0.020042717f, -0.023314439f, -0.026585912f, -0.029857099f,
--0.033127967f, -0.036398482f, -0.039668605f, -0.042938303f, -0.046207540f,
--0.049476285f, -0.052744497f, -0.056012146f, -0.059279196f, -0.062545612f,
--0.065811358f, -0.069076397f, -0.072340697f, -0.075604223f, -0.078866936f,
--0.082128808f, -0.085389800f, -0.088649876f, -0.091909006f, -0.095167145f,
--0.098424271f, -0.10168034f, -0.10493532f, -0.10818918f, -0.11144188f,
--0.11469338f, -0.11794366f, -0.12119267f, -0.12444039f, -0.12768677f,
--0.13093179f, -0.13417540f, -0.13741758f, -0.14065829f, -0.14389749f,
--0.14713514f, -0.15037122f, -0.15360570f, -0.15683852f, -0.16006967f,
--0.16329910f, -0.16652679f, -0.16975269f, -0.17297678f, -0.17619900f,
--0.17941935f, -0.18263777f, -0.18585424f, -0.18906870f, -0.19228116f,
--0.19549155f, -0.19869985f, -0.20190603f, -0.20511003f, -0.20831184f,
--0.21151142f, -0.21470875f, -0.21790376f, -0.22109644f, -0.22428675f,
--0.22747467f, -0.23066014f, -0.23384315f, -0.23702365f, -0.24020162f,
--0.24337701f, -0.24654980f, -0.24971995f, -0.25288740f, -0.25605217f,
--0.25921419f, -0.26237345f, -0.26552987f, -0.26868346f, -0.27183419f,
--0.27498198f, -0.27812684f, -0.28126872f, -0.28440759f, -0.28754342f,
--0.29067615f, -0.29380578f, -0.29693225f, -0.30005556f, -0.30317566f,
--0.30629250f, -0.30940607f, -0.31251630f, -0.31562322f, -0.31872672f,
--0.32182685f, -0.32492352f, -0.32801670f, -0.33110636f, -0.33419248f,
--0.33727503f, -0.34035397f, -0.34342924f, -0.34650084f, -0.34956875f,
--0.35263291f, -0.35569328f, -0.35874987f, -0.36180258f, -0.36485144f,
--0.36789638f, -0.37093741f, -0.37397444f, -0.37700745f, -0.38003644f,
--0.38306138f, -0.38608220f, -0.38909888f, -0.39211139f, -0.39511973f,
--0.39812380f, -0.40112361f, -0.40411916f, -0.40711036f, -0.41009718f,
--0.41307965f, -0.41605768f, -0.41903123f, -0.42200032f, -0.42496487f,
--0.42792490f, -0.43088034f, -0.43383113f, -0.43677729f, -0.43971881f,
--0.44265559f, -0.44558764f, -0.44851488f, -0.45143735f, -0.45435500f,
--0.45726776f, -0.46017563f, -0.46307856f, -0.46597654f, -0.46886954f,
--0.47175750f, -0.47464043f, -0.47751826f, -0.48039100f, -0.48325855f,
--0.48612097f, -0.48897815f, -0.49183011f, -0.49467680f, -0.49751821f,
--0.50035429f, -0.50318497f, -0.50601029f, -0.50883019f, -0.51164466f,
--0.51445359f, -0.51725709f, -0.52005500f, -0.52284735f, -0.52563411f,
--0.52841520f, -0.53119069f, -0.53396046f, -0.53672451f, -0.53948283f,
--0.54223537f, -0.54498214f, -0.54772300f, -0.55045801f, -0.55318713f,
--0.55591035f, -0.55862761f, -0.56133890f, -0.56404412f, -0.56674337f,
--0.56943649f, -0.57212353f, -0.57480448f, -0.57747924f, -0.58014780f,
--0.58281022f, -0.58546633f, -0.58811617f, -0.59075975f, -0.59339696f,
--0.59602785f, -0.59865236f, -0.60127044f, -0.60388207f, -0.60648727f,
--0.60908598f, -0.61167812f, -0.61426371f, -0.61684275f, -0.61941516f,
--0.62198097f, -0.62454009f, -0.62709254f, -0.62963831f, -0.63217729f,
--0.63470948f, -0.63723493f, -0.63975352f, -0.64226526f, -0.64477009f,
--0.64726806f, -0.64975911f, -0.65224314f, -0.65472025f, -0.65719032f,
--0.65965337f, -0.66210932f, -0.66455823f, -0.66700000f, -0.66943461f,
--0.67186207f, -0.67428231f, -0.67669535f, -0.67910111f, -0.68149966f,
--0.68389088f, -0.68627477f, -0.68865126f, -0.69102043f, -0.69338220f,
--0.69573659f, -0.69808346f, -0.70042288f, -0.70275480f, -0.70507920f,
--0.70739603f, -0.70970529f, -0.71200693f, -0.71430099f, -0.71658736f,
--0.71886611f, -0.72113711f, -0.72340041f, -0.72565591f, -0.72790372f,
--0.73014367f, -0.73237586f, -0.73460019f, -0.73681659f, -0.73902518f,
--0.74122584f, -0.74341851f, -0.74560326f, -0.74778003f, -0.74994880f,
--0.75210953f, -0.75426215f, -0.75640678f, -0.75854325f, -0.76067162f,
--0.76279181f, -0.76490390f, -0.76700771f, -0.76910341f, -0.77119076f,
--0.77326995f, -0.77534080f, -0.77740335f, -0.77945763f, -0.78150350f,
--0.78354102f, -0.78557014f, -0.78759086f, -0.78960317f, -0.79160696f,
--0.79360235f, -0.79558921f, -0.79756755f, -0.79953730f, -0.80149853f,
--0.80345118f, -0.80539525f, -0.80733067f, -0.80925739f, -0.81117553f,
--0.81308490f, -0.81498563f, -0.81687760f, -0.81876087f, -0.82063532f,
--0.82250100f, -0.82435787f, -0.82620591f, -0.82804507f, -0.82987541f,
--0.83169687f, -0.83350939f, -0.83531296f, -0.83710766f, -0.83889335f,
--0.84067005f, -0.84243774f, -0.84419644f, -0.84594607f, -0.84768665f,
--0.84941816f, -0.85114056f, -0.85285389f, -0.85455805f, -0.85625303f,
--0.85793889f, -0.85961550f, -0.86128294f, -0.86294121f, -0.86459017f,
--0.86622989f, -0.86786032f, -0.86948150f, -0.87109333f, -0.87269586f,
--0.87428904f, -0.87587279f, -0.87744725f, -0.87901229f, -0.88056785f,
--0.88211405f, -0.88365078f, -0.88517809f, -0.88669586f, -0.88820416f,
--0.88970292f, -0.89119220f, -0.89267188f, -0.89414203f, -0.89560264f,
--0.89705360f, -0.89849502f, -0.89992678f, -0.90134889f, -0.90276134f,
--0.90416414f, -0.90555727f, -0.90694070f, -0.90831441f, -0.90967834f,
--0.91103262f, -0.91237706f, -0.91371179f, -0.91503674f, -0.91635185f,
--0.91765714f, -0.91895264f, -0.92023826f, -0.92151409f, -0.92277998f,
--0.92403603f, -0.92528218f, -0.92651838f, -0.92774469f, -0.92896110f,
--0.93016750f, -0.93136400f, -0.93255049f, -0.93372697f, -0.93489349f,
--0.93604994f, -0.93719643f, -0.93833286f, -0.93945926f, -0.94057560f,
--0.94168180f, -0.94277799f, -0.94386405f, -0.94494003f, -0.94600588f,
--0.94706154f, -0.94810712f, -0.94914252f, -0.95016778f, -0.95118284f,
--0.95218778f, -0.95318246f, -0.95416695f, -0.95514119f, -0.95610523f,
--0.95705903f, -0.95800257f, -0.95893586f, -0.95985889f, -0.96077162f,
--0.96167403f, -0.96256620f, -0.96344805f, -0.96431959f, -0.96518075f,
--0.96603161f, -0.96687216f, -0.96770233f, -0.96852213f, -0.96933156f,
--0.97013056f, -0.97091925f, -0.97169751f, -0.97246534f, -0.97322279f,
--0.97396982f, -0.97470641f, -0.97543252f, -0.97614825f, -0.97685349f,
--0.97754824f, -0.97823256f, -0.97890645f, -0.97956979f, -0.98022264f,
--0.98086500f, -0.98149687f, -0.98211825f, -0.98272908f, -0.98332942f,
--0.98391914f, -0.98449844f, -0.98506713f, -0.98562527f, -0.98617285f,
--0.98670989f, -0.98723638f, -0.98775226f, -0.98825759f, -0.98875231f,
--0.98923647f, -0.98971003f, -0.99017298f, -0.99062532f, -0.99106705f,
--0.99149817f, -0.99191868f, -0.99232858f, -0.99272782f, -0.99311644f,
--0.99349445f, -0.99386179f, -0.99421853f, -0.99456459f, -0.99489999f,
--0.99522477f, -0.99553883f, -0.99584228f, -0.99613506f, -0.99641716f,
--0.99668860f, -0.99694937f, -0.99719942f, -0.99743885f, -0.99766755f,
--0.99788558f, -0.99809295f, -0.99828959f, -0.99847561f, -0.99865085f,
--0.99881548f, -0.99896932f, -0.99911255f, -0.99924499f, -0.99936682f,
--0.99947786f, -0.99957830f, -0.99966794f, -0.99974692f, -0.99981517f,
--0.99987274f, -0.99991959f, -0.99995571f, -0.99998116f, -0.99999589f,
-0.99999964f, 0.99997288f, 0.99990326f, 0.99979085f, 0.99963558f,
-0.99943751f, 0.99919659f, 0.99891287f, 0.99858636f, 0.99821711f,
-0.99780506f, 0.99735034f, 0.99685282f, 0.99631262f, 0.99572974f,
-0.99510419f, 0.99443603f, 0.99372530f, 0.99297196f, 0.99217612f,
-0.99133772f, 0.99045694f, 0.98953366f, 0.98856801f, 0.98756003f,
-0.98650974f, 0.98541719f, 0.98428243f, 0.98310548f, 0.98188645f,
-0.98062533f, 0.97932225f, 0.97797716f, 0.97659022f, 0.97516143f,
-0.97369087f, 0.97217858f, 0.97062469f, 0.96902919f, 0.96739221f,
-0.96571374f, 0.96399397f, 0.96223283f, 0.96043050f, 0.95858705f,
-0.95670253f, 0.95477700f, 0.95281059f, 0.95080340f, 0.94875544f,
-0.94666684f, 0.94453770f, 0.94236809f, 0.94015813f, 0.93790787f,
-0.93561745f, 0.93328691f, 0.93091643f, 0.92850608f, 0.92605597f,
-0.92356616f, 0.92103678f, 0.91846794f, 0.91585976f, 0.91321236f,
-0.91052586f, 0.90780038f, 0.90503591f, 0.90223277f, 0.89939094f,
-0.89651060f, 0.89359182f, 0.89063478f, 0.88763964f, 0.88460642f,
-0.88153529f, 0.87842643f, 0.87527996f, 0.87209594f, 0.86887461f,
-0.86561602f, 0.86232042f, 0.85898781f, 0.85561842f, 0.85221243f,
-0.84876984f, 0.84529096f, 0.84177583f, 0.83822471f, 0.83463764f,
-0.83101481f, 0.82735640f, 0.82366252f, 0.81993335f, 0.81616908f,
-0.81236988f, 0.80853581f, 0.80466717f, 0.80076402f, 0.79682660f,
-0.79285502f, 0.78884947f, 0.78481019f, 0.78073722f, 0.77663082f,
-0.77249116f, 0.76831841f, 0.76411277f, 0.75987434f, 0.75560343f,
-0.75130010f, 0.74696463f, 0.74259710f, 0.73819780f, 0.73376691f,
-0.72930455f, 0.72481096f, 0.72028631f, 0.71573079f, 0.71114463f,
-0.70652801f, 0.70188117f, 0.69720417f, 0.69249737f, 0.68776089f,
-0.68299496f, 0.67819971f, 0.67337549f, 0.66852236f, 0.66364062f,
-0.65873051f, 0.65379208f, 0.64882571f, 0.64383155f, 0.63880974f,
-0.63376063f, 0.62868434f, 0.62358117f, 0.61845124f, 0.61329484f,
-0.60811216f, 0.60290343f, 0.59766883f, 0.59240872f, 0.58712316f,
-0.58181250f, 0.57647687f, 0.57111657f, 0.56573176f, 0.56032276f,
-0.55488980f, 0.54943299f, 0.54395270f, 0.53844911f, 0.53292239f,
-0.52737290f, 0.52180082f, 0.51620632f, 0.51058978f, 0.50495136f,
-0.49929130f, 0.49360985f, 0.48790723f, 0.48218375f, 0.47643960f,
-0.47067502f, 0.46489030f, 0.45908567f, 0.45326138f, 0.44741765f,
-0.44155475f, 0.43567297f, 0.42977250f, 0.42385364f, 0.41791660f,
-0.41196167f, 0.40598908f, 0.39999911f, 0.39399201f, 0.38796803f,
-0.38192743f, 0.37587047f, 0.36979741f, 0.36370850f, 0.35760403f,
-0.35148421f, 0.34534934f, 0.33919969f, 0.33303553f, 0.32685706f,
-0.32066461f, 0.31445843f, 0.30823877f, 0.30200592f, 0.29576012f,
-0.28950164f, 0.28323078f, 0.27694780f, 0.27065292f, 0.26434645f,
-0.25802869f, 0.25169984f, 0.24536023f, 0.23901010f, 0.23264973f,
-0.22627939f, 0.21989937f, 0.21350993f, 0.20711134f, 0.20070387f,
-0.19428782f, 0.18786344f, 0.18143101f, 0.17499080f, 0.16854310f,
-0.16208819f, 0.15562633f, 0.14915779f, 0.14268288f, 0.13620184f,
-0.12971498f, 0.12322257f, 0.11672486f, 0.11022217f, 0.10371475f,
-0.097202882f, 0.090686858f, 0.084166944f, 0.077643424f, 0.071116582f,
-0.064586692f, 0.058054037f, 0.051518895f, 0.044981543f, 0.038442269f,
-0.031901345f, 0.025359053f, 0.018815678f, 0.012271495f, 0.0057267868f,
--0.00081816671f, -0.0073630852f, -0.013907688f, -0.020451695f, -0.026994826f,
--0.033536803f, -0.040077340f, -0.046616159f, -0.053152986f, -0.059687532f,
--0.066219524f, -0.072748676f, -0.079274714f, -0.085797355f, -0.092316322f,
--0.098831341f, -0.10534211f, -0.11184838f, -0.11834986f, -0.12484626f,
--0.13133731f, -0.13782275f, -0.14430228f, -0.15077563f, -0.15724251f,
--0.16370267f, -0.17015581f, -0.17660165f, -0.18303993f, -0.18947038f,
--0.19589271f, -0.20230664f, -0.20871192f, -0.21510825f, -0.22149536f,
--0.22787298f, -0.23424086f, -0.24059868f, -0.24694622f, -0.25328314f,
--0.25960925f, -0.26592422f, -0.27222782f, -0.27851975f, -0.28479972f,
--0.29106751f, -0.29732284f, -0.30356544f, -0.30979502f, -0.31601134f,
--0.32221413f, -0.32840309f, -0.33457801f, -0.34073856f, -0.34688455f,
--0.35301566f, -0.35913166f, -0.36523229f, -0.37131724f, -0.37738630f,
--0.38343921f, -0.38947567f, -0.39549544f, -0.40149832f, -0.40748394f,
--0.41345215f, -0.41940263f, -0.42533514f, -0.43124944f, -0.43714526f,
--0.44302234f, -0.44888046f, -0.45471936f, -0.46053877f, -0.46633846f,
--0.47211814f, -0.47787762f, -0.48361665f, -0.48933494f, -0.49503228f,
--0.50070840f, -0.50636309f, -0.51199609f, -0.51760709f, -0.52319598f,
--0.52876246f, -0.53430629f, -0.53982723f, -0.54532504f, -0.55079949f,
--0.55625033f, -0.56167740f, -0.56708032f, -0.57245898f, -0.57781315f,
--0.58314258f, -0.58844697f, -0.59372622f, -0.59897995f, -0.60420811f,
--0.60941035f, -0.61458647f, -0.61973625f, -0.62485951f, -0.62995601f,
--0.63502556f, -0.64006782f, -0.64508271f, -0.65007001f, -0.65502942f,
--0.65996075f, -0.66486382f, -0.66973841f, -0.67458433f, -0.67940134f,
--0.68418926f, -0.68894786f, -0.69367695f, -0.69837630f, -0.70304573f,
--0.70768511f, -0.71229410f, -0.71687263f, -0.72142041f, -0.72593731f,
--0.73042315f, -0.73487765f, -0.73930067f, -0.74369204f, -0.74805158f,
--0.75237900f, -0.75667429f, -0.76093709f, -0.76516730f, -0.76936477f,
--0.77352923f, -0.77766061f, -0.78175867f, -0.78582323f, -0.78985411f,
--0.79385114f, -0.79781419f, -0.80174309f, -0.80563760f, -0.80949765f,
--0.81332302f, -0.81711352f, -0.82086903f, -0.82458937f, -0.82827437f,
--0.83192390f, -0.83553779f, -0.83911592f, -0.84265804f, -0.84616417f,
--0.84963393f, -0.85306740f, -0.85646427f, -0.85982448f, -0.86314780f,
--0.86643422f, -0.86968350f, -0.87289548f, -0.87607014f, -0.87920725f,
--0.88230664f, -0.88536829f, -0.88839203f, -0.89137769f, -0.89432514f,
--0.89723432f, -0.90010506f, -0.90293723f, -0.90573072f, -0.90848541f,
--0.91120118f, -0.91387796f, -0.91651553f, -0.91911387f, -0.92167282f,
--0.92419231f, -0.92667222f, -0.92911243f, -0.93151283f, -0.93387336f,
--0.93619382f, -0.93847424f, -0.94071442f, -0.94291431f, -0.94507378f,
--0.94719279f, -0.94927126f, -0.95130903f, -0.95330608f, -0.95526224f,
--0.95717752f, -0.95905179f, -0.96088499f, -0.96267700f, -0.96442777f,
--0.96613729f, -0.96780539f, -0.96943200f, -0.97101706f, -0.97256058f,
--0.97406244f, -0.97552258f, -0.97694093f, -0.97831738f, -0.97965199f,
--0.98094457f, -0.98219514f, -0.98340368f, -0.98457009f, -0.98569429f,
--0.98677629f, -0.98781598f, -0.98881340f, -0.98976845f, -0.99068111f,
--0.99155134f, -0.99237907f, -0.99316430f, -0.99390697f, -0.99460709f,
--0.99526459f, -0.99587947f, -0.99645168f, -0.99698120f, -0.99746799f,
--0.99791211f, -0.99831343f, -0.99867201f, -0.99898779f, -0.99926084f,
--0.99949104f, -0.99967843f, -0.99982297f, -0.99992472f, -0.99998361f,
-0.99999869f, 0.99989158f, 0.99961317f, 0.99916345f, 0.99854255f,
-0.99775058f, 0.99678761f, 0.99565387f, 0.99434954f, 0.99287480f,
-0.99122995f, 0.98941529f, 0.98743105f, 0.98527765f, 0.98295540f,
-0.98046476f, 0.97780609f, 0.97497988f, 0.97198665f, 0.96882683f,
-0.96550101f, 0.96200979f, 0.95835376f, 0.95453346f, 0.95054960f,
-0.94640291f, 0.94209403f, 0.93762374f, 0.93299282f, 0.92820197f,
-0.92325211f, 0.91814411f, 0.91287869f, 0.90745693f, 0.90187967f,
-0.89614785f, 0.89026248f, 0.88422459f, 0.87803519f, 0.87169534f,
-0.86520612f, 0.85856867f, 0.85178405f, 0.84485358f, 0.83777827f,
-0.83055943f, 0.82319832f, 0.81569612f, 0.80805415f, 0.80027372f,
-0.79235619f, 0.78430289f, 0.77611518f, 0.76779449f, 0.75934225f,
-0.75075996f, 0.74204898f, 0.73321080f, 0.72424710f, 0.71515924f,
-0.70594883f, 0.69661748f, 0.68716675f, 0.67759830f, 0.66791373f,
-0.65811473f, 0.64820296f, 0.63818014f, 0.62804794f, 0.61780810f,
-0.60746247f, 0.59701276f, 0.58646071f, 0.57580817f, 0.56505698f,
-0.55420899f, 0.54326600f, 0.53222996f, 0.52110273f, 0.50988621f,
-0.49858227f, 0.48719296f, 0.47572014f, 0.46416581f, 0.45253196f,
-0.44082057f, 0.42903364f, 0.41717321f, 0.40524128f, 0.39323992f,
-0.38117120f, 0.36903715f, 0.35683987f, 0.34458145f, 0.33226398f,
-0.31988961f, 0.30746040f, 0.29497850f, 0.28244606f, 0.26986524f,
-0.25723818f, 0.24456702f, 0.23185398f, 0.21910121f, 0.20631088f,
-0.19348522f, 0.18062639f, 0.16773662f, 0.15481812f, 0.14187308f,
-0.12890373f, 0.11591230f, 0.10290100f, 0.089872077f, 0.076827750f,
-0.063770257f, 0.050701842f, 0.037624735f, 0.024541186f, 0.011453429f,
--0.0016362892f, -0.014725727f, -0.027812643f, -0.040894791f, -0.053969935f,
--0.067035832f, -0.080090240f, -0.093130924f, -0.10615565f, -0.11916219f,
--0.13214831f, -0.14511178f, -0.15805040f, -0.17096193f, -0.18384418f,
--0.19669491f, -0.20951195f, -0.22229309f, -0.23503613f, -0.24773891f,
--0.26039925f, -0.27301496f, -0.28558388f, -0.29810387f, -0.31057280f,
--0.32298848f, -0.33534884f, -0.34765175f, -0.35989508f, -0.37207675f,
--0.38419467f, -0.39624676f, -0.40823093f, -0.42014518f, -0.43198743f,
--0.44375566f, -0.45544785f, -0.46706200f, -0.47859612f, -0.49004826f,
--0.50141639f, -0.51269865f, -0.52389306f, -0.53499764f, -0.54601061f,
--0.55693001f, -0.56775403f, -0.57848072f, -0.58910829f, -0.59963489f,
--0.61005878f, -0.62037814f, -0.63059121f, -0.64069623f, -0.65069145f,
--0.66057515f, -0.67034572f, -0.68000144f, -0.68954057f, -0.69896162f,
--0.70826286f, -0.71744281f, -0.72649974f, -0.73543227f, -0.74423873f,
--0.75291771f, -0.76146764f, -0.76988715f, -0.77817470f, -0.78632891f,
--0.79434842f, -0.80223179f, -0.80997771f, -0.81758487f, -0.82505190f,
--0.83237761f, -0.83956063f, -0.84659988f, -0.85349399f, -0.86024189f,
--0.86684239f, -0.87329435f, -0.87959671f, -0.88574833f, -0.89174819f,
--0.89759529f, -0.90328854f, -0.90882701f, -0.91420978f, -0.91943592f,
--0.92450452f, -0.92941469f, -0.93416560f, -0.93875647f, -0.94318646f,
--0.94745487f, -0.95156091f, -0.95550388f, -0.95928317f, -0.96289814f,
--0.96634805f, -0.96963239f, -0.97275060f, -0.97570217f, -0.97848648f,
--0.98110318f, -0.98355180f, -0.98583186f, -0.98794299f, -0.98988485f,
--0.99165714f, -0.99325943f, -0.99469161f, -0.99595332f, -0.99704438f,
--0.99796462f, -0.99871385f, -0.99929196f, -0.99969882f, -0.99993443f,
-0.99999464f, 0.99956632f, 0.99845290f, 0.99665523f, 0.99417448f,
-0.99101239f, 0.98717111f, 0.98265326f, 0.97746199f, 0.97160077f,
-0.96507365f, 0.95788515f, 0.95004016f, 0.94154406f, 0.93240267f,
-0.92262226f, 0.91220951f, 0.90117162f, 0.88951606f, 0.87725091f,
-0.86438453f, 0.85092574f, 0.83688372f, 0.82226819f, 0.80708915f,
-0.79135692f, 0.77508235f, 0.75827658f, 0.74095112f, 0.72311783f,
-0.70478898f, 0.68597710f, 0.66669506f, 0.64695615f, 0.62677377f,
-0.60616189f, 0.58513457f, 0.56370622f, 0.54189157f, 0.51970547f,
-0.49716324f, 0.47428027f, 0.45107225f, 0.42755505f, 0.40374488f,
-0.37965798f, 0.35531086f, 0.33072025f, 0.30590299f, 0.28087607f,
-0.25565663f, 0.23026201f, 0.20470956f, 0.17901683f, 0.15320139f,
-0.12728097f, 0.10127331f, 0.075196236f, 0.049067631f, 0.022905400f,
--0.0032725304f, -0.029448219f, -0.055603724f, -0.081721120f, -0.10778251f,
--0.13377003f, -0.15966587f, -0.18545228f, -0.21111161f, -0.23662624f,
--0.26197869f, -0.28715160f, -0.31212771f, -0.33688989f, -0.36142120f,
--0.38570482f, -0.40972409f, -0.43346253f, -0.45690393f, -0.48003218f,
--0.50283146f, -0.52528608f, -0.54738069f, -0.56910020f, -0.59042966f,
--0.61135447f, -0.63186026f, -0.65193301f, -0.67155898f, -0.69072473f,
--0.70941705f, -0.72762316f, -0.74533063f, -0.76252723f, -0.77920127f,
--0.79534131f, -0.81093621f, -0.82597536f, -0.84044844f, -0.85434550f,
--0.86765707f, -0.88037395f, -0.89248747f, -0.90398932f, -0.91487163f,
--0.92512697f, -0.93474823f, -0.94372886f, -0.95206273f, -0.95974404f,
--0.96676767f, -0.97312868f, -0.97882277f, -0.98384601f, -0.98819500f,
--0.99186671f, -0.99485862f, -0.99716878f, -0.99879545f, -0.99973762f,
-};
-#endif
-
-static const CELTMode mode48000_960_120 = {
-48000, /* Fs */
-120, /* overlap */
-21, /* nbEBands */
-21, /* effEBands */
-{0.85000610f, 0.0000000f, 1.0000000f, 1.0000000f, }, /* preemph */
-eband5ms, /* eBands */
-3, /* maxLM */
-8, /* nbShortMdcts */
-120, /* shortMdctSize */
-11, /* nbAllocVectors */
-band_allocation, /* allocVectors */
-logN400, /* logN */
-window120, /* window */
-{1920, 3, {&fft_state48000_960_0, &fft_state48000_960_1, &fft_state48000_960_2, &fft_state48000_960_3, }, mdct_twiddles960}, /* mdct */
-{392, cache_index50, cache_bits50, cache_caps50}, /* cache */
-};
-
-/* List of all the available modes */
-#define TOTAL_MODES 1
-static const CELTMode * const static_mode_list[TOTAL_MODES] = {
-&mode48000_960_120,
-};
diff --git a/drivers/opus/celt/static_modes_float_arm_ne10.h b/drivers/opus/celt/static_modes_float_arm_ne10.h
deleted file mode 100644
index 934a82a420..0000000000
--- a/drivers/opus/celt/static_modes_float_arm_ne10.h
+++ /dev/null
@@ -1,404 +0,0 @@
-/* The contents of this file was automatically generated by
- * dump_mode_arm_ne10.c with arguments: 48000 960
- * It contains static definitions for some pre-defined modes. */
-#include <NE10_init.h>
-
-#ifndef NE10_FFT_PARAMS48000_960
-#define NE10_FFT_PARAMS48000_960
-static const ne10_int32_t ne10_factors_480[64] = {
-4, 40, 4, 30, 2, 15, 5, 3, 3, 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, };
-static const ne10_int32_t ne10_factors_240[64] = {
-3, 20, 4, 15, 5, 3, 3, 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, };
-static const ne10_int32_t ne10_factors_120[64] = {
-3, 10, 2, 15, 5, 3, 3, 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, };
-static const ne10_int32_t ne10_factors_60[64] = {
-2, 5, 5, 3, 3, 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, };
-static const ne10_fft_cpx_float32_t ne10_twiddles_480[480] = {
-{1.0000000f,0.0000000f}, {1.0000000f,-0.0000000f}, {1.0000000f,-0.0000000f},
-{1.0000000f,-0.0000000f}, {0.91354543f,-0.40673664f}, {0.66913056f,-0.74314487f},
-{1.0000000f,-0.0000000f}, {0.66913056f,-0.74314487f}, {-0.10452851f,-0.99452192f},
-{1.0000000f,-0.0000000f}, {0.30901697f,-0.95105654f}, {-0.80901700f,-0.58778518f},
-{1.0000000f,-0.0000000f}, {-0.10452851f,-0.99452192f}, {-0.97814757f,0.20791179f},
-{1.0000000f,-0.0000000f}, {0.97814763f,-0.20791170f}, {0.91354543f,-0.40673664f},
-{0.80901700f,-0.58778524f}, {0.66913056f,-0.74314487f}, {0.49999997f,-0.86602545f},
-{0.30901697f,-0.95105654f}, {0.10452842f,-0.99452192f}, {-0.10452851f,-0.99452192f},
-{-0.30901703f,-0.95105648f}, {-0.50000006f,-0.86602533f}, {-0.66913068f,-0.74314475f},
-{-0.80901700f,-0.58778518f}, {-0.91354549f,-0.40673658f}, {-0.97814763f,-0.20791161f},
-{1.0000000f,-0.0000000f}, {0.99862951f,-0.052335959f}, {0.99452192f,-0.10452846f},
-{0.98768836f,-0.15643448f}, {0.97814763f,-0.20791170f}, {0.96592581f,-0.25881904f},
-{0.95105648f,-0.30901700f}, {0.93358040f,-0.35836795f}, {0.91354543f,-0.40673664f},
-{0.89100653f,-0.45399052f}, {0.86602545f,-0.50000000f}, {0.83867055f,-0.54463905f},
-{0.80901700f,-0.58778524f}, {0.77714598f,-0.62932038f}, {0.74314475f,-0.66913062f},
-{0.70710677f,-0.70710683f}, {0.66913056f,-0.74314487f}, {0.62932038f,-0.77714598f},
-{0.58778524f,-0.80901700f}, {0.54463899f,-0.83867055f}, {0.49999997f,-0.86602545f},
-{0.45399052f,-0.89100653f}, {0.40673661f,-0.91354549f}, {0.35836786f,-0.93358046f},
-{0.30901697f,-0.95105654f}, {0.25881907f,-0.96592581f}, {0.20791166f,-0.97814763f},
-{0.15643437f,-0.98768836f}, {0.10452842f,-0.99452192f}, {0.052335974f,-0.99862951f},
-{1.0000000f,-0.0000000f}, {0.99452192f,-0.10452846f}, {0.97814763f,-0.20791170f},
-{0.95105648f,-0.30901700f}, {0.91354543f,-0.40673664f}, {0.86602545f,-0.50000000f},
-{0.80901700f,-0.58778524f}, {0.74314475f,-0.66913062f}, {0.66913056f,-0.74314487f},
-{0.58778524f,-0.80901700f}, {0.49999997f,-0.86602545f}, {0.40673661f,-0.91354549f},
-{0.30901697f,-0.95105654f}, {0.20791166f,-0.97814763f}, {0.10452842f,-0.99452192f},
-{-4.3711388e-08f,-1.0000000f}, {-0.10452851f,-0.99452192f}, {-0.20791174f,-0.97814757f},
-{-0.30901703f,-0.95105648f}, {-0.40673670f,-0.91354543f}, {-0.50000006f,-0.86602533f},
-{-0.58778518f,-0.80901700f}, {-0.66913068f,-0.74314475f}, {-0.74314493f,-0.66913044f},
-{-0.80901700f,-0.58778518f}, {-0.86602539f,-0.50000006f}, {-0.91354549f,-0.40673658f},
-{-0.95105654f,-0.30901679f}, {-0.97814763f,-0.20791161f}, {-0.99452192f,-0.10452849f},
-{1.0000000f,-0.0000000f}, {0.98768836f,-0.15643448f}, {0.95105648f,-0.30901700f},
-{0.89100653f,-0.45399052f}, {0.80901700f,-0.58778524f}, {0.70710677f,-0.70710683f},
-{0.58778524f,-0.80901700f}, {0.45399052f,-0.89100653f}, {0.30901697f,-0.95105654f},
-{0.15643437f,-0.98768836f}, {-4.3711388e-08f,-1.0000000f}, {-0.15643445f,-0.98768836f},
-{-0.30901703f,-0.95105648f}, {-0.45399061f,-0.89100647f}, {-0.58778518f,-0.80901700f},
-{-0.70710677f,-0.70710677f}, {-0.80901700f,-0.58778518f}, {-0.89100659f,-0.45399037f},
-{-0.95105654f,-0.30901679f}, {-0.98768836f,-0.15643445f}, {-1.0000000f,8.7422777e-08f},
-{-0.98768830f,0.15643461f}, {-0.95105654f,0.30901697f}, {-0.89100653f,0.45399055f},
-{-0.80901694f,0.58778536f}, {-0.70710665f,0.70710689f}, {-0.58778507f,0.80901712f},
-{-0.45399022f,0.89100665f}, {-0.30901709f,0.95105648f}, {-0.15643452f,0.98768830f},
-{1.0000000f,-0.0000000f}, {0.99991435f,-0.013089596f}, {0.99965733f,-0.026176950f},
-{0.99922901f,-0.039259817f}, {0.99862951f,-0.052335959f}, {0.99785894f,-0.065403134f},
-{0.99691731f,-0.078459099f}, {0.99580491f,-0.091501623f}, {0.99452192f,-0.10452846f},
-{0.99306846f,-0.11753740f}, {0.99144489f,-0.13052620f}, {0.98965138f,-0.14349262f},
-{0.98768836f,-0.15643448f}, {0.98555607f,-0.16934951f}, {0.98325491f,-0.18223552f},
-{0.98078525f,-0.19509032f}, {0.97814763f,-0.20791170f}, {0.97534233f,-0.22069745f},
-{0.97236991f,-0.23344538f}, {0.96923089f,-0.24615330f}, {0.96592581f,-0.25881904f},
-{0.96245521f,-0.27144045f}, {0.95881975f,-0.28401536f}, {0.95501995f,-0.29654160f},
-{0.95105648f,-0.30901700f}, {0.94693011f,-0.32143945f}, {0.94264150f,-0.33380687f},
-{0.93819129f,-0.34611708f}, {0.93358040f,-0.35836795f}, {0.92880952f,-0.37055743f},
-{0.92387956f,-0.38268346f}, {0.91879117f,-0.39474389f}, {0.91354543f,-0.40673664f},
-{0.90814316f,-0.41865975f}, {0.90258527f,-0.43051112f}, {0.89687270f,-0.44228873f},
-{0.89100653f,-0.45399052f}, {0.88498765f,-0.46561453f}, {0.87881708f,-0.47715878f},
-{0.87249601f,-0.48862126f}, {0.86602545f,-0.50000000f}, {0.85940641f,-0.51129311f},
-{0.85264015f,-0.52249855f}, {0.84572786f,-0.53361452f}, {0.83867055f,-0.54463905f},
-{0.83146960f,-0.55557024f}, {0.82412618f,-0.56640625f}, {0.81664151f,-0.57714522f},
-{0.80901700f,-0.58778524f}, {0.80125380f,-0.59832460f}, {0.79335332f,-0.60876143f},
-{0.78531694f,-0.61909395f}, {0.77714598f,-0.62932038f}, {0.76884180f,-0.63943899f},
-{0.76040596f,-0.64944810f}, {0.75183982f,-0.65934587f}, {0.74314475f,-0.66913062f},
-{0.73432249f,-0.67880076f}, {0.72537434f,-0.68835455f}, {0.71630192f,-0.69779050f},
-{0.70710677f,-0.70710683f}, {0.69779044f,-0.71630198f}, {0.68835455f,-0.72537440f},
-{0.67880070f,-0.73432255f}, {0.66913056f,-0.74314487f}, {0.65934581f,-0.75183982f},
-{0.64944804f,-0.76040596f}, {0.63943899f,-0.76884186f}, {0.62932038f,-0.77714598f},
-{0.61909395f,-0.78531694f}, {0.60876137f,-0.79335338f}, {0.59832460f,-0.80125386f},
-{0.58778524f,-0.80901700f}, {0.57714516f,-0.81664151f}, {0.56640625f,-0.82412618f},
-{0.55557019f,-0.83146960f}, {0.54463899f,-0.83867055f}, {0.53361452f,-0.84572786f},
-{0.52249849f,-0.85264015f}, {0.51129311f,-0.85940641f}, {0.49999997f,-0.86602545f},
-{0.48862118f,-0.87249601f}, {0.47715876f,-0.87881708f}, {0.46561447f,-0.88498765f},
-{0.45399052f,-0.89100653f}, {0.44228867f,-0.89687276f}, {0.43051103f,-0.90258533f},
-{0.41865975f,-0.90814316f}, {0.40673661f,-0.91354549f}, {0.39474380f,-0.91879129f},
-{0.38268343f,-0.92387956f}, {0.37055740f,-0.92880958f}, {0.35836786f,-0.93358046f},
-{0.34611705f,-0.93819135f}, {0.33380681f,-0.94264150f}, {0.32143947f,-0.94693011f},
-{0.30901697f,-0.95105654f}, {0.29654151f,-0.95501995f}, {0.28401533f,-0.95881975f},
-{0.27144039f,-0.96245527f}, {0.25881907f,-0.96592581f}, {0.24615327f,-0.96923089f},
-{0.23344530f,-0.97236991f}, {0.22069745f,-0.97534233f}, {0.20791166f,-0.97814763f},
-{0.19509023f,-0.98078531f}, {0.18223552f,-0.98325491f}, {0.16934945f,-0.98555607f},
-{0.15643437f,-0.98768836f}, {0.14349259f,-0.98965138f}, {0.13052613f,-0.99144489f},
-{0.11753740f,-0.99306846f}, {0.10452842f,-0.99452192f}, {0.091501534f,-0.99580491f},
-{0.078459084f,-0.99691731f}, {0.065403074f,-0.99785894f}, {0.052335974f,-0.99862951f},
-{0.039259788f,-0.99922901f}, {0.026176875f,-0.99965733f}, {0.013089597f,-0.99991435f},
-{1.0000000f,-0.0000000f}, {0.99965733f,-0.026176950f}, {0.99862951f,-0.052335959f},
-{0.99691731f,-0.078459099f}, {0.99452192f,-0.10452846f}, {0.99144489f,-0.13052620f},
-{0.98768836f,-0.15643448f}, {0.98325491f,-0.18223552f}, {0.97814763f,-0.20791170f},
-{0.97236991f,-0.23344538f}, {0.96592581f,-0.25881904f}, {0.95881975f,-0.28401536f},
-{0.95105648f,-0.30901700f}, {0.94264150f,-0.33380687f}, {0.93358040f,-0.35836795f},
-{0.92387956f,-0.38268346f}, {0.91354543f,-0.40673664f}, {0.90258527f,-0.43051112f},
-{0.89100653f,-0.45399052f}, {0.87881708f,-0.47715878f}, {0.86602545f,-0.50000000f},
-{0.85264015f,-0.52249855f}, {0.83867055f,-0.54463905f}, {0.82412618f,-0.56640625f},
-{0.80901700f,-0.58778524f}, {0.79335332f,-0.60876143f}, {0.77714598f,-0.62932038f},
-{0.76040596f,-0.64944810f}, {0.74314475f,-0.66913062f}, {0.72537434f,-0.68835455f},
-{0.70710677f,-0.70710683f}, {0.68835455f,-0.72537440f}, {0.66913056f,-0.74314487f},
-{0.64944804f,-0.76040596f}, {0.62932038f,-0.77714598f}, {0.60876137f,-0.79335338f},
-{0.58778524f,-0.80901700f}, {0.56640625f,-0.82412618f}, {0.54463899f,-0.83867055f},
-{0.52249849f,-0.85264015f}, {0.49999997f,-0.86602545f}, {0.47715876f,-0.87881708f},
-{0.45399052f,-0.89100653f}, {0.43051103f,-0.90258533f}, {0.40673661f,-0.91354549f},
-{0.38268343f,-0.92387956f}, {0.35836786f,-0.93358046f}, {0.33380681f,-0.94264150f},
-{0.30901697f,-0.95105654f}, {0.28401533f,-0.95881975f}, {0.25881907f,-0.96592581f},
-{0.23344530f,-0.97236991f}, {0.20791166f,-0.97814763f}, {0.18223552f,-0.98325491f},
-{0.15643437f,-0.98768836f}, {0.13052613f,-0.99144489f}, {0.10452842f,-0.99452192f},
-{0.078459084f,-0.99691731f}, {0.052335974f,-0.99862951f}, {0.026176875f,-0.99965733f},
-{-4.3711388e-08f,-1.0000000f}, {-0.026176963f,-0.99965733f}, {-0.052336060f,-0.99862951f},
-{-0.078459173f,-0.99691731f}, {-0.10452851f,-0.99452192f}, {-0.13052621f,-0.99144489f},
-{-0.15643445f,-0.98768836f}, {-0.18223560f,-0.98325491f}, {-0.20791174f,-0.97814757f},
-{-0.23344538f,-0.97236991f}, {-0.25881916f,-0.96592581f}, {-0.28401542f,-0.95881969f},
-{-0.30901703f,-0.95105648f}, {-0.33380687f,-0.94264150f}, {-0.35836795f,-0.93358040f},
-{-0.38268352f,-0.92387950f}, {-0.40673670f,-0.91354543f}, {-0.43051112f,-0.90258527f},
-{-0.45399061f,-0.89100647f}, {-0.47715873f,-0.87881708f}, {-0.50000006f,-0.86602533f},
-{-0.52249867f,-0.85264009f}, {-0.54463905f,-0.83867055f}, {-0.56640631f,-0.82412612f},
-{-0.58778518f,-0.80901700f}, {-0.60876143f,-0.79335332f}, {-0.62932050f,-0.77714586f},
-{-0.64944804f,-0.76040596f}, {-0.66913068f,-0.74314475f}, {-0.68835467f,-0.72537428f},
-{-0.70710677f,-0.70710677f}, {-0.72537446f,-0.68835449f}, {-0.74314493f,-0.66913044f},
-{-0.76040596f,-0.64944804f}, {-0.77714604f,-0.62932026f}, {-0.79335332f,-0.60876143f},
-{-0.80901700f,-0.58778518f}, {-0.82412624f,-0.56640613f}, {-0.83867055f,-0.54463899f},
-{-0.85264021f,-0.52249849f}, {-0.86602539f,-0.50000006f}, {-0.87881714f,-0.47715873f},
-{-0.89100659f,-0.45399037f}, {-0.90258527f,-0.43051112f}, {-0.91354549f,-0.40673658f},
-{-0.92387956f,-0.38268328f}, {-0.93358040f,-0.35836792f}, {-0.94264150f,-0.33380675f},
-{-0.95105654f,-0.30901679f}, {-0.95881975f,-0.28401530f}, {-0.96592587f,-0.25881892f},
-{-0.97236991f,-0.23344538f}, {-0.97814763f,-0.20791161f}, {-0.98325491f,-0.18223536f},
-{-0.98768836f,-0.15643445f}, {-0.99144489f,-0.13052608f}, {-0.99452192f,-0.10452849f},
-{-0.99691737f,-0.078459039f}, {-0.99862957f,-0.052335810f}, {-0.99965733f,-0.026176952f},
-{1.0000000f,-0.0000000f}, {0.99922901f,-0.039259817f}, {0.99691731f,-0.078459099f},
-{0.99306846f,-0.11753740f}, {0.98768836f,-0.15643448f}, {0.98078525f,-0.19509032f},
-{0.97236991f,-0.23344538f}, {0.96245521f,-0.27144045f}, {0.95105648f,-0.30901700f},
-{0.93819129f,-0.34611708f}, {0.92387956f,-0.38268346f}, {0.90814316f,-0.41865975f},
-{0.89100653f,-0.45399052f}, {0.87249601f,-0.48862126f}, {0.85264015f,-0.52249855f},
-{0.83146960f,-0.55557024f}, {0.80901700f,-0.58778524f}, {0.78531694f,-0.61909395f},
-{0.76040596f,-0.64944810f}, {0.73432249f,-0.67880076f}, {0.70710677f,-0.70710683f},
-{0.67880070f,-0.73432255f}, {0.64944804f,-0.76040596f}, {0.61909395f,-0.78531694f},
-{0.58778524f,-0.80901700f}, {0.55557019f,-0.83146960f}, {0.52249849f,-0.85264015f},
-{0.48862118f,-0.87249601f}, {0.45399052f,-0.89100653f}, {0.41865975f,-0.90814316f},
-{0.38268343f,-0.92387956f}, {0.34611705f,-0.93819135f}, {0.30901697f,-0.95105654f},
-{0.27144039f,-0.96245527f}, {0.23344530f,-0.97236991f}, {0.19509023f,-0.98078531f},
-{0.15643437f,-0.98768836f}, {0.11753740f,-0.99306846f}, {0.078459084f,-0.99691731f},
-{0.039259788f,-0.99922901f}, {-4.3711388e-08f,-1.0000000f}, {-0.039259877f,-0.99922901f},
-{-0.078459173f,-0.99691731f}, {-0.11753749f,-0.99306846f}, {-0.15643445f,-0.98768836f},
-{-0.19509032f,-0.98078525f}, {-0.23344538f,-0.97236991f}, {-0.27144048f,-0.96245521f},
-{-0.30901703f,-0.95105648f}, {-0.34611711f,-0.93819129f}, {-0.38268352f,-0.92387950f},
-{-0.41865984f,-0.90814310f}, {-0.45399061f,-0.89100647f}, {-0.48862135f,-0.87249595f},
-{-0.52249867f,-0.85264009f}, {-0.55557036f,-0.83146954f}, {-0.58778518f,-0.80901700f},
-{-0.61909389f,-0.78531694f}, {-0.64944804f,-0.76040596f}, {-0.67880076f,-0.73432249f},
-{-0.70710677f,-0.70710677f}, {-0.73432249f,-0.67880070f}, {-0.76040596f,-0.64944804f},
-{-0.78531694f,-0.61909389f}, {-0.80901700f,-0.58778518f}, {-0.83146966f,-0.55557019f},
-{-0.85264021f,-0.52249849f}, {-0.87249607f,-0.48862115f}, {-0.89100659f,-0.45399037f},
-{-0.90814322f,-0.41865960f}, {-0.92387956f,-0.38268328f}, {-0.93819135f,-0.34611690f},
-{-0.95105654f,-0.30901679f}, {-0.96245521f,-0.27144048f}, {-0.97236991f,-0.23344538f},
-{-0.98078531f,-0.19509031f}, {-0.98768836f,-0.15643445f}, {-0.99306846f,-0.11753736f},
-{-0.99691737f,-0.078459039f}, {-0.99922901f,-0.039259743f}, {-1.0000000f,8.7422777e-08f},
-{-0.99922901f,0.039259918f}, {-0.99691731f,0.078459218f}, {-0.99306846f,0.11753753f},
-{-0.98768830f,0.15643461f}, {-0.98078525f,0.19509049f}, {-0.97236985f,0.23344554f},
-{-0.96245515f,0.27144065f}, {-0.95105654f,0.30901697f}, {-0.93819135f,0.34611705f},
-{-0.92387956f,0.38268346f}, {-0.90814316f,0.41865975f}, {-0.89100653f,0.45399055f},
-{-0.87249601f,0.48862129f}, {-0.85264015f,0.52249861f}, {-0.83146960f,0.55557030f},
-{-0.80901694f,0.58778536f}, {-0.78531688f,0.61909401f}, {-0.76040590f,0.64944816f},
-{-0.73432243f,0.67880082f}, {-0.70710665f,0.70710689f}, {-0.67880058f,0.73432261f},
-{-0.64944792f,0.76040608f}, {-0.61909378f,0.78531706f}, {-0.58778507f,0.80901712f},
-{-0.55557001f,0.83146977f}, {-0.52249837f,0.85264033f}, {-0.48862100f,0.87249613f},
-{-0.45399022f,0.89100665f}, {-0.41865945f,0.90814328f}, {-0.38268313f,0.92387968f},
-{-0.34611672f,0.93819147f}, {-0.30901709f,0.95105648f}, {-0.27144054f,0.96245521f},
-{-0.23344545f,0.97236991f}, {-0.19509038f,0.98078525f}, {-0.15643452f,0.98768830f},
-{-0.11753743f,0.99306846f}, {-0.078459114f,0.99691731f}, {-0.039259821f,0.99922901f},
-};
-static const ne10_fft_cpx_float32_t ne10_twiddles_240[240] = {
-{1.0000000f,0.0000000f}, {1.0000000f,-0.0000000f}, {1.0000000f,-0.0000000f},
-{1.0000000f,-0.0000000f}, {0.91354543f,-0.40673664f}, {0.66913056f,-0.74314487f},
-{1.0000000f,-0.0000000f}, {0.66913056f,-0.74314487f}, {-0.10452851f,-0.99452192f},
-{1.0000000f,-0.0000000f}, {0.30901697f,-0.95105654f}, {-0.80901700f,-0.58778518f},
-{1.0000000f,-0.0000000f}, {-0.10452851f,-0.99452192f}, {-0.97814757f,0.20791179f},
-{1.0000000f,-0.0000000f}, {0.99452192f,-0.10452846f}, {0.97814763f,-0.20791170f},
-{0.95105648f,-0.30901700f}, {0.91354543f,-0.40673664f}, {0.86602545f,-0.50000000f},
-{0.80901700f,-0.58778524f}, {0.74314475f,-0.66913062f}, {0.66913056f,-0.74314487f},
-{0.58778524f,-0.80901700f}, {0.49999997f,-0.86602545f}, {0.40673661f,-0.91354549f},
-{0.30901697f,-0.95105654f}, {0.20791166f,-0.97814763f}, {0.10452842f,-0.99452192f},
-{1.0000000f,-0.0000000f}, {0.97814763f,-0.20791170f}, {0.91354543f,-0.40673664f},
-{0.80901700f,-0.58778524f}, {0.66913056f,-0.74314487f}, {0.49999997f,-0.86602545f},
-{0.30901697f,-0.95105654f}, {0.10452842f,-0.99452192f}, {-0.10452851f,-0.99452192f},
-{-0.30901703f,-0.95105648f}, {-0.50000006f,-0.86602533f}, {-0.66913068f,-0.74314475f},
-{-0.80901700f,-0.58778518f}, {-0.91354549f,-0.40673658f}, {-0.97814763f,-0.20791161f},
-{1.0000000f,-0.0000000f}, {0.95105648f,-0.30901700f}, {0.80901700f,-0.58778524f},
-{0.58778524f,-0.80901700f}, {0.30901697f,-0.95105654f}, {-4.3711388e-08f,-1.0000000f},
-{-0.30901703f,-0.95105648f}, {-0.58778518f,-0.80901700f}, {-0.80901700f,-0.58778518f},
-{-0.95105654f,-0.30901679f}, {-1.0000000f,8.7422777e-08f}, {-0.95105654f,0.30901697f},
-{-0.80901694f,0.58778536f}, {-0.58778507f,0.80901712f}, {-0.30901709f,0.95105648f},
-{1.0000000f,-0.0000000f}, {0.99965733f,-0.026176950f}, {0.99862951f,-0.052335959f},
-{0.99691731f,-0.078459099f}, {0.99452192f,-0.10452846f}, {0.99144489f,-0.13052620f},
-{0.98768836f,-0.15643448f}, {0.98325491f,-0.18223552f}, {0.97814763f,-0.20791170f},
-{0.97236991f,-0.23344538f}, {0.96592581f,-0.25881904f}, {0.95881975f,-0.28401536f},
-{0.95105648f,-0.30901700f}, {0.94264150f,-0.33380687f}, {0.93358040f,-0.35836795f},
-{0.92387956f,-0.38268346f}, {0.91354543f,-0.40673664f}, {0.90258527f,-0.43051112f},
-{0.89100653f,-0.45399052f}, {0.87881708f,-0.47715878f}, {0.86602545f,-0.50000000f},
-{0.85264015f,-0.52249855f}, {0.83867055f,-0.54463905f}, {0.82412618f,-0.56640625f},
-{0.80901700f,-0.58778524f}, {0.79335332f,-0.60876143f}, {0.77714598f,-0.62932038f},
-{0.76040596f,-0.64944810f}, {0.74314475f,-0.66913062f}, {0.72537434f,-0.68835455f},
-{0.70710677f,-0.70710683f}, {0.68835455f,-0.72537440f}, {0.66913056f,-0.74314487f},
-{0.64944804f,-0.76040596f}, {0.62932038f,-0.77714598f}, {0.60876137f,-0.79335338f},
-{0.58778524f,-0.80901700f}, {0.56640625f,-0.82412618f}, {0.54463899f,-0.83867055f},
-{0.52249849f,-0.85264015f}, {0.49999997f,-0.86602545f}, {0.47715876f,-0.87881708f},
-{0.45399052f,-0.89100653f}, {0.43051103f,-0.90258533f}, {0.40673661f,-0.91354549f},
-{0.38268343f,-0.92387956f}, {0.35836786f,-0.93358046f}, {0.33380681f,-0.94264150f},
-{0.30901697f,-0.95105654f}, {0.28401533f,-0.95881975f}, {0.25881907f,-0.96592581f},
-{0.23344530f,-0.97236991f}, {0.20791166f,-0.97814763f}, {0.18223552f,-0.98325491f},
-{0.15643437f,-0.98768836f}, {0.13052613f,-0.99144489f}, {0.10452842f,-0.99452192f},
-{0.078459084f,-0.99691731f}, {0.052335974f,-0.99862951f}, {0.026176875f,-0.99965733f},
-{1.0000000f,-0.0000000f}, {0.99862951f,-0.052335959f}, {0.99452192f,-0.10452846f},
-{0.98768836f,-0.15643448f}, {0.97814763f,-0.20791170f}, {0.96592581f,-0.25881904f},
-{0.95105648f,-0.30901700f}, {0.93358040f,-0.35836795f}, {0.91354543f,-0.40673664f},
-{0.89100653f,-0.45399052f}, {0.86602545f,-0.50000000f}, {0.83867055f,-0.54463905f},
-{0.80901700f,-0.58778524f}, {0.77714598f,-0.62932038f}, {0.74314475f,-0.66913062f},
-{0.70710677f,-0.70710683f}, {0.66913056f,-0.74314487f}, {0.62932038f,-0.77714598f},
-{0.58778524f,-0.80901700f}, {0.54463899f,-0.83867055f}, {0.49999997f,-0.86602545f},
-{0.45399052f,-0.89100653f}, {0.40673661f,-0.91354549f}, {0.35836786f,-0.93358046f},
-{0.30901697f,-0.95105654f}, {0.25881907f,-0.96592581f}, {0.20791166f,-0.97814763f},
-{0.15643437f,-0.98768836f}, {0.10452842f,-0.99452192f}, {0.052335974f,-0.99862951f},
-{-4.3711388e-08f,-1.0000000f}, {-0.052336060f,-0.99862951f}, {-0.10452851f,-0.99452192f},
-{-0.15643445f,-0.98768836f}, {-0.20791174f,-0.97814757f}, {-0.25881916f,-0.96592581f},
-{-0.30901703f,-0.95105648f}, {-0.35836795f,-0.93358040f}, {-0.40673670f,-0.91354543f},
-{-0.45399061f,-0.89100647f}, {-0.50000006f,-0.86602533f}, {-0.54463905f,-0.83867055f},
-{-0.58778518f,-0.80901700f}, {-0.62932050f,-0.77714586f}, {-0.66913068f,-0.74314475f},
-{-0.70710677f,-0.70710677f}, {-0.74314493f,-0.66913044f}, {-0.77714604f,-0.62932026f},
-{-0.80901700f,-0.58778518f}, {-0.83867055f,-0.54463899f}, {-0.86602539f,-0.50000006f},
-{-0.89100659f,-0.45399037f}, {-0.91354549f,-0.40673658f}, {-0.93358040f,-0.35836792f},
-{-0.95105654f,-0.30901679f}, {-0.96592587f,-0.25881892f}, {-0.97814763f,-0.20791161f},
-{-0.98768836f,-0.15643445f}, {-0.99452192f,-0.10452849f}, {-0.99862957f,-0.052335810f},
-{1.0000000f,-0.0000000f}, {0.99691731f,-0.078459099f}, {0.98768836f,-0.15643448f},
-{0.97236991f,-0.23344538f}, {0.95105648f,-0.30901700f}, {0.92387956f,-0.38268346f},
-{0.89100653f,-0.45399052f}, {0.85264015f,-0.52249855f}, {0.80901700f,-0.58778524f},
-{0.76040596f,-0.64944810f}, {0.70710677f,-0.70710683f}, {0.64944804f,-0.76040596f},
-{0.58778524f,-0.80901700f}, {0.52249849f,-0.85264015f}, {0.45399052f,-0.89100653f},
-{0.38268343f,-0.92387956f}, {0.30901697f,-0.95105654f}, {0.23344530f,-0.97236991f},
-{0.15643437f,-0.98768836f}, {0.078459084f,-0.99691731f}, {-4.3711388e-08f,-1.0000000f},
-{-0.078459173f,-0.99691731f}, {-0.15643445f,-0.98768836f}, {-0.23344538f,-0.97236991f},
-{-0.30901703f,-0.95105648f}, {-0.38268352f,-0.92387950f}, {-0.45399061f,-0.89100647f},
-{-0.52249867f,-0.85264009f}, {-0.58778518f,-0.80901700f}, {-0.64944804f,-0.76040596f},
-{-0.70710677f,-0.70710677f}, {-0.76040596f,-0.64944804f}, {-0.80901700f,-0.58778518f},
-{-0.85264021f,-0.52249849f}, {-0.89100659f,-0.45399037f}, {-0.92387956f,-0.38268328f},
-{-0.95105654f,-0.30901679f}, {-0.97236991f,-0.23344538f}, {-0.98768836f,-0.15643445f},
-{-0.99691737f,-0.078459039f}, {-1.0000000f,8.7422777e-08f}, {-0.99691731f,0.078459218f},
-{-0.98768830f,0.15643461f}, {-0.97236985f,0.23344554f}, {-0.95105654f,0.30901697f},
-{-0.92387956f,0.38268346f}, {-0.89100653f,0.45399055f}, {-0.85264015f,0.52249861f},
-{-0.80901694f,0.58778536f}, {-0.76040590f,0.64944816f}, {-0.70710665f,0.70710689f},
-{-0.64944792f,0.76040608f}, {-0.58778507f,0.80901712f}, {-0.52249837f,0.85264033f},
-{-0.45399022f,0.89100665f}, {-0.38268313f,0.92387968f}, {-0.30901709f,0.95105648f},
-{-0.23344545f,0.97236991f}, {-0.15643452f,0.98768830f}, {-0.078459114f,0.99691731f},
-};
-static const ne10_fft_cpx_float32_t ne10_twiddles_120[120] = {
-{1.0000000f,0.0000000f}, {1.0000000f,-0.0000000f}, {1.0000000f,-0.0000000f},
-{1.0000000f,-0.0000000f}, {0.91354543f,-0.40673664f}, {0.66913056f,-0.74314487f},
-{1.0000000f,-0.0000000f}, {0.66913056f,-0.74314487f}, {-0.10452851f,-0.99452192f},
-{1.0000000f,-0.0000000f}, {0.30901697f,-0.95105654f}, {-0.80901700f,-0.58778518f},
-{1.0000000f,-0.0000000f}, {-0.10452851f,-0.99452192f}, {-0.97814757f,0.20791179f},
-{1.0000000f,-0.0000000f}, {0.97814763f,-0.20791170f}, {0.91354543f,-0.40673664f},
-{0.80901700f,-0.58778524f}, {0.66913056f,-0.74314487f}, {0.49999997f,-0.86602545f},
-{0.30901697f,-0.95105654f}, {0.10452842f,-0.99452192f}, {-0.10452851f,-0.99452192f},
-{-0.30901703f,-0.95105648f}, {-0.50000006f,-0.86602533f}, {-0.66913068f,-0.74314475f},
-{-0.80901700f,-0.58778518f}, {-0.91354549f,-0.40673658f}, {-0.97814763f,-0.20791161f},
-{1.0000000f,-0.0000000f}, {0.99862951f,-0.052335959f}, {0.99452192f,-0.10452846f},
-{0.98768836f,-0.15643448f}, {0.97814763f,-0.20791170f}, {0.96592581f,-0.25881904f},
-{0.95105648f,-0.30901700f}, {0.93358040f,-0.35836795f}, {0.91354543f,-0.40673664f},
-{0.89100653f,-0.45399052f}, {0.86602545f,-0.50000000f}, {0.83867055f,-0.54463905f},
-{0.80901700f,-0.58778524f}, {0.77714598f,-0.62932038f}, {0.74314475f,-0.66913062f},
-{0.70710677f,-0.70710683f}, {0.66913056f,-0.74314487f}, {0.62932038f,-0.77714598f},
-{0.58778524f,-0.80901700f}, {0.54463899f,-0.83867055f}, {0.49999997f,-0.86602545f},
-{0.45399052f,-0.89100653f}, {0.40673661f,-0.91354549f}, {0.35836786f,-0.93358046f},
-{0.30901697f,-0.95105654f}, {0.25881907f,-0.96592581f}, {0.20791166f,-0.97814763f},
-{0.15643437f,-0.98768836f}, {0.10452842f,-0.99452192f}, {0.052335974f,-0.99862951f},
-{1.0000000f,-0.0000000f}, {0.99452192f,-0.10452846f}, {0.97814763f,-0.20791170f},
-{0.95105648f,-0.30901700f}, {0.91354543f,-0.40673664f}, {0.86602545f,-0.50000000f},
-{0.80901700f,-0.58778524f}, {0.74314475f,-0.66913062f}, {0.66913056f,-0.74314487f},
-{0.58778524f,-0.80901700f}, {0.49999997f,-0.86602545f}, {0.40673661f,-0.91354549f},
-{0.30901697f,-0.95105654f}, {0.20791166f,-0.97814763f}, {0.10452842f,-0.99452192f},
-{-4.3711388e-08f,-1.0000000f}, {-0.10452851f,-0.99452192f}, {-0.20791174f,-0.97814757f},
-{-0.30901703f,-0.95105648f}, {-0.40673670f,-0.91354543f}, {-0.50000006f,-0.86602533f},
-{-0.58778518f,-0.80901700f}, {-0.66913068f,-0.74314475f}, {-0.74314493f,-0.66913044f},
-{-0.80901700f,-0.58778518f}, {-0.86602539f,-0.50000006f}, {-0.91354549f,-0.40673658f},
-{-0.95105654f,-0.30901679f}, {-0.97814763f,-0.20791161f}, {-0.99452192f,-0.10452849f},
-{1.0000000f,-0.0000000f}, {0.98768836f,-0.15643448f}, {0.95105648f,-0.30901700f},
-{0.89100653f,-0.45399052f}, {0.80901700f,-0.58778524f}, {0.70710677f,-0.70710683f},
-{0.58778524f,-0.80901700f}, {0.45399052f,-0.89100653f}, {0.30901697f,-0.95105654f},
-{0.15643437f,-0.98768836f}, {-4.3711388e-08f,-1.0000000f}, {-0.15643445f,-0.98768836f},
-{-0.30901703f,-0.95105648f}, {-0.45399061f,-0.89100647f}, {-0.58778518f,-0.80901700f},
-{-0.70710677f,-0.70710677f}, {-0.80901700f,-0.58778518f}, {-0.89100659f,-0.45399037f},
-{-0.95105654f,-0.30901679f}, {-0.98768836f,-0.15643445f}, {-1.0000000f,8.7422777e-08f},
-{-0.98768830f,0.15643461f}, {-0.95105654f,0.30901697f}, {-0.89100653f,0.45399055f},
-{-0.80901694f,0.58778536f}, {-0.70710665f,0.70710689f}, {-0.58778507f,0.80901712f},
-{-0.45399022f,0.89100665f}, {-0.30901709f,0.95105648f}, {-0.15643452f,0.98768830f},
-};
-static const ne10_fft_cpx_float32_t ne10_twiddles_60[60] = {
-{1.0000000f,0.0000000f}, {1.0000000f,-0.0000000f}, {1.0000000f,-0.0000000f},
-{1.0000000f,-0.0000000f}, {0.91354543f,-0.40673664f}, {0.66913056f,-0.74314487f},
-{1.0000000f,-0.0000000f}, {0.66913056f,-0.74314487f}, {-0.10452851f,-0.99452192f},
-{1.0000000f,-0.0000000f}, {0.30901697f,-0.95105654f}, {-0.80901700f,-0.58778518f},
-{1.0000000f,-0.0000000f}, {-0.10452851f,-0.99452192f}, {-0.97814757f,0.20791179f},
-{1.0000000f,-0.0000000f}, {0.99452192f,-0.10452846f}, {0.97814763f,-0.20791170f},
-{0.95105648f,-0.30901700f}, {0.91354543f,-0.40673664f}, {0.86602545f,-0.50000000f},
-{0.80901700f,-0.58778524f}, {0.74314475f,-0.66913062f}, {0.66913056f,-0.74314487f},
-{0.58778524f,-0.80901700f}, {0.49999997f,-0.86602545f}, {0.40673661f,-0.91354549f},
-{0.30901697f,-0.95105654f}, {0.20791166f,-0.97814763f}, {0.10452842f,-0.99452192f},
-{1.0000000f,-0.0000000f}, {0.97814763f,-0.20791170f}, {0.91354543f,-0.40673664f},
-{0.80901700f,-0.58778524f}, {0.66913056f,-0.74314487f}, {0.49999997f,-0.86602545f},
-{0.30901697f,-0.95105654f}, {0.10452842f,-0.99452192f}, {-0.10452851f,-0.99452192f},
-{-0.30901703f,-0.95105648f}, {-0.50000006f,-0.86602533f}, {-0.66913068f,-0.74314475f},
-{-0.80901700f,-0.58778518f}, {-0.91354549f,-0.40673658f}, {-0.97814763f,-0.20791161f},
-{1.0000000f,-0.0000000f}, {0.95105648f,-0.30901700f}, {0.80901700f,-0.58778524f},
-{0.58778524f,-0.80901700f}, {0.30901697f,-0.95105654f}, {-4.3711388e-08f,-1.0000000f},
-{-0.30901703f,-0.95105648f}, {-0.58778518f,-0.80901700f}, {-0.80901700f,-0.58778518f},
-{-0.95105654f,-0.30901679f}, {-1.0000000f,8.7422777e-08f}, {-0.95105654f,0.30901697f},
-{-0.80901694f,0.58778536f}, {-0.58778507f,0.80901712f}, {-0.30901709f,0.95105648f},
-};
-static const ne10_fft_state_float32_t ne10_fft_state_float32_t_480 = {
-120,
-(ne10_int32_t *)ne10_factors_480,
-(ne10_fft_cpx_float32_t *)ne10_twiddles_480,
-NULL,
-(ne10_fft_cpx_float32_t *)&ne10_twiddles_480[120],
-/* is_forward_scaled = true */
-(ne10_int32_t) 1,
-/* is_backward_scaled = false */
-(ne10_int32_t) 0,
-};
-static const arch_fft_state cfg_arch_480 = {
-1,
-(void *)&ne10_fft_state_float32_t_480,
-};
-
-static const ne10_fft_state_float32_t ne10_fft_state_float32_t_240 = {
-60,
-(ne10_int32_t *)ne10_factors_240,
-(ne10_fft_cpx_float32_t *)ne10_twiddles_240,
-NULL,
-(ne10_fft_cpx_float32_t *)&ne10_twiddles_240[60],
-/* is_forward_scaled = true */
-(ne10_int32_t) 1,
-/* is_backward_scaled = false */
-(ne10_int32_t) 0,
-};
-static const arch_fft_state cfg_arch_240 = {
-1,
-(void *)&ne10_fft_state_float32_t_240,
-};
-
-static const ne10_fft_state_float32_t ne10_fft_state_float32_t_120 = {
-30,
-(ne10_int32_t *)ne10_factors_120,
-(ne10_fft_cpx_float32_t *)ne10_twiddles_120,
-NULL,
-(ne10_fft_cpx_float32_t *)&ne10_twiddles_120[30],
-/* is_forward_scaled = true */
-(ne10_int32_t) 1,
-/* is_backward_scaled = false */
-(ne10_int32_t) 0,
-};
-static const arch_fft_state cfg_arch_120 = {
-1,
-(void *)&ne10_fft_state_float32_t_120,
-};
-
-static const ne10_fft_state_float32_t ne10_fft_state_float32_t_60 = {
-15,
-(ne10_int32_t *)ne10_factors_60,
-(ne10_fft_cpx_float32_t *)ne10_twiddles_60,
-NULL,
-(ne10_fft_cpx_float32_t *)&ne10_twiddles_60[15],
-/* is_forward_scaled = true */
-(ne10_int32_t) 1,
-/* is_backward_scaled = false */
-(ne10_int32_t) 0,
-};
-static const arch_fft_state cfg_arch_60 = {
-1,
-(void *)&ne10_fft_state_float32_t_60,
-};
-
-#endif /* end NE10_FFT_PARAMS48000_960 */
diff --git a/drivers/opus/celt/vq.c b/drivers/opus/celt/vq.c
deleted file mode 100644
index 3061e3006f..0000000000
--- a/drivers/opus/celt/vq.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/mathops.h"
-#include "opus/celt/cwrs.h"
-#include "opus/celt/vq.h"
-#include "opus/celt/arch.h"
-#include "opus/celt/os_support.h"
-#include "opus/celt/bands.h"
-#include "opus/celt/rate.h"
-#include "opus/celt/pitch.h"
-
-#ifndef OVERRIDE_vq_exp_rotation1
-static void exp_rotation1(celt_norm *X, int len, int stride, opus_val16 c, opus_val16 s)
-{
- int i;
- opus_val16 ms;
- celt_norm *Xptr;
- Xptr = X;
- ms = NEG16(s);
- for (i=0;i<len-stride;i++)
- {
- celt_norm x1, x2;
- x1 = Xptr[0];
- x2 = Xptr[stride];
- Xptr[stride] = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x2), s, x1), 15));
- *Xptr++ = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x1), ms, x2), 15));
- }
- Xptr = &X[len-2*stride-1];
- for (i=len-2*stride-1;i>=0;i--)
- {
- celt_norm x1, x2;
- x1 = Xptr[0];
- x2 = Xptr[stride];
- Xptr[stride] = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x2), s, x1), 15));
- *Xptr-- = EXTRACT16(PSHR32(MAC16_16(MULT16_16(c, x1), ms, x2), 15));
- }
-}
-#endif /* OVERRIDE_vq_exp_rotation1 */
-
-static void exp_rotation(celt_norm *X, int len, int dir, int stride, int K, int spread)
-{
- static const int SPREAD_FACTOR[3]={15,10,5};
- int i;
- opus_val16 c, s;
- opus_val16 gain, theta;
- int stride2=0;
- int factor;
-
- if (2*K>=len || spread==SPREAD_NONE)
- return;
- factor = SPREAD_FACTOR[spread-1];
-
- gain = celt_div((opus_val32)MULT16_16(Q15_ONE,len),(opus_val32)(len+factor*K));
- theta = HALF16(MULT16_16_Q15(gain,gain));
-
- c = celt_cos_norm(EXTEND32(theta));
- s = celt_cos_norm(EXTEND32(SUB16(Q15ONE,theta))); /* sin(theta) */
-
- if (len>=8*stride)
- {
- stride2 = 1;
- /* This is just a simple (equivalent) way of computing sqrt(len/stride) with rounding.
- It's basically incrementing long as (stride2+0.5)^2 < len/stride. */
- while ((stride2*stride2+stride2)*stride + (stride>>2) < len)
- stride2++;
- }
- /*NOTE: As a minor optimization, we could be passing around log2(B), not B, for both this and for
- extract_collapse_mask().*/
- len = celt_udiv(len, stride);
- for (i=0;i<stride;i++)
- {
- if (dir < 0)
- {
- if (stride2)
- exp_rotation1(X+i*len, len, stride2, s, c);
- exp_rotation1(X+i*len, len, 1, c, s);
- } else {
- exp_rotation1(X+i*len, len, 1, c, -s);
- if (stride2)
- exp_rotation1(X+i*len, len, stride2, s, -c);
- }
- }
-}
-
-/** Takes the pitch vector and the decoded residual vector, computes the gain
- that will give ||p+g*y||=1 and mixes the residual with the pitch. */
-static void normalise_residual(int * OPUS_RESTRICT iy, celt_norm * OPUS_RESTRICT X,
- int N, opus_val32 Ryy, opus_val16 gain)
-{
- int i;
-#ifdef OPUS_FIXED_POINT
- int k;
-#endif
- opus_val32 t;
- opus_val16 g;
-
-#ifdef OPUS_FIXED_POINT
- k = celt_ilog2(Ryy)>>1;
-#endif
- t = VSHR32(Ryy, 2*(k-7));
- g = MULT16_16_P15(celt_rsqrt_norm(t),gain);
-
- i=0;
- do
- X[i] = EXTRACT16(PSHR32(MULT16_16(g, iy[i]), k+1));
- while (++i < N);
-}
-
-static unsigned extract_collapse_mask(int *iy, int N, int B)
-{
- unsigned collapse_mask;
- int N0;
- int i;
- if (B<=1)
- return 1;
- /*NOTE: As a minor optimization, we could be passing around log2(B), not B, for both this and for
- exp_rotation().*/
- N0 = celt_udiv(N, B);
- collapse_mask = 0;
- i=0; do {
- int j;
- unsigned tmp=0;
- j=0; do {
- tmp |= iy[i*N0+j];
- } while (++j<N0);
- collapse_mask |= (tmp!=0)<<i;
- } while (++i<B);
- return collapse_mask;
-}
-
-unsigned alg_quant(celt_norm *X, int N, int K, int spread, int B, ec_enc *enc
-#ifdef RESYNTH
- , opus_val16 gain
-#endif
- )
-{
- VARDECL(celt_norm, y);
- VARDECL(int, iy);
- VARDECL(opus_val16, signx);
- int i, j;
- opus_val16 s;
- int pulsesLeft;
- opus_val32 sum;
- opus_val32 xy;
- opus_val16 yy;
- unsigned collapse_mask;
- SAVE_STACK;
-
- celt_assert2(K>0, "alg_quant() needs at least one pulse");
- celt_assert2(N>1, "alg_quant() needs at least two dimensions");
-
- ALLOC(y, N, celt_norm);
- ALLOC(iy, N, int);
- ALLOC(signx, N, opus_val16);
-
- exp_rotation(X, N, 1, B, K, spread);
-
- /* Get rid of the sign */
- sum = 0;
- j=0; do {
- if (X[j]>0)
- signx[j]=1;
- else {
- signx[j]=-1;
- X[j]=-X[j];
- }
- iy[j] = 0;
- y[j] = 0;
- } while (++j<N);
-
- xy = yy = 0;
-
- pulsesLeft = K;
-
- /* Do a pre-search by projecting on the pyramid */
- if (K > (N>>1))
- {
- opus_val16 rcp;
- j=0; do {
- sum += X[j];
- } while (++j<N);
-
- /* If X is too small, just replace it with a pulse at 0 */
-#ifdef OPUS_FIXED_POINT
- if (sum <= K)
-#else
- /* Prevents infinities and NaNs from causing too many pulses
- to be allocated. 64 is an approximation of infinity here. */
- if (!(sum > EPSILON && sum < 64))
-#endif
- {
- X[0] = QCONST16(1.f,14);
- j=1; do
- X[j]=0;
- while (++j<N);
- sum = QCONST16(1.f,14);
- }
- rcp = EXTRACT16(MULT16_32_Q16(K-1, celt_rcp(sum)));
- j=0; do {
-#ifdef OPUS_FIXED_POINT
- /* It's really important to round *towards zero* here */
- iy[j] = MULT16_16_Q15(X[j],rcp);
-#else
- iy[j] = (int)floor(rcp*X[j]);
-#endif
- y[j] = (celt_norm)iy[j];
- yy = MAC16_16(yy, y[j],y[j]);
- xy = MAC16_16(xy, X[j],y[j]);
- y[j] *= 2;
- pulsesLeft -= iy[j];
- } while (++j<N);
- }
- celt_assert2(pulsesLeft>=1, "Allocated too many pulses in the quick pass");
-
- /* This should never happen, but just in case it does (e.g. on silence)
- we fill the first bin with pulses. */
-#ifdef OPUS_FIXED_POINT_DEBUG
- celt_assert2(pulsesLeft<=N+3, "Not enough pulses in the quick pass");
-#endif
- if (pulsesLeft > N+3)
- {
- opus_val16 tmp = (opus_val16)pulsesLeft;
- yy = MAC16_16(yy, tmp, tmp);
- yy = MAC16_16(yy, tmp, y[0]);
- iy[0] += pulsesLeft;
- pulsesLeft=0;
- }
-
- s = 1;
- for (i=0;i<pulsesLeft;i++)
- {
- int best_id;
- opus_val32 best_num = -VERY_LARGE16;
- opus_val16 best_den = 0;
-#ifdef OPUS_FIXED_POINT
- int rshift;
-#endif
-#ifdef OPUS_FIXED_POINT
- rshift = 1+celt_ilog2(K-pulsesLeft+i+1);
-#endif
- best_id = 0;
- /* The squared magnitude term gets added anyway, so we might as well
- add it outside the loop */
- yy = ADD32(yy, 1);
- j=0;
- do {
- opus_val16 Rxy, Ryy;
- /* Temporary sums of the new pulse(s) */
- Rxy = EXTRACT16(SHR32(ADD32(xy, EXTEND32(X[j])),rshift));
- /* We're multiplying y[j] by two so we don't have to do it here */
- Ryy = ADD16(yy, y[j]);
-
- /* Approximate score: we maximise Rxy/sqrt(Ryy) (we're guaranteed that
- Rxy is positive because the sign is pre-computed) */
- Rxy = MULT16_16_Q15(Rxy,Rxy);
- /* The idea is to check for num/den >= best_num/best_den, but that way
- we can do it without any division */
- /* OPT: Make sure to use conditional moves here */
- if (MULT16_16(best_den, Rxy) > MULT16_16(Ryy, best_num))
- {
- best_den = Ryy;
- best_num = Rxy;
- best_id = j;
- }
- } while (++j<N);
-
- /* Updating the sums of the new pulse(s) */
- xy = ADD32(xy, EXTEND32(X[best_id]));
- /* We're multiplying y[j] by two so we don't have to do it here */
- yy = ADD16(yy, y[best_id]);
-
- /* Only now that we've made the final choice, update y/iy */
- /* Multiplying y[j] by 2 so we don't have to do it everywhere else */
- y[best_id] += 2*s;
- iy[best_id]++;
- }
-
- /* Put the original sign back */
- j=0;
- do {
- X[j] = MULT16_16(signx[j],X[j]);
- if (signx[j] < 0)
- iy[j] = -iy[j];
- } while (++j<N);
- encode_pulses(iy, N, K, enc);
-
-#ifdef RESYNTH
- normalise_residual(iy, X, N, yy, gain);
- exp_rotation(X, N, -1, B, K, spread);
-#endif
-
- collapse_mask = extract_collapse_mask(iy, N, B);
- RESTORE_STACK;
- return collapse_mask;
-}
-
-/** Decode pulse vector and combine the result with the pitch vector to produce
- the final normalised signal in the current band. */
-unsigned alg_unquant(celt_norm *X, int N, int K, int spread, int B,
- ec_dec *dec, opus_val16 gain)
-{
- opus_val32 Ryy;
- unsigned collapse_mask;
- VARDECL(int, iy);
- SAVE_STACK;
-
- celt_assert2(K>0, "alg_unquant() needs at least one pulse");
- celt_assert2(N>1, "alg_unquant() needs at least two dimensions");
- ALLOC(iy, N, int);
- Ryy = decode_pulses(iy, N, K, dec);
- normalise_residual(iy, X, N, Ryy, gain);
- exp_rotation(X, N, -1, B, K, spread);
- collapse_mask = extract_collapse_mask(iy, N, B);
- RESTORE_STACK;
- return collapse_mask;
-}
-
-#ifndef OVERRIDE_renormalise_vector
-void renormalise_vector(celt_norm *X, int N, opus_val16 gain, int arch)
-{
- int i;
-#ifdef OPUS_FIXED_POINT
- int k;
-#endif
- opus_val32 E;
- opus_val16 g;
- opus_val32 t;
- celt_norm *xptr;
- E = EPSILON + celt_inner_prod(X, X, N, arch);
-#ifdef OPUS_FIXED_POINT
- k = celt_ilog2(E)>>1;
-#endif
- t = VSHR32(E, 2*(k-7));
- g = MULT16_16_P15(celt_rsqrt_norm(t),gain);
-
- xptr = X;
- for (i=0;i<N;i++)
- {
- *xptr = EXTRACT16(PSHR32(MULT16_16(g, *xptr), k+1));
- xptr++;
- }
- /*return celt_sqrt(E);*/
-}
-#endif /* OVERRIDE_renormalise_vector */
-
-int stereo_itheta(const celt_norm *X, const celt_norm *Y, int stereo, int N, int arch)
-{
- int i;
- int itheta;
- opus_val16 mid, side;
- opus_val32 Emid, Eside;
-
- Emid = Eside = EPSILON;
- if (stereo)
- {
- for (i=0;i<N;i++)
- {
- celt_norm m, s;
- m = ADD16(SHR16(X[i],1),SHR16(Y[i],1));
- s = SUB16(SHR16(X[i],1),SHR16(Y[i],1));
- Emid = MAC16_16(Emid, m, m);
- Eside = MAC16_16(Eside, s, s);
- }
- } else {
- Emid += celt_inner_prod(X, X, N, arch);
- Eside += celt_inner_prod(Y, Y, N, arch);
- }
- mid = celt_sqrt(Emid);
- side = celt_sqrt(Eside);
-#ifdef OPUS_FIXED_POINT
- /* 0.63662 = 2/pi */
- itheta = MULT16_16_Q15(QCONST16(0.63662f,15),celt_atan2p(side, mid));
-#else
- itheta = (int)floor(.5f+16384*0.63662f*atan2(side,mid));
-#endif
-
- return itheta;
-}
diff --git a/drivers/opus/celt/vq.h b/drivers/opus/celt/vq.h
deleted file mode 100644
index 10b5e55306..0000000000
--- a/drivers/opus/celt/vq.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/**
- @file vq.h
- @brief Vector quantisation of the residual
- */
-/*
- 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.
-
- 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 VQ_H
-#define VQ_H
-
-#include "opus/celt/entenc.h"
-#include "opus/celt/entdec.h"
-#include "opus/celt/modes.h"
-
-#if defined(MIPSr1_ASM)
-#include "opus/celt/mips/vq_mipsr1.h"
-#endif
-
-
-/** Algebraic pulse-vector quantiser. The signal x is replaced by the sum of
- * the pitch and a combination of pulses such that its norm is still equal
- * to 1. This is the function that will typically require the most CPU.
- * @param X Residual signal to quantise/encode (returns quantised version)
- * @param N Number of samples to encode
- * @param K Number of pulses to use
- * @param enc Entropy encoder state
- * @ret A mask indicating which blocks in the band received pulses
-*/
-unsigned alg_quant(celt_norm *X, int N, int K, int spread, int B,
- ec_enc *enc
-#ifdef RESYNTH
- , opus_val16 gain
-#endif
- );
-
-/** Algebraic pulse decoder
- * @param X Decoded normalised spectrum (returned)
- * @param N Number of samples to decode
- * @param K Number of pulses to use
- * @param dec Entropy decoder state
- * @ret A mask indicating which blocks in the band received pulses
- */
-unsigned alg_unquant(celt_norm *X, int N, int K, int spread, int B,
- ec_dec *dec, opus_val16 gain);
-
-void renormalise_vector(celt_norm *X, int N, opus_val16 gain, int arch);
-
-int stereo_itheta(const celt_norm *X, const celt_norm *Y, int stereo, int N, int arch);
-
-#endif /* VQ_H */
diff --git a/drivers/opus/celt/x86/celt_lpc_sse.c b/drivers/opus/celt/x86/celt_lpc_sse.c
deleted file mode 100644
index cfc86dc66c..0000000000
--- a/drivers/opus/celt/x86/celt_lpc_sse.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-#include <smmintrin.h>
-#include "opus/celt/celt_lpc.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/pitch.h"
-#include "opus/celt/x86/x86cpu.h"
-
-#if defined(FIXED_POINT)
-
-void celt_fir_sse4_1(const opus_val16 *_x,
- const opus_val16 *num,
- opus_val16 *_y,
- int N,
- int ord,
- opus_val16 *mem,
- int arch)
-{
- int i,j;
- VARDECL(opus_val16, rnum);
- VARDECL(opus_val16, x);
-
- __m128i vecNoA;
- opus_int32 noA ;
- SAVE_STACK;
-
- ALLOC(rnum, ord, opus_val16);
- ALLOC(x, N+ord, opus_val16);
- for(i=0;i<ord;i++)
- rnum[i] = num[ord-i-1];
- for(i=0;i<ord;i++)
- x[i] = mem[ord-i-1];
-
- for (i=0;i<N-7;i+=8)
- {
- x[i+ord ]=_x[i ];
- x[i+ord+1]=_x[i+1];
- x[i+ord+2]=_x[i+2];
- x[i+ord+3]=_x[i+3];
- x[i+ord+4]=_x[i+4];
- x[i+ord+5]=_x[i+5];
- x[i+ord+6]=_x[i+6];
- x[i+ord+7]=_x[i+7];
- }
-
- for (;i<N-3;i+=4)
- {
- x[i+ord ]=_x[i ];
- x[i+ord+1]=_x[i+1];
- x[i+ord+2]=_x[i+2];
- x[i+ord+3]=_x[i+3];
- }
-
- for (;i<N;i++)
- x[i+ord]=_x[i];
-
- for(i=0;i<ord;i++)
- mem[i] = _x[N-i-1];
-#ifdef SMALL_FOOTPRINT
- for (i=0;i<N;i++)
- {
- opus_val32 sum = SHL32(EXTEND32(_x[i]), SIG_SHIFT);
- for (j=0;j<ord;j++)
- {
- sum = MAC16_16(sum,rnum[j],x[i+j]);
- }
- _y[i] = SATURATE16(PSHR32(sum, SIG_SHIFT));
- }
-#else
- noA = EXTEND32(1) << SIG_SHIFT >> 1;
- vecNoA = _mm_set_epi32(noA, noA, noA, noA);
-
- for (i=0;i<N-3;i+=4)
- {
- opus_val32 sums[4] = {0};
- __m128i vecSum, vecX;
-
- xcorr_kernel(rnum, x+i, sums, ord, arch);
-
- vecSum = _mm_loadu_si128((__m128i *)sums);
- vecSum = _mm_add_epi32(vecSum, vecNoA);
- vecSum = _mm_srai_epi32(vecSum, SIG_SHIFT);
- vecX = OP_CVTEPI16_EPI32_M64(_x + i);
- vecSum = _mm_add_epi32(vecSum, vecX);
- vecSum = _mm_packs_epi32(vecSum, vecSum);
- _mm_storel_epi64((__m128i *)(_y + i), vecSum);
- }
- for (;i<N;i++)
- {
- opus_val32 sum = 0;
- for (j=0;j<ord;j++)
- sum = MAC16_16(sum, rnum[j], x[i + j]);
- _y[i] = SATURATE16(ADD32(EXTEND32(_x[i]), PSHR32(sum, SIG_SHIFT)));
- }
-
-#endif
- RESTORE_STACK;
-}
-
-#endif
diff --git a/drivers/opus/celt/x86/celt_lpc_sse.h b/drivers/opus/celt/x86/celt_lpc_sse.h
deleted file mode 100644
index 3787afd3ff..0000000000
--- a/drivers/opus/celt/x86/celt_lpc_sse.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 CELT_LPC_SSE_H
-#define CELT_LPC_SSE_H
-#include "opus/opus_config.h"
-
-#if defined(OPUS_X86_MAY_HAVE_SSE4_1) && defined(FIXED_POINT)
-#define OVERRIDE_CELT_FIR
-
-void celt_fir_sse4_1(
- const opus_val16 *x,
- const opus_val16 *num,
- opus_val16 *y,
- int N,
- int ord,
- opus_val16 *mem,
- int arch);
-
-#if defined(OPUS_X86_PRESUME_SSE4_1)
-#define celt_fir(x, num, y, N, ord, mem, arch) \
- ((void)arch, celt_fir_sse4_1(x, num, y, N, ord, mem, arch))
-
-#else
-
-extern void (*const CELT_FIR_IMPL[OPUS_ARCHMASK + 1])(
- const opus_val16 *x,
- const opus_val16 *num,
- opus_val16 *y,
- int N,
- int ord,
- opus_val16 *mem,
- int arch);
-
-# define celt_fir(x, num, y, N, ord, mem, arch) \
- ((*CELT_FIR_IMPL[(arch) & OPUS_ARCHMASK])(x, num, y, N, ord, mem, arch))
-
-#endif
-#endif
-
-#endif
diff --git a/drivers/opus/celt/x86/pitch_sse.c b/drivers/opus/celt/x86/pitch_sse.c
deleted file mode 100644
index 9f22ffd9ab..0000000000
--- a/drivers/opus/celt/x86/pitch_sse.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/silk/macros.h"
-#include "opus/celt/celt_lpc.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/pitch.h"
-
-#if defined(OPUS_X86_MAY_HAVE_SSE) && !defined(FIXED_POINT)
-
-#include <xmmintrin.h>
-#include "opus/celt/arch.h"
-
-void xcorr_kernel_sse(const opus_val16 *x, const opus_val16 *y, opus_val32 sum[4], int len)
-{
- int j;
- __m128 xsum1, xsum2;
- xsum1 = _mm_loadu_ps(sum);
- xsum2 = _mm_setzero_ps();
-
- for (j = 0; j < len-3; j += 4)
- {
- __m128 x0 = _mm_loadu_ps(x+j);
- __m128 yj = _mm_loadu_ps(y+j);
- __m128 y3 = _mm_loadu_ps(y+j+3);
-
- xsum1 = _mm_add_ps(xsum1,_mm_mul_ps(_mm_shuffle_ps(x0,x0,0x00),yj));
- xsum2 = _mm_add_ps(xsum2,_mm_mul_ps(_mm_shuffle_ps(x0,x0,0x55),
- _mm_shuffle_ps(yj,y3,0x49)));
- xsum1 = _mm_add_ps(xsum1,_mm_mul_ps(_mm_shuffle_ps(x0,x0,0xaa),
- _mm_shuffle_ps(yj,y3,0x9e)));
- xsum2 = _mm_add_ps(xsum2,_mm_mul_ps(_mm_shuffle_ps(x0,x0,0xff),y3));
- }
- if (j < len)
- {
- xsum1 = _mm_add_ps(xsum1,_mm_mul_ps(_mm_load1_ps(x+j),_mm_loadu_ps(y+j)));
- if (++j < len)
- {
- xsum2 = _mm_add_ps(xsum2,_mm_mul_ps(_mm_load1_ps(x+j),_mm_loadu_ps(y+j)));
- if (++j < len)
- {
- xsum1 = _mm_add_ps(xsum1,_mm_mul_ps(_mm_load1_ps(x+j),_mm_loadu_ps(y+j)));
- }
- }
- }
- _mm_storeu_ps(sum,_mm_add_ps(xsum1,xsum2));
-}
-
-
-void dual_inner_prod_sse(const opus_val16 *x, const opus_val16 *y01, const opus_val16 *y02,
- int N, opus_val32 *xy1, opus_val32 *xy2)
-{
- int i;
- __m128 xsum1, xsum2;
- xsum1 = _mm_setzero_ps();
- xsum2 = _mm_setzero_ps();
- for (i=0;i<N-3;i+=4)
- {
- __m128 xi = _mm_loadu_ps(x+i);
- __m128 y1i = _mm_loadu_ps(y01+i);
- __m128 y2i = _mm_loadu_ps(y02+i);
- xsum1 = _mm_add_ps(xsum1,_mm_mul_ps(xi, y1i));
- xsum2 = _mm_add_ps(xsum2,_mm_mul_ps(xi, y2i));
- }
- /* Horizontal sum */
- xsum1 = _mm_add_ps(xsum1, _mm_movehl_ps(xsum1, xsum1));
- xsum1 = _mm_add_ss(xsum1, _mm_shuffle_ps(xsum1, xsum1, 0x55));
- _mm_store_ss(xy1, xsum1);
- xsum2 = _mm_add_ps(xsum2, _mm_movehl_ps(xsum2, xsum2));
- xsum2 = _mm_add_ss(xsum2, _mm_shuffle_ps(xsum2, xsum2, 0x55));
- _mm_store_ss(xy2, xsum2);
- for (;i<N;i++)
- {
- *xy1 = MAC16_16(*xy1, x[i], y01[i]);
- *xy2 = MAC16_16(*xy2, x[i], y02[i]);
- }
-}
-
-opus_val32 celt_inner_prod_sse(const opus_val16 *x, const opus_val16 *y,
- int N)
-{
- int i;
- float xy;
- __m128 sum;
- sum = _mm_setzero_ps();
- /* FIXME: We should probably go 8-way and use 2 sums. */
- for (i=0;i<N-3;i+=4)
- {
- __m128 xi = _mm_loadu_ps(x+i);
- __m128 yi = _mm_loadu_ps(y+i);
- sum = _mm_add_ps(sum,_mm_mul_ps(xi, yi));
- }
- /* Horizontal sum */
- sum = _mm_add_ps(sum, _mm_movehl_ps(sum, sum));
- sum = _mm_add_ss(sum, _mm_shuffle_ps(sum, sum, 0x55));
- _mm_store_ss(&xy, sum);
- for (;i<N;i++)
- {
- xy = MAC16_16(xy, x[i], y[i]);
- }
- return xy;
-}
-
-void comb_filter_const_sse(opus_val32 *y, opus_val32 *x, int T, int N,
- opus_val16 g10, opus_val16 g11, opus_val16 g12)
-{
- int i;
- __m128 x0v;
- __m128 g10v, g11v, g12v;
- g10v = _mm_load1_ps(&g10);
- g11v = _mm_load1_ps(&g11);
- g12v = _mm_load1_ps(&g12);
- x0v = _mm_loadu_ps(&x[-T-2]);
- for (i=0;i<N-3;i+=4)
- {
- __m128 yi, yi2, x1v, x2v, x3v, x4v;
- const opus_val32 *xp = &x[i-T-2];
- yi = _mm_loadu_ps(x+i);
- x4v = _mm_loadu_ps(xp+4);
-#if 0
- /* Slower version with all loads */
- x1v = _mm_loadu_ps(xp+1);
- x2v = _mm_loadu_ps(xp+2);
- x3v = _mm_loadu_ps(xp+3);
-#else
- x2v = _mm_shuffle_ps(x0v, x4v, 0x4e);
- x1v = _mm_shuffle_ps(x0v, x2v, 0x99);
- x3v = _mm_shuffle_ps(x2v, x4v, 0x99);
-#endif
-
- yi = _mm_add_ps(yi, _mm_mul_ps(g10v,x2v));
-#if 0 /* Set to 1 to make it bit-exact with the non-SSE version */
- yi = _mm_add_ps(yi, _mm_mul_ps(g11v,_mm_add_ps(x3v,x1v)));
- yi = _mm_add_ps(yi, _mm_mul_ps(g12v,_mm_add_ps(x4v,x0v)));
-#else
- /* Use partial sums */
- yi2 = _mm_add_ps(_mm_mul_ps(g11v,_mm_add_ps(x3v,x1v)),
- _mm_mul_ps(g12v,_mm_add_ps(x4v,x0v)));
- yi = _mm_add_ps(yi, yi2);
-#endif
- x0v=x4v;
- _mm_storeu_ps(y+i, yi);
- }
-#ifdef CUSTOM_MODES
- for (;i<N;i++)
- {
- y[i] = x[i]
- + MULT16_32_Q15(g10,x[i-T])
- + MULT16_32_Q15(g11,ADD32(x[i-T+1],x[i-T-1]))
- + MULT16_32_Q15(g12,ADD32(x[i-T+2],x[i-T-2]));
- }
-#endif
-}
-
-
-#endif
diff --git a/drivers/opus/celt/x86/pitch_sse.h b/drivers/opus/celt/x86/pitch_sse.h
deleted file mode 100644
index 2b4b54f61f..0000000000
--- a/drivers/opus/celt/x86/pitch_sse.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/* Copyright (c) 2013 Jean-Marc Valin and John Ridges
- Copyright (c) 2014, Cisco Systems, INC MingXiang WeiZhou MinPeng YanWang*/
-/**
- @file pitch_sse.h
- @brief Pitch 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.
-
- 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 PITCH_SSE_H
-#define PITCH_SSE_H
-#include "opus/opus_config.h"
-
-#if defined(OPUS_X86_MAY_HAVE_SSE4_1) && defined(FIXED_POINT)
-void xcorr_kernel_sse4_1(
- const opus_int16 *x,
- const opus_int16 *y,
- opus_val32 sum[4],
- int len);
-#endif
-
-#if defined(OPUS_X86_MAY_HAVE_SSE) && !defined(FIXED_POINT)
-void xcorr_kernel_sse(
- const opus_val16 *x,
- const opus_val16 *y,
- opus_val32 sum[4],
- int len);
-#endif
-
-#if defined(OPUS_X86_PRESUME_SSE4_1) && defined(FIXED_POINT)
-#define OVERRIDE_XCORR_KERNEL
-#define xcorr_kernel(x, y, sum, len, arch) \
- ((void)arch, xcorr_kernel_sse4_1(x, y, sum, len))
-
-#elif defined(OPUS_X86_PRESUME_SSE) && !defined(FIXED_POINT)
-#define OVERRIDE_XCORR_KERNEL
-#define xcorr_kernel(x, y, sum, len, arch) \
- ((void)arch, xcorr_kernel_sse(x, y, sum, len))
-
-#elif (defined(OPUS_X86_MAY_HAVE_SSE4_1) && defined(FIXED_POINT)) || (defined(OPUS_X86_MAY_HAVE_SSE) && !defined(FIXED_POINT))
-
-extern void (*const XCORR_KERNEL_IMPL[OPUS_ARCHMASK + 1])(
- const opus_val16 *x,
- const opus_val16 *y,
- opus_val32 sum[4],
- int len);
-
-#define OVERRIDE_XCORR_KERNEL
-#define xcorr_kernel(x, y, sum, len, arch) \
- ((*XCORR_KERNEL_IMPL[(arch) & OPUS_ARCHMASK])(x, y, sum, len))
-
-#endif
-
-#if defined(OPUS_X86_MAY_HAVE_SSE4_1) && defined(FIXED_POINT)
-opus_val32 celt_inner_prod_sse4_1(
- const opus_int16 *x,
- const opus_int16 *y,
- int N);
-#endif
-
-#if defined(OPUS_X86_MAY_HAVE_SSE2) && defined(FIXED_POINT)
-opus_val32 celt_inner_prod_sse2(
- const opus_int16 *x,
- const opus_int16 *y,
- int N);
-#endif
-
-#if defined(OPUS_X86_MAY_HAVE_SSE2) && !defined(FIXED_POINT)
-opus_val32 celt_inner_prod_sse(
- const opus_val16 *x,
- const opus_val16 *y,
- int N);
-#endif
-
-
-#if defined(OPUS_X86_PRESUME_SSE4_1) && defined(FIXED_POINT)
-#define OVERRIDE_CELT_INNER_PROD
-#define celt_inner_prod(x, y, N, arch) \
- ((void)arch, celt_inner_prod_sse4_1(x, y, N))
-
-#elif defined(OPUS_X86_PRESUME_SSE2) && defined(FIXED_POINT) && !defined(OPUS_X86_MAY_HAVE_SSE4_1)
-#define OVERRIDE_CELT_INNER_PROD
-#define celt_inner_prod(x, y, N, arch) \
- ((void)arch, celt_inner_prod_sse2(x, y, N))
-
-#elif defined(OPUS_X86_PRESUME_SSE) && !defined(FIXED_POINT)
-#define OVERRIDE_CELT_INNER_PROD
-#define celt_inner_prod(x, y, N, arch) \
- ((void)arch, celt_inner_prod_sse(x, y, N))
-
-
-#elif ((defined(OPUS_X86_MAY_HAVE_SSE4_1) || defined(OPUS_X86_MAY_HAVE_SSE2)) && defined(FIXED_POINT)) || \
- (defined(OPUS_X86_MAY_HAVE_SSE) && !defined(FIXED_POINT))
-
-extern opus_val32 (*const CELT_INNER_PROD_IMPL[OPUS_ARCHMASK + 1])(
- const opus_val16 *x,
- const opus_val16 *y,
- int N);
-
-#define OVERRIDE_CELT_INNER_PROD
-#define celt_inner_prod(x, y, N, arch) \
- ((*CELT_INNER_PROD_IMPL[(arch) & OPUS_ARCHMASK])(x, y, N))
-
-#endif
-
-#if defined(OPUS_X86_MAY_HAVE_SSE) && !defined(FIXED_POINT)
-
-#define OVERRIDE_DUAL_INNER_PROD
-#define OVERRIDE_COMB_FILTER_CONST
-
-#undef dual_inner_prod
-#undef comb_filter_const
-
-void dual_inner_prod_sse(const opus_val16 *x,
- const opus_val16 *y01,
- const opus_val16 *y02,
- int N,
- opus_val32 *xy1,
- opus_val32 *xy2);
-
-void comb_filter_const_sse(opus_val32 *y,
- opus_val32 *x,
- int T,
- int N,
- opus_val16 g10,
- opus_val16 g11,
- opus_val16 g12);
-
-
-#if defined(OPUS_X86_PRESUME_SSE)
-# define dual_inner_prod(x, y01, y02, N, xy1, xy2, arch) \
- ((void)(arch),dual_inner_prod_sse(x, y01, y02, N, xy1, xy2))
-
-# define comb_filter_const(y, x, T, N, g10, g11, g12, arch) \
- ((void)(arch),comb_filter_const_sse(y, x, T, N, g10, g11, g12))
-#else
-
-extern void (*const DUAL_INNER_PROD_IMPL[OPUS_ARCHMASK + 1])(
- const opus_val16 *x,
- const opus_val16 *y01,
- const opus_val16 *y02,
- int N,
- opus_val32 *xy1,
- opus_val32 *xy2);
-
-#define dual_inner_prod(x, y01, y02, N, xy1, xy2, arch) \
- ((*DUAL_INNER_PROD_IMPL[(arch) & OPUS_ARCHMASK])(x, y01, y02, N, xy1, xy2))
-
-extern void (*const COMB_FILTER_CONST_IMPL[OPUS_ARCHMASK + 1])(
- opus_val32 *y,
- opus_val32 *x,
- int T,
- int N,
- opus_val16 g10,
- opus_val16 g11,
- opus_val16 g12);
-
-#define comb_filter_const(y, x, T, N, g10, g11, g12, arch) \
- ((*COMB_FILTER_CONST_IMPL[(arch) & OPUS_ARCHMASK])(y, x, T, N, g10, g11, g12))
-
-#define NON_STATIC_COMB_FILTER_CONST_C
-
-#endif
-#endif
-
-#endif
diff --git a/drivers/opus/celt/x86/pitch_sse2.c b/drivers/opus/celt/x86/pitch_sse2.c
deleted file mode 100644
index b5a78b4acd..0000000000
--- a/drivers/opus/celt/x86/pitch_sse2.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-
-#include "opus/silk/macros.h"
-#include "opus/celt/celt_lpc.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/pitch.h"
-
-#if defined(OPUS_X86_MAY_HAVE_SSE2) && defined(FIXED_POINT)
-opus_val32 celt_inner_prod_sse2(const opus_val16 *x, const opus_val16 *y,
- int N)
-{
- opus_int i, dataSize16;
- opus_int32 sum;
-
- __m128i inVec1_76543210, inVec1_FEDCBA98, acc1;
- __m128i inVec2_76543210, inVec2_FEDCBA98, acc2;
-
- sum = 0;
- dataSize16 = N & ~15;
-
- acc1 = _mm_setzero_si128();
- acc2 = _mm_setzero_si128();
-
- for (i=0;i<dataSize16;i+=16)
- {
- inVec1_76543210 = _mm_loadu_si128((__m128i *)(&x[i + 0]));
- inVec2_76543210 = _mm_loadu_si128((__m128i *)(&y[i + 0]));
-
- inVec1_FEDCBA98 = _mm_loadu_si128((__m128i *)(&x[i + 8]));
- inVec2_FEDCBA98 = _mm_loadu_si128((__m128i *)(&y[i + 8]));
-
- inVec1_76543210 = _mm_madd_epi16(inVec1_76543210, inVec2_76543210);
- inVec1_FEDCBA98 = _mm_madd_epi16(inVec1_FEDCBA98, inVec2_FEDCBA98);
-
- acc1 = _mm_add_epi32(acc1, inVec1_76543210);
- acc2 = _mm_add_epi32(acc2, inVec1_FEDCBA98);
- }
-
- acc1 = _mm_add_epi32( acc1, acc2 );
-
- if (N - i >= 8)
- {
- inVec1_76543210 = _mm_loadu_si128((__m128i *)(&x[i + 0]));
- inVec2_76543210 = _mm_loadu_si128((__m128i *)(&y[i + 0]));
-
- inVec1_76543210 = _mm_madd_epi16(inVec1_76543210, inVec2_76543210);
-
- acc1 = _mm_add_epi32(acc1, inVec1_76543210);
- i += 8;
- }
-
- acc1 = _mm_add_epi32(acc1, _mm_unpackhi_epi64( acc1, acc1));
- acc1 = _mm_add_epi32(acc1, _mm_shufflelo_epi16( acc1, 0x0E));
- sum += _mm_cvtsi128_si32(acc1);
-
- for (;i<N;i++) {
- sum = silk_SMLABB(sum, x[i], y[i]);
- }
-
- return sum;
-}
-#endif
diff --git a/drivers/opus/celt/x86/pitch_sse4_1.c b/drivers/opus/celt/x86/pitch_sse4_1.c
deleted file mode 100644
index 57fb332210..0000000000
--- a/drivers/opus/celt/x86/pitch_sse4_1.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-
-#include "opus/silk/macros.h"
-#include "opus/celt/celt_lpc.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/pitch.h"
-
-#if defined(OPUS_X86_MAY_HAVE_SSE4_1) && defined(FIXED_POINT)
-#include <smmintrin.h>
-#include "opus/celt/x86/x86cpu.h"
-
-opus_val32 celt_inner_prod_sse4_1(const opus_val16 *x, const opus_val16 *y,
- int N)
-{
- opus_int i, dataSize16;
- opus_int32 sum;
- __m128i inVec1_76543210, inVec1_FEDCBA98, acc1;
- __m128i inVec2_76543210, inVec2_FEDCBA98, acc2;
- __m128i inVec1_3210, inVec2_3210;
-
- sum = 0;
- dataSize16 = N & ~15;
-
- acc1 = _mm_setzero_si128();
- acc2 = _mm_setzero_si128();
-
- for (i=0;i<dataSize16;i+=16) {
- inVec1_76543210 = _mm_loadu_si128((__m128i *)(&x[i + 0]));
- inVec2_76543210 = _mm_loadu_si128((__m128i *)(&y[i + 0]));
-
- inVec1_FEDCBA98 = _mm_loadu_si128((__m128i *)(&x[i + 8]));
- inVec2_FEDCBA98 = _mm_loadu_si128((__m128i *)(&y[i + 8]));
-
- inVec1_76543210 = _mm_madd_epi16(inVec1_76543210, inVec2_76543210);
- inVec1_FEDCBA98 = _mm_madd_epi16(inVec1_FEDCBA98, inVec2_FEDCBA98);
-
- acc1 = _mm_add_epi32(acc1, inVec1_76543210);
- acc2 = _mm_add_epi32(acc2, inVec1_FEDCBA98);
- }
-
- acc1 = _mm_add_epi32(acc1, acc2);
-
- if (N - i >= 8)
- {
- inVec1_76543210 = _mm_loadu_si128((__m128i *)(&x[i + 0]));
- inVec2_76543210 = _mm_loadu_si128((__m128i *)(&y[i + 0]));
-
- inVec1_76543210 = _mm_madd_epi16(inVec1_76543210, inVec2_76543210);
-
- acc1 = _mm_add_epi32(acc1, inVec1_76543210);
- i += 8;
- }
-
- if (N - i >= 4)
- {
- inVec1_3210 = OP_CVTEPI16_EPI32_M64(&x[i + 0]);
- inVec2_3210 = OP_CVTEPI16_EPI32_M64(&y[i + 0]);
-
- inVec1_3210 = _mm_mullo_epi32(inVec1_3210, inVec2_3210);
-
- acc1 = _mm_add_epi32(acc1, inVec1_3210);
- i += 4;
- }
-
- acc1 = _mm_add_epi32(acc1, _mm_unpackhi_epi64(acc1, acc1));
- acc1 = _mm_add_epi32(acc1, _mm_shufflelo_epi16(acc1, 0x0E));
-
- sum += _mm_cvtsi128_si32(acc1);
-
- for (;i<N;i++)
- {
- sum = silk_SMLABB(sum, x[i], y[i]);
- }
-
- return sum;
-}
-
-void xcorr_kernel_sse4_1(const opus_val16 * x, const opus_val16 * y, opus_val32 sum[ 4 ], int len)
-{
- int j;
-
- __m128i vecX, vecX0, vecX1, vecX2, vecX3;
- __m128i vecY0, vecY1, vecY2, vecY3;
- __m128i sum0, sum1, sum2, sum3, vecSum;
- __m128i initSum;
-
- celt_assert(len >= 3);
-
- sum0 = _mm_setzero_si128();
- sum1 = _mm_setzero_si128();
- sum2 = _mm_setzero_si128();
- sum3 = _mm_setzero_si128();
-
- for (j=0;j<(len-7);j+=8)
- {
- vecX = _mm_loadu_si128((__m128i *)(&x[j + 0]));
- vecY0 = _mm_loadu_si128((__m128i *)(&y[j + 0]));
- vecY1 = _mm_loadu_si128((__m128i *)(&y[j + 1]));
- vecY2 = _mm_loadu_si128((__m128i *)(&y[j + 2]));
- vecY3 = _mm_loadu_si128((__m128i *)(&y[j + 3]));
-
- sum0 = _mm_add_epi32(sum0, _mm_madd_epi16(vecX, vecY0));
- sum1 = _mm_add_epi32(sum1, _mm_madd_epi16(vecX, vecY1));
- sum2 = _mm_add_epi32(sum2, _mm_madd_epi16(vecX, vecY2));
- sum3 = _mm_add_epi32(sum3, _mm_madd_epi16(vecX, vecY3));
- }
-
- sum0 = _mm_add_epi32(sum0, _mm_unpackhi_epi64( sum0, sum0));
- sum0 = _mm_add_epi32(sum0, _mm_shufflelo_epi16( sum0, 0x0E));
-
- sum1 = _mm_add_epi32(sum1, _mm_unpackhi_epi64( sum1, sum1));
- sum1 = _mm_add_epi32(sum1, _mm_shufflelo_epi16( sum1, 0x0E));
-
- sum2 = _mm_add_epi32(sum2, _mm_unpackhi_epi64( sum2, sum2));
- sum2 = _mm_add_epi32(sum2, _mm_shufflelo_epi16( sum2, 0x0E));
-
- sum3 = _mm_add_epi32(sum3, _mm_unpackhi_epi64( sum3, sum3));
- sum3 = _mm_add_epi32(sum3, _mm_shufflelo_epi16( sum3, 0x0E));
-
- vecSum = _mm_unpacklo_epi64(_mm_unpacklo_epi32(sum0, sum1),
- _mm_unpacklo_epi32(sum2, sum3));
-
- for (;j<(len-3);j+=4)
- {
- vecX = OP_CVTEPI16_EPI32_M64(&x[j + 0]);
- vecX0 = _mm_shuffle_epi32(vecX, 0x00);
- vecX1 = _mm_shuffle_epi32(vecX, 0x55);
- vecX2 = _mm_shuffle_epi32(vecX, 0xaa);
- vecX3 = _mm_shuffle_epi32(vecX, 0xff);
-
- vecY0 = OP_CVTEPI16_EPI32_M64(&y[j + 0]);
- vecY1 = OP_CVTEPI16_EPI32_M64(&y[j + 1]);
- vecY2 = OP_CVTEPI16_EPI32_M64(&y[j + 2]);
- vecY3 = OP_CVTEPI16_EPI32_M64(&y[j + 3]);
-
- sum0 = _mm_mullo_epi32(vecX0, vecY0);
- sum1 = _mm_mullo_epi32(vecX1, vecY1);
- sum2 = _mm_mullo_epi32(vecX2, vecY2);
- sum3 = _mm_mullo_epi32(vecX3, vecY3);
-
- sum0 = _mm_add_epi32(sum0, sum1);
- sum2 = _mm_add_epi32(sum2, sum3);
- vecSum = _mm_add_epi32(vecSum, sum0);
- vecSum = _mm_add_epi32(vecSum, sum2);
- }
-
- for (;j<len;j++)
- {
- vecX = OP_CVTEPI16_EPI32_M64(&x[j + 0]);
- vecX0 = _mm_shuffle_epi32(vecX, 0x00);
-
- vecY0 = OP_CVTEPI16_EPI32_M64(&y[j + 0]);
-
- sum0 = _mm_mullo_epi32(vecX0, vecY0);
- vecSum = _mm_add_epi32(vecSum, sum0);
- }
-
- initSum = _mm_loadu_si128((__m128i *)(&sum[0]));
- initSum = _mm_add_epi32(initSum, vecSum);
- _mm_storeu_si128((__m128i *)sum, initSum);
-}
-#endif
diff --git a/drivers/opus/celt/x86/x86_celt_map.c b/drivers/opus/celt/x86/x86_celt_map.c
deleted file mode 100644
index 5146ea2b38..0000000000
--- a/drivers/opus/celt/x86/x86_celt_map.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/x86/x86cpu.h"
-#include "opus/celt/celt_lpc.h"
-#include "opus/celt/pitch.h"
-#include "opus/celt/x86/pitch_sse.h"
-
-#if defined(OPUS_HAVE_RTCD)
-
-# if defined(FIXED_POINT)
-
-#if defined(OPUS_X86_MAY_HAVE_SSE4_1) && !defined(OPUS_X86_PRESUME_SSE4_1)
-
-void (*const CELT_FIR_IMPL[OPUS_ARCHMASK + 1])(
- const opus_val16 *x,
- const opus_val16 *num,
- opus_val16 *y,
- int N,
- int ord,
- opus_val16 *mem,
- int arch
-) = {
- celt_fir_c, /* non-sse */
- celt_fir_c,
- celt_fir_c,
- MAY_HAVE_SSE4_1(celt_fir), /* sse4.1 */
- MAY_HAVE_SSE4_1(celt_fir) /* avx */
-};
-
-void (*const XCORR_KERNEL_IMPL[OPUS_ARCHMASK + 1])(
- const opus_val16 *x,
- const opus_val16 *y,
- opus_val32 sum[4],
- int len
-) = {
- xcorr_kernel_c, /* non-sse */
- xcorr_kernel_c,
- xcorr_kernel_c,
- MAY_HAVE_SSE4_1(xcorr_kernel), /* sse4.1 */
- MAY_HAVE_SSE4_1(xcorr_kernel) /* avx */
-};
-
-#endif
-
-#if (defined(OPUS_X86_MAY_HAVE_SSE4_1) && !defined(OPUS_X86_PRESUME_SSE4_1)) || \
- (!defined(OPUS_X86_MAY_HAVE_SSE_4_1) && defined(OPUS_X86_MAY_HAVE_SSE2) && !defined(OPUS_X86_PRESUME_SSE2))
-
-opus_val32 (*const CELT_INNER_PROD_IMPL[OPUS_ARCHMASK + 1])(
- const opus_val16 *x,
- const opus_val16 *y,
- int N
-) = {
- celt_inner_prod_c, /* non-sse */
- celt_inner_prod_c,
- MAY_HAVE_SSE2(celt_inner_prod),
- MAY_HAVE_SSE4_1(celt_inner_prod), /* sse4.1 */
- MAY_HAVE_SSE4_1(celt_inner_prod) /* avx */
-};
-
-#endif
-
-# else
-
-#if defined(OPUS_X86_MAY_HAVE_SSE) && !defined(OPUS_X86_PRESUME_SSE)
-
-void (*const XCORR_KERNEL_IMPL[OPUS_ARCHMASK + 1])(
- const opus_val16 *x,
- const opus_val16 *y,
- opus_val32 sum[4],
- int len
-) = {
- xcorr_kernel_c, /* non-sse */
- MAY_HAVE_SSE(xcorr_kernel),
- MAY_HAVE_SSE(xcorr_kernel),
- MAY_HAVE_SSE(xcorr_kernel),
- MAY_HAVE_SSE(xcorr_kernel)
-};
-
-opus_val32 (*const CELT_INNER_PROD_IMPL[OPUS_ARCHMASK + 1])(
- const opus_val16 *x,
- const opus_val16 *y,
- int N
-) = {
- celt_inner_prod_c, /* non-sse */
- MAY_HAVE_SSE(celt_inner_prod),
- MAY_HAVE_SSE(celt_inner_prod),
- MAY_HAVE_SSE(celt_inner_prod),
- MAY_HAVE_SSE(celt_inner_prod)
-};
-
-void (*const DUAL_INNER_PROD_IMPL[OPUS_ARCHMASK + 1])(
- const opus_val16 *x,
- const opus_val16 *y01,
- const opus_val16 *y02,
- int N,
- opus_val32 *xy1,
- opus_val32 *xy2
-) = {
- dual_inner_prod_c, /* non-sse */
- MAY_HAVE_SSE(dual_inner_prod),
- MAY_HAVE_SSE(dual_inner_prod),
- MAY_HAVE_SSE(dual_inner_prod),
- MAY_HAVE_SSE(dual_inner_prod)
-};
-
-void (*const COMB_FILTER_CONST_IMPL[OPUS_ARCHMASK + 1])(
- opus_val32 *y,
- opus_val32 *x,
- int T,
- int N,
- opus_val16 g10,
- opus_val16 g11,
- opus_val16 g12
-) = {
- comb_filter_const_c, /* non-sse */
- MAY_HAVE_SSE(comb_filter_const),
- MAY_HAVE_SSE(comb_filter_const),
- MAY_HAVE_SSE(comb_filter_const),
- MAY_HAVE_SSE(comb_filter_const)
-};
-
-
-#endif
-
-#endif
-#endif
diff --git a/drivers/opus/celt/x86/x86cpu.c b/drivers/opus/celt/x86/x86cpu.c
deleted file mode 100644
index 91b9b185c2..0000000000
--- a/drivers/opus/celt/x86/x86cpu.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/cpu_support.h"
-#include "opus/silk/macros.h"
-#include "opus/silk/main.h"
-#include "opus/celt/pitch.h"
-#include "opus/celt/x86/x86cpu.h"
-
-#if (defined(OPUS_X86_MAY_HAVE_SSE) && !defined(OPUS_X86_PRESUME_SSE)) || \
- (defined(OPUS_X86_MAY_HAVE_SSE2) && !defined(OPUS_X86_PRESUME_SSE2)) || \
- (defined(OPUS_X86_MAY_HAVE_SSE4_1) && !defined(OPUS_X86_PRESUME_SSE4_1)) || \
- (defined(OPUS_X86_MAY_HAVE_AVX) && !defined(OPUS_X86_PRESUME_AVX))
-
-
-#if defined(_MSC_VER)
-
-#include <intrin.h>
-static _inline void cpuid(unsigned int CPUInfo[4], unsigned int InfoType)
-{
- __cpuid((int*)CPUInfo, InfoType);
-}
-
-#else
-
-#if defined(CPU_INFO_BY_C)
-#include <cpuid.h>
-#endif
-
-static void cpuid(unsigned int CPUInfo[4], unsigned int InfoType)
-{
-#if defined(CPU_INFO_BY_ASM)
-#if defined(__i386__) && defined(__PIC__)
-/* %ebx is PIC register in 32-bit, so mustn't clobber it. */
- __asm__ __volatile__ (
- "xchg %%ebx, %1\n"
- "cpuid\n"
- "xchg %%ebx, %1\n":
- "=a" (CPUInfo[0]),
- "=r" (CPUInfo[1]),
- "=c" (CPUInfo[2]),
- "=d" (CPUInfo[3]) :
- "0" (InfoType)
- );
-#else
- __asm__ __volatile__ (
- "cpuid":
- "=a" (CPUInfo[0]),
- "=b" (CPUInfo[1]),
- "=c" (CPUInfo[2]),
- "=d" (CPUInfo[3]) :
- "0" (InfoType)
- );
-#endif
-#elif defined(CPU_INFO_BY_C)
- __get_cpuid(InfoType, &(CPUInfo[0]), &(CPUInfo[1]), &(CPUInfo[2]), &(CPUInfo[3]));
-#endif
-}
-
-#endif
-
-typedef struct CPU_Feature{
- /* SIMD: 128-bit */
- int HW_SSE;
- int HW_SSE2;
- int HW_SSE41;
- /* SIMD: 256-bit */
- int HW_AVX;
-} CPU_Feature;
-
-static void opus_cpu_feature_check(CPU_Feature *cpu_feature)
-{
- unsigned int info[4] = {0};
- unsigned int nIds = 0;
-
- cpuid(info, 0);
- nIds = info[0];
-
- if (nIds >= 1){
- cpuid(info, 1);
- cpu_feature->HW_SSE = (info[3] & (1 << 25)) != 0;
- cpu_feature->HW_SSE2 = (info[3] & (1 << 26)) != 0;
- cpu_feature->HW_SSE41 = (info[2] & (1 << 19)) != 0;
- cpu_feature->HW_AVX = (info[2] & (1 << 28)) != 0;
- }
- else {
- cpu_feature->HW_SSE = 0;
- cpu_feature->HW_SSE2 = 0;
- cpu_feature->HW_SSE41 = 0;
- cpu_feature->HW_AVX = 0;
- }
-}
-
-int opus_select_arch(void)
-{
- CPU_Feature cpu_feature;
- int arch;
-
- opus_cpu_feature_check(&cpu_feature);
-
- arch = 0;
- if (!cpu_feature.HW_SSE)
- {
- return arch;
- }
- arch++;
-
- if (!cpu_feature.HW_SSE2)
- {
- return arch;
- }
- arch++;
-
- if (!cpu_feature.HW_SSE41)
- {
- return arch;
- }
- arch++;
-
- if (!cpu_feature.HW_AVX)
- {
- return arch;
- }
- arch++;
-
- return arch;
-}
-
-#endif
diff --git a/drivers/opus/celt/x86/x86cpu.h b/drivers/opus/celt/x86/x86cpu.h
deleted file mode 100644
index 04fd48aac4..0000000000
--- a/drivers/opus/celt/x86/x86cpu.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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.
-*/
-
-#if !defined(X86CPU_H)
-# define X86CPU_H
-
-# if defined(OPUS_X86_MAY_HAVE_SSE)
-# define MAY_HAVE_SSE(name) name ## _sse
-# else
-# define MAY_HAVE_SSE(name) name ## _c
-# endif
-
-# if defined(OPUS_X86_MAY_HAVE_SSE2)
-# define MAY_HAVE_SSE2(name) name ## _sse2
-# else
-# define MAY_HAVE_SSE2(name) name ## _c
-# endif
-
-# if defined(OPUS_X86_MAY_HAVE_SSE4_1)
-# define MAY_HAVE_SSE4_1(name) name ## _sse4_1
-# else
-# define MAY_HAVE_SSE4_1(name) name ## _c
-# endif
-
-# if defined(OPUS_X86_MAY_HAVE_AVX)
-# define MAY_HAVE_AVX(name) name ## _avx
-# else
-# define MAY_HAVE_AVX(name) name ## _c
-# endif
-
-# if defined(OPUS_HAVE_RTCD)
-int opus_select_arch(void);
-# endif
-
-/*gcc appears to emit MOVDQA's to load the argument of an _mm_cvtepi8_epi32()
- or _mm_cvtepi16_epi32() when optimizations are disabled, even though the
- actual PMOVSXWD instruction takes an m32 or m64. Unlike a normal memory
- reference, these require 16-byte alignment and load a full 16 bytes (instead
- of 4 or 8), possibly reading out of bounds.
-
- We can insert an explicit MOVD or MOVQ using _mm_cvtsi32_si128() or
- _mm_loadl_epi64(), which should have the same semantics as an m32 or m64
- reference in the PMOVSXWD instruction itself, but gcc is not smart enough to
- optimize this out when optimizations ARE enabled.
-
- Clang, in contrast, requires us to do this always for _mm_cvtepi8_epi32
- (which is fair, since technically the compiler is always allowed to do the
- dereference before invoking the function implementing the intrinsic).
- However, it is smart enough to eliminate the extra MOVD instruction.
- For _mm_cvtepi16_epi32, it does the right thing, though does *not* optimize out
- the extra MOVQ if it's specified explicitly */
-
-# if defined(__clang__) || !defined(__OPTIMIZE__)
-# define OP_CVTEPI8_EPI32_M32(x) \
- (_mm_cvtepi8_epi32(_mm_cvtsi32_si128(*(int *)(x))))
-# else
-# define OP_CVTEPI8_EPI32_M32(x) \
- (_mm_cvtepi8_epi32(*(__m128i *)(x)))
-#endif
-
-# if !defined(__OPTIMIZE__)
-# define OP_CVTEPI16_EPI32_M64(x) \
- (_mm_cvtepi16_epi32(_mm_loadl_epi64((__m128i *)(x))))
-# else
-# define OP_CVTEPI16_EPI32_M64(x) \
- (_mm_cvtepi16_epi32(*(__m128i *)(x)))
-# endif
-
-#endif
diff --git a/drivers/opus/http.c b/drivers/opus/http.c
deleted file mode 100644
index 602d514f6e..0000000000
--- a/drivers/opus/http.c
+++ /dev/null
@@ -1,3427 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE libopusfile 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 libopusfile SOURCE CODE IS (C) COPYRIGHT 2012 *
- * by the Xiph.Org Foundation and contributors http://www.xiph.org/ *
- * *
- ********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/internal.h"
-#include <ctype.h>
-#include <errno.h>
-#include <limits.h>
-#include <string.h>
-
-/*RFCs referenced in this file:
- RFC 761: DOD Standard Transmission Control Protocol
- RFC 1535: A Security Problem and Proposed Correction With Widely Deployed DNS
- Software
- RFC 1738: Uniform Resource Locators (URL)
- RFC 1945: Hypertext Transfer Protocol -- HTTP/1.0
- RFC 2068: Hypertext Transfer Protocol -- HTTP/1.1
- RFC 2145: Use and Interpretation of HTTP Version Numbers
- RFC 2246: The TLS Protocol Version 1.0
- RFC 2459: Internet X.509 Public Key Infrastructure Certificate and
- Certificate Revocation List (CRL) Profile
- RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1
- RFC 2617: HTTP Authentication: Basic and Digest Access Authentication
- RFC 2817: Upgrading to TLS Within HTTP/1.1
- RFC 2818: HTTP Over TLS
- RFC 3492: Punycode: A Bootstring encoding of Unicode for Internationalized
- Domain Names in Applications (IDNA)
- RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
- RFC 3987: Internationalized Resource Identifiers (IRIs)
- RFC 4343: Domain Name System (DNS) Case Insensitivity Clarification
- RFC 5894: Internationalized Domain Names for Applications (IDNA):
- Background, Explanation, and Rationale
- RFC 6066: Transport Layer Security (TLS) Extensions: Extension Definitions
- RFC 6125: Representation and Verification of Domain-Based Application Service
- Identity within Internet Public Key Infrastructure Using X.509 (PKIX)
- Certificates in the Context of Transport Layer Security (TLS)
- RFC 6555: Happy Eyeballs: Success with Dual-Stack Hosts*/
-
-typedef struct OpusParsedURL OpusParsedURL;
-typedef struct OpusStringBuf OpusStringBuf;
-typedef struct OpusHTTPConn OpusHTTPConn;
-typedef struct OpusHTTPStream OpusHTTPStream;
-
-static char *op_string_range_dup(const char *_start,const char *_end){
- size_t len;
- char *ret;
- OP_ASSERT(_start<=_end);
- len=_end-_start;
- /*This is to help avoid overflow elsewhere, later.*/
- if(OP_UNLIKELY(len>=INT_MAX))return NULL;
- ret=(char *)_ogg_malloc(sizeof(*ret)*(len+1));
- if(OP_LIKELY(ret!=NULL)){
- ret=(char *)memcpy(ret,_start,sizeof(*ret)*(len));
- ret[len]='\0';
- }
- return ret;
-}
-
-static char *op_string_dup(const char *_s){
- return op_string_range_dup(_s,_s+strlen(_s));
-}
-
-static char *op_string_tolower(char *_s){
- int i;
- for(i=0;_s[i]!='\0';i++){
- int c;
- c=_s[i];
- if(c>='A'&&c<='Z')c+='a'-'A';
- _s[i]=(char)c;
- }
- return _s;
-}
-
-/*URI character classes (from RFC 3986).*/
-#define OP_URL_ALPHA \
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
-#define OP_URL_DIGIT "0123456789"
-#define OP_URL_HEXDIGIT "0123456789ABCDEFabcdef"
-/*Not a character class, but the characters allowed in <scheme>.*/
-#define OP_URL_SCHEME OP_URL_ALPHA OP_URL_DIGIT "+-."
-#define OP_URL_GEN_DELIMS "#/:?@[]"
-#define OP_URL_SUB_DELIMS "!$&'()*+,;="
-#define OP_URL_RESERVED OP_URL_GEN_DELIMS OP_URL_SUB_DELIMS
-#define OP_URL_UNRESERVED OP_URL_ALPHA OP_URL_DIGIT "-._~"
-/*Not a character class, but the characters allowed in <pct-encoded>.*/
-#define OP_URL_PCT_ENCODED "%"
-/*Not a character class or production rule, but for convenience.*/
-#define OP_URL_PCHAR_BASE \
- OP_URL_UNRESERVED OP_URL_PCT_ENCODED OP_URL_SUB_DELIMS
-#define OP_URL_PCHAR OP_URL_PCHAR_BASE ":@"
-/*Not a character class, but the characters allowed in <userinfo> and
- <IP-literal>.*/
-#define OP_URL_PCHAR_NA OP_URL_PCHAR_BASE ":"
-/*Not a character class, but the characters allowed in <segment-nz-nc>.*/
-#define OP_URL_PCHAR_NC OP_URL_PCHAR_BASE "@"
-/*Not a character clsss, but the characters allowed in <path>.*/
-#define OP_URL_PATH OP_URL_PCHAR "/"
-/*Not a character class, but the characters allowed in <query> / <fragment>.*/
-#define OP_URL_QUERY_FRAG OP_URL_PCHAR "/?"
-
-/*Check the <% HEXDIG HEXDIG> escapes of a URL for validity.
- Return: 0 if valid, or a negative value on failure.*/
-static int op_validate_url_escapes(const char *_s){
- int i;
- for(i=0;_s[i];i++){
- if(_s[i]=='%'){
- if(OP_UNLIKELY(!isxdigit(_s[i+1]))
- ||OP_UNLIKELY(!isxdigit(_s[i+2]))
- /*RFC 3986 says %00 "should be rejected if the application is not
- expecting to receive raw data within a component."*/
- ||OP_UNLIKELY(_s[i+1]=='0'&&_s[i+2]=='0')){
- return OP_FALSE;
- }
- i+=2;
- }
- }
- return 0;
-}
-
-/*Convert a hex digit to its actual value.
- _c: The hex digit to convert.
- Presumed to be valid ('0'...'9', 'A'...'F', or 'a'...'f').
- Return: The value of the digit, in the range [0,15].*/
-static int op_hex_value(int _c){
- return _c>='a'?_c-'a'+10:_c>='A'?_c-'A'+10:_c-'0';
-}
-
-/*Unescape all the <% HEXDIG HEXDIG> sequences in a string in-place.
- This does no validity checking.*/
-static char *op_unescape_url_component(char *_s){
- int i;
- int j;
- for(i=j=0;_s[i];i++,j++){
- if(_s[i]=='%'){
- _s[i]=(char)(op_hex_value(_s[i+1])<<4|op_hex_value(_s[i+2]));
- i+=2;
- }
- }
- return _s;
-}
-
-/*Parse a file: URL.
- This code is not meant to be fast: strspn() with large sets is likely to be
- slow, but it is very convenient.
- It is meant to be RFC 1738-compliant (as updated by RFC 3986).*/
-static const char *op_parse_file_url(const char *_src){
- const char *scheme_end;
- const char *path;
- const char *path_end;
- scheme_end=_src+strspn(_src,OP_URL_SCHEME);
- if(OP_UNLIKELY(*scheme_end!=':')
- ||scheme_end-_src!=4||op_strncasecmp(_src,"file",4)!=0){
- /*Unsupported protocol.*/
- return NULL;
- }
- /*Make sure all escape sequences are valid to simplify unescaping later.*/
- if(OP_UNLIKELY(op_validate_url_escapes(scheme_end+1)<0))return NULL;
- if(scheme_end[1]=='/'&&scheme_end[2]=='/'){
- const char *host;
- /*file: URLs can have a host!
- Yeah, I was surprised, too, but that's what RFC 1738 says.
- It also says, "The file URL scheme is unusual in that it does not specify
- an Internet protocol or access method for such files; as such, its
- utility in network protocols between hosts is limited," which is a mild
- understatement.*/
- host=scheme_end+3;
- /*The empty host is what we expect.*/
- if(OP_LIKELY(*host=='/'))path=host;
- else{
- const char *host_end;
- char host_buf[28];
- /*RFC 1738 says localhost "is interpreted as `the machine from which the
- URL is being interpreted,'" so let's check for it.*/
- host_end=host+strspn(host,OP_URL_PCHAR_BASE);
- /*No <port> allowed.
- This also rejects IP-Literals.*/
- if(*host_end!='/')return NULL;
- /*An escaped "localhost" can take at most 27 characters.*/
- if(OP_UNLIKELY(host_end-host>27))return NULL;
- memcpy(host_buf,host,sizeof(*host_buf)*(host_end-host));
- host_buf[host_end-host]='\0';
- op_unescape_url_component(host_buf);
- op_string_tolower(host_buf);
- /*Some other host: give up.*/
- if(OP_UNLIKELY(strcmp(host_buf,"localhost")!=0))return NULL;
- path=host_end;
- }
- }
- else path=scheme_end+1;
- path_end=path+strspn(path,OP_URL_PATH);
- /*This will reject a <query> or <fragment> component, too.
- I don't know what to do with queries, but a temporal fragment would at
- least make sense.
- RFC 1738 pretty clearly defines a <searchpart> that's equivalent to the
- RFC 3986 <query> component for other schemes, but not the file: scheme,
- so I'm going to just reject it.*/
- if(*path_end!='\0')return NULL;
- return path;
-}
-
-#if defined(OP_ENABLE_HTTP)
-# if defined(_WIN32)
-# include <winsock2.h>
-# include <ws2tcpip.h>
-# include <openssl/ssl.h>
-# include "opus/winerrno.h"
-
-typedef SOCKET op_sock;
-
-# define OP_INVALID_SOCKET (INVALID_SOCKET)
-
-/*Vista and later support WSAPoll(), but we don't want to rely on that.
- Instead we re-implement it badly using select().
- Unfortunately, they define a conflicting struct pollfd, so we only define our
- own if it looks like that one has not already been defined.*/
-# if !defined(POLLIN)
-/*Equivalent to POLLIN.*/
-# define POLLRDNORM (0x0100)
-/*Priority band data can be read.*/
-# define POLLRDBAND (0x0200)
-/*There is data to read.*/
-# define POLLIN (POLLRDNORM|POLLRDBAND)
-/* There is urgent data to read.*/
-# define POLLPRI (0x0400)
-/*Equivalent to POLLOUT.*/
-# define POLLWRNORM (0x0010)
-/*Writing now will not block.*/
-# define POLLOUT (POLLWRNORM)
-/*Priority data may be written.*/
-# define POLLWRBAND (0x0020)
-/*Error condition (output only).*/
-# define POLLERR (0x0001)
-/*Hang up (output only).*/
-# define POLLHUP (0x0002)
-/*Invalid request: fd not open (output only).*/
-# define POLLNVAL (0x0004)
-
-struct pollfd{
- /*File descriptor.*/
- op_sock fd;
- /*Requested events.*/
- short events;
- /*Returned events.*/
- short revents;
-};
-# endif
-
-/*But Winsock never defines nfds_t (it's simply hard-coded to ULONG).*/
-typedef unsigned long nfds_t;
-
-/*The usage of FD_SET() below is O(N^2).
- This is okay because select() is limited to 64 sockets in Winsock, anyway.
- In practice, we only ever call it with one or two sockets.*/
-static int op_poll_win32(struct pollfd *_fds,nfds_t _nfds,int _timeout){
- struct timeval tv;
- fd_set ifds;
- fd_set ofds;
- fd_set efds;
- nfds_t i;
- int ret;
- FD_ZERO(&ifds);
- FD_ZERO(&ofds);
- FD_ZERO(&efds);
- for(i=0;i<_nfds;i++){
- _fds[i].revents=0;
- if(_fds[i].events&POLLIN)FD_SET(_fds[i].fd,&ifds);
- if(_fds[i].events&POLLOUT)FD_SET(_fds[i].fd,&ofds);
- FD_SET(_fds[i].fd,&efds);
- }
- if(_timeout>=0){
- tv.tv_sec=_timeout/1000;
- tv.tv_usec=(_timeout%1000)*1000;
- }
- ret=select(-1,&ifds,&ofds,&efds,_timeout<0?NULL:&tv);
- if(ret>0){
- for(i=0;i<_nfds;i++){
- if(FD_ISSET(_fds[i].fd,&ifds))_fds[i].revents|=POLLIN;
- if(FD_ISSET(_fds[i].fd,&ofds))_fds[i].revents|=POLLOUT;
- /*This isn't correct: there are several different things that might have
- happened to a fd in efds, but I don't know a good way to distinguish
- them without more context from the caller.
- It's okay, because we don't actually check any of these bits, we just
- need _some_ bit set.*/
- if(FD_ISSET(_fds[i].fd,&efds))_fds[i].revents|=POLLHUP;
- }
- }
- return ret;
-}
-
-/*We define op_errno() to make it clear that it's not an l-value like normal
- errno is.*/
-# define op_errno() (WSAGetLastError()?WSAGetLastError()-WSABASEERR:0)
-# define op_reset_errno() (WSASetLastError(0))
-
-/*The remaining functions don't get an op_ prefix even though they only
- operate on sockets, because we don't use non-socket I/O here, and this
- minimizes the changes needed to deal with Winsock.*/
-# define close(_fd) closesocket(_fd)
-/*This relies on sizeof(u_long)==sizeof(int), which is always true on both
- Win32 and Win64.*/
-# define ioctl(_fd,_req,_arg) ioctlsocket(_fd,_req,(u_long *)(_arg))
-# define getsockopt(_fd,_level,_name,_val,_len) \
- getsockopt(_fd,_level,_name,(char *)(_val),_len)
-# define setsockopt(_fd,_level,_name,_val,_len) \
- setsockopt(_fd,_level,_name,(const char *)(_val),_len)
-# define poll(_fds,_nfds,_timeout) op_poll_win32(_fds,_nfds,_timeout)
-
-# if defined(_MSC_VER)
-typedef ptrdiff_t ssize_t;
-# endif
-
-/*Load certificates from the built-in certificate store.*/
-int SSL_CTX_set_default_verify_paths_win32(SSL_CTX *_ssl_ctx);
-# define SSL_CTX_set_default_verify_paths \
- SSL_CTX_set_default_verify_paths_win32
-
-# else
-/*Normal Berkeley sockets.*/
-# include <sys/ioctl.h>
-# include <sys/types.h>
-# include <sys/socket.h>
-# include <arpa/inet.h>
-# include <netinet/in.h>
-# include <netinet/tcp.h>
-# include <fcntl.h>
-# include <netdb.h>
-# include <poll.h>
-# include <unistd.h>
-# include <openssl/ssl.h>
-
-typedef int op_sock;
-
-# define OP_INVALID_SOCKET (-1)
-
-# define op_errno() (errno)
-# define op_reset_errno() (errno=0)
-
-# endif
-# include <sys/timeb.h>
-# include <openssl/x509v3.h>
-
-/*The maximum number of simultaneous connections.
- RFC 2616 says this SHOULD NOT be more than 2, but everyone on the modern web
- ignores that (e.g., IE 8 bumped theirs up from 2 to 6, Firefox uses 15).
- If it makes you feel better, we'll only ever actively read from one of these
- at a time.
- The others are kept around mainly to avoid slow-starting a new connection
- when seeking, and time out rapidly.*/
-# define OP_NCONNS_MAX (4)
-
-/*The amount of time before we attempt to re-resolve the host.
- This is 10 minutes, as recommended in RFC 6555 for expiring cached connection
- results for dual-stack hosts.*/
-# define OP_RESOLVE_CACHE_TIMEOUT_MS (10*60*(opus_int32)1000)
-
-/*The number of redirections at which we give up.
- The value here is the current default in Firefox.
- RFC 2068 mandated a maximum of 5, but RFC 2616 relaxed that to "a client
- SHOULD detect infinite redirection loops."
- Fortunately, 20 is less than infinity.*/
-# define OP_REDIRECT_LIMIT (20)
-
-/*The initial size of the buffer used to read a response message (before the
- body).*/
-# define OP_RESPONSE_SIZE_MIN (510)
-/*The maximum size of a response message (before the body).
- Responses larger than this will be discarded.
- I've seen a real server return 20 kB of data for a 302 Found response.
- Increasing this beyond 32kB will cause problems on platforms with a 16-bit
- int.*/
-# define OP_RESPONSE_SIZE_MAX (32766)
-
-/*The number of milliseconds we will allow a connection to sit idle before we
- refuse to resurrect it.
- Apache as of 2.2 has reduced its default timeout to 5 seconds (from 15), so
- that's what we'll use here.*/
-# define OP_CONNECTION_IDLE_TIMEOUT_MS (5*1000)
-
-/*The number of milliseconds we will wait to send or receive data before giving
- up.*/
-# define OP_POLL_TIMEOUT_MS (30*1000)
-
-/*We will always attempt to read ahead at least this much in preference to
- opening a new connection.*/
-# define OP_READAHEAD_THRESH_MIN (32*(opus_int32)1024)
-
-/*The amount of data to request after a seek.
- This is a trade-off between read throughput after a seek vs. the the ability
- to quickly perform another seek with the same connection.*/
-# define OP_PIPELINE_CHUNK_SIZE (32*(opus_int32)1024)
-/*Subsequent chunks are requested with larger and larger sizes until they pass
- this threshold, after which we just ask for the rest of the resource.*/
-# define OP_PIPELINE_CHUNK_SIZE_MAX (1024*(opus_int32)1024)
-/*This is the maximum number of requests we'll make with a single connection.
- Many servers will simply disconnect after we attempt some number of requests,
- possibly without sending a Connection: close header, meaning we won't
- discover it until we try to read beyond the end of the current chunk.
- We can reconnect when that happens, but this is slow.
- Instead, we impose a limit ourselves (set to the default for Apache
- installations and thus likely the most common value in use).*/
-# define OP_PIPELINE_MAX_REQUESTS (100)
-/*This should be the number of requests, starting from a chunk size of
- OP_PIPELINE_CHUNK_SIZE and doubling each time, until we exceed
- OP_PIPELINE_CHUNK_SIZE_MAX and just request the rest of the file.
- We won't reuse a connection when seeking unless it has at least this many
- requests left, to reduce the chances we'll have to open a new connection
- while reading forward afterwards.*/
-# define OP_PIPELINE_MIN_REQUESTS (7)
-
-/*Is this an https URL?
- For now we can simply check the last letter of the scheme.*/
-# define OP_URL_IS_SSL(_url) ((_url)->scheme[4]=='s')
-
-/*Does this URL use the default port for its scheme?*/
-# define OP_URL_IS_DEFAULT_PORT(_url) \
- (!OP_URL_IS_SSL(_url)&&(_url)->port==80 \
- ||OP_URL_IS_SSL(_url)&&(_url)->port==443)
-
-struct OpusParsedURL{
- /*Either "http" or "https".*/
- char *scheme;
- /*The user name from the <userinfo> component, or NULL.*/
- char *user;
- /*The password from the <userinfo> component, or NULL.*/
- char *pass;
- /*The <host> component.
- This may not be NULL.*/
- char *host;
- /*The <path> and <query> components.
- This may not be NULL.*/
- char *path;
- /*The <port> component.
- This is set to the default port if the URL did not contain one.*/
- unsigned port;
-};
-
-/*Parse a URL.
- This code is not meant to be fast: strspn() with large sets is likely to be
- slow, but it is very convenient.
- It is meant to be RFC 3986-compliant.
- We currently do not support IRIs (Internationalized Resource Identifiers,
- RFC 3987).
- Callers should translate them to URIs first.*/
-static int op_parse_url_impl(OpusParsedURL *_dst,const char *_src){
- const char *scheme_end;
- const char *authority;
- const char *userinfo_end;
- const char *user;
- const char *user_end;
- const char *pass;
- const char *hostport;
- const char *hostport_end;
- const char *host_end;
- const char *port;
- opus_int32 port_num;
- const char *port_end;
- const char *path;
- const char *path_end;
- const char *uri_end;
- scheme_end=_src+strspn(_src,OP_URL_SCHEME);
- if(OP_UNLIKELY(*scheme_end!=':')
- ||OP_UNLIKELY(scheme_end-_src<4)||OP_UNLIKELY(scheme_end-_src>5)
- ||OP_UNLIKELY(op_strncasecmp(_src,"https",scheme_end-_src)!=0)){
- /*Unsupported protocol.*/
- return OP_EIMPL;
- }
- if(OP_UNLIKELY(scheme_end[1]!='/')||OP_UNLIKELY(scheme_end[2]!='/')){
- /*We require an <authority> component.*/
- return OP_EINVAL;
- }
- authority=scheme_end+3;
- /*Make sure all escape sequences are valid to simplify unescaping later.*/
- if(OP_UNLIKELY(op_validate_url_escapes(authority)<0))return OP_EINVAL;
- /*Look for a <userinfo> component.*/
- userinfo_end=authority+strspn(authority,OP_URL_PCHAR_NA);
- if(*userinfo_end=='@'){
- /*Found one.*/
- user=authority;
- /*Look for a password (yes, clear-text passwords are deprecated, I know,
- but what else are people supposed to use? use SSL if you care).*/
- user_end=authority+strspn(authority,OP_URL_PCHAR_BASE);
- if(*user_end==':')pass=user_end+1;
- else pass=NULL;
- hostport=userinfo_end+1;
- }
- else{
- /*We shouldn't have to initialize user_end, but gcc is too dumb to figure
- out that user!=NULL below means we didn't take this else branch.*/
- user=user_end=NULL;
- pass=NULL;
- hostport=authority;
- }
- /*Try to figure out where the <host> component ends.*/
- if(hostport[0]=='['){
- hostport++;
- /*We have an <IP-literal>, which can contain colons.*/
- hostport_end=host_end=hostport+strspn(hostport,OP_URL_PCHAR_NA);
- if(OP_UNLIKELY(*hostport_end++!=']'))return OP_EINVAL;
- }
- /*Currently we don't support IDNA (RFC 5894), because I don't want to deal
- with the policy about which domains should not be internationalized to
- avoid confusing similarities.
- Give this API Punycode (RFC 3492) domain names instead.*/
- else hostport_end=host_end=hostport+strspn(hostport,OP_URL_PCHAR_BASE);
- /*TODO: Validate host.*/
- /*Is there a port number?*/
- port_num=-1;
- if(*hostport_end==':'){
- int i;
- port=hostport_end+1;
- port_end=port+strspn(port,OP_URL_DIGIT);
- path=port_end;
- /*Not part of RFC 3986, but require port numbers in the range 0...65535.*/
- if(OP_LIKELY(port_end-port>0)){
- while(*port=='0')port++;
- if(OP_UNLIKELY(port_end-port>5))return OP_EINVAL;
- port_num=0;
- for(i=0;i<port_end-port;i++)port_num=port_num*10+port[i]-'0';
- if(OP_UNLIKELY(port_num>65535))return OP_EINVAL;
- }
- }
- else path=hostport_end;
- path_end=path+strspn(path,OP_URL_PATH);
- /*If the path is not empty, it must begin with a '/'.*/
- if(OP_LIKELY(path_end>path)&&OP_UNLIKELY(path[0]!='/'))return OP_EINVAL;
- /*Consume the <query> component, if any (right now we don't split this out
- from the <path> component).*/
- if(*path_end=='?')path_end=path_end+strspn(path_end,OP_URL_QUERY_FRAG);
- /*Discard the <fragment> component, if any.
- This doesn't get sent to the server.
- Some day we should add support for Media Fragment URIs
- <http://www.w3.org/TR/media-frags/>.*/
- if(*path_end=='#')uri_end=path_end+1+strspn(path_end+1,OP_URL_QUERY_FRAG);
- else uri_end=path_end;
- /*If there's anything left, this was not a valid URL.*/
- if(OP_UNLIKELY(*uri_end!='\0'))return OP_EINVAL;
- _dst->scheme=op_string_range_dup(_src,scheme_end);
- if(OP_UNLIKELY(_dst->scheme==NULL))return OP_EFAULT;
- op_string_tolower(_dst->scheme);
- if(user!=NULL){
- _dst->user=op_string_range_dup(user,user_end);
- if(OP_UNLIKELY(_dst->user==NULL))return OP_EFAULT;
- op_unescape_url_component(_dst->user);
- /*Unescaping might have created a ':' in the username.
- That's not allowed by RFC 2617's Basic Authentication Scheme.*/
- if(OP_UNLIKELY(strchr(_dst->user,':')!=NULL))return OP_EINVAL;
- }
- else _dst->user=NULL;
- if(pass!=NULL){
- _dst->pass=op_string_range_dup(pass,userinfo_end);
- if(OP_UNLIKELY(_dst->pass==NULL))return OP_EFAULT;
- op_unescape_url_component(_dst->pass);
- }
- else _dst->pass=NULL;
- _dst->host=op_string_range_dup(hostport,host_end);
- if(OP_UNLIKELY(_dst->host==NULL))return OP_EFAULT;
- if(port_num<0){
- if(_src[4]=='s')port_num=443;
- else port_num=80;
- }
- _dst->port=(unsigned)port_num;
- /*RFC 2616 says an empty <abs-path> component is equivalent to "/", and we
- MUST use the latter in the Request-URI.
- Reserve space for the slash here.*/
- if(path==path_end||path[0]=='?')path--;
- _dst->path=op_string_range_dup(path,path_end);
- if(OP_UNLIKELY(_dst->path==NULL))return OP_EFAULT;
- /*And force-set it here.*/
- _dst->path[0]='/';
- return 0;
-}
-
-static void op_parsed_url_init(OpusParsedURL *_url){
- memset(_url,0,sizeof(*_url));
-}
-
-static void op_parsed_url_clear(OpusParsedURL *_url){
- _ogg_free(_url->scheme);
- _ogg_free(_url->user);
- _ogg_free(_url->pass);
- _ogg_free(_url->host);
- _ogg_free(_url->path);
-}
-
-static int op_parse_url(OpusParsedURL *_dst,const char *_src){
- OpusParsedURL url;
- int ret;
- op_parsed_url_init(&url);
- ret=op_parse_url_impl(&url,_src);
- if(OP_UNLIKELY(ret<0))op_parsed_url_clear(&url);
- else *_dst=*&url;
- return ret;
-}
-
-/*A buffer to hold growing strings.
- The main purpose of this is to consolidate allocation checks and simplify
- cleanup on a failed allocation.*/
-struct OpusStringBuf{
- char *buf;
- int nbuf;
- int cbuf;
-};
-
-static void op_sb_init(OpusStringBuf *_sb){
- _sb->buf=NULL;
- _sb->nbuf=0;
- _sb->cbuf=0;
-}
-
-static void op_sb_clear(OpusStringBuf *_sb){
- _ogg_free(_sb->buf);
-}
-
-/*Make sure we have room for at least _capacity characters (plus 1 more for the
- terminating NUL).*/
-static int op_sb_ensure_capacity(OpusStringBuf *_sb,int _capacity){
- char *buf;
- int cbuf;
- buf=_sb->buf;
- cbuf=_sb->cbuf;
- if(_capacity>=cbuf-1){
- if(OP_UNLIKELY(cbuf>INT_MAX-1>>1))return OP_EFAULT;
- if(OP_UNLIKELY(_capacity>=INT_MAX-1))return OP_EFAULT;
- cbuf=OP_MAX(2*cbuf+1,_capacity+1);
- buf=_ogg_realloc(buf,sizeof(*buf)*cbuf);
- if(OP_UNLIKELY(buf==NULL))return OP_EFAULT;
- _sb->buf=buf;
- _sb->cbuf=cbuf;
- }
- return 0;
-}
-
-/*Increase the capacity of the buffer, but not to more than _max_size
- characters (plus 1 more for the terminating NUL).*/
-static int op_sb_grow(OpusStringBuf *_sb,int _max_size){
- char *buf;
- int cbuf;
- buf=_sb->buf;
- cbuf=_sb->cbuf;
- OP_ASSERT(_max_size<=INT_MAX-1);
- cbuf=cbuf<=_max_size-1>>1?2*cbuf+1:_max_size+1;
- buf=_ogg_realloc(buf,sizeof(*buf)*cbuf);
- if(OP_UNLIKELY(buf==NULL))return OP_EFAULT;
- _sb->buf=buf;
- _sb->cbuf=cbuf;
- return 0;
-}
-
-static int op_sb_append(OpusStringBuf *_sb,const char *_s,int _len){
- char *buf;
- int nbuf;
- int ret;
- nbuf=_sb->nbuf;
- if(OP_UNLIKELY(nbuf>INT_MAX-_len))return OP_EFAULT;
- ret=op_sb_ensure_capacity(_sb,nbuf+_len);
- if(OP_UNLIKELY(ret<0))return ret;
- buf=_sb->buf;
- memcpy(buf+nbuf,_s,sizeof(*buf)*_len);
- nbuf+=_len;
- buf[nbuf]='\0';
- _sb->nbuf=nbuf;
- return 0;
-}
-
-static int op_sb_append_string(OpusStringBuf *_sb,const char *_s){
- return op_sb_append(_sb,_s,strlen(_s));
-}
-
-static int op_sb_append_port(OpusStringBuf *_sb,unsigned _port){
- char port_buf[7];
- OP_ASSERT(_port<=65535U);
- sprintf(port_buf,":%u",_port);
- return op_sb_append_string(_sb,port_buf);
-}
-
-static int op_sb_append_nonnegative_int64(OpusStringBuf *_sb,opus_int64 _i){
- char digit;
- int nbuf_start;
- int ret;
- OP_ASSERT(_i>=0);
- nbuf_start=_sb->nbuf;
- ret=0;
- do{
- digit='0'+_i%10;
- ret|=op_sb_append(_sb,&digit,1);
- _i/=10;
- }
- while(_i>0);
- if(OP_LIKELY(ret>=0)){
- char *buf;
- int nbuf_end;
- buf=_sb->buf;
- nbuf_end=_sb->nbuf-1;
- /*We've added the digits backwards.
- Reverse them.*/
- while(nbuf_start<nbuf_end){
- digit=buf[nbuf_start];
- buf[nbuf_start]=buf[nbuf_end];
- buf[nbuf_end]=digit;
- nbuf_start++;
- nbuf_end--;
- }
- }
- return ret;
-}
-
-static struct addrinfo *op_resolve(const char *_host,unsigned _port){
- struct addrinfo *addrs;
- struct addrinfo hints;
- char service[6];
- memset(&hints,0,sizeof(hints));
- hints.ai_socktype=SOCK_STREAM;
-#if defined(AI_NUMERICSERV)
- hints.ai_flags=AI_NUMERICSERV;
-#endif
- OP_ASSERT(_port<=65535U);
- sprintf(service,"%u",_port);
- if(OP_LIKELY(!getaddrinfo(_host,service,&hints,&addrs)))return addrs;
- return NULL;
-}
-
-static int op_sock_set_nonblocking(op_sock _fd,int _nonblocking){
-#if !defined(_WIN32)
- int flags;
- flags=fcntl(_fd,F_GETFL);
- if(OP_UNLIKELY(flags<0))return flags;
- if(_nonblocking)flags|=O_NONBLOCK;
- else flags&=~O_NONBLOCK;
- return fcntl(_fd,F_SETFL,flags);
-#else
- return ioctl(_fd,FIONBIO,&_nonblocking);
-#endif
-}
-
-/*Disable/enable write coalescing if we can.
- We always send whole requests at once and always parse the response headers
- before sending another one, so normally write coalescing just causes added
- delay.*/
-static void op_sock_set_tcp_nodelay(op_sock _fd,int _nodelay){
-# if defined(TCP_NODELAY)&&(defined(IPPROTO_TCP)||defined(SOL_TCP))
-# if defined(IPPROTO_TCP)
-# define OP_SO_LEVEL IPPROTO_TCP
-# else
-# define OP_SO_LEVEL SOL_TCP
-# endif
- /*It doesn't really matter if this call fails, but it would be interesting
- to hit a case where it does.*/
- OP_ALWAYS_TRUE(!setsockopt(_fd,OP_SO_LEVEL,TCP_NODELAY,
- &_nodelay,sizeof(_nodelay)));
-# endif
-}
-
-#if defined(_WIN32)
-static void op_init_winsock(){
- static LONG count;
- static WSADATA wsadata;
- if(InterlockedIncrement(&count)==1)WSAStartup(0x0202,&wsadata);
-}
-#endif
-
-/*A single physical connection to an HTTP server.
- We may have several of these open at once.*/
-struct OpusHTTPConn{
- /*The current position indicator for this connection.*/
- opus_int64 pos;
- /*The position where the current request will end, or -1 if we're reading
- until EOF (an unseekable stream or the initial HTTP/1.0 request).*/
- opus_int64 end_pos;
- /*The position where next request we've sent will start, or -1 if we haven't
- sent the next request yet.*/
- opus_int64 next_pos;
- /*The end of the next request or -1 if we requested the rest of the resource.
- This is only set to a meaningful value if next_pos is not -1.*/
- opus_int64 next_end;
- /*The SSL connection, if this is https.*/
- SSL *ssl_conn;
- /*The next connection in either the LRU or free list.*/
- OpusHTTPConn *next;
- /*The last time we blocked for reading from this connection.*/
- struct timeb read_time;
- /*The number of bytes we've read since the last time we blocked.*/
- opus_int64 read_bytes;
- /*The estimated throughput of this connection, in bytes/s.*/
- opus_int64 read_rate;
- /*The socket we're reading from.*/
- op_sock fd;
- /*The number of remaining requests we are allowed on this connection.*/
- int nrequests_left;
- /*The chunk size to use for pipelining requests.*/
- opus_int32 chunk_size;
-};
-
-static void op_http_conn_init(OpusHTTPConn *_conn){
- _conn->next_pos=-1;
- _conn->ssl_conn=NULL;
- _conn->next=NULL;
- _conn->fd=OP_INVALID_SOCKET;
-}
-
-static void op_http_conn_clear(OpusHTTPConn *_conn){
- if(_conn->ssl_conn!=NULL)SSL_free(_conn->ssl_conn);
- /*SSL frees the BIO for us.*/
- if(_conn->fd!=OP_INVALID_SOCKET)close(_conn->fd);
-}
-
-/*The global stream state.*/
-struct OpusHTTPStream{
- /*The list of connections.*/
- OpusHTTPConn conns[OP_NCONNS_MAX];
- /*The context object used as a framework for TLS/SSL functions.*/
- SSL_CTX *ssl_ctx;
- /*The cached session to reuse for future connections.*/
- SSL_SESSION *ssl_session;
- /*The LRU list (ordered from MRU to LRU) of currently connected
- connections.*/
- OpusHTTPConn *lru_head;
- /*The free list.*/
- OpusHTTPConn *free_head;
- /*The URL to connect to.*/
- OpusParsedURL url;
- /*Information about the address we connected to.*/
- struct addrinfo addr_info;
- /*The address we connected to.*/
- union{
- struct sockaddr s;
- struct sockaddr_in v4;
- struct sockaddr_in6 v6;
- } addr;
- /*The last time we re-resolved the host.*/
- struct timeb resolve_time;
- /*A buffer used to build HTTP requests.*/
- OpusStringBuf request;
- /*A buffer used to build proxy CONNECT requests.*/
- OpusStringBuf proxy_connect;
- /*A buffer used to receive the response headers.*/
- OpusStringBuf response;
- /*The Content-Length, if specified, or -1 otherwise.
- This will always be specified for seekable streams.*/
- opus_int64 content_length;
- /*The position indicator used when no connection is active.*/
- opus_int64 pos;
- /*The host we actually connected to.*/
- char *connect_host;
- /*The port we actually connected to.*/
- unsigned connect_port;
- /*The connection we're currently reading from.
- This can be -1 if no connection is active.*/
- int cur_conni;
- /*Whether or not the server supports range requests.*/
- int seekable;
- /*Whether or not the server supports HTTP/1.1 with persistent connections.*/
- int pipeline;
- /*Whether or not we should skip certificate checks.*/
- int skip_certificate_check;
- /*The offset of the tail of the request.
- Only the offset in the Range: header appears after this, allowing us to
- quickly edit the request to ask for a new range.*/
- int request_tail;
- /*The estimated time required to open a new connection, in milliseconds.*/
- opus_int32 connect_rate;
-};
-
-static void op_http_stream_init(OpusHTTPStream *_stream){
- OpusHTTPConn **pnext;
- int ci;
- pnext=&_stream->free_head;
- for(ci=0;ci<OP_NCONNS_MAX;ci++){
- op_http_conn_init(_stream->conns+ci);
- *pnext=_stream->conns+ci;
- pnext=&_stream->conns[ci].next;
- }
- _stream->ssl_ctx=NULL;
- _stream->ssl_session=NULL;
- _stream->lru_head=NULL;
- op_parsed_url_init(&_stream->url);
- op_sb_init(&_stream->request);
- op_sb_init(&_stream->proxy_connect);
- op_sb_init(&_stream->response);
- _stream->connect_host=NULL;
- _stream->seekable=0;
-}
-
-/*Close the connection and move it to the free list.
- _stream: The stream containing the free list.
- _conn: The connection to close.
- _penxt: The linked-list pointer currently pointing to this connection.
- _gracefully: Whether or not to shut down cleanly.*/
-static void op_http_conn_close(OpusHTTPStream *_stream,OpusHTTPConn *_conn,
- OpusHTTPConn **_pnext,int _gracefully){
- /*If we don't shut down gracefully, the server MUST NOT re-use our session
- according to RFC 2246, because it can't tell the difference between an
- abrupt close and a truncation attack.
- So we shut down gracefully if we can.
- However, we will not wait if this would block (it's not worth the savings
- from session resumption to do so).
- Clients (that's us) MAY resume a TLS session that ended with an incomplete
- close, according to RFC 2818, so there's no reason to make sure the server
- shut things down gracefully.*/
- if(_gracefully&&_conn->ssl_conn!=NULL)SSL_shutdown(_conn->ssl_conn);
- op_http_conn_clear(_conn);
- _conn->next_pos=-1;
- _conn->ssl_conn=NULL;
- _conn->fd=OP_INVALID_SOCKET;
- OP_ASSERT(*_pnext==_conn);
- *_pnext=_conn->next;
- _conn->next=_stream->free_head;
- _stream->free_head=_conn;
-}
-
-static void op_http_stream_clear(OpusHTTPStream *_stream){
- while(_stream->lru_head!=NULL){
- op_http_conn_close(_stream,_stream->lru_head,&_stream->lru_head,0);
- }
- if(_stream->ssl_session!=NULL)SSL_SESSION_free(_stream->ssl_session);
- if(_stream->ssl_ctx!=NULL)SSL_CTX_free(_stream->ssl_ctx);
- op_sb_clear(&_stream->response);
- op_sb_clear(&_stream->proxy_connect);
- op_sb_clear(&_stream->request);
- if(_stream->connect_host!=_stream->url.host)_ogg_free(_stream->connect_host);
- op_parsed_url_clear(&_stream->url);
-}
-
-static int op_http_conn_write_fully(OpusHTTPConn *_conn,
- const char *_buf,int _buf_size){
- struct pollfd fd;
- SSL *ssl_conn;
- fd.fd=_conn->fd;
- ssl_conn=_conn->ssl_conn;
- while(_buf_size>0){
- int err;
- if(ssl_conn!=NULL){
- int ret;
- ret=SSL_write(ssl_conn,_buf,_buf_size);
- if(ret>0){
- /*Wrote some data.*/
- _buf+=ret;
- _buf_size-=ret;
- continue;
- }
- /*Connection closed.*/
- else if(ret==0)return OP_FALSE;
- err=SSL_get_error(ssl_conn,ret);
- /*Yes, renegotiations can cause SSL_write() to block for reading.*/
- if(err==SSL_ERROR_WANT_READ)fd.events=POLLIN;
- else if(err==SSL_ERROR_WANT_WRITE)fd.events=POLLOUT;
- else return OP_FALSE;
- }
- else{
- ssize_t ret;
- op_reset_errno();
- ret=send(fd.fd,_buf,_buf_size,0);
- if(ret>0){
- _buf+=ret;
- _buf_size-=ret;
- continue;
- }
- err=op_errno();
- if(err!=EAGAIN&&err!=EWOULDBLOCK)return OP_FALSE;
- fd.events=POLLOUT;
- }
- if(poll(&fd,1,OP_POLL_TIMEOUT_MS)<=0)return OP_FALSE;
- }
- return 0;
-}
-
-static int op_http_conn_estimate_available(OpusHTTPConn *_conn){
- int available;
- int ret;
- ret=ioctl(_conn->fd,FIONREAD,&available);
- if(ret<0)available=0;
- /*This requires the SSL read_ahead flag to be unset to work.
- We ignore partial records as well as the protocol overhead for any pending
- bytes.
- This means we might return somewhat less than can truly be read without
- blocking (if there's a partial record).
- This is okay, because we're using this value to estimate network transfer
- time, and we _have_ already received those bytes.
- We also might return slightly more (due to protocol overhead), but that's
- small enough that it probably doesn't matter.*/
- if(_conn->ssl_conn!=NULL)available+=SSL_pending(_conn->ssl_conn);
- return available;
-}
-
-static opus_int32 op_time_diff_ms(const struct timeb *_end,
- const struct timeb *_start){
- opus_int64 dtime;
- dtime=_end->time-(opus_int64)_start->time;
- OP_ASSERT(_end->millitm<1000);
- OP_ASSERT(_start->millitm<1000);
- if(OP_UNLIKELY(dtime>(OP_INT32_MAX-1000)/1000))return OP_INT32_MAX;
- if(OP_UNLIKELY(dtime<(OP_INT32_MIN+1000)/1000))return OP_INT32_MIN;
- return (opus_int32)dtime*1000+_end->millitm-_start->millitm;
-}
-
-/*Update the read rate estimate for this connection.*/
-static void op_http_conn_read_rate_update(OpusHTTPConn *_conn){
- struct timeb read_time;
- opus_int32 read_delta_ms;
- opus_int64 read_delta_bytes;
- opus_int64 read_rate;
- read_delta_bytes=_conn->read_bytes;
- if(read_delta_bytes<=0)return;
- ftime(&read_time);
- read_delta_ms=op_time_diff_ms(&read_time,&_conn->read_time);
- read_rate=_conn->read_rate;
- read_delta_ms=OP_MAX(read_delta_ms,1);
- read_rate+=read_delta_bytes*1000/read_delta_ms-read_rate+4>>3;
- *&_conn->read_time=*&read_time;
- _conn->read_bytes=0;
- _conn->read_rate=read_rate;
-}
-
-/*Tries to read from the given connection.
- [out] _buf: Returns the data read.
- _buf_size: The size of the buffer.
- _blocking: Whether or not to block until some data is retrieved.
- Return: A positive number of bytes read on success.
- 0: The read would block, or the connection was closed.
- OP_EREAD: There was a fatal read error.*/
-static int op_http_conn_read(OpusHTTPConn *_conn,
- char *_buf,int _buf_size,int _blocking){
- struct pollfd fd;
- SSL *ssl_conn;
- int nread;
- int nread_unblocked;
- fd.fd=_conn->fd;
- ssl_conn=_conn->ssl_conn;
- nread=nread_unblocked=0;
- /*RFC 2818 says "client implementations MUST treat any premature closes as
- errors and the data received as potentially truncated," so we make very
- sure to report read errors upwards.*/
- do{
- int err;
- if(ssl_conn!=NULL){
- int ret;
- ret=SSL_read(ssl_conn,_buf+nread,_buf_size-nread);
- OP_ASSERT(ret<=_buf_size-nread);
- if(ret>0){
- /*Read some data.
- Keep going to see if there's more.*/
- nread+=ret;
- nread_unblocked+=ret;
- continue;
- }
- /*If we already read some data, return it right now.*/
- if(nread>0)break;
- err=SSL_get_error(ssl_conn,ret);
- if(ret==0){
- /*Connection close.
- Check for a clean shutdown to prevent truncation attacks.
- This check always succeeds for SSLv2, as it has no "close notify"
- message and thus can't verify an orderly shutdown.*/
- return err==SSL_ERROR_ZERO_RETURN?0:OP_EREAD;
- }
- if(err==SSL_ERROR_WANT_READ)fd.events=POLLIN;
- /*Yes, renegotiations can cause SSL_read() to block for writing.*/
- else if(err==SSL_ERROR_WANT_WRITE)fd.events=POLLOUT;
- /*Some other error.*/
- else return OP_EREAD;
- }
- else{
- ssize_t ret;
- op_reset_errno();
- ret=recv(fd.fd,_buf+nread,_buf_size-nread,0);
- OP_ASSERT(ret<=_buf_size-nread);
- if(ret>0){
- /*Read some data.
- Keep going to see if there's more.*/
- nread+=ret;
- nread_unblocked+=ret;
- continue;
- }
- /*If we already read some data or the connection was closed, return
- right now.*/
- if(ret==0||nread>0)break;
- err=op_errno();
- if(err!=EAGAIN&&err!=EWOULDBLOCK)return OP_EREAD;
- fd.events=POLLIN;
- }
- _conn->read_bytes+=nread_unblocked;
- op_http_conn_read_rate_update(_conn);
- nread_unblocked=0;
- if(!_blocking)break;
- /*Need to wait to get any data at all.*/
- if(poll(&fd,1,OP_POLL_TIMEOUT_MS)<=0)return OP_EREAD;
- }
- while(nread<_buf_size);
- _conn->read_bytes+=nread_unblocked;
- return nread;
-}
-
-/*Tries to look at the pending data for a connection without consuming it.
- [out] _buf: Returns the data at which we're peeking.
- _buf_size: The size of the buffer.*/
-static int op_http_conn_peek(OpusHTTPConn *_conn,char *_buf,int _buf_size){
- struct pollfd fd;
- SSL *ssl_conn;
- int ret;
- fd.fd=_conn->fd;
- ssl_conn=_conn->ssl_conn;
- for(;;){
- int err;
- if(ssl_conn!=NULL){
- ret=SSL_peek(ssl_conn,_buf,_buf_size);
- /*Either saw some data or the connection was closed.*/
- if(ret>=0)return ret;
- err=SSL_get_error(ssl_conn,ret);
- if(err==SSL_ERROR_WANT_READ)fd.events=POLLIN;
- /*Yes, renegotiations can cause SSL_peek() to block for writing.*/
- else if(err==SSL_ERROR_WANT_WRITE)fd.events=POLLOUT;
- else return 0;
- }
- else{
- op_reset_errno();
- ret=(int)recv(fd.fd,_buf,_buf_size,MSG_PEEK);
- /*Either saw some data or the connection was closed.*/
- if(ret>=0)return ret;
- err=op_errno();
- if(err!=EAGAIN&&err!=EWOULDBLOCK)return 0;
- fd.events=POLLIN;
- }
- /*Need to wait to get any data at all.*/
- if(poll(&fd,1,OP_POLL_TIMEOUT_MS)<=0)return 0;
- }
-}
-
-/*When parsing response headers, RFC 2616 mandates that all lines end in CR LF.
- However, even in the year 2012, I have seen broken servers use just a LF.
- This is the evil that Postel's advice from RFC 761 breeds.*/
-
-/*Reads the entirety of a response to an HTTP request into the response buffer.
- Actual parsing and validation is done later.
- Return: The number of bytes in the response on success, OP_EREAD if the
- connection was closed before reading any data, or another negative
- value on any other error.*/
-static int op_http_conn_read_response(OpusHTTPConn *_conn,
- OpusStringBuf *_response){
- int ret;
- _response->nbuf=0;
- ret=op_sb_ensure_capacity(_response,OP_RESPONSE_SIZE_MIN);
- if(OP_UNLIKELY(ret<0))return ret;
- for(;;){
- char *buf;
- int size;
- int capacity;
- int read_limit;
- int terminated;
- size=_response->nbuf;
- capacity=_response->cbuf-1;
- if(OP_UNLIKELY(size>=capacity)){
- ret=op_sb_grow(_response,OP_RESPONSE_SIZE_MAX);
- if(OP_UNLIKELY(ret<0))return ret;
- capacity=_response->cbuf-1;
- /*The response was too large.
- This prevents a bad server from running us out of memory.*/
- if(OP_UNLIKELY(size>=capacity))return OP_EIMPL;
- }
- buf=_response->buf;
- ret=op_http_conn_peek(_conn,buf+size,capacity-size);
- if(OP_UNLIKELY(ret<=0))return size<=0?OP_EREAD:OP_FALSE;
- /*We read some data.*/
- /*Make sure the starting characters are "HTTP".
- Otherwise we could wind up waiting forever for a response from
- something that is not an HTTP server.*/
- if(size<4&&op_strncasecmp(buf,"HTTP",OP_MIN(size+ret,4))!=0){
- return OP_FALSE;
- }
- /*How far can we read without passing the "\r\n\r\n" terminator?*/
- buf[size+ret]='\0';
- terminated=0;
- for(read_limit=OP_MAX(size-3,0);read_limit<size+ret;read_limit++){
- /*We don't look for the leading '\r' thanks to broken servers.*/
- if(buf[read_limit]=='\n'){
- if(buf[read_limit+1]=='\r'&&OP_LIKELY(buf[read_limit+2]=='\n')){
- terminated=3;
- break;
- }
- /*This case is for broken servers.*/
- else if(OP_UNLIKELY(buf[read_limit+1]=='\n')){
- terminated=2;
- break;
- }
- }
- }
- read_limit+=terminated;
- OP_ASSERT(size<=read_limit);
- OP_ASSERT(read_limit<=size+ret);
- /*Actually consume that data.*/
- ret=op_http_conn_read(_conn,buf+size,read_limit-size,1);
- if(OP_UNLIKELY(ret<=0))return OP_FALSE;
- size+=ret;
- buf[size]='\0';
- _response->nbuf=size;
- /*We found the terminator and read all the data up to and including it.*/
- if(terminated&&OP_LIKELY(size>=read_limit))return size;
- }
- return OP_EIMPL;
-}
-
-# define OP_HTTP_DIGIT "0123456789"
-
-/*The Reason-Phrase is not allowed to contain control characters, except
- horizontal tab (HT: \011).*/
-# define OP_HTTP_CREASON_PHRASE \
- "\001\002\003\004\005\006\007\010\012\013\014\015\016\017\020\021" \
- "\022\023\024\025\026\027\030\031\032\033\034\035\036\037\177"
-
-# define OP_HTTP_CTLS \
- "\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020" \
- "\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\177"
-
-/*This also includes '\t', but we get that from OP_HTTP_CTLS.*/
-# define OP_HTTP_SEPARATORS " \"(),/:;<=>?@[\\]{}"
-
-/*TEXT can also include LWS, but that has structure, so we parse it
- separately.*/
-# define OP_HTTP_CTOKEN OP_HTTP_CTLS OP_HTTP_SEPARATORS
-
-/*Return: The amount of linear white space (LWS) at the start of _s.*/
-static int op_http_lwsspn(const char *_s){
- int i;
- for(i=0;;){
- if(_s[0]=='\r'&&_s[1]=='\n'&&(_s[2]=='\t'||_s[2]==' '))i+=3;
- /*This case is for broken servers.*/
- else if(_s[0]=='\n'&&(_s[1]=='\t'||_s[1]==' '))i+=2;
- else if(_s[i]=='\t'||_s[i]==' ')i++;
- else return i;
- }
-}
-
-static char *op_http_parse_status_line(int *_v1_1_compat,
- char **_status_code,char *_response){
- char *next;
- char *status_code;
- int v1_1_compat;
- size_t d;
- /*RFC 2616 Section 6.1 does not say that the tokens in the Status-Line cannot
- be separated by optional LWS, but since it specifically calls out where
- spaces are to be placed and that CR and LF are not allowed except at the
- end, I am assuming this to be true.*/
- /*We already validated that this starts with "HTTP"*/
- OP_ASSERT(op_strncasecmp(_response,"HTTP",4)==0);
- next=_response+4;
- if(OP_UNLIKELY(*next++!='/'))return NULL;
- d=strspn(next,OP_HTTP_DIGIT);
- /*"Leading zeros MUST be ignored by recipients."*/
- while(*next=='0'){
- next++;
- OP_ASSERT(d>0);
- d--;
- }
- /*We only support version 1.x*/
- if(OP_UNLIKELY(d!=1)||OP_UNLIKELY(*next++!='1'))return NULL;
- if(OP_UNLIKELY(*next++!='.'))return NULL;
- d=strspn(next,OP_HTTP_DIGIT);
- if(OP_UNLIKELY(d<=0))return NULL;
- /*"Leading zeros MUST be ignored by recipients."*/
- while(*next=='0'){
- next++;
- OP_ASSERT(d>0);
- d--;
- }
- /*We don't need to parse the version number.
- Any non-zero digit means it's greater than 1.*/
- v1_1_compat=d>0;
- next+=d;
- if(OP_UNLIKELY(*next++!=' '))return NULL;
- status_code=next;
- d=strspn(next,OP_HTTP_DIGIT);
- if(OP_UNLIKELY(d!=3))return NULL;
- next+=d;
- /*The Reason-Phrase can be empty, but the space must be here.*/
- if(OP_UNLIKELY(*next++!=' '))return NULL;
- next+=strcspn(next,OP_HTTP_CREASON_PHRASE);
- /*We are not mandating this be present thanks to broken servers.*/
- if(OP_LIKELY(*next=='\r'))next++;
- if(OP_UNLIKELY(*next++!='\n'))return NULL;
- if(_v1_1_compat!=NULL)*_v1_1_compat=v1_1_compat;
- *_status_code=status_code;
- return next;
-}
-
-/*Get the next response header.
- [out] _header: The header token, NUL-terminated, with leading and trailing
- whitespace stripped, and converted to lower case (to simplify
- case-insensitive comparisons), or NULL if there are no more
- response headers.
- [out] _cdr: The remaining contents of the header, excluding the initial
- colon (':') and the terminating CRLF ("\r\n"),
- NUL-terminated, and with leading and trailing whitespace
- stripped, or NULL if there are no more response headers.
- [inout] _s: On input, this points to the start of the current line of the
- response headers.
- On output, it points to the start of the first line following
- this header, or NULL if there are no more response headers.
- Return: 0 on success, or a negative value on failure.*/
-static int op_http_get_next_header(char **_header,char **_cdr,char **_s){
- char *header;
- char *header_end;
- char *cdr;
- char *cdr_end;
- char *next;
- size_t d;
- next=*_s;
- /*The second case is for broken servers.*/
- if(next[0]=='\r'&&next[1]=='\n'||OP_UNLIKELY(next[0]=='\n')){
- /*No more headers.*/
- *_header=NULL;
- *_cdr=NULL;
- *_s=NULL;
- return 0;
- }
- header=next+op_http_lwsspn(next);
- d=strcspn(header,OP_HTTP_CTOKEN);
- if(OP_UNLIKELY(d<=0))return OP_FALSE;
- header_end=header+d;
- next=header_end+op_http_lwsspn(header_end);
- if(OP_UNLIKELY(*next++!=':'))return OP_FALSE;
- next+=op_http_lwsspn(next);
- cdr=next;
- do{
- cdr_end=next+strcspn(next,OP_HTTP_CTLS);
- next=cdr_end+op_http_lwsspn(cdr_end);
- }
- while(next>cdr_end);
- /*We are not mandating this be present thanks to broken servers.*/
- if(OP_LIKELY(*next=='\r'))next++;
- if(OP_UNLIKELY(*next++!='\n'))return OP_FALSE;
- *header_end='\0';
- *cdr_end='\0';
- /*Field names are case-insensitive.*/
- op_string_tolower(header);
- *_header=header;
- *_cdr=cdr;
- *_s=next;
- return 0;
-}
-
-static opus_int64 op_http_parse_nonnegative_int64(const char **_next,
- const char *_cdr){
- const char *next;
- opus_int64 ret;
- int i;
- next=_cdr+strspn(_cdr,OP_HTTP_DIGIT);
- *_next=next;
- if(OP_UNLIKELY(next<=_cdr))return OP_FALSE;
- while(*_cdr=='0')_cdr++;
- if(OP_UNLIKELY(next-_cdr>19))return OP_EIMPL;
- ret=0;
- for(i=0;i<next-_cdr;i++){
- int digit;
- digit=_cdr[i]-'0';
- /*Check for overflow.*/
- if(OP_UNLIKELY(ret>(OP_INT64_MAX-9)/10+(digit<=7)))return OP_EIMPL;
- ret=ret*10+digit;
- }
- return ret;
-}
-
-static opus_int64 op_http_parse_content_length(const char *_cdr){
- const char *next;
- opus_int64 content_length;
- content_length=op_http_parse_nonnegative_int64(&next,_cdr);
- if(OP_UNLIKELY(*next!='\0'))return OP_FALSE;
- return content_length;
-}
-
-static int op_http_parse_content_range(opus_int64 *_first,opus_int64 *_last,
- opus_int64 *_length,const char *_cdr){
- opus_int64 first;
- opus_int64 last;
- opus_int64 length;
- size_t d;
- if(OP_UNLIKELY(op_strncasecmp(_cdr,"bytes",5)!=0))return OP_FALSE;
- _cdr+=5;
- d=op_http_lwsspn(_cdr);
- if(OP_UNLIKELY(d<=0))return OP_FALSE;
- _cdr+=d;
- if(*_cdr!='*'){
- first=op_http_parse_nonnegative_int64(&_cdr,_cdr);
- if(OP_UNLIKELY(first<0))return (int)first;
- _cdr+=op_http_lwsspn(_cdr);
- if(*_cdr++!='-')return OP_FALSE;
- _cdr+=op_http_lwsspn(_cdr);
- last=op_http_parse_nonnegative_int64(&_cdr,_cdr);
- if(OP_UNLIKELY(last<0))return (int)last;
- _cdr+=op_http_lwsspn(_cdr);
- }
- else{
- /*This is for a 416 response (Requested range not satisfiable).*/
- first=last=-1;
- _cdr++;
- }
- if(OP_UNLIKELY(*_cdr++!='/'))return OP_FALSE;
- if(*_cdr!='*'){
- length=op_http_parse_nonnegative_int64(&_cdr,_cdr);
- if(OP_UNLIKELY(length<0))return (int)length;
- }
- else{
- /*The total length is unspecified.*/
- _cdr++;
- length=-1;
- }
- if(OP_UNLIKELY(*_cdr!='\0'))return OP_FALSE;
- if(OP_UNLIKELY(last<first))return OP_FALSE;
- if(length>=0&&OP_UNLIKELY(last>=length))return OP_FALSE;
- *_first=first;
- *_last=last;
- *_length=length;
- return 0;
-}
-
-/*Parse the Connection response header and look for a "close" token.
- Return: 1 if a "close" token is found, 0 if it's not found, and a negative
- value on error.*/
-static int op_http_parse_connection(char *_cdr){
- size_t d;
- int ret;
- ret=0;
- for(;;){
- d=strcspn(_cdr,OP_HTTP_CTOKEN);
- if(OP_UNLIKELY(d<=0))return OP_FALSE;
- if(op_strncasecmp(_cdr,"close",(int)d)==0)ret=1;
- /*We're supposed to strip and ignore any headers mentioned in the
- Connection header if this response is from an HTTP/1.0 server (to
- work around forwarding of hop-by-hop headers by old proxies), but the
- only hop-by-hop header we look at is Connection itself.
- Everything else is a well-defined end-to-end header, and going back and
- undoing the things we did based on already-examined headers would be
- hard (since we only scan them once, in a destructive manner).
- Therefore we just ignore all the other tokens.*/
- _cdr+=d;
- d=op_http_lwsspn(_cdr);
- if(d<=0)break;
- _cdr+=d;
- }
- return OP_UNLIKELY(*_cdr!='\0')?OP_FALSE:ret;
-}
-
-typedef int (*op_ssl_step_func)(SSL *_ssl_conn);
-
-/*Try to run an SSL function to completion (blocking if necessary).*/
-static int op_do_ssl_step(SSL *_ssl_conn,op_sock _fd,op_ssl_step_func _step){
- struct pollfd fd;
- fd.fd=_fd;
- for(;;){
- int ret;
- int err;
- ret=(*_step)(_ssl_conn);
- if(ret>=0)return ret;
- err=SSL_get_error(_ssl_conn,ret);
- if(err==SSL_ERROR_WANT_READ)fd.events=POLLIN;
- else if(err==SSL_ERROR_WANT_WRITE)fd.events=POLLOUT;
- else return OP_FALSE;
- if(poll(&fd,1,OP_POLL_TIMEOUT_MS)<=0)return OP_FALSE;
- }
-}
-
-/*Implement a BIO type that just indicates every operation should be retried.
- We use this when initializing an SSL connection via a proxy to allow the
- initial handshake to proceed all the way up to the first read attempt, and
- then return.
- This allows the TLS client hello message to be pipelined with the HTTP
- CONNECT request.*/
-
-static int op_bio_retry_write(BIO *_b,const char *_buf,int _num){
- (void)_buf;
- (void)_num;
- BIO_clear_retry_flags(_b);
- BIO_set_retry_write(_b);
- return -1;
-}
-
-static int op_bio_retry_read(BIO *_b,char *_buf,int _num){
- (void)_buf;
- (void)_num;
- BIO_clear_retry_flags(_b);
- BIO_set_retry_read(_b);
- return -1;
-}
-
-static int op_bio_retry_puts(BIO *_b,const char *_str){
- return op_bio_retry_write(_b,_str,0);
-}
-
-static long op_bio_retry_ctrl(BIO *_b,int _cmd,long _num,void *_ptr){
- long ret;
- (void)_b;
- (void)_num;
- (void)_ptr;
- ret=0;
- switch(_cmd){
- case BIO_CTRL_RESET:
- case BIO_C_RESET_READ_REQUEST:{
- BIO_clear_retry_flags(_b);
- /*Fall through.*/
- }
- case BIO_CTRL_EOF:
- case BIO_CTRL_SET:
- case BIO_CTRL_SET_CLOSE:
- case BIO_CTRL_FLUSH:
- case BIO_CTRL_DUP:{
- ret=1;
- }break;
- }
- return ret;
-}
-
-static int op_bio_retry_new(BIO *_b){
- _b->init=1;
- _b->num=0;
- _b->ptr=NULL;
- return 1;
-}
-
-static int op_bio_retry_free(BIO *_b){
- return _b!=NULL;
-}
-
-/*This is not const because OpenSSL doesn't allow it, even though it won't
- write to it.*/
-static BIO_METHOD op_bio_retry_method={
- BIO_TYPE_NULL,
- "retry",
- op_bio_retry_write,
- op_bio_retry_read,
- op_bio_retry_puts,
- NULL,
- op_bio_retry_ctrl,
- op_bio_retry_new,
- op_bio_retry_free,
- NULL
-};
-
-/*Establish a CONNECT tunnel and pipeline the start of the TLS handshake for
- proxying https URL requests.*/
-static int op_http_conn_establish_tunnel(OpusHTTPStream *_stream,
- OpusHTTPConn *_conn,op_sock _fd,SSL *_ssl_conn,BIO *_ssl_bio){
- BIO *retry_bio;
- char *status_code;
- char *next;
- int ret;
- _conn->ssl_conn=NULL;
- _conn->fd=_fd;
- OP_ASSERT(_stream->proxy_connect.nbuf>0);
- ret=op_http_conn_write_fully(_conn,
- _stream->proxy_connect.buf,_stream->proxy_connect.nbuf);
- if(OP_UNLIKELY(ret<0))return ret;
- retry_bio=BIO_new(&op_bio_retry_method);
- if(OP_UNLIKELY(retry_bio==NULL))return OP_EFAULT;
- SSL_set_bio(_ssl_conn,retry_bio,_ssl_bio);
- SSL_set_connect_state(_ssl_conn);
- /*This shouldn't succeed, since we can't read yet.*/
- OP_ALWAYS_TRUE(SSL_connect(_ssl_conn)<0);
- SSL_set_bio(_ssl_conn,_ssl_bio,_ssl_bio);
- /*Only now do we disable write coalescing, to allow the CONNECT
- request and the start of the TLS handshake to be combined.*/
- op_sock_set_tcp_nodelay(_fd,1);
- ret=op_http_conn_read_response(_conn,&_stream->response);
- if(OP_UNLIKELY(ret<0))return ret;
- next=op_http_parse_status_line(NULL,&status_code,_stream->response.buf);
- /*According to RFC 2817, "Any successful (2xx) response to a
- CONNECT request indicates that the proxy has established a
- connection to the requested host and port.*/
- if(OP_UNLIKELY(next==NULL)||OP_UNLIKELY(status_code[0]!='2'))return OP_FALSE;
- return 0;
-}
-
-/*Match a host name against a host with a possible wildcard pattern according
- to the rules of RFC 6125 Section 6.4.3.
- Return: 0 if the pattern doesn't match, and a non-zero value if it does.*/
-static int op_http_hostname_match(const char *_host,size_t _host_len,
- ASN1_STRING *_pattern){
- const char *pattern;
- size_t host_label_len;
- size_t host_suffix_len;
- size_t pattern_len;
- size_t pattern_label_len;
- size_t pattern_prefix_len;
- size_t pattern_suffix_len;
- pattern=(const char *)ASN1_STRING_data(_pattern);
- pattern_len=strlen(pattern);
- /*Check the pattern for embedded NULs.*/
- if(OP_UNLIKELY(pattern_len!=(size_t)ASN1_STRING_length(_pattern)))return 0;
- pattern_label_len=strcspn(pattern,".");
- OP_ASSERT(pattern_label_len<=pattern_len);
- pattern_prefix_len=strcspn(pattern,"*");
- if(pattern_prefix_len>=pattern_label_len){
- /*"The client SHOULD NOT attempt to match a presented identifier in which
- the wildcard character comprises a label other than the left-most label
- (e.g., do not match bar.*.example.net)." [RFC 6125 Section 6.4.3]*/
- if(pattern_prefix_len<pattern_len)return 0;
- /*If the pattern does not contain a wildcard in the first element, do an
- exact match.
- Don't use the system strcasecmp here, as that uses the locale and
- RFC 4343 makes clear that DNS's case-insensitivity only applies to
- the ASCII range.*/
- return _host_len==pattern_len&&op_strncasecmp(_host,pattern,_host_len)==0;
- }
- /*"However, the client SHOULD NOT attempt to match a presented identifier
- where the wildcard character is embedded within an A-label or U-label of
- an internationalized domain name." [RFC 6125 Section 6.4.3]*/
- if(op_strncasecmp(pattern,"xn--",4)==0)return 0;
- host_label_len=strcspn(_host,".");
- /*Make sure the host has at least two dots, to prevent the wildcard match
- from being ridiculously wide.
- We should have already checked to ensure it had at least one.*/
- if(OP_UNLIKELY(_host[host_label_len]!='.')
- ||strchr(_host+host_label_len+1,'.')==NULL){
- return 0;
- }
- OP_ASSERT(host_label_len<_host_len);
- /*"If the wildcard character is the only character of the left-most label in
- the presented identifier, the client SHOULD NOT compare against anything
- but the left-most label of the reference identifier (e.g., *.example.com
- would match foo.example.com but not bar.foo.example.com)." [RFC 6125
- Section 6.4.3]
- This is really confusingly worded, as we check this by actually comparing
- the rest of the pattern for an exact match.
- We also use the fact that the wildcard must match at least one character,
- so the left-most label of the hostname must be at least as large as the
- left-most label of the pattern.*/
- if(host_label_len<pattern_label_len)return 0;
- OP_ASSERT(pattern[pattern_prefix_len]=='*');
- /*"The client MAY match a presented identifier in which the wildcard
- character is not the only character of the label (e.g., baz*.example.net
- and *baz.example.net and b*z.example.net would be taken to match
- baz1.example.net and foobaz.example.net and buzz.example.net,
- respectively)." [RFC 6125 Section 6.4.3]*/
- pattern_suffix_len=pattern_len-pattern_prefix_len-1;
- host_suffix_len=_host_len-host_label_len
- +pattern_label_len-pattern_prefix_len-1;
- return pattern_suffix_len==host_suffix_len
- &&op_strncasecmp(_host,pattern,pattern_prefix_len)==0
- &&op_strncasecmp(_host+_host_len-host_suffix_len,
- pattern+pattern_prefix_len+1,host_suffix_len)==0;
-}
-
-/*Convert a host to a numeric address, if possible.
- Return: A struct addrinfo containing the address, if it was numeric, and NULL
- otherise.*/
-static struct addrinfo *op_inet_pton(const char *_host){
- struct addrinfo *addrs;
- struct addrinfo hints;
- memset(&hints,0,sizeof(hints));
- hints.ai_socktype=SOCK_STREAM;
- hints.ai_flags=AI_NUMERICHOST;
- if(!getaddrinfo(_host,NULL,&hints,&addrs))return addrs;
- return NULL;
-}
-
-/*Verify the server's hostname matches the certificate they presented using
- the procedure from Section 6 of RFC 6125.
- Return: 0 if the certificate doesn't match, and a non-zero value if it does.*/
-static int op_http_verify_hostname(OpusHTTPStream *_stream,SSL *_ssl_conn){
- X509 *peer_cert;
- STACK_OF(GENERAL_NAME) *san_names;
- char *host;
- size_t host_len;
- int ret;
- host=_stream->url.host;
- host_len=strlen(host);
- peer_cert=SSL_get_peer_certificate(_ssl_conn);
- /*We set VERIFY_PEER, so we shouldn't get here without a certificate.*/
- if(OP_UNLIKELY(peer_cert==NULL))return 0;
- ret=0;
- OP_ASSERT(host_len<INT_MAX);
- /*RFC 2818 says (after correcting for Eratta 1077): "If a subjectAltName
- extension of type dNSName is present, that MUST be used as the identity.
- Otherwise, the (most specific) Common Name field in the Subject field of
- the certificate MUST be used.
- Although the use of the Common Name is existing practice, it is deprecated
- and Certification Authorities are encouraged to use the dNSName
- instead."
- "Matching is performed using the matching rules specified by RFC 2459.
- If more than one identity of a given type is present in the certificate
- (e.g., more than one dNSName name), a match in any one of the set is
- considered acceptable.
- Names may contain the wildcard character * which is condered to match any
- single domain name component or component fragment.
- E.g., *.a.com matches foo.a.com but not bar.foo.a.com.
- f*.com matches foo.com but not bar.com."
- "In some cases, the URI is specified as an IP address rather than a
- hostname.
- In this case, the iPAddress subjectAltName must be present in the
- certificate and must exactly match the IP in the URI."*/
- san_names=X509_get_ext_d2i(peer_cert,NID_subject_alt_name,NULL,NULL);
- if(san_names!=NULL){
- struct addrinfo *addr;
- unsigned char *ip;
- int ip_len;
- int nsan_names;
- int sni;
- /*Check to see if the host was specified as a simple IP address.*/
- addr=op_inet_pton(host);
- ip=NULL;
- ip_len=0;
- if(addr!=NULL){
- switch(addr->ai_family){
- case AF_INET:{
- struct sockaddr_in *s;
- s=(struct sockaddr_in *)addr->ai_addr;
- OP_ASSERT(addr->ai_addrlen>=sizeof(*s));
- ip=(unsigned char *)&s->sin_addr;
- ip_len=sizeof(s->sin_addr);
- }break;
- case AF_INET6:{
- struct sockaddr_in6 *s;
- s=(struct sockaddr_in6 *)addr->ai_addr;
- OP_ASSERT(addr->ai_addrlen>=sizeof(*s));
- ip=(unsigned char *)&s->sin6_addr;
- ip_len=sizeof(s->sin6_addr);
- }break;
- }
- }
- /*We can only verify fully-qualified domain names.
- To quote RFC 6125: "The extracted data MUST include only information that
- can be securely parsed out of the inputs (e.g., parsing the fully
- qualified DNS domain name out of the "host" component (or its
- equivalent) of a URI or deriving the application service type from the
- scheme of a URI) ..."
- We don't have a way to check (without relying on DNS records, which might
- be subverted) if this address is fully-qualified.
- This is particularly problematic when using a CONNECT tunnel, as it is
- the server that does DNS lookup, not us.
- However, we are certain that if the hostname has no '.', it is definitely
- not a fully-qualified domain name (with the exception of crazy TLDs that
- actually resolve, like "uz", but I am willing to ignore those).
- RFC 1535 says "...in any event where a '.' exists in a specified name it
- should be assumed to be a fully qualified domain name (FQDN) and SHOULD
- be tried as a rooted name first."
- That doesn't give us any security guarantees, of course (a subverted DNS
- could fail the original query and our resolver might still retry with a
- local domain appended).
- If we don't have a FQDN, just set the number of names to 0, so we'll fail
- and clean up any resources we allocated.*/
- if(ip==NULL&&strchr(host,'.')==NULL)nsan_names=0;
- /*RFC 2459 says there MUST be at least one, but we don't depend on it.*/
- else nsan_names=sk_GENERAL_NAME_num(san_names);
- for(sni=0;sni<nsan_names;sni++){
- const GENERAL_NAME *name;
- name=sk_GENERAL_NAME_value(san_names,sni);
- if(ip==NULL){
- if(name->type==GEN_DNS
- &&op_http_hostname_match(host,host_len,name->d.dNSName)){
- ret=1;
- break;
- }
- }
- else if(name->type==GEN_IPADD){
- unsigned char *cert_ip;
- /*If we do have an IP address, compare it directly.
- RFC 6125: "When the reference identity is an IP address, the identity
- MUST be converted to the 'network byte order' octet string
- representation.
- For IP Version 4, as specified in RFC 791, the octet string will
- contain exactly four octets.
- For IP Version 6, as specified in RFC 2460, the octet string will
- contain exactly sixteen octets.
- This octet string is then compared against subjectAltName values of
- type iPAddress.
- A match occurs if the reference identity octet string and the value
- octet strings are identical."*/
- cert_ip=ASN1_STRING_data(name->d.iPAddress);
- if(ip_len==ASN1_STRING_length(name->d.iPAddress)
- &&memcmp(ip,cert_ip,ip_len)==0){
- ret=1;
- break;
- }
- }
- }
- sk_GENERAL_NAME_pop_free(san_names,GENERAL_NAME_free);
- if(addr!=NULL)freeaddrinfo(addr);
- }
- /*Do the same FQDN check we did above.
- We don't do this once in advance for both cases, because in the
- subjectAltName case we might have an IPv6 address without a dot.*/
- else if(strchr(host,'.')!=NULL){
- int last_cn_loc;
- int cn_loc;
- /*If there is no subjectAltName, match against commonName.
- RFC 6125 says that at least one significant CA is known to issue certs
- with multiple CNs, although it SHOULD NOT.
- It also says: "The server's identity may also be verified by comparing
- the reference identity to the Common Name (CN) value in the last
- Relative Distinguished Name (RDN) of the subject field of the server's
- certificate (where "last" refers to the DER-encoded order...)."
- So find the last one and check it.*/
- cn_loc=-1;
- do{
- last_cn_loc=cn_loc;
- cn_loc=X509_NAME_get_index_by_NID(X509_get_subject_name(peer_cert),
- NID_commonName,last_cn_loc);
- }
- while(cn_loc>=0);
- ret=last_cn_loc>=0
- &&op_http_hostname_match(host,host_len,
- X509_NAME_ENTRY_get_data(
- X509_NAME_get_entry(X509_get_subject_name(peer_cert),last_cn_loc)));
- }
- X509_free(peer_cert);
- return ret;
-}
-
-/*Perform the TLS handshake on a new connection.*/
-static int op_http_conn_start_tls(OpusHTTPStream *_stream,OpusHTTPConn *_conn,
- op_sock _fd,SSL *_ssl_conn){
- SSL_SESSION *ssl_session;
- BIO *ssl_bio;
- int skip_certificate_check;
- int ret;
- ssl_bio=BIO_new_socket(_fd,BIO_NOCLOSE);
- if(OP_LIKELY(ssl_bio==NULL))return OP_FALSE;
-# if !defined(OPENSSL_NO_TLSEXT)
- /*Support for RFC 6066 Server Name Indication.*/
- SSL_set_tlsext_host_name(_ssl_conn,_stream->url.host);
-# endif
- /*Resume a previous session if available.*/
- if(_stream->ssl_session!=NULL){
- SSL_set_session(_ssl_conn,_stream->ssl_session);
- }
- /*If we're proxying, establish the CONNECT tunnel.*/
- if(_stream->proxy_connect.nbuf>0){
- ret=op_http_conn_establish_tunnel(_stream,_conn,
- _fd,_ssl_conn,ssl_bio);
- if(OP_UNLIKELY(ret<0))return ret;
- }
- else{
- /*Otherwise, just use this socket directly.*/
- op_sock_set_tcp_nodelay(_fd,1);
- SSL_set_bio(_ssl_conn,ssl_bio,ssl_bio);
- SSL_set_connect_state(_ssl_conn);
- }
- ret=op_do_ssl_step(_ssl_conn,_fd,SSL_connect);
- if(OP_UNLIKELY(ret<=0))return OP_FALSE;
- ssl_session=_stream->ssl_session;
- skip_certificate_check=_stream->skip_certificate_check;
- if(ssl_session==NULL||!skip_certificate_check){
- ret=op_do_ssl_step(_ssl_conn,_fd,SSL_do_handshake);
- if(OP_UNLIKELY(ret<=0))return OP_FALSE;
- /*OpenSSL does not do hostname verification, despite the fact that we just
- passed it the hostname above in the call to SSL_set_tlsext_host_name(),
- because they are morons.
- Do it for them.*/
- if(!skip_certificate_check&&!op_http_verify_hostname(_stream,_ssl_conn)){
- return OP_FALSE;
- }
- if(ssl_session==NULL){
- /*Save the session for later resumption.*/
- _stream->ssl_session=SSL_get1_session(_ssl_conn);
- }
- }
- _conn->ssl_conn=_ssl_conn;
- _conn->fd=_fd;
- _conn->nrequests_left=OP_PIPELINE_MAX_REQUESTS;
- return 0;
-}
-
-/*Try to start a connection to the next address in the given list of a given
- type.
- _fd: The socket to connect with.
- [inout] _addr: A pointer to the list of addresses.
- This will be advanced to the first one that matches the given
- address family (possibly the current one).
- _ai_family: The address family to connect to.
- Return: 1 If the connection was successful.
- 0 If the connection is in progress.
- OP_FALSE If the connection failed and there were no more addresses
- left to try.
- *_addr will be set to NULL in this case.*/
-static int op_sock_connect_next(op_sock _fd,
- const struct addrinfo **_addr,int _ai_family){
- const struct addrinfo *addr;
- int err;
- addr=*_addr;
- for(;;){
- /*Move to the next address of the requested type.*/
- for(;addr!=NULL&&addr->ai_family!=_ai_family;addr=addr->ai_next);
- *_addr=addr;
- /*No more: failure.*/
- if(addr==NULL)return OP_FALSE;
- if(connect(_fd,addr->ai_addr,addr->ai_addrlen)>=0)return 1;
- err=op_errno();
- /*Winsock will set WSAEWOULDBLOCK.*/
- if(OP_LIKELY(err==EINPROGRESS||err==EWOULDBLOCK))return 0;
- addr=addr->ai_next;
- }
-}
-
-/*The number of address families to try connecting to simultaneously.*/
-# define OP_NPROTOS (2)
-
-static int op_http_connect_impl(OpusHTTPStream *_stream,OpusHTTPConn *_conn,
- const struct addrinfo *_addrs,struct timeb *_start_time){
- const struct addrinfo *addr;
- const struct addrinfo *addrs[OP_NPROTOS];
- struct pollfd fds[OP_NPROTOS];
- int ai_family;
- int nprotos;
- int ret;
- int pi;
- int pj;
- for(pi=0;pi<OP_NPROTOS;pi++)addrs[pi]=NULL;
- /*Try connecting via both IPv4 and IPv6 simultaneously, and keep the first
- one that succeeds.
- Start by finding the first address from each family.
- We order the first connection attempts in the same order the address
- families were returned in the DNS records in accordance with RFC 6555.*/
- for(addr=_addrs,nprotos=0;addr!=NULL&&nprotos<OP_NPROTOS;addr=addr->ai_next){
- if(addr->ai_family==AF_INET6||addr->ai_family==AF_INET){
- OP_ASSERT(addr->ai_addrlen<=sizeof(struct sockaddr_in6));
- OP_ASSERT(addr->ai_addrlen<=sizeof(struct sockaddr_in));
- /*If we've seen this address family before, skip this address for now.*/
- for(pi=0;pi<nprotos;pi++)if(addrs[pi]->ai_family==addr->ai_family)break;
- if(pi<nprotos)continue;
- addrs[nprotos++]=addr;
- }
- }
- /*Pop the connection off the free list and put it on the LRU list.*/
- OP_ASSERT(_stream->free_head==_conn);
- _stream->free_head=_conn->next;
- _conn->next=_stream->lru_head;
- _stream->lru_head=_conn;
- ftime(_start_time);
- *&_conn->read_time=*_start_time;
- _conn->read_bytes=0;
- _conn->read_rate=0;
- /*Try to start a connection to each protocol.
- RFC 6555 says it is RECOMMENDED that connection attempts be paced
- 150...250 ms apart "to balance human factors against network load", but
- that "stateful algorithms" (that's us) "are expected to be more
- aggressive".
- We are definitely more aggressive: we don't pace at all.*/
- for(pi=0;pi<nprotos;pi++){
- ai_family=addrs[pi]->ai_family;
- fds[pi].fd=socket(ai_family,SOCK_STREAM,addrs[pi]->ai_protocol);
- fds[pi].events=POLLOUT;
- if(OP_LIKELY(fds[pi].fd!=OP_INVALID_SOCKET)){
- if(OP_LIKELY(op_sock_set_nonblocking(fds[pi].fd,1)>=0)){
- ret=op_sock_connect_next(fds[pi].fd,addrs+pi,ai_family);
- if(OP_UNLIKELY(ret>0)){
- /*It succeeded right away (technically possible), so stop.*/
- nprotos=pi+1;
- break;
- }
- /*Otherwise go on to the next protocol, and skip the clean-up below.*/
- else if(ret==0)continue;
- /*Tried all the addresses for this protocol.*/
- }
- /*Clean up the socket.*/
- close(fds[pi].fd);
- }
- /*Remove this protocol from the list.*/
- memmove(addrs+pi,addrs+pi+1,sizeof(*addrs)*(nprotos-pi-1));
- nprotos--;
- pi--;
- }
- /*Wait for one of the connections to finish.*/
- while(pi>=nprotos&&nprotos>0&&poll(fds,nprotos,OP_POLL_TIMEOUT_MS)>0){
- for(pi=0;pi<nprotos;pi++){
- socklen_t errlen;
- int err;
- /*Still waiting...*/
- if(!fds[pi].revents)continue;
- errlen=sizeof(err);
- /*Some platforms will return the pending error in &err and return 0.
- Others will put it in errno and return -1.*/
- ret=getsockopt(fds[pi].fd,SOL_SOCKET,SO_ERROR,&err,&errlen);
- if(ret<0)err=op_errno();
- /*Success!*/
- if(err==0||err==EISCONN)break;
- /*Move on to the next address for this protocol.*/
- ai_family=addrs[pi]->ai_family;
- addrs[pi]=addrs[pi]->ai_next;
- ret=op_sock_connect_next(fds[pi].fd,addrs+pi,ai_family);
- /*It succeeded right away, so stop.*/
- if(ret>0)break;
- /*Otherwise go on to the next protocol, and skip the clean-up below.*/
- else if(ret==0)continue;
- /*Tried all the addresses for this protocol.
- Remove it from the list.*/
- close(fds[pi].fd);
- memmove(fds+pi,fds+pi+1,sizeof(*fds)*(nprotos-pi-1));
- memmove(addrs+pi,addrs+pi+1,sizeof(*addrs)*(nprotos-pi-1));
- nprotos--;
- pi--;
- }
- }
- /*Close all the other sockets.*/
- for(pj=0;pj<nprotos;pj++)if(pi!=pj)close(fds[pj].fd);
- /*If none of them succeeded, we're done.*/
- if(pi>=nprotos)return OP_FALSE;
- /*Save this address for future connection attempts.*/
- if(addrs[pi]!=&_stream->addr_info){
- memcpy(&_stream->addr_info,addrs[pi],sizeof(_stream->addr_info));
- _stream->addr_info.ai_addr=&_stream->addr.s;
- _stream->addr_info.ai_next=NULL;
- memcpy(&_stream->addr,addrs[pi]->ai_addr,addrs[pi]->ai_addrlen);
- }
- if(OP_URL_IS_SSL(&_stream->url)){
- SSL *ssl_conn;
- /*Start the SSL connection.*/
- OP_ASSERT(_stream->ssl_ctx!=NULL);
- ssl_conn=SSL_new(_stream->ssl_ctx);
- if(OP_LIKELY(ssl_conn!=NULL)){
- ret=op_http_conn_start_tls(_stream,_conn,fds[pi].fd,ssl_conn);
- if(OP_LIKELY(ret>=0))return ret;
- SSL_free(ssl_conn);
- }
- close(fds[pi].fd);
- _conn->fd=OP_INVALID_SOCKET;
- return OP_FALSE;
- }
- /*Just a normal non-SSL connection.*/
- _conn->ssl_conn=NULL;
- _conn->fd=fds[pi].fd;
- _conn->nrequests_left=OP_PIPELINE_MAX_REQUESTS;
- /*Disable write coalescing.
- We always send whole requests at once and always parse the response headers
- before sending another one.*/
- op_sock_set_tcp_nodelay(fds[pi].fd,1);
- return 0;
-}
-
-static int op_http_connect(OpusHTTPStream *_stream,OpusHTTPConn *_conn,
- const struct addrinfo *_addrs,struct timeb *_start_time){
- struct timeb resolve_time;
- struct addrinfo *new_addrs;
- int ret;
- /*Re-resolve the host if we need to (RFC 6555 says we MUST do so
- occasionally).*/
- new_addrs=NULL;
- ftime(&resolve_time);
- if(_addrs!=&_stream->addr_info||op_time_diff_ms(&resolve_time,
- &_stream->resolve_time)>=OP_RESOLVE_CACHE_TIMEOUT_MS){
- new_addrs=op_resolve(_stream->connect_host,_stream->connect_port);
- if(OP_LIKELY(new_addrs!=NULL)){
- _addrs=new_addrs;
- *&_stream->resolve_time=*&resolve_time;
- }
- else if(OP_LIKELY(_addrs==NULL))return OP_FALSE;
- }
- ret=op_http_connect_impl(_stream,_conn,_addrs,_start_time);
- if(new_addrs!=NULL)freeaddrinfo(new_addrs);
- return ret;
-}
-
-# define OP_BASE64_LENGTH(_len) (((_len)+2)/3*4)
-
-static const char BASE64_TABLE[64]={
- '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','Z','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','z','0','1','2','3','4','5','6','7','8','9','+','/'
-};
-
-static char *op_base64_encode(char *_dst,const char *_src,int _len){
- unsigned s0;
- unsigned s1;
- unsigned s2;
- int ngroups;
- int i;
- ngroups=_len/3;
- for(i=0;i<ngroups;i++){
- s0=_src[3*i+0];
- s1=_src[3*i+1];
- s2=_src[3*i+2];
- _dst[4*i+0]=BASE64_TABLE[s0>>2];
- _dst[4*i+1]=BASE64_TABLE[(s0&3)<<4|s1>>4];
- _dst[4*i+2]=BASE64_TABLE[(s1&15)<<2|s2>>6];
- _dst[4*i+3]=BASE64_TABLE[s2&63];
- }
- _len-=3*i;
- if(_len==1){
- s0=_src[3*i+0];
- _dst[4*i+0]=BASE64_TABLE[s0>>2];
- _dst[4*i+1]=BASE64_TABLE[(s0&3)<<4];
- _dst[4*i+2]='=';
- _dst[4*i+3]='=';
- i++;
- }
- else if(_len==2){
- s0=_src[3*i+0];
- s1=_src[3*i+1];
- _dst[4*i+0]=BASE64_TABLE[s0>>2];
- _dst[4*i+1]=BASE64_TABLE[(s0&3)<<4|s1>>4];
- _dst[4*i+2]=BASE64_TABLE[(s1&15)<<2];
- _dst[4*i+3]='=';
- i++;
- }
- _dst[4*i]='\0';
- return _dst+4*i;
-}
-
-/*Construct an HTTP authorization header using RFC 2617's Basic Authentication
- Scheme and append it to the given string buffer.*/
-static int op_sb_append_basic_auth_header(OpusStringBuf *_sb,
- const char *_header,const char *_user,const char *_pass){
- int user_len;
- int pass_len;
- int user_pass_len;
- int base64_len;
- int nbuf_total;
- int ret;
- ret=op_sb_append_string(_sb,_header);
- ret|=op_sb_append(_sb,": Basic ",8);
- user_len=strlen(_user);
- pass_len=strlen(_pass);
- if(OP_UNLIKELY(pass_len>INT_MAX-user_len))return OP_EFAULT;
- if(OP_UNLIKELY(user_len+pass_len>(INT_MAX>>2)*3-3))return OP_EFAULT;
- user_pass_len=user_len+1+pass_len;
- base64_len=OP_BASE64_LENGTH(user_pass_len);
- /*Stick "user:pass" at the end of the buffer so we can Base64 encode it
- in-place.*/
- nbuf_total=_sb->nbuf;
- if(OP_UNLIKELY(base64_len>INT_MAX-nbuf_total))return OP_EFAULT;
- nbuf_total+=base64_len;
- ret|=op_sb_ensure_capacity(_sb,nbuf_total);
- if(OP_UNLIKELY(ret<0))return ret;
- _sb->nbuf=nbuf_total-user_pass_len;
- OP_ALWAYS_TRUE(!op_sb_append(_sb,_user,user_len));
- OP_ALWAYS_TRUE(!op_sb_append(_sb,":",1));
- OP_ALWAYS_TRUE(!op_sb_append(_sb,_pass,pass_len));
- op_base64_encode(_sb->buf+nbuf_total-base64_len,
- _sb->buf+nbuf_total-user_pass_len,user_pass_len);
- return op_sb_append(_sb,"\r\n",2);
-}
-
-static int op_http_allow_pipelining(const char *_server){
- /*Servers known to do bad things with pipelined requests.
- This list is taken from Gecko's nsHttpConnection::SupportsPipelining() (in
- netwerk/protocol/http/nsHttpConnection.cpp).*/
- static const char *BAD_SERVERS[]={
- "EFAServer/",
- "Microsoft-IIS/4.",
- "Microsoft-IIS/5.",
- "Netscape-Enterprise/3.",
- "Netscape-Enterprise/4.",
- "Netscape-Enterprise/5.",
- "Netscape-Enterprise/6.",
- "WebLogic 3.",
- "WebLogic 4.",
- "WebLogic 5.",
- "WebLogic 6.",
- "Winstone Servlet Engine v0."
- };
-# define NBAD_SERVERS ((int)(sizeof(BAD_SERVERS)/sizeof(*BAD_SERVERS)))
- if(*_server>='E'&&*_server<='W'){
- int si;
- for(si=0;si<NBAD_SERVERS;si++){
- if(strncmp(_server,BAD_SERVERS[si],strlen(BAD_SERVERS[si]))==0){
- return 0;
- }
- }
- }
- return 1;
-# undef NBAD_SERVERS
-}
-
-static int op_http_stream_open(OpusHTTPStream *_stream,const char *_url,
- int _skip_certificate_check,const char *_proxy_host,unsigned _proxy_port,
- const char *_proxy_user,const char *_proxy_pass,OpusServerInfo *_info){
- struct addrinfo *addrs;
- int nredirs;
- int ret;
-#if defined(_WIN32)
- op_init_winsock();
-#endif
- ret=op_parse_url(&_stream->url,_url);
- if(OP_UNLIKELY(ret<0))return ret;
- if(_proxy_host!=NULL){
- if(OP_UNLIKELY(_proxy_port>65535U))return OP_EINVAL;
- _stream->connect_host=op_string_dup(_proxy_host);
- _stream->connect_port=_proxy_port;
- }
- else{
- _stream->connect_host=_stream->url.host;
- _stream->connect_port=_stream->url.port;
- }
- addrs=NULL;
- for(nredirs=0;nredirs<OP_REDIRECT_LIMIT;nredirs++){
- OpusParsedURL next_url;
- struct timeb start_time;
- struct timeb end_time;
- char *next;
- char *status_code;
- int minor_version_pos;
- int v1_1_compat;
- /*Initialize the SSL library if necessary.*/
- if(OP_URL_IS_SSL(&_stream->url)&&_stream->ssl_ctx==NULL){
- SSL_CTX *ssl_ctx;
-# if !defined(OPENSSL_NO_LOCKING)
- /*The documentation says SSL_library_init() is not reentrant.
- We don't want to add our own depenencies on a threading library, and it
- appears that it's safe to call OpenSSL's locking functions before the
- library is initialized, so that's what we'll do (really OpenSSL should
- do this for us).
- This doesn't guarantee that _other_ threads in the application aren't
- calling SSL_library_init() at the same time, but there's not much we
- can do about that.*/
- CRYPTO_w_lock(CRYPTO_LOCK_SSL);
-# endif
- SSL_library_init();
- /*Needed to get SHA2 algorithms with old OpenSSL versions.*/
- OpenSSL_add_ssl_algorithms();
-# if !defined(OPENSSL_NO_LOCKING)
- CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
-# endif
- ssl_ctx=SSL_CTX_new(SSLv23_client_method());
- if(ssl_ctx==NULL)return OP_EFAULT;
- if(!_skip_certificate_check){
- /*We don't do anything if this fails, since it just means we won't load
- any certificates (and thus all checks will fail).
- However, as that is probably the result of a system
- mis-configuration, assert here to make it easier to identify.*/
- OP_ALWAYS_TRUE(SSL_CTX_set_default_verify_paths(ssl_ctx));
- SSL_CTX_set_verify(ssl_ctx,SSL_VERIFY_PEER,NULL);
- }
- _stream->ssl_ctx=ssl_ctx;
- _stream->skip_certificate_check=_skip_certificate_check;
- if(_proxy_host!=NULL){
- /*We need to establish a CONNECT tunnel to handle https proxying.
- Build the request we'll send to do so.*/
- _stream->proxy_connect.nbuf=0;
- ret=op_sb_append(&_stream->proxy_connect,"CONNECT ",8);
- ret|=op_sb_append_string(&_stream->proxy_connect,_stream->url.host);
- ret|=op_sb_append_port(&_stream->proxy_connect,_stream->url.port);
- /*CONNECT requires at least HTTP 1.1.*/
- ret|=op_sb_append(&_stream->proxy_connect," HTTP/1.1\r\n",11);
- ret|=op_sb_append(&_stream->proxy_connect,"Host: ",6);
- ret|=op_sb_append_string(&_stream->proxy_connect,_stream->url.host);
- /*The example in RFC 2817 Section 5.2 specifies an explicit port even
- when connecting to the default port.
- Given that the proxy doesn't know whether we're trying to connect to
- an http or an https URL except by the port number, this seems like a
- good idea.*/
- ret|=op_sb_append_port(&_stream->proxy_connect,_stream->url.port);
- ret|=op_sb_append(&_stream->proxy_connect,"\r\n",2);
- ret|=op_sb_append(&_stream->proxy_connect,"User-Agent: .\r\n",15);
- if(_proxy_user!=NULL&&_proxy_pass!=NULL){
- ret|=op_sb_append_basic_auth_header(&_stream->proxy_connect,
- "Proxy-Authorization",_proxy_user,_proxy_pass);
- }
- /*For backwards compatibility.*/
- ret|=op_sb_append(&_stream->proxy_connect,
- "Proxy-Connection: keep-alive\r\n",30);
- ret|=op_sb_append(&_stream->proxy_connect,"\r\n",2);
- if(OP_UNLIKELY(ret<0))return ret;
- }
- }
- /*Actually make the connection.*/
- ret=op_http_connect(_stream,_stream->conns+0,addrs,&start_time);
- if(OP_UNLIKELY(ret<0))return ret;
- /*Build the request to send.*/
- _stream->request.nbuf=0;
- ret=op_sb_append(&_stream->request,"GET ",4);
- ret|=op_sb_append_string(&_stream->request,
- _proxy_host!=NULL?_url:_stream->url.path);
- /*Send HTTP/1.0 by default for maximum compatibility (so we don't have to
- re-try if HTTP/1.1 fails, though it shouldn't, even for a 1.0 server).
- This means we aren't conditionally compliant with RFC 2145, because we
- violate the requirement that "An HTTP client SHOULD send a request
- version equal to the highest version for which the client is at least
- conditionally compliant...".
- According to RFC 2145, that means we can't claim any compliance with any
- IETF HTTP specification.*/
- ret|=op_sb_append(&_stream->request," HTTP/1.0\r\n",11);
- /*Remember where this is so we can upgrade to HTTP/1.1 if the server
- supports it.*/
- minor_version_pos=_stream->request.nbuf-3;
- ret|=op_sb_append(&_stream->request,"Host: ",6);
- ret|=op_sb_append_string(&_stream->request,_stream->url.host);
- if(!OP_URL_IS_DEFAULT_PORT(&_stream->url)){
- ret|=op_sb_append_port(&_stream->request,_stream->url.port);
- }
- ret|=op_sb_append(&_stream->request,"\r\n",2);
- /*User-Agents have been a bad idea, so send as little as possible.
- RFC 2616 requires at least one token in the User-Agent, which must have
- at least one character.*/
- ret|=op_sb_append(&_stream->request,"User-Agent: .\r\n",15);
- if(_proxy_host!=NULL&&!OP_URL_IS_SSL(&_stream->url)
- &&_proxy_user!=NULL&&_proxy_pass!=NULL){
- ret|=op_sb_append_basic_auth_header(&_stream->request,
- "Proxy-Authorization",_proxy_user,_proxy_pass);
- }
- if(_stream->url.user!=NULL&&_stream->url.pass!=NULL){
- ret|=op_sb_append_basic_auth_header(&_stream->request,
- "Authorization",_stream->url.user,_stream->url.pass);
- }
- /*Always send a Referer [sic] header.
- It's common to refuse to serve a resource unless one is present.
- We just use the relative "/" URI to suggest we came from the same domain,
- as this is the most common check.
- This might violate RFC 2616's mandate that the field "MUST NOT be sent if
- the Request-URI was obtained from a source that does not have its own
- URI, such as input from the user keyboard," but we don't really have any
- way to know.*/
- /*TODO: Should we update this on redirects?*/
- ret|=op_sb_append(&_stream->request,"Referer: /\r\n",12);
- /*Always send a Range request header to find out if we're seekable.
- This requires an HTTP/1.1 server to succeed, but we'll still get what we
- want with an HTTP/1.0 server that ignores this request header.*/
- ret|=op_sb_append(&_stream->request,"Range: bytes=0-\r\n",17);
- /*Remember where this is so we can append offsets to it later.*/
- _stream->request_tail=_stream->request.nbuf-4;
- ret|=op_sb_append(&_stream->request,"\r\n",2);
- if(OP_UNLIKELY(ret<0))return ret;
- ret=op_http_conn_write_fully(_stream->conns+0,
- _stream->request.buf,_stream->request.nbuf);
- if(OP_UNLIKELY(ret<0))return ret;
- ret=op_http_conn_read_response(_stream->conns+0,&_stream->response);
- if(OP_UNLIKELY(ret<0))return ret;
- ftime(&end_time);
- next=op_http_parse_status_line(&v1_1_compat,&status_code,
- _stream->response.buf);
- if(OP_UNLIKELY(next==NULL))return OP_FALSE;
- if(status_code[0]=='2'){
- opus_int64 content_length;
- opus_int64 range_length;
- int pipeline_supported;
- int pipeline_disabled;
- /*We only understand 20x codes.*/
- if(status_code[1]!='0')return OP_FALSE;
- content_length=-1;
- range_length=-1;
- /*Pipelining must be explicitly enabled.*/
- pipeline_supported=0;
- pipeline_disabled=0;
- for(;;){
- char *header;
- char *cdr;
- ret=op_http_get_next_header(&header,&cdr,&next);
- if(OP_UNLIKELY(ret<0))return ret;
- if(header==NULL)break;
- if(strcmp(header,"content-length")==0){
- /*Two Content-Length headers?*/
- if(OP_UNLIKELY(content_length>=0))return OP_FALSE;
- content_length=op_http_parse_content_length(cdr);
- if(OP_UNLIKELY(content_length<0))return (int)content_length;
- /*Make sure the Content-Length and Content-Range headers match.*/
- if(range_length>=0&&OP_UNLIKELY(content_length!=range_length)){
- return OP_FALSE;
- }
- }
- else if(strcmp(header,"content-range")==0){
- opus_int64 range_first;
- opus_int64 range_last;
- /*Two Content-Range headers?*/
- if(OP_UNLIKELY(range_length>=0))return OP_FALSE;
- ret=op_http_parse_content_range(&range_first,&range_last,
- &range_length,cdr);
- if(OP_UNLIKELY(ret<0))return ret;
- /*"A response with satus code 206 (Partial Content) MUST NOT
- include a Content-Range field with a byte-range-resp-spec of
- '*'."*/
- if(status_code[2]=='6'
- &&(OP_UNLIKELY(range_first<0)||OP_UNLIKELY(range_last<0))){
- return OP_FALSE;
- }
- /*We asked for the entire resource.*/
- if(range_length>=0){
- /*Quit if we didn't get it.*/
- if(range_last>=0&&OP_UNLIKELY(range_last!=range_length-1)){
- return OP_FALSE;
- }
- }
- /*If there was no length, use the end of the range.*/
- else if(range_last>=0)range_length=range_last+1;
- /*Make sure the Content-Length and Content-Range headers match.*/
- if(content_length>=0&&OP_UNLIKELY(content_length!=range_length)){
- return OP_FALSE;
- }
- }
- else if(strcmp(header,"connection")==0){
- /*According to RFC 2616, if an HTTP/1.1 application does not support
- pipelining, it "MUST include the 'close' connection option in
- every message."
- Therefore, if we receive one in the initial response, disable
- pipelining entirely.
- The server still might support it (e.g., we might just have hit the
- request limit for a temporary child process), but if it doesn't
- and we assume it does, every time we cross a chunk boundary we'll
- error out and reconnect, adding lots of latency.*/
- ret=op_http_parse_connection(cdr);
- if(OP_UNLIKELY(ret<0))return ret;
- pipeline_disabled|=ret;
- }
- else if(strcmp(header,"server")==0){
- /*If we got a Server response header, and it wasn't from a known-bad
- server, enable pipelining, as long as it's at least HTTP/1.1.
- According to RFC 2145, the server is supposed to respond with the
- highest minor version number it supports unless it is known or
- suspected that we incorrectly implement the HTTP specification.
- So it should send back at least HTTP/1.1, despite our HTTP/1.0
- request.*/
- pipeline_supported=v1_1_compat;
- if(v1_1_compat)pipeline_disabled|=!op_http_allow_pipelining(cdr);
- if(_info!=NULL&&_info->server==NULL)_info->server=op_string_dup(cdr);
- }
- /*Collect station information headers if the caller requested it.
- If there's more than one copy of a header, the first one wins.*/
- else if(_info!=NULL){
- if(strcmp(header,"content-type")==0){
- if(_info->content_type==NULL){
- _info->content_type=op_string_dup(cdr);
- }
- }
- else if(header[0]=='i'&&header[1]=='c'
- &&(header[2]=='e'||header[2]=='y')&&header[3]=='-'){
- if(strcmp(header+4,"name")==0){
- if(_info->name==NULL)_info->name=op_string_dup(cdr);
- }
- else if(strcmp(header+4,"description")==0){
- if(_info->description==NULL)_info->description=op_string_dup(cdr);
- }
- else if(strcmp(header+4,"genre")==0){
- if(_info->genre==NULL)_info->genre=op_string_dup(cdr);
- }
- else if(strcmp(header+4,"url")==0){
- if(_info->url==NULL)_info->url=op_string_dup(cdr);
- }
- else if(strcmp(header,"icy-br")==0
- ||strcmp(header,"ice-bitrate")==0){
- if(_info->bitrate_kbps<0){
- opus_int64 bitrate_kbps;
- /*Just re-using this function to parse a random unsigned
- integer field.*/
- bitrate_kbps=op_http_parse_content_length(cdr);
- if(bitrate_kbps>=0&&bitrate_kbps<=OP_INT32_MAX){
- _info->bitrate_kbps=(opus_int32)bitrate_kbps;
- }
- }
- }
- else if(strcmp(header,"icy-pub")==0
- ||strcmp(header,"ice-public")==0){
- if(_info->is_public<0&&(cdr[0]=='0'||cdr[0]=='1')&&cdr[1]=='\0'){
- _info->is_public=cdr[0]-'0';
- }
- }
- }
- }
- }
- switch(status_code[2]){
- /*200 OK*/
- case '0':break;
- /*203 Non-Authoritative Information*/
- case '3':break;
- /*204 No Content*/
- case '4':{
- if(content_length>=0&&OP_UNLIKELY(content_length!=0)){
- return OP_FALSE;
- }
- }break;
- /*206 Partial Content*/
- case '6':{
- /*No Content-Range header.*/
- if(OP_UNLIKELY(range_length<0))return OP_FALSE;
- content_length=range_length;
- /*The server supports range requests for this resource.
- We can seek.*/
- _stream->seekable=1;
- }break;
- /*201 Created: the response "SHOULD include an entity containing a list
- of resource characteristics and location(s)," but not an Opus file.
- 202 Accepted: the response "SHOULD include an indication of request's
- current status and either a pointer to a status monitor or some
- estimate of when the user can expect the request to be fulfilled,"
- but not an Opus file.
- 205 Reset Content: this "MUST NOT include an entity," meaning no Opus
- file.
- 207...209 are not yet defined, so we don't know how to handle them.*/
- default:return OP_FALSE;
- }
- _stream->content_length=content_length;
- _stream->pipeline=pipeline_supported&&!pipeline_disabled;
- /*Pipelining requires HTTP/1.1 persistent connections.*/
- if(_stream->pipeline)_stream->request.buf[minor_version_pos]='1';
- _stream->conns[0].pos=0;
- _stream->conns[0].end_pos=_stream->seekable?content_length:-1;
- _stream->conns[0].chunk_size=-1;
- _stream->cur_conni=0;
- _stream->connect_rate=op_time_diff_ms(&end_time,&start_time);
- _stream->connect_rate=OP_MAX(_stream->connect_rate,1);
- if(_info!=NULL)_info->is_ssl=OP_URL_IS_SSL(&_stream->url);
- /*The URL has been successfully opened.*/
- return 0;
- }
- /*Shouldn't get 1xx; 4xx and 5xx are both failures (and we don't retry).
- Everything else is undefined.*/
- else if(status_code[0]!='3')return OP_FALSE;
- /*We have some form of redirect request.*/
- /*We only understand 30x codes.*/
- if(status_code[1]!='0')return OP_FALSE;
- switch(status_code[2]){
- /*300 Multiple Choices: "If the server has a preferred choice of
- representation, it SHOULD include the specific URI for that
- representation in the Location field," otherwise we'll fail.*/
- case '0':
- /*301 Moved Permanently*/
- case '1':
- /*302 Found*/
- case '2':
- /*307 Temporary Redirect*/
- case '7':
- /*308 Permanent Redirect (defined by draft-reschke-http-status-308-07).*/
- case '8':break;
- /*305 Use Proxy: "The Location field gives the URI of the proxy."
- TODO: This shouldn't actually be that hard to do.*/
- case '5':return OP_EIMPL;
- /*303 See Other: "The new URI is not a substitute reference for the
- originally requested resource."
- 304 Not Modified: "The 304 response MUST NOT contain a message-body."
- 306 (Unused)
- 309 is not yet defined, so we don't know how to handle it.*/
- default:return OP_FALSE;
- }
- _url=NULL;
- for(;;){
- char *header;
- char *cdr;
- ret=op_http_get_next_header(&header,&cdr,&next);
- if(OP_UNLIKELY(ret<0))return ret;
- if(header==NULL)break;
- if(strcmp(header,"location")==0&&OP_LIKELY(_url==NULL))_url=cdr;
- }
- if(OP_UNLIKELY(_url==NULL))return OP_FALSE;
- ret=op_parse_url(&next_url,_url);
- if(OP_UNLIKELY(ret<0))return ret;
- if(_proxy_host==NULL||_stream->ssl_session!=NULL){
- if(strcmp(_stream->url.host,next_url.host)==0
- &&_stream->url.port==next_url.port){
- /*Try to skip re-resolve when connecting to the same host.*/
- addrs=&_stream->addr_info;
- }
- else{
- if(_stream->ssl_session!=NULL){
- /*Forget any cached SSL session from the last host.*/
- SSL_SESSION_free(_stream->ssl_session);
- _stream->ssl_session=NULL;
- }
- }
- }
- if(_proxy_host==NULL){
- OP_ASSERT(_stream->connect_host==_stream->url.host);
- _stream->connect_host=next_url.host;
- _stream->connect_port=next_url.port;
- }
- /*Always try to skip re-resolve for proxy connections.*/
- else addrs=&_stream->addr_info;
- op_parsed_url_clear(&_stream->url);
- *&_stream->url=*&next_url;
- /*TODO: On servers/proxies that support pipelining, we might be able to
- re-use this connection.*/
- op_http_conn_close(_stream,_stream->conns+0,&_stream->lru_head,1);
- }
- /*Redirection limit reached.*/
- return OP_FALSE;
-}
-
-static int op_http_conn_send_request(OpusHTTPStream *_stream,
- OpusHTTPConn *_conn,opus_int64 _pos,opus_int32 _chunk_size,
- int _try_not_to_block){
- opus_int64 next_end;
- int ret;
- /*We shouldn't have another request outstanding.*/
- OP_ASSERT(_conn->next_pos<0);
- /*Build the request to send.*/
- OP_ASSERT(_stream->request.nbuf>=_stream->request_tail);
- _stream->request.nbuf=_stream->request_tail;
- ret=op_sb_append_nonnegative_int64(&_stream->request,_pos);
- ret|=op_sb_append(&_stream->request,"-",1);
- if(_chunk_size>0&&OP_ADV_OFFSET(_pos,2*_chunk_size)<_stream->content_length){
- /*We shouldn't be pipelining requests with non-HTTP/1.1 servers.*/
- OP_ASSERT(_stream->pipeline);
- next_end=_pos+_chunk_size;
- ret|=op_sb_append_nonnegative_int64(&_stream->request,next_end-1);
- /*Use a larger chunk size for our next request.*/
- _chunk_size<<=1;
- /*But after a while, just request the rest of the resource.*/
- if(_chunk_size>OP_PIPELINE_CHUNK_SIZE_MAX)_chunk_size=-1;
- }
- else{
- /*Either this was a non-pipelined request or we were close enough to the
- end to just ask for the rest.*/
- next_end=-1;
- _chunk_size=-1;
- }
- ret|=op_sb_append(&_stream->request,"\r\n\r\n",4);
- if(OP_UNLIKELY(ret<0))return ret;
- /*If we don't want to block, check to see if there's enough space in the send
- queue.
- There's still a chance we might block, even if there is enough space, but
- it's a much slimmer one.
- Blocking at all is pretty unlikely, as we won't have any requests queued
- when _try_not_to_block is set, so if FIONSPACE isn't available (e.g., on
- Linux), just skip the test.*/
- if(_try_not_to_block){
-# if defined(FIONSPACE)
- int available;
- ret=ioctl(_conn->fd,FIONSPACE,&available);
- if(ret<0||available<_stream->request.nbuf)return 1;
-# endif
- }
- ret=op_http_conn_write_fully(_conn,
- _stream->request.buf,_stream->request.nbuf);
- if(OP_UNLIKELY(ret<0))return ret;
- _conn->next_pos=_pos;
- _conn->next_end=next_end;
- /*Save the chunk size to use for the next request.*/
- _conn->chunk_size=_chunk_size;
- _conn->nrequests_left--;
- return ret;
-}
-
-/*Handles the response to all requests after the first one.
- Return: 1 if the connection was closed or timed out, 0 on success, or a
- negative value on any other error.*/
-static int op_http_conn_handle_response(OpusHTTPStream *_stream,
- OpusHTTPConn *_conn){
- char *next;
- char *status_code;
- opus_int64 range_length;
- opus_int64 next_pos;
- opus_int64 next_end;
- int ret;
- ret=op_http_conn_read_response(_conn,&_stream->response);
- /*If the server just closed the connection on us, we may have just hit a
- connection re-use limit, so we might want to retry.*/
- if(OP_UNLIKELY(ret<0))return ret==OP_EREAD?1:ret;
- next=op_http_parse_status_line(NULL,&status_code,_stream->response.buf);
- if(OP_UNLIKELY(next==NULL))return OP_FALSE;
- /*We _need_ a 206 Partial Content response.
- Nothing else will do.*/
- if(strncmp(status_code,"206",3)!=0){
- /*But on a 408 Request Timeout, we might want to re-try.*/
- return strncmp(status_code,"408",3)==0?1:OP_FALSE;
- }
- next_pos=_conn->next_pos;
- next_end=_conn->next_end;
- range_length=-1;
- for(;;){
- char *header;
- char *cdr;
- ret=op_http_get_next_header(&header,&cdr,&next);
- if(OP_UNLIKELY(ret<0))return ret;
- if(header==NULL)break;
- if(strcmp(header,"content-range")==0){
- opus_int64 range_first;
- opus_int64 range_last;
- /*Two Content-Range headers?*/
- if(OP_UNLIKELY(range_length>=0))return OP_FALSE;
- ret=op_http_parse_content_range(&range_first,&range_last,
- &range_length,cdr);
- if(OP_UNLIKELY(ret<0))return ret;
- /*"A response with satus code 206 (Partial Content) MUST NOT
- include a Content-Range field with a byte-range-resp-spec of
- '*'."*/
- if(OP_UNLIKELY(range_first<0)||OP_UNLIKELY(range_last<0))return OP_FALSE;
- /*We also don't want range_last to overflow.*/
- if(OP_UNLIKELY(range_last>=OP_INT64_MAX))return OP_FALSE;
- range_last++;
- /*Quit if we didn't get the offset we asked for.*/
- if(range_first!=next_pos)return OP_FALSE;
- if(next_end<0){
- /*We asked for the rest of the resource.*/
- if(range_length>=0){
- /*Quit if we didn't get it.*/
- if(OP_UNLIKELY(range_last!=range_length))return OP_FALSE;
- }
- /*If there was no length, use the end of the range.*/
- else range_length=range_last;
- next_end=range_last;
- }
- else{
- if(range_last!=next_end)return OP_FALSE;
- /*If there was no length, use the larger of the content length or the
- end of this chunk.*/
- if(range_length<0){
- range_length=OP_MAX(range_last,_stream->content_length);
- }
- }
- }
- else if(strcmp(header,"content-length")==0){
- opus_int64 content_length;
- /*Validate the Content-Length header, if present, against the request we
- made.*/
- content_length=op_http_parse_content_length(cdr);
- if(OP_UNLIKELY(content_length<0))return (int)content_length;
- if(next_end<0){
- /*If we haven't seen the Content-Range header yet and we asked for the
- rest of the resource, set next_end, so we can make sure they match
- when we do find the Content-Range header.*/
- if(OP_UNLIKELY(next_pos>OP_INT64_MAX-content_length))return OP_FALSE;
- next_end=next_pos+content_length;
- }
- /*Otherwise, make sure they match now.*/
- else if(OP_UNLIKELY(next_end-next_pos!=content_length))return OP_FALSE;
- }
- else if(strcmp(header,"connection")==0){
- ret=op_http_parse_connection(cdr);
- if(OP_UNLIKELY(ret<0))return ret;
- /*If the server told us it was going to close the connection, don't make
- any more requests.*/
- if(OP_UNLIKELY(ret>0))_conn->nrequests_left=0;
- }
- }
- /*No Content-Range header.*/
- if(OP_UNLIKELY(range_length<0))return OP_FALSE;
- /*Update the content_length if necessary.*/
- _stream->content_length=range_length;
- _conn->pos=next_pos;
- _conn->end_pos=next_end;
- _conn->next_pos=-1;
- return 0;
-}
-
-/*Open a new connection that will start reading at byte offset _pos.
- _pos: The byte offset to start reading from.
- _chunk_size: The number of bytes to ask for in the initial request, or -1 to
- request the rest of the resource.
- This may be more bytes than remain, in which case it will be
- converted into a request for the rest.*/
-static int op_http_conn_open_pos(OpusHTTPStream *_stream,
- OpusHTTPConn *_conn,opus_int64 _pos,opus_int32 _chunk_size){
- struct timeb start_time;
- struct timeb end_time;
- opus_int32 connect_rate;
- opus_int32 connect_time;
- int ret;
- ret=op_http_connect(_stream,_conn,&_stream->addr_info,&start_time);
- if(OP_UNLIKELY(ret<0))return ret;
- ret=op_http_conn_send_request(_stream,_conn,_pos,_chunk_size,0);
- if(OP_UNLIKELY(ret<0))return ret;
- ret=op_http_conn_handle_response(_stream,_conn);
- if(OP_UNLIKELY(ret!=0))return OP_FALSE;
- ftime(&end_time);
- _stream->cur_conni=_conn-_stream->conns;
- OP_ASSERT(_stream->cur_conni>=0&&_stream->cur_conni<OP_NCONNS_MAX);
- /*The connection has been successfully opened.
- Update the connection time estimate.*/
- connect_time=op_time_diff_ms(&end_time,&start_time);
- connect_rate=_stream->connect_rate;
- connect_rate+=OP_MAX(connect_time,1)-connect_rate+8>>4;
- _stream->connect_rate=connect_rate;
- return 0;
-}
-
-/*Read data from the current response body.
- If we're pipelining and we get close to the end of this response, queue
- another request.
- If we've reached the end of this response body, parse the next response and
- keep going.
- [out] _buf: Returns the data read.
- _buf_size: The size of the buffer.
- Return: A positive number of bytes read on success.
- 0: The connection was closed.
- OP_EREAD: There was a fatal read error.*/
-static int op_http_conn_read_body(OpusHTTPStream *_stream,
- OpusHTTPConn *_conn,unsigned char *_buf,int _buf_size){
- opus_int64 pos;
- opus_int64 end_pos;
- opus_int64 next_pos;
- opus_int64 content_length;
- int nread;
- int pipeline;
- int ret;
- /*Currently this function can only be called on the LRU head.
- Otherwise, we'd need a _pnext pointer if we needed to close the connection,
- and re-opening it would re-organize the lists.*/
- OP_ASSERT(_stream->lru_head==_conn);
- /*We should have filterd out empty reads by this point.*/
- OP_ASSERT(_buf_size>0);
- pos=_conn->pos;
- end_pos=_conn->end_pos;
- next_pos=_conn->next_pos;
- pipeline=_stream->pipeline;
- content_length=_stream->content_length;
- if(end_pos>=0){
- /*Have we reached the end of the current response body?*/
- if(pos>=end_pos){
- OP_ASSERT(content_length>=0);
- /*If this was the end of the stream, we're done.
- Also return early if a non-blocking read was requested (regardless of
- whether we might be able to parse the next response without
- blocking).*/
- if(content_length<=end_pos)return 0;
- /*Otherwise, start on the next response.*/
- if(next_pos<0){
- /*We haven't issued another request yet.*/
- if(!pipeline||_conn->nrequests_left<=0){
- /*There are two ways to get here: either the server told us it was
- going to close the connection after the last request, or we
- thought we were reading the whole resource, but it grew while we
- were reading it.
- The only way the latter could have happened is if content_length
- changed while seeking.
- Open a new request to read the rest.*/
- OP_ASSERT(_stream->seekable);
- /*Try to open a new connection to read another chunk.*/
- op_http_conn_close(_stream,_conn,&_stream->lru_head,1);
- /*If we're not pipelining, we should be requesting the rest.*/
- OP_ASSERT(pipeline||_conn->chunk_size==-1);
- ret=op_http_conn_open_pos(_stream,_conn,end_pos,_conn->chunk_size);
- if(OP_UNLIKELY(ret<0))return OP_EREAD;
- }
- else{
- /*Issue the request now (better late than never).*/
- ret=op_http_conn_send_request(_stream,_conn,pos,_conn->chunk_size,0);
- if(OP_UNLIKELY(ret<0))return OP_EREAD;
- next_pos=_conn->next_pos;
- OP_ASSERT(next_pos>=0);
- }
- }
- if(next_pos>=0){
- /*We shouldn't be trying to read past the current request body if we're
- seeking somewhere else.*/
- OP_ASSERT(next_pos==end_pos);
- ret=op_http_conn_handle_response(_stream,_conn);
- if(OP_UNLIKELY(ret<0))return OP_EREAD;
- if(OP_UNLIKELY(ret>0)&&pipeline){
- opus_int64 next_end;
- next_end=_conn->next_end;
- /*Our request timed out or the server closed the connection.
- Try re-connecting.*/
- op_http_conn_close(_stream,_conn,&_stream->lru_head,1);
- /*Unless there's a bug, we should be able to convert
- (next_pos,next_end) into valid (_pos,_chunk_size) parameters.*/
- OP_ASSERT(next_end<0
- ||next_end-next_pos>=0&&next_end-next_pos<=OP_INT32_MAX);
- ret=op_http_conn_open_pos(_stream,_conn,next_pos,
- next_end<0?-1:(opus_int32)(next_end-next_pos));
- if(OP_UNLIKELY(ret<0))return OP_EREAD;
- }
- else if(OP_UNLIKELY(ret!=0))return OP_EREAD;
- }
- pos=_conn->pos;
- end_pos=_conn->end_pos;
- content_length=_stream->content_length;
- }
- OP_ASSERT(end_pos>pos);
- _buf_size=OP_MIN(_buf_size,end_pos-pos);
- }
- nread=op_http_conn_read(_conn,(char *)_buf,_buf_size,1);
- if(OP_UNLIKELY(nread<0))return nread;
- pos+=nread;
- _conn->pos=pos;
- OP_ASSERT(end_pos<0||content_length>=0);
- /*TODO: If nrequests_left<=0, we can't make a new request, and there will be
- a big pause after we hit the end of the chunk while we open a new
- connection.
- It would be nice to be able to start that process now, but we have no way
- to do it in the background without blocking (even if we could start it, we
- have no guarantee the application will return control to us in a
- sufficiently timely manner to allow us to complete it, and this is
- uncommon enough that it's not worth using threads just for this).*/
- if(end_pos>=0&&end_pos<content_length&&next_pos<0
- &&pipeline&&OP_LIKELY(_conn->nrequests_left>0)){
- opus_int64 request_thresh;
- opus_int32 chunk_size;
- /*Are we getting close to the end of the current response body?
- If so, we should request more data.*/
- request_thresh=_stream->connect_rate*_conn->read_rate>>12;
- /*But don't commit ourselves too quickly.*/
- chunk_size=_conn->chunk_size;
- if(chunk_size>=0)request_thresh=OP_MIN(chunk_size>>2,request_thresh);
- if(end_pos-pos<request_thresh){
- ret=op_http_conn_send_request(_stream,_conn,end_pos,_conn->chunk_size,1);
- if(OP_UNLIKELY(ret<0))return OP_EREAD;
- }
- }
- return nread;
-}
-
-static int op_http_stream_read(void *_stream,
- unsigned char *_ptr,int _buf_size){
- OpusHTTPStream *stream;
- ptrdiff_t nread;
- opus_int64 size;
- opus_int64 pos;
- int ci;
- stream=(OpusHTTPStream *)_stream;
- /*Check for an empty read.*/
- if(_buf_size<=0)return 0;
- ci=stream->cur_conni;
- /*No current connection => EOF.*/
- if(ci<0)return 0;
- pos=stream->conns[ci].pos;
- size=stream->content_length;
- /*Check for EOF.*/
- if(size>=0){
- if(pos>=size)return 0;
- /*Check for a short read.*/
- if(_buf_size>size-pos)_buf_size=(int)(size-pos);
- }
- nread=op_http_conn_read_body(stream,stream->conns+ci,_ptr,_buf_size);
- if(OP_UNLIKELY(nread<=0)){
- /*We hit an error or EOF.
- Either way, we're done with this connection.*/
- op_http_conn_close(stream,stream->conns+ci,&stream->lru_head,1);
- stream->cur_conni=-1;
- stream->pos=pos;
- }
- return nread;
-}
-
-/*Discard data until we reach the _target position.
- This destroys the contents of _stream->response.buf, as we need somewhere to
- read this data, and that is a convenient place.
- _just_read_ahead: Whether or not this is a plain fast-forward.
- If 0, we need to issue a new request for a chunk at _target
- and discard all the data from our current request(s).
- Otherwise, we should be able to reach _target without
- issuing any new requests.
- _target: The stream position to which to read ahead.*/
-static int op_http_conn_read_ahead(OpusHTTPStream *_stream,
- OpusHTTPConn *_conn,int _just_read_ahead,opus_int64 _target){
- opus_int64 pos;
- opus_int64 end_pos;
- opus_int64 next_pos;
- opus_int64 next_end;
- ptrdiff_t nread;
- int ret;
- pos=_conn->pos;
- end_pos=_conn->end_pos;
- next_pos=_conn->next_pos;
- next_end=_conn->next_end;
- if(!_just_read_ahead){
- /*We need to issue a new pipelined request.
- This is the only case where we allow more than one outstanding request
- at a time, so we need to reset next_pos (we'll restore it below if we
- did have an outstanding request).*/
- OP_ASSERT(_stream->pipeline);
- _conn->next_pos=-1;
- ret=op_http_conn_send_request(_stream,_conn,_target,
- OP_PIPELINE_CHUNK_SIZE,0);
- if(OP_UNLIKELY(ret<0))return ret;
- }
- /*We can reach the target position by reading forward in the current chunk.*/
- if(_just_read_ahead&&(end_pos<0||_target<end_pos))end_pos=_target;
- else if(next_pos>=0){
- opus_int64 next_next_pos;
- opus_int64 next_next_end;
- /*We already have a request outstanding.
- Finish off the current chunk.*/
- while(pos<end_pos){
- nread=op_http_conn_read(_conn,_stream->response.buf,
- (int)OP_MIN(end_pos-pos,_stream->response.cbuf),1);
- /*We failed to read ahead.*/
- if(nread<=0)return OP_FALSE;
- pos+=nread;
- }
- OP_ASSERT(pos==end_pos);
- if(_just_read_ahead){
- next_next_pos=next_next_end=-1;
- end_pos=_target;
- }
- else{
- OP_ASSERT(_conn->next_pos==_target);
- next_next_pos=_target;
- next_next_end=_conn->next_end;
- _conn->next_pos=next_pos;
- _conn->next_end=next_end;
- end_pos=next_end;
- }
- ret=op_http_conn_handle_response(_stream,_conn);
- if(OP_UNLIKELY(ret!=0))return OP_FALSE;
- _conn->next_pos=next_next_pos;
- _conn->next_end=next_next_end;
- }
- while(pos<end_pos){
- nread=op_http_conn_read(_conn,_stream->response.buf,
- (int)OP_MIN(end_pos-pos,_stream->response.cbuf),1);
- /*We failed to read ahead.*/
- if(nread<=0)return OP_FALSE;
- pos+=nread;
- }
- OP_ASSERT(pos==end_pos);
- if(!_just_read_ahead){
- ret=op_http_conn_handle_response(_stream,_conn);
- if(OP_UNLIKELY(ret!=0))return OP_FALSE;
- }
- else _conn->pos=end_pos;
- OP_ASSERT(_conn->pos==_target);
- return 0;
-}
-
-static int op_http_stream_seek(void *_stream,opus_int64 _offset,int _whence){
- struct timeb seek_time;
- OpusHTTPStream *stream;
- OpusHTTPConn *conn;
- OpusHTTPConn **pnext;
- OpusHTTPConn *close_conn;
- OpusHTTPConn **close_pnext;
- opus_int64 content_length;
- opus_int64 pos;
- int pipeline;
- int ci;
- int ret;
- stream=(OpusHTTPStream *)_stream;
- if(!stream->seekable)return -1;
- content_length=stream->content_length;
- /*If we're seekable, we should have gotten a Content-Length.*/
- OP_ASSERT(content_length>=0);
- ci=stream->cur_conni;
- pos=ci<0?content_length:stream->conns[ci].pos;
- switch(_whence){
- case SEEK_SET:{
- /*Check for overflow:*/
- if(_offset<0)return -1;
- pos=_offset;
- }break;
- case SEEK_CUR:{
- /*Check for overflow:*/
- if(_offset<-pos||_offset>OP_INT64_MAX-pos)return -1;
- pos+=_offset;
- }break;
- case SEEK_END:{
- /*Check for overflow:*/
- if(_offset>content_length||_offset<content_length-OP_INT64_MAX)return -1;
- pos=content_length-_offset;
- }break;
- default:return -1;
- }
- /*Mark when we deactivated the active connection.*/
- if(ci>=0){
- op_http_conn_read_rate_update(stream->conns+ci);
- *&seek_time=*&stream->conns[ci].read_time;
- }
- else ftime(&seek_time);
- /*If we seeked past the end of the stream, just disable the active
- connection.*/
- if(pos>=content_length){
- stream->cur_conni=-1;
- stream->pos=pos;
- return 0;
- }
- /*First try to find a connection we can use without waiting.*/
- pnext=&stream->lru_head;
- conn=stream->lru_head;
- while(conn!=NULL){
- opus_int64 conn_pos;
- opus_int64 end_pos;
- int available;
- /*If this connection has been dormant too long or has made too many
- requests, close it.
- This is to prevent us from hitting server limits/firewall timeouts.*/
- if(op_time_diff_ms(&seek_time,&conn->read_time)>
- OP_CONNECTION_IDLE_TIMEOUT_MS
- ||conn->nrequests_left<OP_PIPELINE_MIN_REQUESTS){
- op_http_conn_close(stream,conn,pnext,1);
- conn=*pnext;
- continue;
- }
- available=op_http_conn_estimate_available(conn);
- conn_pos=conn->pos;
- end_pos=conn->end_pos;
- if(conn->next_pos>=0){
- OP_ASSERT(end_pos>=0);
- OP_ASSERT(conn->next_pos==end_pos);
- end_pos=conn->next_end;
- }
- OP_ASSERT(end_pos<0||conn_pos<=end_pos);
- /*Can we quickly read ahead without issuing a new request or waiting for
- any more data?
- If we have an oustanding request, we'll over-estimate the amount of data
- it has available (because we'll count the response headers, too), but
- that probably doesn't matter.*/
- if(conn_pos<=pos&&pos-conn_pos<=available&&(end_pos<0||pos<end_pos)){
- /*Found a suitable connection to re-use.*/
- ret=op_http_conn_read_ahead(stream,conn,1,pos);
- if(OP_UNLIKELY(ret<0)){
- /*The connection might have become stale, so close it and keep going.*/
- op_http_conn_close(stream,conn,pnext,1);
- conn=*pnext;
- continue;
- }
- /*Sucessfully resurrected this connection.*/
- *pnext=conn->next;
- conn->next=stream->lru_head;
- stream->lru_head=conn;
- stream->cur_conni=conn-stream->conns;
- return 0;
- }
- pnext=&conn->next;
- conn=conn->next;
- }
- /*Chances are that didn't work, so now try to find one we can use by reading
- ahead a reasonable amount and/or by issuing a new request.*/
- close_pnext=NULL;
- close_conn=NULL;
- pnext=&stream->lru_head;
- conn=stream->lru_head;
- pipeline=stream->pipeline;
- while(conn!=NULL){
- opus_int64 conn_pos;
- opus_int64 end_pos;
- opus_int64 read_ahead_thresh;
- int available;
- int just_read_ahead;
- /*Dividing by 2048 instead of 1000 scales this by nearly 1/2, biasing away
- from connection re-use (and roughly compensating for the lag required to
- reopen the TCP window of a connection that's been idle).
- There's no overflow checking here, because it's vanishingly unlikely, and
- all it would do is cause us to make poor decisions.*/
- read_ahead_thresh=OP_MAX(OP_READAHEAD_THRESH_MIN,
- stream->connect_rate*conn->read_rate>>11);
- available=op_http_conn_estimate_available(conn);
- conn_pos=conn->pos;
- end_pos=conn->end_pos;
- if(conn->next_pos>=0){
- OP_ASSERT(end_pos>=0);
- OP_ASSERT(conn->next_pos==end_pos);
- end_pos=conn->next_end;
- }
- OP_ASSERT(end_pos<0||conn_pos<=end_pos);
- /*Can we quickly read ahead without issuing a new request?*/
- just_read_ahead=conn_pos<=pos&&pos-conn_pos-available<=read_ahead_thresh
- &&(end_pos<0||pos<end_pos);
- if(just_read_ahead||pipeline&&end_pos>=0
- &&end_pos-conn_pos-available<=read_ahead_thresh){
- /*Found a suitable connection to re-use.*/
- ret=op_http_conn_read_ahead(stream,conn,just_read_ahead,pos);
- if(OP_UNLIKELY(ret<0)){
- /*The connection might have become stale, so close it and keep going.*/
- op_http_conn_close(stream,conn,pnext,1);
- conn=*pnext;
- continue;
- }
- /*Sucessfully resurrected this connection.*/
- *pnext=conn->next;
- conn->next=stream->lru_head;
- stream->lru_head=conn;
- stream->cur_conni=conn-stream->conns;
- return 0;
- }
- close_pnext=pnext;
- close_conn=conn;
- pnext=&conn->next;
- conn=conn->next;
- }
- /*No suitable connections.
- Open a new one.*/
- if(stream->free_head==NULL){
- /*All connections in use.
- Expire one of them (we should have already picked which one when scanning
- the list).*/
- OP_ASSERT(close_conn!=NULL);
- OP_ASSERT(close_pnext!=NULL);
- op_http_conn_close(stream,close_conn,close_pnext,1);
- }
- OP_ASSERT(stream->free_head!=NULL);
- conn=stream->free_head;
- /*If we can pipeline, only request a chunk of data.
- If we're seeking now, there's a good chance we will want to seek again
- soon, and this avoids committing this connection to reading the rest of
- the stream.
- Particularly with SSL or proxies, issuing a new request on the same
- connection can be substantially faster than opening a new one.
- This also limits the amount of data the server will blast at us on this
- connection if we later seek elsewhere and start reading from a different
- connection.*/
- ret=op_http_conn_open_pos(stream,conn,pos,
- pipeline?OP_PIPELINE_CHUNK_SIZE:-1);
- if(OP_UNLIKELY(ret<0)){
- op_http_conn_close(stream,conn,&stream->lru_head,1);
- return -1;
- }
- return 0;
-}
-
-static opus_int64 op_http_stream_tell(void *_stream){
- OpusHTTPStream *stream;
- int ci;
- stream=(OpusHTTPStream *)_stream;
- ci=stream->cur_conni;
- return ci<0?stream->pos:stream->conns[ci].pos;
-}
-
-static int op_http_stream_close(void *_stream){
- OpusHTTPStream *stream;
- stream=(OpusHTTPStream *)_stream;
- if(OP_LIKELY(stream!=NULL)){
- op_http_stream_clear(stream);
- _ogg_free(stream);
- }
- return 0;
-}
-
-static const OpusFileCallbacks OP_HTTP_CALLBACKS={
- op_http_stream_read,
- op_http_stream_seek,
- op_http_stream_tell,
- op_http_stream_close
-};
-#endif
-
-void opus_server_info_init(OpusServerInfo *_info){
- _info->name=NULL;
- _info->description=NULL;
- _info->genre=NULL;
- _info->url=NULL;
- _info->server=NULL;
- _info->content_type=NULL;
- _info->bitrate_kbps=-1;
- _info->is_public=-1;
- _info->is_ssl=0;
-}
-
-void opus_server_info_clear(OpusServerInfo *_info){
- _ogg_free(_info->content_type);
- _ogg_free(_info->server);
- _ogg_free(_info->url);
- _ogg_free(_info->genre);
- _ogg_free(_info->description);
- _ogg_free(_info->name);
-}
-
-/*The actual URL stream creation function.
- This one isn't extensible like the application-level interface, but because
- it isn't public, we're free to change it in the future.*/
-static void *op_url_stream_create_impl(OpusFileCallbacks *_cb,const char *_url,
- int _skip_certificate_check,const char *_proxy_host,unsigned _proxy_port,
- const char *_proxy_user,const char *_proxy_pass,OpusServerInfo *_info){
- const char *path;
- /*Check to see if this is a valid file: URL.*/
- path=op_parse_file_url(_url);
- if(path!=NULL){
- char *unescaped_path;
- void *ret;
- unescaped_path=op_string_dup(path);
- if(OP_UNLIKELY(unescaped_path==NULL))return NULL;
- ret=op_fopen(_cb,op_unescape_url_component(unescaped_path),"rb");
- _ogg_free(unescaped_path);
- return ret;
- }
-#if defined(OP_ENABLE_HTTP)
- /*If not, try http/https.*/
- else{
- OpusHTTPStream *stream;
- int ret;
- stream=(OpusHTTPStream *)_ogg_malloc(sizeof(*stream));
- if(OP_UNLIKELY(stream==NULL))return NULL;
- op_http_stream_init(stream);
- ret=op_http_stream_open(stream,_url,_skip_certificate_check,
- _proxy_host,_proxy_port,_proxy_user,_proxy_pass,_info);
- if(OP_UNLIKELY(ret<0)){
- op_http_stream_clear(stream);
- _ogg_free(stream);
- return NULL;
- }
- *_cb=*&OP_HTTP_CALLBACKS;
- return stream;
- }
-#else
- (void)_skip_certificate_check;
- (void)_proxy_host;
- (void)_proxy_port;
- (void)_proxy_user;
- (void)_proxy_pass;
- (void)_info;
- return NULL;
-#endif
-}
-
-/*The actual implementation of op_url_stream_vcreate().
- We have to do a careful dance here to avoid potential memory leaks if
- OpusServerInfo is requested, since this function is also used by
- op_vopen_url() and op_vtest_url().
- Even if this function succeeds, those functions might ultimately fail.
- If they do, they should return without having touched the OpusServerInfo
- passed by the application.
- Therefore, if this function succeeds and OpusServerInfo is requested, the
- actual info will be stored in *_info and a pointer to the application's
- storage will be placed in *_pinfo.
- If this function fails or if the application did not request OpusServerInfo,
- *_pinfo will be NULL.
- Our caller is responsible for copying *_info to **_pinfo if it ultimately
- succeeds, or for clearing *_info if it ultimately fails.*/
-void *op_url_stream_vcreate_impl(OpusFileCallbacks *_cb,
- const char *_url,OpusServerInfo *_info,OpusServerInfo **_pinfo,va_list _ap){
- int skip_certificate_check;
- const char *proxy_host;
- opus_int32 proxy_port;
- const char *proxy_user;
- const char *proxy_pass;
- OpusServerInfo *pinfo;
- skip_certificate_check=0;
- proxy_host=NULL;
- proxy_port=8080;
- proxy_user=NULL;
- proxy_pass=NULL;
- pinfo=NULL;
- for(;;){
- ptrdiff_t request;
- request=va_arg(_ap,char *)-(char *)NULL;
- /*If we hit NULL, we're done processing options.*/
- if(!request)break;
- switch(request){
- case OP_SSL_SKIP_CERTIFICATE_CHECK_REQUEST:{
- skip_certificate_check=!!va_arg(_ap,opus_int32);
- }break;
- case OP_HTTP_PROXY_HOST_REQUEST:{
- proxy_host=va_arg(_ap,const char *);
- }break;
- case OP_HTTP_PROXY_PORT_REQUEST:{
- proxy_port=va_arg(_ap,opus_int32);
- if(proxy_port<0||proxy_port>(opus_int32)65535)return NULL;
- }break;
- case OP_HTTP_PROXY_USER_REQUEST:{
- proxy_user=va_arg(_ap,const char *);
- }break;
- case OP_HTTP_PROXY_PASS_REQUEST:{
- proxy_pass=va_arg(_ap,const char *);
- }break;
- case OP_GET_SERVER_INFO_REQUEST:{
- pinfo=va_arg(_ap,OpusServerInfo *);
- }break;
- /*Some unknown option.*/
- default:return NULL;
- }
- }
- /*If the caller has requested server information, proxy it to a local copy to
- simplify error handling.*/
- *_pinfo=NULL;
- if(pinfo!=NULL){
- void *ret;
- opus_server_info_init(_info);
- ret=op_url_stream_create_impl(_cb,_url,skip_certificate_check,
- proxy_host,proxy_port,proxy_user,proxy_pass,_info);
- if(ret!=NULL)*_pinfo=pinfo;
- else opus_server_info_clear(_info);
- return ret;
- }
- return op_url_stream_create_impl(_cb,_url,skip_certificate_check,
- proxy_host,proxy_port,proxy_user,proxy_pass,NULL);
-}
-
-void *op_url_stream_vcreate(OpusFileCallbacks *_cb,
- const char *_url,va_list _ap){
- OpusServerInfo info;
- OpusServerInfo *pinfo;
- void *ret;
- ret=op_url_stream_vcreate_impl(_cb,_url,&info,&pinfo,_ap);
- if(pinfo!=NULL)*pinfo=*&info;
- return ret;
-}
-
-void *op_url_stream_create(OpusFileCallbacks *_cb,
- const char *_url,...){
- va_list ap;
- void *ret;
- va_start(ap,_url);
- ret=op_url_stream_vcreate(_cb,_url,ap);
- va_end(ap);
- return ret;
-}
-
-/*Convenience routines to open/test URLs in a single step.*/
-
-OggOpusFile *op_vopen_url(const char *_url,int *_error,va_list _ap){
- OpusFileCallbacks cb;
- OggOpusFile *of;
- OpusServerInfo info;
- OpusServerInfo *pinfo;
- void *source;
- source=op_url_stream_vcreate_impl(&cb,_url,&info,&pinfo,_ap);
- if(OP_UNLIKELY(source==NULL)){
- OP_ASSERT(pinfo==NULL);
- if(_error!=NULL)*_error=OP_EFAULT;
- return NULL;
- }
- of=op_open_callbacks(source,&cb,NULL,0,_error);
- if(OP_UNLIKELY(of==NULL)){
- if(pinfo!=NULL)opus_server_info_clear(&info);
- (*cb.close)(source);
- }
- else if(pinfo!=NULL)*pinfo=*&info;
- return of;
-}
-
-OggOpusFile *op_open_url(const char *_url,int *_error,...){
- OggOpusFile *ret;
- va_list ap;
- va_start(ap,_error);
- ret=op_vopen_url(_url,_error,ap);
- va_end(ap);
- return ret;
-}
-
-OggOpusFile *op_vtest_url(const char *_url,int *_error,va_list _ap){
- OpusFileCallbacks cb;
- OggOpusFile *of;
- OpusServerInfo info;
- OpusServerInfo *pinfo;
- void *source;
- source=op_url_stream_vcreate_impl(&cb,_url,&info,&pinfo,_ap);
- if(OP_UNLIKELY(source==NULL)){
- OP_ASSERT(pinfo==NULL);
- if(_error!=NULL)*_error=OP_EFAULT;
- return NULL;
- }
- of=op_test_callbacks(source,&cb,NULL,0,_error);
- if(OP_UNLIKELY(of==NULL)){
- if(pinfo!=NULL)opus_server_info_clear(&info);
- (*cb.close)(source);
- }
- else if(pinfo!=NULL)*pinfo=*&info;
- return of;
-}
-
-OggOpusFile *op_test_url(const char *_url,int *_error,...){
- OggOpusFile *ret;
- va_list ap;
- va_start(ap,_error);
- ret=op_vtest_url(_url,_error,ap);
- va_end(ap);
- return ret;
-}
diff --git a/drivers/opus/info.c b/drivers/opus/info.c
deleted file mode 100644
index b94393351e..0000000000
--- a/drivers/opus/info.c
+++ /dev/null
@@ -1,751 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE libopusfile 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 libopusfile SOURCE CODE IS (C) COPYRIGHT 2012 *
- * by the Xiph.Org Foundation and contributors http://www.xiph.org/ *
- * *
- ********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/internal.h"
-#include <limits.h>
-#include <string.h>
-
-static unsigned op_parse_uint16le(const unsigned char *_data){
- return _data[0]|_data[1]<<8;
-}
-
-static int op_parse_int16le(const unsigned char *_data){
- int ret;
- ret=_data[0]|_data[1]<<8;
- return (ret^0x8000)-0x8000;
-}
-
-static opus_uint32 op_parse_uint32le(const unsigned char *_data){
- return _data[0]|(opus_uint32)_data[1]<<8|
- (opus_uint32)_data[2]<<16|(opus_uint32)_data[3]<<24;
-}
-
-static opus_uint32 op_parse_uint32be(const unsigned char *_data){
- return _data[3]|(opus_uint32)_data[2]<<8|
- (opus_uint32)_data[1]<<16|(opus_uint32)_data[0]<<24;
-}
-
-int opus_head_parse(OpusHead *_head,const unsigned char *_data,size_t _len){
- OpusHead head;
- if(_len<8)return OP_ENOTFORMAT;
- if(memcmp(_data,"OpusHead",8)!=0)return OP_ENOTFORMAT;
- if(_len<9)return OP_EBADHEADER;
- head.version=_data[8];
- if(head.version>15)return OP_EVERSION;
- if(_len<19)return OP_EBADHEADER;
- head.channel_count=_data[9];
- head.pre_skip=op_parse_uint16le(_data+10);
- head.input_sample_rate=op_parse_uint32le(_data+12);
- head.output_gain=op_parse_int16le(_data+16);
- head.mapping_family=_data[18];
- if(head.mapping_family==0){
- if(head.channel_count<1||head.channel_count>2)return OP_EBADHEADER;
- if(head.version<=1&&_len>19)return OP_EBADHEADER;
- head.stream_count=1;
- head.coupled_count=head.channel_count-1;
- if(_head!=NULL){
- _head->mapping[0]=0;
- _head->mapping[1]=1;
- }
- }
- else if(head.mapping_family==1){
- size_t size;
- int ci;
- if(head.channel_count<1||head.channel_count>8)return OP_EBADHEADER;
- size=21+head.channel_count;
- if(_len<size||head.version<=1&&_len>size)return OP_EBADHEADER;
- head.stream_count=_data[19];
- if(head.stream_count<1)return OP_EBADHEADER;
- head.coupled_count=_data[20];
- if(head.coupled_count>head.stream_count)return OP_EBADHEADER;
- for(ci=0;ci<head.channel_count;ci++){
- if(_data[21+ci]>=head.stream_count+head.coupled_count
- &&_data[21+ci]!=255){
- return OP_EBADHEADER;
- }
- }
- if(_head!=NULL)memcpy(_head->mapping,_data+21,head.channel_count);
- }
- /*General purpose players should not attempt to play back content with
- channel mapping family 255.*/
- else if(head.mapping_family==255)return OP_EIMPL;
- /*No other channel mapping families are currently defined.*/
- else return OP_EBADHEADER;
- if(_head!=NULL)memcpy(_head,&head,head.mapping-(unsigned char *)&head);
- return 0;
-}
-
-void opus_tags_init(OpusTags *_tags){
- memset(_tags,0,sizeof(*_tags));
-}
-
-void opus_tags_clear(OpusTags *_tags){
- int ncomments;
- int ci;
- ncomments=_tags->comments;
- if(_tags->user_comments!=NULL)ncomments++;
- for(ci=ncomments;ci-->0;)_ogg_free(_tags->user_comments[ci]);
- _ogg_free(_tags->user_comments);
- _ogg_free(_tags->comment_lengths);
- _ogg_free(_tags->vendor);
-}
-
-/*Ensure there's room for up to _ncomments comments.*/
-static int op_tags_ensure_capacity(OpusTags *_tags,size_t _ncomments){
- char **user_comments;
- int *comment_lengths;
- int cur_ncomments;
- char *binary_suffix_data;
- int binary_suffix_len;
- size_t size;
- if(OP_UNLIKELY(_ncomments>=(size_t)INT_MAX))return OP_EFAULT;
- size=sizeof(*_tags->comment_lengths)*(_ncomments+1);
- if(size/sizeof(*_tags->comment_lengths)!=_ncomments+1)return OP_EFAULT;
- cur_ncomments=_tags->comments;
- comment_lengths=_tags->comment_lengths;
- binary_suffix_len=comment_lengths==NULL?0:comment_lengths[cur_ncomments];
- comment_lengths=(int *)_ogg_realloc(_tags->comment_lengths,size);
- if(OP_UNLIKELY(comment_lengths==NULL))return OP_EFAULT;
- comment_lengths[_ncomments]=binary_suffix_len;
- _tags->comment_lengths=comment_lengths;
- size=sizeof(*_tags->user_comments)*(_ncomments+1);
- if(size/sizeof(*_tags->user_comments)!=_ncomments+1)return OP_EFAULT;
- user_comments=_tags->user_comments;
- binary_suffix_data=user_comments==NULL?NULL:user_comments[cur_ncomments];
- user_comments=(char **)_ogg_realloc(_tags->user_comments,size);
- if(OP_UNLIKELY(user_comments==NULL))return OP_EFAULT;
- user_comments[_ncomments]=binary_suffix_data;
- _tags->user_comments=user_comments;
- return 0;
-}
-
-/*Duplicate a (possibly non-NUL terminated) string with a known length.*/
-static char *op_strdup_with_len(const char *_s,size_t _len){
- size_t size;
- char *ret;
- size=sizeof(*ret)*(_len+1);
- if(OP_UNLIKELY(size<_len))return NULL;
- ret=(char *)_ogg_malloc(size);
- if(OP_LIKELY(ret!=NULL)){
- ret=(char *)memcpy(ret,_s,sizeof(*ret)*_len);
- ret[_len]='\0';
- }
- return ret;
-}
-
-/*The actual implementation of opus_tags_parse().
- Unlike the public API, this function requires _tags to already be
- initialized, modifies its contents before success is guaranteed, and assumes
- the caller will clear it on error.*/
-static int opus_tags_parse_impl(OpusTags *_tags,
- const unsigned char *_data,size_t _len){
- opus_uint32 count;
- size_t len;
- int ncomments;
- int ci;
- len=_len;
- if(len<8)return OP_ENOTFORMAT;
- if(memcmp(_data,"OpusTags",8)!=0)return OP_ENOTFORMAT;
- if(len<16)return OP_EBADHEADER;
- _data+=8;
- len-=8;
- count=op_parse_uint32le(_data);
- _data+=4;
- len-=4;
- if(count>len)return OP_EBADHEADER;
- if(_tags!=NULL){
- _tags->vendor=op_strdup_with_len((char *)_data,count);
- if(_tags->vendor==NULL)return OP_EFAULT;
- }
- _data+=count;
- len-=count;
- if(len<4)return OP_EBADHEADER;
- count=op_parse_uint32le(_data);
- _data+=4;
- len-=4;
- /*Check to make sure there's minimally sufficient data left in the packet.*/
- if(count>len>>2)return OP_EBADHEADER;
- /*Check for overflow (the API limits this to an int).*/
- if(count>(opus_uint32)INT_MAX-1)return OP_EFAULT;
- if(_tags!=NULL){
- int ret;
- ret=op_tags_ensure_capacity(_tags,count);
- if(ret<0)return ret;
- }
- ncomments=(int)count;
- for(ci=0;ci<ncomments;ci++){
- /*Check to make sure there's minimally sufficient data left in the packet.*/
- if((size_t)(ncomments-ci)>len>>2)return OP_EBADHEADER;
- count=op_parse_uint32le(_data);
- _data+=4;
- len-=4;
- if(count>len)return OP_EBADHEADER;
- /*Check for overflow (the API limits this to an int).*/
- if(count>(opus_uint32)INT_MAX)return OP_EFAULT;
- if(_tags!=NULL){
- _tags->user_comments[ci]=op_strdup_with_len((char *)_data,count);
- if(_tags->user_comments[ci]==NULL)return OP_EFAULT;
- _tags->comment_lengths[ci]=(int)count;
- _tags->comments=ci+1;
- }
- _data+=count;
- len-=count;
- }
- if(len>0&&(_data[0]&1)){
- if(len>(opus_uint32)INT_MAX)return OP_EFAULT;
- _tags->user_comments[ncomments]=(char *)_ogg_malloc(len);
- if(OP_UNLIKELY(_tags->user_comments[ncomments]==NULL))return OP_EFAULT;
- memcpy(_tags->user_comments[ncomments],_data,len);
- _tags->comment_lengths[ncomments]=(int)len;
- }
- return 0;
-}
-
-int opus_tags_parse(OpusTags *_tags,const unsigned char *_data,size_t _len){
- if(_tags!=NULL){
- OpusTags tags;
- int ret;
- opus_tags_init(&tags);
- ret=opus_tags_parse_impl(&tags,_data,_len);
- if(ret<0)opus_tags_clear(&tags);
- else *_tags=*&tags;
- return ret;
- }
- else return opus_tags_parse_impl(NULL,_data,_len);
-}
-
-/*The actual implementation of opus_tags_copy().
- Unlike the public API, this function requires _dst to already be
- initialized, modifies its contents before success is guaranteed, and assumes
- the caller will clear it on error.*/
-static int opus_tags_copy_impl(OpusTags *_dst,const OpusTags *_src){
- char *vendor;
- int ncomments;
- int ret;
- int ci;
- vendor=_src->vendor;
- _dst->vendor=op_strdup_with_len(vendor,strlen(vendor));
- if(OP_UNLIKELY(_dst->vendor==NULL))return OP_EFAULT;
- ncomments=_src->comments;
- ret=op_tags_ensure_capacity(_dst,ncomments);
- if(OP_UNLIKELY(ret<0))return ret;
- for(ci=0;ci<ncomments;ci++){
- int len;
- len=_src->comment_lengths[ci];
- OP_ASSERT(len>=0);
- _dst->user_comments[ci]=op_strdup_with_len(_src->user_comments[ci],len);
- if(OP_UNLIKELY(_dst->user_comments[ci]==NULL))return OP_EFAULT;
- _dst->comment_lengths[ci]=len;
- _dst->comments=ci+1;
- }
- if(_src->comment_lengths!=NULL){
- int len;
- len=_src->comment_lengths[ncomments];
- if(len>0){
- _dst->user_comments[ncomments]=(char *)_ogg_malloc(len);
- if(OP_UNLIKELY(_dst->user_comments[ncomments]==NULL))return OP_EFAULT;
- memcpy(_dst->user_comments[ncomments],_src->user_comments[ncomments],len);
- _dst->comment_lengths[ncomments]=len;
- }
- }
- return 0;
-}
-
-int opus_tags_copy(OpusTags *_dst,const OpusTags *_src){
- OpusTags dst;
- int ret;
- opus_tags_init(&dst);
- ret=opus_tags_copy_impl(&dst,_src);
- if(OP_UNLIKELY(ret<0))opus_tags_clear(&dst);
- else *_dst=*&dst;
- return 0;
-}
-
-int opus_tags_add(OpusTags *_tags,const char *_tag,const char *_value){
- char *comment;
- int tag_len;
- int value_len;
- int ncomments;
- int ret;
- ncomments=_tags->comments;
- ret=op_tags_ensure_capacity(_tags,ncomments+1);
- if(OP_UNLIKELY(ret<0))return ret;
- tag_len=strlen(_tag);
- value_len=strlen(_value);
- /*+2 for '=' and '\0'.*/
- comment=(char *)_ogg_malloc(sizeof(*comment)*(tag_len+value_len+2));
- if(OP_UNLIKELY(comment==NULL))return OP_EFAULT;
- memcpy(comment,_tag,sizeof(*comment)*tag_len);
- comment[tag_len]='=';
- memcpy(comment+tag_len+1,_value,sizeof(*comment)*(value_len+1));
- _tags->user_comments[ncomments]=comment;
- _tags->comment_lengths[ncomments]=tag_len+value_len+1;
- _tags->comments=ncomments+1;
- return 0;
-}
-
-int opus_tags_add_comment(OpusTags *_tags,const char *_comment){
- char *comment;
- int comment_len;
- int ncomments;
- int ret;
- ncomments=_tags->comments;
- ret=op_tags_ensure_capacity(_tags,ncomments+1);
- if(OP_UNLIKELY(ret<0))return ret;
- comment_len=(int)strlen(_comment);
- comment=op_strdup_with_len(_comment,comment_len);
- if(OP_UNLIKELY(_tags->user_comments[ncomments]==NULL))return OP_EFAULT;
- _tags->user_comments[ncomments]=comment;
- _tags->comment_lengths[ncomments]=comment_len;
- _tags->comments=ncomments+1;
- return 0;
-}
-
-int opus_tags_set_binary_suffix(OpusTags *_tags,
- const unsigned char *_data,int _len){
- unsigned char *binary_suffix_data;
- int ncomments;
- int ret;
- if(_len<0||_len>0&&(_data==NULL||!(_data[0]&1)))return OP_EINVAL;
- ncomments=_tags->comments;
- ret=op_tags_ensure_capacity(_tags,ncomments);
- if(OP_UNLIKELY(ret<0))return ret;
- binary_suffix_data=
- (unsigned char *)_ogg_realloc(_tags->user_comments[ncomments],_len);
- if(OP_UNLIKELY(binary_suffix_data==NULL))return OP_EFAULT;
- memcpy(binary_suffix_data,_data,_len);
- _tags->user_comments[ncomments]=(char *)binary_suffix_data;
- _tags->comment_lengths[ncomments]=_len;
- return 0;
-}
-
-int opus_tagcompare(const char *_tag_name,const char *_comment){
- return opus_tagncompare(_tag_name,strlen(_tag_name),_comment);
-}
-
-int opus_tagncompare(const char *_tag_name,int _tag_len,const char *_comment){
- int ret;
- OP_ASSERT(_tag_len>=0);
- ret=op_strncasecmp(_tag_name,_comment,_tag_len);
- return ret?ret:'='-_comment[_tag_len];
-}
-
-const char *opus_tags_query(const OpusTags *_tags,const char *_tag,int _count){
- char **user_comments;
- int tag_len;
- int found;
- int ncomments;
- int ci;
- tag_len=strlen(_tag);
- ncomments=_tags->comments;
- user_comments=_tags->user_comments;
- found=0;
- for(ci=0;ci<ncomments;ci++){
- if(!opus_tagncompare(_tag,tag_len,user_comments[ci])){
- /*We return a pointer to the data, not a copy.*/
- if(_count==found++)return user_comments[ci]+tag_len+1;
- }
- }
- /*Didn't find anything.*/
- return NULL;
-}
-
-int opus_tags_query_count(const OpusTags *_tags,const char *_tag){
- char **user_comments;
- int tag_len;
- int found;
- int ncomments;
- int ci;
- tag_len=strlen(_tag);
- ncomments=_tags->comments;
- user_comments=_tags->user_comments;
- found=0;
- for(ci=0;ci<ncomments;ci++){
- if(!opus_tagncompare(_tag,tag_len,user_comments[ci]))found++;
- }
- return found;
-}
-
-const unsigned char *opus_tags_get_binary_suffix(const OpusTags *_tags,
- int *_len){
- int ncomments;
- int len;
- ncomments=_tags->comments;
- len=_tags->comment_lengths==NULL?0:_tags->comment_lengths[ncomments];
- *_len=len;
- OP_ASSERT(len==0||_tags->user_comments!=NULL);
- return len>0?(const unsigned char *)_tags->user_comments[ncomments]:NULL;
-}
-
-static int opus_tags_get_gain(const OpusTags *_tags,int *_gain_q8,
- const char *_tag_name,size_t _tag_len){
- char **comments;
- int ncomments;
- int ci;
- comments=_tags->user_comments;
- ncomments=_tags->comments;
- /*Look for the first valid tag with the name _tag_name and use that.*/
- for(ci=0;ci<ncomments;ci++){
- if(opus_tagncompare(_tag_name,_tag_len,comments[ci])==0){
- char *p;
- opus_int32 gain_q8;
- int negative;
- p=comments[ci]+_tag_len+1;
- negative=0;
- if(*p=='-'){
- negative=-1;
- p++;
- }
- else if(*p=='+')p++;
- gain_q8=0;
- while(*p>='0'&&*p<='9'){
- gain_q8=10*gain_q8+*p-'0';
- if(gain_q8>32767-negative)break;
- p++;
- }
- /*This didn't look like a signed 16-bit decimal integer.
- Not a valid gain tag.*/
- if(*p!='\0')continue;
- *_gain_q8=(int)(gain_q8+negative^negative);
- return 0;
- }
- }
- return OP_FALSE;
-}
-
-int opus_tags_get_album_gain(const OpusTags *_tags,int *_gain_q8){
- return opus_tags_get_gain(_tags,_gain_q8,"R128_ALBUM_GAIN",15);
-}
-
-int opus_tags_get_track_gain(const OpusTags *_tags,int *_gain_q8){
- return opus_tags_get_gain(_tags,_gain_q8,"R128_TRACK_GAIN",15);
-}
-
-static int op_is_jpeg(const unsigned char *_buf,size_t _buf_sz){
- return _buf_sz>=11&&memcmp(_buf,"\xFF\xD8\xFF\xE0",4)==0
- &&(_buf[4]<<8|_buf[5])>=16&&memcmp(_buf+6,"JFIF",5)==0;
-}
-
-/*Tries to extract the width, height, bits per pixel, and palette size of a
- JPEG.
- On failure, simply leaves its outputs unmodified.*/
-static void op_extract_jpeg_params(const unsigned char *_buf,size_t _buf_sz,
- opus_uint32 *_width,opus_uint32 *_height,
- opus_uint32 *_depth,opus_uint32 *_colors,int *_has_palette){
- if(op_is_jpeg(_buf,_buf_sz)){
- size_t offs;
- offs=2;
- for(;;){
- size_t segment_len;
- int marker;
- while(offs<_buf_sz&&_buf[offs]!=0xFF)offs++;
- while(offs<_buf_sz&&_buf[offs]==0xFF)offs++;
- marker=_buf[offs];
- offs++;
- /*If we hit EOI* (end of image), or another SOI* (start of image),
- or SOS (start of scan), then stop now.*/
- if(offs>=_buf_sz||(marker>=0xD8&&marker<=0xDA))break;
- /*RST* (restart markers): skip (no segment length).*/
- else if(marker>=0xD0&&marker<=0xD7)continue;
- /*Read the length of the marker segment.*/
- if(_buf_sz-offs<2)break;
- segment_len=_buf[offs]<<8|_buf[offs+1];
- if(segment_len<2||_buf_sz-offs<segment_len)break;
- if(marker==0xC0||(marker>0xC0&&marker<0xD0&&(marker&3)!=0)){
- /*Found a SOFn (start of frame) marker segment:*/
- if(segment_len>=8){
- *_height=_buf[offs+3]<<8|_buf[offs+4];
- *_width=_buf[offs+5]<<8|_buf[offs+6];
- *_depth=_buf[offs+2]*_buf[offs+7];
- *_colors=0;
- *_has_palette=0;
- }
- break;
- }
- /*Other markers: skip the whole marker segment.*/
- offs+=segment_len;
- }
- }
-}
-
-static int op_is_png(const unsigned char *_buf,size_t _buf_sz){
- return _buf_sz>=8&&memcmp(_buf,"\x89PNG\x0D\x0A\x1A\x0A",8)==0;
-}
-
-/*Tries to extract the width, height, bits per pixel, and palette size of a
- PNG.
- On failure, simply leaves its outputs unmodified.*/
-static void op_extract_png_params(const unsigned char *_buf,size_t _buf_sz,
- opus_uint32 *_width,opus_uint32 *_height,
- opus_uint32 *_depth,opus_uint32 *_colors,int *_has_palette){
- if(op_is_png(_buf,_buf_sz)){
- size_t offs;
- offs=8;
- while(_buf_sz-offs>=12){
- ogg_uint32_t chunk_len;
- chunk_len=op_parse_uint32be(_buf+offs);
- if(chunk_len>_buf_sz-(offs+12))break;
- else if(chunk_len==13&&memcmp(_buf+offs+4,"IHDR",4)==0){
- int color_type;
- *_width=op_parse_uint32be(_buf+offs+8);
- *_height=op_parse_uint32be(_buf+offs+12);
- color_type=_buf[offs+17];
- if(color_type==3){
- *_depth=24;
- *_has_palette=1;
- }
- else{
- int sample_depth;
- sample_depth=_buf[offs+16];
- if(color_type==0)*_depth=sample_depth;
- else if(color_type==2)*_depth=sample_depth*3;
- else if(color_type==4)*_depth=sample_depth*2;
- else if(color_type==6)*_depth=sample_depth*4;
- *_colors=0;
- *_has_palette=0;
- break;
- }
- }
- else if(*_has_palette>0&&memcmp(_buf+offs+4,"PLTE",4)==0){
- *_colors=chunk_len/3;
- break;
- }
- offs+=12+chunk_len;
- }
- }
-}
-
-static int op_is_gif(const unsigned char *_buf,size_t _buf_sz){
- return _buf_sz>=6&&(memcmp(_buf,"GIF87a",6)==0||memcmp(_buf,"GIF89a",6)==0);
-}
-
-/*Tries to extract the width, height, bits per pixel, and palette size of a
- GIF.
- On failure, simply leaves its outputs unmodified.*/
-static void op_extract_gif_params(const unsigned char *_buf,size_t _buf_sz,
- opus_uint32 *_width,opus_uint32 *_height,
- opus_uint32 *_depth,opus_uint32 *_colors,int *_has_palette){
- if(op_is_gif(_buf,_buf_sz)&&_buf_sz>=14){
- *_width=_buf[6]|_buf[7]<<8;
- *_height=_buf[8]|_buf[9]<<8;
- /*libFLAC hard-codes the depth to 24.*/
- *_depth=24;
- *_colors=1<<((_buf[10]&7)+1);
- *_has_palette=1;
- }
-}
-
-/*The actual implementation of opus_picture_tag_parse().
- Unlike the public API, this function requires _pic to already be
- initialized, modifies its contents before success is guaranteed, and assumes
- the caller will clear it on error.*/
-static int opus_picture_tag_parse_impl(OpusPictureTag *_pic,const char *_tag,
- unsigned char *_buf,size_t _buf_sz,size_t _base64_sz){
- opus_int32 picture_type;
- opus_uint32 mime_type_length;
- char *mime_type;
- opus_uint32 description_length;
- char *description;
- opus_uint32 width;
- opus_uint32 height;
- opus_uint32 depth;
- opus_uint32 colors;
- opus_uint32 data_length;
- opus_uint32 file_width;
- opus_uint32 file_height;
- opus_uint32 file_depth;
- opus_uint32 file_colors;
- int format;
- int has_palette;
- int colors_set;
- size_t i;
- /*Decode the BASE64 data.*/
- for(i=0;i<_base64_sz;i++){
- opus_uint32 value;
- int j;
- value=0;
- for(j=0;j<4;j++){
- unsigned c;
- unsigned d;
- c=(unsigned char)_tag[4*i+j];
- if(c=='+')d=62;
- else if(c=='/')d=63;
- else if(c>='0'&&c<='9')d=52+c-'0';
- else if(c>='a'&&c<='z')d=26+c-'a';
- else if(c>='A'&&c<='Z')d=c-'A';
- else if(c=='='&&3*i+j>_buf_sz)d=0;
- else return OP_ENOTFORMAT;
- value=value<<6|d;
- }
- _buf[3*i]=(unsigned char)(value>>16);
- if(3*i+1<_buf_sz){
- _buf[3*i+1]=(unsigned char)(value>>8);
- if(3*i+2<_buf_sz)_buf[3*i+2]=(unsigned char)value;
- }
- }
- i=0;
- picture_type=op_parse_uint32be(_buf+i);
- i+=4;
- /*Extract the MIME type.*/
- mime_type_length=op_parse_uint32be(_buf+i);
- i+=4;
- if(mime_type_length>_buf_sz-32)return OP_ENOTFORMAT;
- mime_type=(char *)_ogg_malloc(sizeof(*_pic->mime_type)*(mime_type_length+1));
- if(mime_type==NULL)return OP_EFAULT;
- memcpy(mime_type,_buf+i,sizeof(*mime_type)*mime_type_length);
- mime_type[mime_type_length]='\0';
- _pic->mime_type=mime_type;
- i+=mime_type_length;
- /*Extract the description string.*/
- description_length=op_parse_uint32be(_buf+i);
- i+=4;
- if(description_length>_buf_sz-mime_type_length-32)return OP_ENOTFORMAT;
- description=
- (char *)_ogg_malloc(sizeof(*_pic->mime_type)*(description_length+1));
- if(description==NULL)return OP_EFAULT;
- memcpy(description,_buf+i,sizeof(*description)*description_length);
- description[description_length]='\0';
- _pic->description=description;
- i+=description_length;
- /*Extract the remaining fields.*/
- width=op_parse_uint32be(_buf+i);
- i+=4;
- height=op_parse_uint32be(_buf+i);
- i+=4;
- depth=op_parse_uint32be(_buf+i);
- i+=4;
- colors=op_parse_uint32be(_buf+i);
- i+=4;
- /*If one of these is set, they all must be, but colors==0 is a valid value.*/
- colors_set=width!=0||height!=0||depth!=0||colors!=0;
- if((width==0||height==0||depth==0)&&colors_set)return OP_ENOTFORMAT;
- data_length=op_parse_uint32be(_buf+i);
- i+=4;
- if(data_length>_buf_sz-i)return OP_ENOTFORMAT;
- /*Trim extraneous data so we don't copy it below.*/
- _buf_sz=i+data_length;
- /*Attempt to determine the image format.*/
- format=OP_PIC_FORMAT_UNKNOWN;
- if(mime_type_length==3&&strcmp(mime_type,"-->")==0){
- format=OP_PIC_FORMAT_URL;
- /*Picture type 1 must be a 32x32 PNG.*/
- if(picture_type==1&&(width!=0||height!=0)&&(width!=32||height!=32)){
- return OP_ENOTFORMAT;
- }
- /*Append a terminating NUL for the convenience of our callers.*/
- _buf[_buf_sz++]='\0';
- }
- else{
- if(mime_type_length==10
- &&op_strncasecmp(mime_type,"image/jpeg",mime_type_length)==0){
- if(op_is_jpeg(_buf+i,data_length))format=OP_PIC_FORMAT_JPEG;
- }
- else if(mime_type_length==9
- &&op_strncasecmp(mime_type,"image/png",mime_type_length)==0){
- if(op_is_png(_buf+i,data_length))format=OP_PIC_FORMAT_PNG;
- }
- else if(mime_type_length==9
- &&op_strncasecmp(mime_type,"image/gif",mime_type_length)==0){
- if(op_is_gif(_buf+i,data_length))format=OP_PIC_FORMAT_GIF;
- }
- else if(mime_type_length==0||(mime_type_length==6
- &&op_strncasecmp(mime_type,"image/",mime_type_length)==0)){
- if(op_is_jpeg(_buf+i,data_length))format=OP_PIC_FORMAT_JPEG;
- else if(op_is_png(_buf+i,data_length))format=OP_PIC_FORMAT_PNG;
- else if(op_is_gif(_buf+i,data_length))format=OP_PIC_FORMAT_GIF;
- }
- file_width=file_height=file_depth=file_colors=0;
- has_palette=-1;
- switch(format){
- case OP_PIC_FORMAT_JPEG:{
- op_extract_jpeg_params(_buf+i,data_length,
- &file_width,&file_height,&file_depth,&file_colors,&has_palette);
- }break;
- case OP_PIC_FORMAT_PNG:{
- op_extract_png_params(_buf+i,data_length,
- &file_width,&file_height,&file_depth,&file_colors,&has_palette);
- }break;
- case OP_PIC_FORMAT_GIF:{
- op_extract_gif_params(_buf+i,data_length,
- &file_width,&file_height,&file_depth,&file_colors,&has_palette);
- }break;
- }
- if(has_palette>=0){
- /*If we successfully extracted these parameters from the image, override
- any declared values.*/
- width=file_width;
- height=file_height;
- depth=file_depth;
- colors=file_colors;
- }
- /*Picture type 1 must be a 32x32 PNG.*/
- if(picture_type==1&&(format!=OP_PIC_FORMAT_PNG||width!=32||height!=32)){
- return OP_ENOTFORMAT;
- }
- }
- /*Adjust _buf_sz instead of using data_length to capture the terminating NUL
- for URLs.*/
- _buf_sz-=i;
- memmove(_buf,_buf+i,sizeof(*_buf)*_buf_sz);
- _buf=(unsigned char *)_ogg_realloc(_buf,_buf_sz);
- if(_buf_sz>0&&_buf==NULL)return OP_EFAULT;
- _pic->type=picture_type;
- _pic->width=width;
- _pic->height=height;
- _pic->depth=depth;
- _pic->colors=colors;
- _pic->data_length=data_length;
- _pic->data=_buf;
- _pic->format=format;
- return 0;
-}
-
-int opus_picture_tag_parse(OpusPictureTag *_pic,const char *_tag){
- OpusPictureTag pic;
- unsigned char *buf;
- size_t base64_sz;
- size_t buf_sz;
- size_t tag_length;
- int ret;
- if(opus_tagncompare("METADATA_BLOCK_PICTURE",22,_tag)==0)_tag+=23;
- /*Figure out how much BASE64-encoded data we have.*/
- tag_length=strlen(_tag);
- if(tag_length&3)return OP_ENOTFORMAT;
- base64_sz=tag_length>>2;
- buf_sz=3*base64_sz;
- if(buf_sz<32)return OP_ENOTFORMAT;
- if(_tag[tag_length-1]=='=')buf_sz--;
- if(_tag[tag_length-2]=='=')buf_sz--;
- if(buf_sz<32)return OP_ENOTFORMAT;
- /*Allocate an extra byte to allow appending a terminating NUL to URL data.*/
- buf=(unsigned char *)_ogg_malloc(sizeof(*buf)*(buf_sz+1));
- if(buf==NULL)return OP_EFAULT;
- opus_picture_tag_init(&pic);
- ret=opus_picture_tag_parse_impl(&pic,_tag,buf,buf_sz,base64_sz);
- if(ret<0){
- opus_picture_tag_clear(&pic);
- _ogg_free(buf);
- }
- else *_pic=*&pic;
- return ret;
-}
-
-void opus_picture_tag_init(OpusPictureTag *_pic){
- memset(_pic,0,sizeof(*_pic));
-}
-
-void opus_picture_tag_clear(OpusPictureTag *_pic){
- _ogg_free(_pic->description);
- _ogg_free(_pic->mime_type);
- _ogg_free(_pic->data);
-}
diff --git a/drivers/opus/internal.c b/drivers/opus/internal.c
deleted file mode 100644
index bd7d2ee4bb..0000000000
--- a/drivers/opus/internal.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE libopusfile 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 libopusfile SOURCE CODE IS (C) COPYRIGHT 2012 *
- * by the Xiph.Org Foundation and contributors http://www.xiph.org/ *
- * *
- ********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/internal.h"
-
-#if defined(OP_ENABLE_ASSERTIONS)
-void op_fatal_impl(const char *_str,const char *_file,int _line){
- fprintf(stderr,"Fatal (internal) error in %s, line %i: %s\n",
- _file,_line,_str);
- abort();
-}
-#endif
-
-/*A version of strncasecmp() that is guaranteed to only ignore the case of
- ASCII characters.*/
-int op_strncasecmp(const char *_a,const char *_b,int _n){
- int i;
- for(i=0;i<_n;i++){
- int a;
- int b;
- int d;
- a=_a[i];
- b=_b[i];
- if(a>='a'&&a<='z')a-='a'-'A';
- if(b>='a'&&b<='z')b-='a'-'A';
- d=a-b;
- if(d)return d;
- }
- return 0;
-}
diff --git a/drivers/opus/internal.h b/drivers/opus/internal.h
deleted file mode 100644
index f7a5bd8c74..0000000000
--- a/drivers/opus/internal.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE libopusfile 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 libopusfile SOURCE CODE IS (C) COPYRIGHT 2012 *
- * by the Xiph.Org Foundation and contributors http://www.xiph.org/ *
- * *
- ********************************************************************/
-#if !defined(_opusfile_internal_h)
-# define _opusfile_internal_h (1)
-
-# if !defined(_REENTRANT)
-# define _REENTRANT
-# endif
-# if !defined(_GNU_SOURCE)
-# define _GNU_SOURCE
-# endif
-# if !defined(_LARGEFILE_SOURCE)
-# define _LARGEFILE_SOURCE
-# endif
-# if !defined(_LARGEFILE64_SOURCE)
-# define _LARGEFILE64_SOURCE
-# endif
-# if !defined(_FILE_OFFSET_BITS)
-# define _FILE_OFFSET_BITS 64
-# endif
-
-# include <stdlib.h>
-# include "opus/opusfile.h"
-
-typedef struct OggOpusLink OggOpusLink;
-
-# if defined(OP_FIXED_POINT)
-
-typedef opus_int16 op_sample;
-
-# else
-
-typedef float op_sample;
-
-/*We're using this define to test for libopus 1.1 or later until libopus
- provides a better mechanism.*/
-# if defined(OPUS_GET_EXPERT_FRAME_DURATION_REQUEST)
-/*Enable soft clipping prevention in 16-bit decodes.*/
-# define OP_SOFT_CLIP (1)
-# endif
-
-# endif
-
-# if OP_GNUC_PREREQ(4,2)
-/*Disable excessive warnings about the order of operations.*/
-# pragma GCC diagnostic ignored "-Wparentheses"
-# elif defined(_MSC_VER)
-/*Disable excessive warnings about the order of operations.*/
-# pragma warning(disable:4554)
-/*Disable warnings about "deprecated" POSIX functions.*/
-# pragma warning(disable:4996)
-# endif
-
-# if OP_GNUC_PREREQ(3,0)
-/*Another alternative is
- (__builtin_constant_p(_x)?!!(_x):__builtin_expect(!!(_x),1))
- but that evaluates _x multiple times, which may be bad.*/
-# define OP_LIKELY(_x) (__builtin_expect(!!(_x),1))
-# define OP_UNLIKELY(_x) (__builtin_expect(!!(_x),0))
-# else
-# define OP_LIKELY(_x) (!!(_x))
-# define OP_UNLIKELY(_x) (!!(_x))
-# endif
-
-# if defined(OP_ENABLE_ASSERTIONS)
-# if OP_GNUC_PREREQ(2,5)||__SUNPRO_C>=0x590
-__attribute__((noreturn))
-# endif
-void op_fatal_impl(const char *_str,const char *_file,int _line);
-
-# define OP_FATAL(_str) (op_fatal_impl(_str,__FILE__,__LINE__))
-
-# define OP_ASSERT(_cond) \
- do{ \
- if(OP_UNLIKELY(!(_cond)))OP_FATAL("assertion failed: " #_cond); \
- } \
- while(0)
-# define OP_ALWAYS_TRUE(_cond) OP_ASSERT(_cond)
-
-# else
-# define OP_FATAL(_str) abort()
-# define OP_ASSERT(_cond)
-# define OP_ALWAYS_TRUE(_cond) ((void)(_cond))
-# endif
-
-# define OP_INT64_MAX (2*(((ogg_int64_t)1<<62)-1)|1)
-# define OP_INT64_MIN (-OP_INT64_MAX-1)
-# define OP_INT32_MAX (2*(((ogg_int32_t)1<<30)-1)|1)
-# define OP_INT32_MIN (-OP_INT32_MAX-1)
-
-# define OP_MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
-# define OP_MAX(_a,_b) ((_a)>(_b)?(_a):(_b))
-# define OP_CLAMP(_lo,_x,_hi) (OP_MAX(_lo,OP_MIN(_x,_hi)))
-
-/*Advance a file offset by the given amount, clamping against OP_INT64_MAX.
- This is used to advance a known offset by things like OP_CHUNK_SIZE or
- OP_PAGE_SIZE_MAX, while making sure to avoid signed overflow.
- It assumes that both _offset and _amount are non-negative.*/
-#define OP_ADV_OFFSET(_offset,_amount) \
- (OP_MIN(_offset,OP_INT64_MAX-(_amount))+(_amount))
-
-/*The maximum channel count for any mapping we'll actually decode.*/
-# define OP_NCHANNELS_MAX (8)
-
-/*Initial state.*/
-# define OP_NOTOPEN (0)
-/*We've found the first Opus stream in the first link.*/
-# define OP_PARTOPEN (1)
-# define OP_OPENED (2)
-/*We've found the first Opus stream in the current link.*/
-# define OP_STREAMSET (3)
-/*We've initialized the decoder for the chosen Opus stream in the current
- link.*/
-# define OP_INITSET (4)
-
-/*Information cached for a single link in a chained Ogg Opus file.
- We choose the first Opus stream encountered in each link to play back (and
- require at least one).*/
-struct OggOpusLink{
- /*The byte offset of the first header page in this link.*/
- opus_int64 offset;
- /*The byte offset of the first data page from the chosen Opus stream in this
- link (after the headers).*/
- opus_int64 data_offset;
- /*The byte offset of the last page from the chosen Opus stream in this link.
- This is used when seeking to ensure we find a page before the last one, so
- that end-trimming calculations work properly.
- This is only valid for seekable sources.*/
- opus_int64 end_offset;
- /*The granule position of the last sample.
- This is only valid for seekable sources.*/
- ogg_int64_t pcm_end;
- /*The granule position before the first sample.*/
- ogg_int64_t pcm_start;
- /*The serial number.*/
- ogg_uint32_t serialno;
- /*The contents of the info header.*/
- OpusHead head;
- /*The contents of the comment header.*/
- OpusTags tags;
-};
-
-struct OggOpusFile{
- /*The callbacks used to access the data source.*/
- OpusFileCallbacks callbacks;
- /*A FILE *, memory bufer, etc.*/
- void *source;
- /*Whether or not we can seek with this data source.*/
- int seekable;
- /*The number of links in this chained Ogg Opus file.*/
- int nlinks;
- /*The cached information from each link in a chained Ogg Opus file.
- If source isn't seekable (e.g., it's a pipe), only the current link
- appears.*/
- OggOpusLink *links;
- /*The number of serial numbers from a single link.*/
- int nserialnos;
- /*The capacity of the list of serial numbers from a single link.*/
- int cserialnos;
- /*Storage for the list of serial numbers from a single link.*/
- ogg_uint32_t *serialnos;
- /*This is the current offset of the data processed by the ogg_sync_state.
- After a seek, this should be set to the target offset so that we can track
- the byte offsets of subsequent pages.
- After a call to op_get_next_page(), this will point to the first byte after
- that page.*/
- opus_int64 offset;
- /*The total size of this data source, or -1 if it's unseekable.*/
- opus_int64 end;
- /*Used to locate pages in the data source.*/
- ogg_sync_state oy;
- /*One of OP_NOTOPEN, OP_PARTOPEN, OP_OPENED, OP_STREAMSET, OP_INITSET.*/
- int ready_state;
- /*The current link being played back.*/
- int cur_link;
- /*The number of decoded samples to discard from the start of decoding.*/
- opus_int32 cur_discard_count;
- /*The granule position of the previous packet (current packet start time).*/
- ogg_int64_t prev_packet_gp;
- /*The stream offset of the most recent page with completed packets, or -1.
- This is only needed to recover continued packet data in the seeking logic,
- when we use the current position as one of our bounds, only to later
- discover it was the correct starting point.*/
- opus_int64 prev_page_offset;
- /*The number of bytes read since the last bitrate query, including framing.*/
- opus_int64 bytes_tracked;
- /*The number of samples decoded since the last bitrate query.*/
- ogg_int64_t samples_tracked;
- /*Takes physical pages and welds them into a logical stream of packets.*/
- ogg_stream_state os;
- /*Re-timestamped packets from a single page.
- Buffering these relies on the undocumented libogg behavior that ogg_packet
- pointers remain valid until the next page is submitted to the
- ogg_stream_state they came from.*/
- ogg_packet op[255];
- /*The index of the next packet to return.*/
- int op_pos;
- /*The total number of packets available.*/
- int op_count;
- /*Central working state for the packet-to-PCM decoder.*/
- OpusMSDecoder *od;
- /*The application-provided packet decode callback.*/
- op_decode_cb_func decode_cb;
- /*The application-provided packet decode callback context.*/
- void *decode_cb_ctx;
- /*The stream count used to initialize the decoder.*/
- int od_stream_count;
- /*The coupled stream count used to initialize the decoder.*/
- int od_coupled_count;
- /*The channel count used to initialize the decoder.*/
- int od_channel_count;
- /*The channel mapping used to initialize the decoder.*/
- unsigned char od_mapping[OP_NCHANNELS_MAX];
- /*The buffered data for one decoded packet.*/
- op_sample *od_buffer;
- /*The current position in the decoded buffer.*/
- int od_buffer_pos;
- /*The number of valid samples in the decoded buffer.*/
- int od_buffer_size;
- /*The type of gain offset to apply.
- One of OP_HEADER_GAIN, OP_TRACK_GAIN, or OP_ABSOLUTE_GAIN.*/
- int gain_type;
- /*The offset to apply to the gain.*/
- opus_int32 gain_offset_q8;
- /*Internal state for soft clipping and dithering float->short output.*/
-#if !defined(OP_FIXED_POINT)
-# if defined(OP_SOFT_CLIP)
- float clip_state[OP_NCHANNELS_MAX];
-# endif
- float dither_a[OP_NCHANNELS_MAX*4];
- float dither_b[OP_NCHANNELS_MAX*4];
- opus_uint32 dither_seed;
- int dither_mute;
- int dither_disabled;
- /*The number of channels represented by the internal state.
- This gets set to 0 whenever anything that would prevent state propagation
- occurs (switching between the float/short APIs, or between the
- stereo/multistream APIs).*/
- int state_channel_count;
-#endif
-};
-
-int op_strncasecmp(const char *_a,const char *_b,int _n);
-
-#endif
diff --git a/drivers/opus/mlp.c b/drivers/opus/mlp.c
deleted file mode 100644
index 125106e882..0000000000
--- a/drivers/opus/mlp.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Copyright (c) 2008-2011 Octasic Inc.
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/opus_types.h"
-#include "opus/opus_defines.h"
-
-#include <math.h>
-#include "opus/mlp.h"
-#include "opus/celt/arch.h"
-#include "opus/tansig_table.h"
-#define MAX_NEURONS 100
-
-#if 0
-static OPUS_INLINE opus_val16 tansig_approx(opus_val32 _x) /* Q19 */
-{
- int i;
- opus_val16 xx; /* Q11 */
- /*double x, y;*/
- opus_val16 dy, yy; /* Q14 */
- /*x = 1.9073e-06*_x;*/
- if (_x>=QCONST32(8,19))
- return QCONST32(1.,14);
- if (_x<=-QCONST32(8,19))
- return -QCONST32(1.,14);
- xx = EXTRACT16(SHR32(_x, 8));
- /*i = lrint(25*x);*/
- i = SHR32(ADD32(1024,MULT16_16(25, xx)),11);
- /*x -= .04*i;*/
- xx -= EXTRACT16(SHR32(MULT16_16(20972,i),8));
- /*x = xx*(1./2048);*/
- /*y = tansig_table[250+i];*/
- yy = tansig_table[250+i];
- /*y = yy*(1./16384);*/
- dy = 16384-MULT16_16_Q14(yy,yy);
- yy = yy + MULT16_16_Q14(MULT16_16_Q11(xx,dy),(16384 - MULT16_16_Q11(yy,xx)));
- return yy;
-}
-#else
-/*extern const float tansig_table[501];*/
-static OPUS_INLINE float tansig_approx(float x)
-{
- int i;
- float y, dy;
- float sign=1;
- /* Tests are reversed to catch NaNs */
- if (!(x<8))
- return 1;
- if (!(x>-8))
- return -1;
-#ifndef OPUS_FIXED_POINT
- /* Another check in case of -ffast-math */
- if (celt_isnan(x))
- return 0;
-#endif
- if (x<0)
- {
- x=-x;
- sign=-1;
- }
- i = (int)floor(.5f+25*x);
- x -= .04f*i;
- y = tansig_table[i];
- dy = 1-y*y;
- y = y + x*dy*(1 - y*x);
- return sign*y;
-}
-#endif
-
-#if 0
-void mlp_process(const MLP *m, const opus_val16 *in, opus_val16 *out)
-{
- int j;
- opus_val16 hidden[MAX_NEURONS];
- const opus_val16 *W = m->weights;
- /* Copy to tmp_in */
- for (j=0;j<m->topo[1];j++)
- {
- int k;
- opus_val32 sum = SHL32(EXTEND32(*W++),8);
- for (k=0;k<m->topo[0];k++)
- sum = MAC16_16(sum, in[k],*W++);
- hidden[j] = tansig_approx(sum);
- }
- for (j=0;j<m->topo[2];j++)
- {
- int k;
- opus_val32 sum = SHL32(EXTEND32(*W++),14);
- for (k=0;k<m->topo[1];k++)
- sum = MAC16_16(sum, hidden[k], *W++);
- out[j] = tansig_approx(EXTRACT16(PSHR32(sum,17)));
- }
-}
-#else
-void mlp_process(const MLP *m, const float *in, float *out)
-{
- int j;
- float hidden[MAX_NEURONS];
- const float *W = m->weights;
- /* Copy to tmp_in */
- for (j=0;j<m->topo[1];j++)
- {
- int k;
- float sum = *W++;
- for (k=0;k<m->topo[0];k++)
- sum = sum + in[k]**W++;
- hidden[j] = tansig_approx(sum);
- }
- for (j=0;j<m->topo[2];j++)
- {
- int k;
- float sum = *W++;
- for (k=0;k<m->topo[1];k++)
- sum = sum + hidden[k]**W++;
- out[j] = tansig_approx(sum);
- }
-}
-#endif
diff --git a/drivers/opus/mlp.h b/drivers/opus/mlp.h
deleted file mode 100644
index 2b4962625d..0000000000
--- a/drivers/opus/mlp.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (c) 2008-2011 Octasic Inc.
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 _MLP_H_
-#define _MLP_H_
-
-#include "opus/celt/arch.h"
-
-typedef struct {
- int layers;
- const int *topo;
- const float *weights;
-} MLP;
-
-extern const MLP net;
-
-void mlp_process(const MLP *m, const float *in, float *out);
-
-#endif /* _MLP_H_ */
diff --git a/drivers/opus/mlp_data.c b/drivers/opus/mlp_data.c
deleted file mode 100644
index c542a509cf..0000000000
--- a/drivers/opus/mlp_data.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/* The contents of this file was automatically generated by mlp_train.c
- It contains multi-layer perceptron (MLP) weights. */
-#include "opus/opus_config.h"
-
-#include "opus/mlp.h"
-
-/* RMS error was 0.138320, seed was 1361535663 */
-
-static const float weights[422] = {
-
-/* hidden layer */
--0.0941125f, -0.302976f, -0.603555f, -0.19393f, -0.185983f,
--0.601617f, -0.0465317f, -0.114563f, -0.103599f, -0.618938f,
--0.317859f, -0.169949f, -0.0702885f, 0.148065f, 0.409524f,
-0.548432f, 0.367649f, -0.494393f, 0.764306f, -1.83957f,
-0.170849f, 12.786f, -1.08848f, -1.27284f, -16.2606f,
-24.1773f, -5.57454f, -0.17276f, -0.163388f, -0.224421f,
--0.0948944f, -0.0728695f, -0.26557f, -0.100283f, -0.0515459f,
--0.146142f, -0.120674f, -0.180655f, 0.12857f, 0.442138f,
--0.493735f, 0.167767f, 0.206699f, -0.197567f, 0.417999f,
-1.50364f, -0.773341f, -10.0401f, 0.401872f, 2.97966f,
-15.2165f, -1.88905f, -1.19254f, 0.0285397f, -0.00405139f,
-0.0707565f, 0.00825699f, -0.0927269f, -0.010393f, -0.00428882f,
--0.00489743f, -0.0709731f, -0.00255992f, 0.0395619f, 0.226424f,
-0.0325231f, 0.162175f, -0.100118f, 0.485789f, 0.12697f,
-0.285937f, 0.0155637f, 0.10546f, 3.05558f, 1.15059f,
--1.00904f, -1.83088f, 3.31766f, -3.42516f, -0.119135f,
--0.0405654f, 0.00690068f, 0.0179877f, -0.0382487f, 0.00597941f,
--0.0183611f, 0.00190395f, -0.144322f, -0.0435671f, 0.000990594f,
-0.221087f, 0.142405f, 0.484066f, 0.404395f, 0.511955f,
--0.237255f, 0.241742f, 0.35045f, -0.699428f, 10.3993f,
-2.6507f, -2.43459f, -4.18838f, 1.05928f, 1.71067f,
-0.00667811f, -0.0721335f, -0.0397346f, 0.0362704f, -0.11496f,
--0.0235776f, 0.0082161f, -0.0141741f, -0.0329699f, -0.0354253f,
-0.00277404f, -0.290654f, -1.14767f, -0.319157f, -0.686544f,
-0.36897f, 0.478899f, 0.182579f, -0.411069f, 0.881104f,
--4.60683f, 1.4697f, 0.335845f, -1.81905f, -30.1699f,
-5.55225f, 0.0019508f, -0.123576f, -0.0727332f, -0.0641597f,
--0.0534458f, -0.108166f, -0.0937368f, -0.0697883f, -0.0275475f,
--0.192309f, -0.110074f, 0.285375f, -0.405597f, 0.0926724f,
--0.287881f, -0.851193f, -0.099493f, -0.233764f, -1.2852f,
-1.13611f, 3.12168f, -0.0699f, -1.86216f, 2.65292f,
--7.31036f, 2.44776f, -0.00111802f, -0.0632786f, -0.0376296f,
--0.149851f, 0.142963f, 0.184368f, 0.123433f, 0.0756158f,
-0.117312f, 0.0933395f, 0.0692163f, 0.0842592f, 0.0704683f,
-0.0589963f, 0.0942205f, -0.448862f, 0.0262677f, 0.270352f,
--0.262317f, 0.172586f, 2.00227f, -0.159216f, 0.038422f,
-10.2073f, 4.15536f, -2.3407f, -0.0550265f, 0.00964792f,
--0.141336f, 0.0274501f, 0.0343921f, -0.0487428f, 0.0950172f,
--0.00775017f, -0.0372492f, -0.00548121f, -0.0663695f, 0.0960506f,
--0.200008f, -0.0412827f, 0.58728f, 0.0515787f, 0.337254f,
-0.855024f, 0.668371f, -0.114904f, -3.62962f, -0.467477f,
--0.215472f, 2.61537f, 0.406117f, -1.36373f, 0.0425394f,
-0.12208f, 0.0934502f, 0.123055f, 0.0340935f, -0.142466f,
-0.035037f, -0.0490666f, 0.0733208f, 0.0576672f, 0.123984f,
--0.0517194f, -0.253018f, 0.590565f, 0.145849f, 0.315185f,
-0.221534f, -0.149081f, 0.216161f, -0.349575f, 24.5664f,
--0.994196f, 0.614289f, -18.7905f, -2.83277f, -0.716801f,
--0.347201f, 0.479515f, -0.246027f, 0.0758683f, 0.137293f,
--0.17781f, 0.118751f, -0.00108329f, -0.237334f, 0.355732f,
--0.12991f, -0.0547627f, -0.318576f, -0.325524f, 0.180494f,
--0.0625604f, 0.141219f, 0.344064f, 0.37658f, -0.591772f,
-5.8427f, -0.38075f, 0.221894f, -1.41934f, -1.87943e+06f,
-1.34114f, 0.0283355f, -0.0447856f, -0.0211466f, -0.0256927f,
-0.0139618f, 0.0207934f, -0.0107666f, 0.0110969f, 0.0586069f,
--0.0253545f, -0.0328433f, 0.11872f, -0.216943f, 0.145748f,
-0.119808f, -0.0915211f, -0.120647f, -0.0787719f, -0.143644f,
--0.595116f, -1.152f, -1.25335f, -1.17092f, 4.34023f,
--975268.f, -1.37033f, -0.0401123f, 0.210602f, -0.136656f,
-0.135962f, -0.0523293f, 0.0444604f, 0.0143928f, 0.00412666f,
--0.0193003f, 0.218452f, -0.110204f, -2.02563f, 0.918238f,
--2.45362f, 1.19542f, -0.061362f, -1.92243f, 0.308111f,
-0.49764f, 0.912356f, 0.209272f, -2.34525f, 2.19326f,
--6.47121f, 1.69771f, -0.725123f, 0.0118929f, 0.0377944f,
-0.0554003f, 0.0226452f, -0.0704421f, -0.0300309f, 0.0122978f,
--0.0041782f, -0.0686612f, 0.0313115f, 0.039111f, 0.364111f,
--0.0945548f, 0.0229876f, -0.17414f, 0.329795f, 0.114714f,
-0.30022f, 0.106997f, 0.132355f, 5.79932f, 0.908058f,
--0.905324f, -3.3561f, 0.190647f, 0.184211f, -0.673648f,
-0.231807f, -0.0586222f, 0.230752f, -0.438277f, 0.245857f,
--0.17215f, 0.0876383f, -0.720512f, 0.162515f, 0.0170571f,
-0.101781f, 0.388477f, 1.32931f, 1.08548f, -0.936301f,
--2.36958f, -6.71988f, -3.44376f, 2.13818f, 14.2318f,
-4.91459f, -3.09052f, -9.69191f, -0.768234f, 1.79604f,
-0.0549653f, 0.163399f, 0.0797025f, 0.0343933f, -0.0555876f,
--0.00505673f, 0.0187258f, 0.0326628f, 0.0231486f, 0.15573f,
-0.0476223f, -0.254824f, 1.60155f, -0.801221f, 2.55496f,
-0.737629f, -1.36249f, -0.695463f, -2.44301f, -1.73188f,
-3.95279f, 1.89068f, 0.486087f, -11.3343f, 3.9416e+06f,
-
-/* output layer */
--0.381439f, 0.12115f, -0.906927f, 2.93878f, 1.6388f,
-0.882811f, 0.874344f, 1.21726f, -0.874545f, 0.321706f,
-0.785055f, 0.946558f, -0.575066f, -3.46553f, 0.884905f,
-0.0924047f, -9.90712f, 0.391338f, 0.160103f, -2.04954f,
-4.1455f, 0.0684029f, -0.144761f, -0.285282f, 0.379244f,
--1.1584f, -0.0277241f, -9.85f, -4.82386f, 3.71333f,
-3.87308f, 3.52558f};
-
-static const int topo[3] = {25, 15, 2};
-
-const MLP net = {
- 3,
- topo,
- weights
-};
diff --git a/drivers/opus/opus.c b/drivers/opus/opus.c
deleted file mode 100644
index 762a9d7469..0000000000
--- a/drivers/opus/opus.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/* Copyright (c) 2011 Xiph.Org Foundation, Skype Limited
- Written by Jean-Marc Valin and Koen Vos */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/opus.h"
-#include "opus/opus_private.h"
-
-#ifndef DISABLE_FLOAT_API
-OPUS_EXPORT void opus_pcm_soft_clip(float *_x, int N, int C, float *declip_mem)
-{
- int c;
- int i;
- float *x;
-
- if (C<1 || N<1 || !_x || !declip_mem) return;
-
- /* First thing: saturate everything to +/- 2 which is the highest level our
- non-linearity can handle. At the point where the signal reaches +/-2,
- the derivative will be zero anyway, so this doesn't introduce any
- discontinuity in the derivative. */
- for (i=0;i<N*C;i++)
- _x[i] = MAX16(-2.f, MIN16(2.f, _x[i]));
- for (c=0;c<C;c++)
- {
- float a;
- float x0;
- int curr;
-
- x = _x+c;
- a = declip_mem[c];
- /* Continue applying the non-linearity from the previous frame to avoid
- any discontinuity. */
- for (i=0;i<N;i++)
- {
- if (x[i*C]*a>=0)
- break;
- x[i*C] = x[i*C]+a*x[i*C]*x[i*C];
- }
-
- curr=0;
- x0 = x[0];
- while(1)
- {
- int start, end;
- float maxval;
- int special=0;
- int peak_pos;
- for (i=curr;i<N;i++)
- {
- if (x[i*C]>1 || x[i*C]<-1)
- break;
- }
- if (i==N)
- {
- a=0;
- break;
- }
- peak_pos = i;
- start=end=i;
- maxval=ABS16(x[i*C]);
- /* Look for first zero crossing before clipping */
- while (start>0 && x[i*C]*x[(start-1)*C]>=0)
- start--;
- /* Look for first zero crossing after clipping */
- while (end<N && x[i*C]*x[end*C]>=0)
- {
- /* Look for other peaks until the next zero-crossing. */
- if (ABS16(x[end*C])>maxval)
- {
- maxval = ABS16(x[end*C]);
- peak_pos = end;
- }
- end++;
- }
- /* Detect the special case where we clip before the first zero crossing */
- special = (start==0 && x[i*C]*x[0]>=0);
-
- /* Compute a such that maxval + a*maxval^2 = 1 */
- a=(maxval-1)/(maxval*maxval);
- if (x[i*C]>0)
- a = -a;
- /* Apply soft clipping */
- for (i=start;i<end;i++)
- x[i*C] = x[i*C]+a*x[i*C]*x[i*C];
-
- if (special && peak_pos>=2)
- {
- /* Add a linear ramp from the first sample to the signal peak.
- This avoids a discontinuity at the beginning of the frame. */
- float delta;
- float offset = x0-x[0];
- delta = offset / peak_pos;
- for (i=curr;i<peak_pos;i++)
- {
- offset -= delta;
- x[i*C] += offset;
- x[i*C] = MAX16(-1.f, MIN16(1.f, x[i*C]));
- }
- }
- curr = end;
- if (curr==N)
- break;
- }
- declip_mem[c] = a;
- }
-}
-#endif
-
-int encode_size(int size, unsigned char *data)
-{
- if (size < 252)
- {
- data[0] = size;
- return 1;
- } else {
- data[0] = 252+(size&0x3);
- data[1] = (size-(int)data[0])>>2;
- return 2;
- }
-}
-
-static int parse_size(const unsigned char *data, opus_int32 len, opus_int16 *size)
-{
- if (len<1)
- {
- *size = -1;
- return -1;
- } else if (data[0]<252)
- {
- *size = data[0];
- return 1;
- } else if (len<2)
- {
- *size = -1;
- return -1;
- } else {
- *size = 4*data[1] + data[0];
- return 2;
- }
-}
-
-int opus_packet_get_samples_per_frame(const unsigned char *data,
- opus_int32 Fs)
-{
- int audiosize;
- if (data[0]&0x80)
- {
- audiosize = ((data[0]>>3)&0x3);
- audiosize = (Fs<<audiosize)/400;
- } else if ((data[0]&0x60) == 0x60)
- {
- audiosize = (data[0]&0x08) ? Fs/50 : Fs/100;
- } else {
- audiosize = ((data[0]>>3)&0x3);
- if (audiosize == 3)
- audiosize = Fs*60/1000;
- else
- audiosize = (Fs<<audiosize)/100;
- }
- return audiosize;
-}
-
-int opus_packet_parse_impl(const unsigned char *data, opus_int32 len,
- int self_delimited, unsigned char *out_toc,
- const unsigned char *frames[48], opus_int16 size[48],
- int *payload_offset, opus_int32 *packet_offset)
-{
- int i, bytes;
- int count;
- int cbr;
- unsigned char ch, toc;
- int framesize;
- opus_int32 last_size;
- opus_int32 pad = 0;
- const unsigned char *data0 = data;
-
- if (size==NULL)
- return OPUS_BAD_ARG;
-
- framesize = opus_packet_get_samples_per_frame(data, 48000);
-
- cbr = 0;
- toc = *data++;
- len--;
- last_size = len;
- switch (toc&0x3)
- {
- /* One frame */
- case 0:
- count=1;
- break;
- /* Two CBR frames */
- case 1:
- count=2;
- cbr = 1;
- if (!self_delimited)
- {
- if (len&0x1)
- return OPUS_INVALID_PACKET;
- last_size = len/2;
- /* If last_size doesn't fit in size[0], we'll catch it later */
- size[0] = (opus_int16)last_size;
- }
- break;
- /* Two VBR frames */
- case 2:
- count = 2;
- bytes = parse_size(data, len, size);
- len -= bytes;
- if (size[0]<0 || size[0] > len)
- return OPUS_INVALID_PACKET;
- data += bytes;
- last_size = len-size[0];
- break;
- /* Multiple CBR/VBR frames (from 0 to 120 ms) */
- default: /*case 3:*/
- if (len<1)
- return OPUS_INVALID_PACKET;
- /* Number of frames encoded in bits 0 to 5 */
- ch = *data++;
- count = ch&0x3F;
- if (count <= 0 || framesize*count > 5760)
- return OPUS_INVALID_PACKET;
- len--;
- /* Padding flag is bit 6 */
- if (ch&0x40)
- {
- int p;
- do {
- int tmp;
- if (len<=0)
- return OPUS_INVALID_PACKET;
- p = *data++;
- len--;
- tmp = p==255 ? 254: p;
- len -= tmp;
- pad += tmp;
- } while (p==255);
- }
- if (len<0)
- return OPUS_INVALID_PACKET;
- /* VBR flag is bit 7 */
- cbr = !(ch&0x80);
- if (!cbr)
- {
- /* VBR case */
- last_size = len;
- for (i=0;i<count-1;i++)
- {
- bytes = parse_size(data, len, size+i);
- len -= bytes;
- if (size[i]<0 || size[i] > len)
- return OPUS_INVALID_PACKET;
- data += bytes;
- last_size -= bytes+size[i];
- }
- if (last_size<0)
- return OPUS_INVALID_PACKET;
- } else if (!self_delimited)
- {
- /* CBR case */
- last_size = len/count;
- if (last_size*count!=len)
- return OPUS_INVALID_PACKET;
- for (i=0;i<count-1;i++)
- size[i] = (opus_int16)last_size;
- }
- break;
- }
- /* Self-delimited framing has an extra size for the last frame. */
- if (self_delimited)
- {
- bytes = parse_size(data, len, size+count-1);
- len -= bytes;
- if (size[count-1]<0 || size[count-1] > len)
- return OPUS_INVALID_PACKET;
- data += bytes;
- /* For CBR packets, apply the size to all the frames. */
- if (cbr)
- {
- if (size[count-1]*count > len)
- return OPUS_INVALID_PACKET;
- for (i=0;i<count-1;i++)
- size[i] = size[count-1];
- } else if (bytes+size[count-1] > last_size)
- return OPUS_INVALID_PACKET;
- } else
- {
- /* Because it's not encoded explicitly, it's possible the size of the
- last packet (or all the packets, for the CBR case) is larger than
- 1275. Reject them here.*/
- if (last_size > 1275)
- return OPUS_INVALID_PACKET;
- size[count-1] = (opus_int16)last_size;
- }
-
- if (payload_offset)
- *payload_offset = (int)(data-data0);
-
- for (i=0;i<count;i++)
- {
- if (frames)
- frames[i] = data;
- data += size[i];
- }
-
- if (packet_offset)
- *packet_offset = pad+(opus_int32)(data-data0);
-
- if (out_toc)
- *out_toc = toc;
-
- return count;
-}
-
-int opus_packet_parse(const unsigned char *data, opus_int32 len,
- unsigned char *out_toc, const unsigned char *frames[48],
- opus_int16 size[48], int *payload_offset)
-{
- return opus_packet_parse_impl(data, len, 0, out_toc,
- frames, size, payload_offset, NULL);
-}
-
diff --git a/drivers/opus/opus.h b/drivers/opus/opus.h
deleted file mode 100644
index 4cb171378b..0000000000
--- a/drivers/opus/opus.h
+++ /dev/null
@@ -1,981 +0,0 @@
-/* Copyright (c) 2010-2011 Xiph.Org Foundation, Skype Limited
- Written by Jean-Marc Valin and Koen Vos */
-/*
- 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.
-
- 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 opus.h
- * @brief Opus reference implementation API
- */
-
-#ifndef OPUS_H
-#define OPUS_H
-
-#include "opus/opus_types.h"
-#include "opus/opus_defines.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @mainpage Opus
- *
- * The Opus codec is designed for interactive speech and audio transmission over the Internet.
- * It is designed by the IETF Codec Working Group and incorporates technology from
- * Skype's SILK codec and Xiph.Org's CELT codec.
- *
- * The Opus codec is designed to handle a wide range of interactive audio applications,
- * including Voice over IP, videoconferencing, in-game chat, and even remote live music
- * performances. It can scale from low bit-rate narrowband speech to very high quality
- * stereo music. Its main features are:
-
- * @li Sampling rates from 8 to 48 kHz
- * @li Bit-rates from 6 kb/s to 510 kb/s
- * @li Support for both constant bit-rate (CBR) and variable bit-rate (VBR)
- * @li Audio bandwidth from narrowband to full-band
- * @li Support for speech and music
- * @li Support for mono and stereo
- * @li Support for multichannel (up to 255 channels)
- * @li Frame sizes from 2.5 ms to 60 ms
- * @li Good loss robustness and packet loss concealment (PLC)
- * @li Floating point and fixed-point implementation
- *
- * Documentation sections:
- * @li @ref opus_encoder
- * @li @ref opus_decoder
- * @li @ref opus_repacketizer
- * @li @ref opus_multistream
- * @li @ref opus_libinfo
- * @li @ref opus_custom
- */
-
-/** @defgroup opus_encoder Opus Encoder
- * @{
- *
- * @brief This page describes the process and functions used to encode Opus.
- *
- * Since Opus is a stateful codec, the encoding process starts with creating an encoder
- * state. This can be done with:
- *
- * @code
- * int error;
- * OpusEncoder *enc;
- * enc = opus_encoder_create(Fs, channels, application, &error);
- * @endcode
- *
- * From this point, @c enc can be used for encoding an audio stream. An encoder state
- * @b must @b not be used for more than one stream at the same time. Similarly, the encoder
- * state @b must @b not be re-initialized for each frame.
- *
- * While opus_encoder_create() allocates memory for the state, it's also possible
- * to initialize pre-allocated memory:
- *
- * @code
- * int size;
- * int error;
- * OpusEncoder *enc;
- * size = opus_encoder_get_size(channels);
- * enc = malloc(size);
- * error = opus_encoder_init(enc, Fs, channels, application);
- * @endcode
- *
- * where opus_encoder_get_size() returns the required size for the encoder state. Note that
- * future versions of this code may change the size, so no assuptions should be made about it.
- *
- * The encoder state is always continuous in memory and only a shallow copy is sufficient
- * to copy it (e.g. memcpy())
- *
- * It is possible to change some of the encoder's settings using the opus_encoder_ctl()
- * interface. All these settings already default to the recommended value, so they should
- * only be changed when necessary. The most common settings one may want to change are:
- *
- * @code
- * opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrate));
- * opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(complexity));
- * opus_encoder_ctl(enc, OPUS_SET_SIGNAL(signal_type));
- * @endcode
- *
- * where
- *
- * @arg bitrate is in bits per second (b/s)
- * @arg complexity is a value from 1 to 10, where 1 is the lowest complexity and 10 is the highest
- * @arg signal_type is either OPUS_AUTO (default), OPUS_SIGNAL_VOICE, or OPUS_SIGNAL_MUSIC
- *
- * See @ref opus_encoderctls and @ref opus_genericctls for a complete list of parameters that can be set or queried. Most parameters can be set or changed at any time during a stream.
- *
- * To encode a frame, opus_encode() or opus_encode_float() must be called with exactly one frame (2.5, 5, 10, 20, 40 or 60 ms) of audio data:
- * @code
- * len = opus_encode(enc, audio_frame, frame_size, packet, max_packet);
- * @endcode
- *
- * where
- * <ul>
- * <li>audio_frame is the audio data in opus_int16 (or float for opus_encode_float())</li>
- * <li>frame_size is the duration of the frame in samples (per channel)</li>
- * <li>packet is the byte array to which the compressed data is written</li>
- * <li>max_packet is the maximum number of bytes that can be written in the packet (4000 bytes is recommended).
- * Do not use max_packet to control VBR target bitrate, instead use the #OPUS_SET_BITRATE CTL.</li>
- * </ul>
- *
- * opus_encode() and opus_encode_float() return the number of bytes actually written to the packet.
- * The return value <b>can be negative</b>, which indicates that an error has occurred. If the return value
- * is 1 byte, then the packet does not need to be transmitted (DTX).
- *
- * Once the encoder state if no longer needed, it can be destroyed with
- *
- * @code
- * opus_encoder_destroy(enc);
- * @endcode
- *
- * If the encoder was created with opus_encoder_init() rather than opus_encoder_create(),
- * then no action is required aside from potentially freeing the memory that was manually
- * allocated for it (calling free(enc) for the example above)
- *
- */
-
-/** Opus encoder state.
- * This contains the complete state of an Opus encoder.
- * It is position independent and can be freely copied.
- * @see opus_encoder_create,opus_encoder_init
- */
-typedef struct OpusEncoder OpusEncoder;
-
-/** Gets the size of an <code>OpusEncoder</code> structure.
- * @param[in] channels <tt>int</tt>: Number of channels.
- * This must be 1 or 2.
- * @returns The size in bytes.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_encoder_get_size(int channels);
-
-/**
- */
-
-/** Allocates and initializes an encoder state.
- * There are three coding modes:
- *
- * @ref OPUS_APPLICATION_VOIP gives best quality at a given bitrate for voice
- * signals. It enhances the input signal by high-pass filtering and
- * emphasizing formants and harmonics. Optionally it includes in-band
- * forward error correction to protect against packet loss. Use this
- * mode for typical VoIP applications. Because of the enhancement,
- * even at high bitrates the output may sound different from the input.
- *
- * @ref OPUS_APPLICATION_AUDIO gives best quality at a given bitrate for most
- * non-voice signals like music. Use this mode for music and mixed
- * (music/voice) content, broadcast, and applications requiring less
- * than 15 ms of coding delay.
- *
- * @ref OPUS_APPLICATION_RESTRICTED_LOWDELAY configures low-delay mode that
- * disables the speech-optimized mode in exchange for slightly reduced delay.
- * This mode can only be set on an newly initialized or freshly reset encoder
- * because it changes the codec delay.
- *
- * This is useful when the caller knows that the speech-optimized modes will not be needed (use with caution).
- * @param [in] Fs <tt>opus_int32</tt>: Sampling rate of input signal (Hz)
- * This must be one of 8000, 12000, 16000,
- * 24000, or 48000.
- * @param [in] channels <tt>int</tt>: Number of channels (1 or 2) in input signal
- * @param [in] application <tt>int</tt>: Coding mode (@ref OPUS_APPLICATION_VOIP/@ref OPUS_APPLICATION_AUDIO/@ref OPUS_APPLICATION_RESTRICTED_LOWDELAY)
- * @param [out] error <tt>int*</tt>: @ref opus_errorcodes
- * @note Regardless of the sampling rate and number channels selected, the Opus encoder
- * can switch to a lower audio bandwidth or number of channels if the bitrate
- * selected is too low. This also means that it is safe to always use 48 kHz stereo input
- * and let the encoder optimize the encoding.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusEncoder *opus_encoder_create(
- opus_int32 Fs,
- int channels,
- int application,
- int *error
-);
-
-/** Initializes a previously allocated encoder state
- * The memory pointed to by st must be at least the size returned by opus_encoder_get_size().
- * This is intended for applications which use their own allocator instead of malloc.
- * @see opus_encoder_create(),opus_encoder_get_size()
- * To reset a previously initialized state, use the #OPUS_RESET_STATE CTL.
- * @param [in] st <tt>OpusEncoder*</tt>: Encoder state
- * @param [in] Fs <tt>opus_int32</tt>: Sampling rate of input signal (Hz)
- * This must be one of 8000, 12000, 16000,
- * 24000, or 48000.
- * @param [in] channels <tt>int</tt>: Number of channels (1 or 2) in input signal
- * @param [in] application <tt>int</tt>: Coding mode (OPUS_APPLICATION_VOIP/OPUS_APPLICATION_AUDIO/OPUS_APPLICATION_RESTRICTED_LOWDELAY)
- * @retval #OPUS_OK Success or @ref opus_errorcodes
- */
-OPUS_EXPORT int opus_encoder_init(
- OpusEncoder *st,
- opus_int32 Fs,
- int channels,
- int application
-) OPUS_ARG_NONNULL(1);
-
-/** Encodes an Opus frame.
- * @param [in] st <tt>OpusEncoder*</tt>: Encoder state
- * @param [in] pcm <tt>opus_int16*</tt>: Input signal (interleaved if 2 channels). length is frame_size*channels*sizeof(opus_int16)
- * @param [in] frame_size <tt>int</tt>: Number of samples per channel in the
- * input signal.
- * This must be an Opus frame size for
- * the encoder's sampling rate.
- * For example, at 48 kHz the permitted
- * values are 120, 240, 480, 960, 1920,
- * and 2880.
- * Passing in a duration of less than
- * 10 ms (480 samples at 48 kHz) will
- * prevent the encoder from using the LPC
- * or hybrid modes.
- * @param [out] data <tt>unsigned char*</tt>: Output payload.
- * This must contain storage for at
- * least \a max_data_bytes.
- * @param [in] max_data_bytes <tt>opus_int32</tt>: Size of the allocated
- * memory for the output
- * payload. This may be
- * used to impose an upper limit on
- * the instant bitrate, but should
- * not be used as the only bitrate
- * control. Use #OPUS_SET_BITRATE to
- * control the bitrate.
- * @returns The length of the encoded packet (in bytes) on success or a
- * negative error code (see @ref opus_errorcodes) on failure.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_encode(
- OpusEncoder *st,
- const opus_int16 *pcm,
- int frame_size,
- unsigned char *data,
- opus_int32 max_data_bytes
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4);
-
-/** Encodes an Opus frame from floating point input.
- * @param [in] st <tt>OpusEncoder*</tt>: Encoder state
- * @param [in] pcm <tt>float*</tt>: Input in float format (interleaved if 2 channels), with a normal range of +/-1.0.
- * Samples with a range beyond +/-1.0 are supported but will
- * be clipped by decoders using the integer API and should
- * only be used if it is known that the far end supports
- * extended dynamic range.
- * length is frame_size*channels*sizeof(float)
- * @param [in] frame_size <tt>int</tt>: Number of samples per channel in the
- * input signal.
- * This must be an Opus frame size for
- * the encoder's sampling rate.
- * For example, at 48 kHz the permitted
- * values are 120, 240, 480, 960, 1920,
- * and 2880.
- * Passing in a duration of less than
- * 10 ms (480 samples at 48 kHz) will
- * prevent the encoder from using the LPC
- * or hybrid modes.
- * @param [out] data <tt>unsigned char*</tt>: Output payload.
- * This must contain storage for at
- * least \a max_data_bytes.
- * @param [in] max_data_bytes <tt>opus_int32</tt>: Size of the allocated
- * memory for the output
- * payload. This may be
- * used to impose an upper limit on
- * the instant bitrate, but should
- * not be used as the only bitrate
- * control. Use #OPUS_SET_BITRATE to
- * control the bitrate.
- * @returns The length of the encoded packet (in bytes) on success or a
- * negative error code (see @ref opus_errorcodes) on failure.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_encode_float(
- OpusEncoder *st,
- const float *pcm,
- int frame_size,
- unsigned char *data,
- opus_int32 max_data_bytes
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4);
-
-/** Frees an <code>OpusEncoder</code> allocated by opus_encoder_create().
- * @param[in] st <tt>OpusEncoder*</tt>: State to be freed.
- */
-OPUS_EXPORT void opus_encoder_destroy(OpusEncoder *st);
-
-/** Perform a CTL function on an Opus encoder.
- *
- * Generally the request and subsequent arguments are generated
- * by a convenience macro.
- * @param st <tt>OpusEncoder*</tt>: Encoder state.
- * @param request This and all remaining parameters should be replaced by one
- * of the convenience macros in @ref opus_genericctls or
- * @ref opus_encoderctls.
- * @see opus_genericctls
- * @see opus_encoderctls
- */
-OPUS_EXPORT int opus_encoder_ctl(OpusEncoder *st, int request, ...) OPUS_ARG_NONNULL(1);
-/**@}*/
-
-/** @defgroup opus_decoder Opus Decoder
- * @{
- *
- * @brief This page describes the process and functions used to decode Opus.
- *
- * The decoding process also starts with creating a decoder
- * state. This can be done with:
- * @code
- * int error;
- * OpusDecoder *dec;
- * dec = opus_decoder_create(Fs, channels, &error);
- * @endcode
- * where
- * @li Fs is the sampling rate and must be 8000, 12000, 16000, 24000, or 48000
- * @li channels is the number of channels (1 or 2)
- * @li error will hold the error code in case of failure (or #OPUS_OK on success)
- * @li the return value is a newly created decoder state to be used for decoding
- *
- * While opus_decoder_create() allocates memory for the state, it's also possible
- * to initialize pre-allocated memory:
- * @code
- * int size;
- * int error;
- * OpusDecoder *dec;
- * size = opus_decoder_get_size(channels);
- * dec = malloc(size);
- * error = opus_decoder_init(dec, Fs, channels);
- * @endcode
- * where opus_decoder_get_size() returns the required size for the decoder state. Note that
- * future versions of this code may change the size, so no assuptions should be made about it.
- *
- * The decoder state is always continuous in memory and only a shallow copy is sufficient
- * to copy it (e.g. memcpy())
- *
- * To decode a frame, opus_decode() or opus_decode_float() must be called with a packet of compressed audio data:
- * @code
- * frame_size = opus_decode(dec, packet, len, decoded, max_size, 0);
- * @endcode
- * where
- *
- * @li packet is the byte array containing the compressed data
- * @li len is the exact number of bytes contained in the packet
- * @li decoded is the decoded audio data in opus_int16 (or float for opus_decode_float())
- * @li max_size is the max duration of the frame in samples (per channel) that can fit into the decoded_frame array
- *
- * opus_decode() and opus_decode_float() return the number of samples (per channel) decoded from the packet.
- * If that value is negative, then an error has occurred. This can occur if the packet is corrupted or if the audio
- * buffer is too small to hold the decoded audio.
- *
- * Opus is a stateful codec with overlapping blocks and as a result Opus
- * packets are not coded independently of each other. Packets must be
- * passed into the decoder serially and in the correct order for a correct
- * decode. Lost packets can be replaced with loss concealment by calling
- * the decoder with a null pointer and zero length for the missing packet.
- *
- * A single codec state may only be accessed from a single thread at
- * a time and any required locking must be performed by the caller. Separate
- * streams must be decoded with separate decoder states and can be decoded
- * in parallel unless the library was compiled with NONTHREADSAFE_PSEUDOSTACK
- * defined.
- *
- */
-
-/** Opus decoder state.
- * This contains the complete state of an Opus decoder.
- * It is position independent and can be freely copied.
- * @see opus_decoder_create,opus_decoder_init
- */
-typedef struct OpusDecoder OpusDecoder;
-
-/** Gets the size of an <code>OpusDecoder</code> structure.
- * @param [in] channels <tt>int</tt>: Number of channels.
- * This must be 1 or 2.
- * @returns The size in bytes.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_decoder_get_size(int channels);
-
-/** Allocates and initializes a decoder state.
- * @param [in] Fs <tt>opus_int32</tt>: Sample rate to decode at (Hz).
- * This must be one of 8000, 12000, 16000,
- * 24000, or 48000.
- * @param [in] channels <tt>int</tt>: Number of channels (1 or 2) to decode
- * @param [out] error <tt>int*</tt>: #OPUS_OK Success or @ref opus_errorcodes
- *
- * Internally Opus stores data at 48000 Hz, so that should be the default
- * value for Fs. However, the decoder can efficiently decode to buffers
- * at 8, 12, 16, and 24 kHz so if for some reason the caller cannot use
- * data at the full sample rate, or knows the compressed data doesn't
- * use the full frequency range, it can request decoding at a reduced
- * rate. Likewise, the decoder is capable of filling in either mono or
- * interleaved stereo pcm buffers, at the caller's request.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusDecoder *opus_decoder_create(
- opus_int32 Fs,
- int channels,
- int *error
-);
-
-/** Initializes a previously allocated decoder state.
- * The state must be at least the size returned by opus_decoder_get_size().
- * This is intended for applications which use their own allocator instead of malloc. @see opus_decoder_create,opus_decoder_get_size
- * To reset a previously initialized state, use the #OPUS_RESET_STATE CTL.
- * @param [in] st <tt>OpusDecoder*</tt>: Decoder state.
- * @param [in] Fs <tt>opus_int32</tt>: Sampling rate to decode to (Hz).
- * This must be one of 8000, 12000, 16000,
- * 24000, or 48000.
- * @param [in] channels <tt>int</tt>: Number of channels (1 or 2) to decode
- * @retval #OPUS_OK Success or @ref opus_errorcodes
- */
-OPUS_EXPORT int opus_decoder_init(
- OpusDecoder *st,
- opus_int32 Fs,
- int channels
-) OPUS_ARG_NONNULL(1);
-
-/** Decode an Opus packet.
- * @param [in] st <tt>OpusDecoder*</tt>: Decoder state
- * @param [in] data <tt>char*</tt>: Input payload. Use a NULL pointer to indicate packet loss
- * @param [in] len <tt>opus_int32</tt>: Number of bytes in payload*
- * @param [out] pcm <tt>opus_int16*</tt>: Output signal (interleaved if 2 channels). length
- * is frame_size*channels*sizeof(opus_int16)
- * @param [in] frame_size Number of samples per channel of available space in \a pcm.
- * If this is less than the maximum packet duration (120ms; 5760 for 48kHz), this function will
- * not be capable of decoding some packets. In the case of PLC (data==NULL) or FEC (decode_fec=1),
- * then frame_size needs to be exactly the duration of audio that is missing, otherwise the
- * decoder will not be in the optimal state to decode the next incoming packet. For the PLC and
- * FEC cases, frame_size <b>must</b> be a multiple of 2.5 ms.
- * @param [in] decode_fec <tt>int</tt>: Flag (0 or 1) to request that any in-band forward error correction data be
- * decoded. If no such data is available, the frame is decoded as if it were lost.
- * @returns Number of decoded samples or @ref opus_errorcodes
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_decode(
- OpusDecoder *st,
- const unsigned char *data,
- opus_int32 len,
- opus_int16 *pcm,
- int frame_size,
- int decode_fec
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4);
-
-/** Decode an Opus packet with floating point output.
- * @param [in] st <tt>OpusDecoder*</tt>: Decoder state
- * @param [in] data <tt>char*</tt>: Input payload. Use a NULL pointer to indicate packet loss
- * @param [in] len <tt>opus_int32</tt>: Number of bytes in payload
- * @param [out] pcm <tt>float*</tt>: Output signal (interleaved if 2 channels). length
- * is frame_size*channels*sizeof(float)
- * @param [in] frame_size Number of samples per channel of available space in \a pcm.
- * If this is less than the maximum packet duration (120ms; 5760 for 48kHz), this function will
- * not be capable of decoding some packets. In the case of PLC (data==NULL) or FEC (decode_fec=1),
- * then frame_size needs to be exactly the duration of audio that is missing, otherwise the
- * decoder will not be in the optimal state to decode the next incoming packet. For the PLC and
- * FEC cases, frame_size <b>must</b> be a multiple of 2.5 ms.
- * @param [in] decode_fec <tt>int</tt>: Flag (0 or 1) to request that any in-band forward error correction data be
- * decoded. If no such data is available the frame is decoded as if it were lost.
- * @returns Number of decoded samples or @ref opus_errorcodes
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_decode_float(
- OpusDecoder *st,
- const unsigned char *data,
- opus_int32 len,
- float *pcm,
- int frame_size,
- int decode_fec
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4);
-
-/** Perform a CTL function on an Opus decoder.
- *
- * Generally the request and subsequent arguments are generated
- * by a convenience macro.
- * @param st <tt>OpusDecoder*</tt>: Decoder state.
- * @param request This and all remaining parameters should be replaced by one
- * of the convenience macros in @ref opus_genericctls or
- * @ref opus_decoderctls.
- * @see opus_genericctls
- * @see opus_decoderctls
- */
-OPUS_EXPORT int opus_decoder_ctl(OpusDecoder *st, int request, ...) OPUS_ARG_NONNULL(1);
-
-/** Frees an <code>OpusDecoder</code> allocated by opus_decoder_create().
- * @param[in] st <tt>OpusDecoder*</tt>: State to be freed.
- */
-OPUS_EXPORT void opus_decoder_destroy(OpusDecoder *st);
-
-/** Parse an opus packet into one or more frames.
- * Opus_decode will perform this operation internally so most applications do
- * not need to use this function.
- * This function does not copy the frames, the returned pointers are pointers into
- * the input packet.
- * @param [in] data <tt>char*</tt>: Opus packet to be parsed
- * @param [in] len <tt>opus_int32</tt>: size of data
- * @param [out] out_toc <tt>char*</tt>: TOC pointer
- * @param [out] frames <tt>char*[48]</tt> encapsulated frames
- * @param [out] size <tt>opus_int16[48]</tt> sizes of the encapsulated frames
- * @param [out] payload_offset <tt>int*</tt>: returns the position of the payload within the packet (in bytes)
- * @returns number of frames
- */
-OPUS_EXPORT int opus_packet_parse(
- const unsigned char *data,
- opus_int32 len,
- unsigned char *out_toc,
- const unsigned char *frames[48],
- opus_int16 size[48],
- int *payload_offset
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4);
-
-/** Gets the bandwidth of an Opus packet.
- * @param [in] data <tt>char*</tt>: Opus packet
- * @retval OPUS_BANDWIDTH_NARROWBAND Narrowband (4kHz bandpass)
- * @retval OPUS_BANDWIDTH_MEDIUMBAND Mediumband (6kHz bandpass)
- * @retval OPUS_BANDWIDTH_WIDEBAND Wideband (8kHz bandpass)
- * @retval OPUS_BANDWIDTH_SUPERWIDEBAND Superwideband (12kHz bandpass)
- * @retval OPUS_BANDWIDTH_FULLBAND Fullband (20kHz bandpass)
- * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_bandwidth(const unsigned char *data) OPUS_ARG_NONNULL(1);
-
-/** Gets the number of samples per frame from an Opus packet.
- * @param [in] data <tt>char*</tt>: Opus packet.
- * This must contain at least one byte of
- * data.
- * @param [in] Fs <tt>opus_int32</tt>: Sampling rate in Hz.
- * This must be a multiple of 400, or
- * inaccurate results will be returned.
- * @returns Number of samples per frame.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_samples_per_frame(const unsigned char *data, opus_int32 Fs) OPUS_ARG_NONNULL(1);
-
-/** Gets the number of channels from an Opus packet.
- * @param [in] data <tt>char*</tt>: Opus packet
- * @returns Number of channels
- * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_nb_channels(const unsigned char *data) OPUS_ARG_NONNULL(1);
-
-/** Gets the number of frames in an Opus packet.
- * @param [in] packet <tt>char*</tt>: Opus packet
- * @param [in] len <tt>opus_int32</tt>: Length of packet
- * @returns Number of frames
- * @retval OPUS_BAD_ARG Insufficient data was passed to the function
- * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_nb_frames(const unsigned char packet[], opus_int32 len) OPUS_ARG_NONNULL(1);
-
-/** Gets the number of samples of an Opus packet.
- * @param [in] packet <tt>char*</tt>: Opus packet
- * @param [in] len <tt>opus_int32</tt>: Length of packet
- * @param [in] Fs <tt>opus_int32</tt>: Sampling rate in Hz.
- * This must be a multiple of 400, or
- * inaccurate results will be returned.
- * @returns Number of samples
- * @retval OPUS_BAD_ARG Insufficient data was passed to the function
- * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_packet_get_nb_samples(const unsigned char packet[], opus_int32 len, opus_int32 Fs) OPUS_ARG_NONNULL(1);
-
-/** Gets the number of samples of an Opus packet.
- * @param [in] dec <tt>OpusDecoder*</tt>: Decoder state
- * @param [in] packet <tt>char*</tt>: Opus packet
- * @param [in] len <tt>opus_int32</tt>: Length of packet
- * @returns Number of samples
- * @retval OPUS_BAD_ARG Insufficient data was passed to the function
- * @retval OPUS_INVALID_PACKET The compressed data passed is corrupted or of an unsupported type
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_decoder_get_nb_samples(const OpusDecoder *dec, const unsigned char packet[], opus_int32 len) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2);
-
-/** Applies soft-clipping to bring a float signal within the [-1,1] range. If
- * the signal is already in that range, nothing is done. If there are values
- * outside of [-1,1], then the signal is clipped as smoothly as possible to
- * both fit in the range and avoid creating excessive distortion in the
- * process.
- * @param [in,out] pcm <tt>float*</tt>: Input PCM and modified PCM
- * @param [in] frame_size <tt>int</tt> Number of samples per channel to process
- * @param [in] channels <tt>int</tt>: Number of channels
- * @param [in,out] softclip_mem <tt>float*</tt>: State memory for the soft clipping process (one float per channel, initialized to zero)
- */
-OPUS_EXPORT void opus_pcm_soft_clip(float *pcm, int frame_size, int channels, float *softclip_mem);
-
-
-/**@}*/
-
-/** @defgroup opus_repacketizer Repacketizer
- * @{
- *
- * The repacketizer can be used to merge multiple Opus packets into a single
- * packet or alternatively to split Opus packets that have previously been
- * merged. Splitting valid Opus packets is always guaranteed to succeed,
- * whereas merging valid packets only succeeds if all frames have the same
- * mode, bandwidth, and frame size, and when the total duration of the merged
- * packet is no more than 120 ms. The 120 ms limit comes from the
- * specification and limits decoder memory requirements at a point where
- * framing overhead becomes negligible.
- *
- * The repacketizer currently only operates on elementary Opus
- * streams. It will not manipualte multistream packets successfully, except in
- * the degenerate case where they consist of data from a single stream.
- *
- * The repacketizing process starts with creating a repacketizer state, either
- * by calling opus_repacketizer_create() or by allocating the memory yourself,
- * e.g.,
- * @code
- * OpusRepacketizer *rp;
- * rp = (OpusRepacketizer*)malloc(opus_repacketizer_get_size());
- * if (rp != NULL)
- * opus_repacketizer_init(rp);
- * @endcode
- *
- * Then the application should submit packets with opus_repacketizer_cat(),
- * extract new packets with opus_repacketizer_out() or
- * opus_repacketizer_out_range(), and then reset the state for the next set of
- * input packets via opus_repacketizer_init().
- *
- * For example, to split a sequence of packets into individual frames:
- * @code
- * unsigned char *data;
- * int len;
- * while (get_next_packet(&data, &len))
- * {
- * unsigned char out[1276];
- * opus_int32 out_len;
- * int nb_frames;
- * int err;
- * int i;
- * err = opus_repacketizer_cat(rp, data, len);
- * if (err != OPUS_OK)
- * {
- * release_packet(data);
- * return err;
- * }
- * nb_frames = opus_repacketizer_get_nb_frames(rp);
- * for (i = 0; i < nb_frames; i++)
- * {
- * out_len = opus_repacketizer_out_range(rp, i, i+1, out, sizeof(out));
- * if (out_len < 0)
- * {
- * release_packet(data);
- * return (int)out_len;
- * }
- * output_next_packet(out, out_len);
- * }
- * opus_repacketizer_init(rp);
- * release_packet(data);
- * }
- * @endcode
- *
- * Alternatively, to combine a sequence of frames into packets that each
- * contain up to <code>TARGET_DURATION_MS</code> milliseconds of data:
- * @code
- * // The maximum number of packets with duration TARGET_DURATION_MS occurs
- * // when the frame size is 2.5 ms, for a total of (TARGET_DURATION_MS*2/5)
- * // packets.
- * unsigned char *data[(TARGET_DURATION_MS*2/5)+1];
- * opus_int32 len[(TARGET_DURATION_MS*2/5)+1];
- * int nb_packets;
- * unsigned char out[1277*(TARGET_DURATION_MS*2/2)];
- * opus_int32 out_len;
- * int prev_toc;
- * nb_packets = 0;
- * while (get_next_packet(data+nb_packets, len+nb_packets))
- * {
- * int nb_frames;
- * int err;
- * nb_frames = opus_packet_get_nb_frames(data[nb_packets], len[nb_packets]);
- * if (nb_frames < 1)
- * {
- * release_packets(data, nb_packets+1);
- * return nb_frames;
- * }
- * nb_frames += opus_repacketizer_get_nb_frames(rp);
- * // If adding the next packet would exceed our target, or it has an
- * // incompatible TOC sequence, output the packets we already have before
- * // submitting it.
- * // N.B., The nb_packets > 0 check ensures we've submitted at least one
- * // packet since the last call to opus_repacketizer_init(). Otherwise a
- * // single packet longer than TARGET_DURATION_MS would cause us to try to
- * // output an (invalid) empty packet. It also ensures that prev_toc has
- * // been set to a valid value. Additionally, len[nb_packets] > 0 is
- * // guaranteed by the call to opus_packet_get_nb_frames() above, so the
- * // reference to data[nb_packets][0] should be valid.
- * if (nb_packets > 0 && (
- * ((prev_toc & 0xFC) != (data[nb_packets][0] & 0xFC)) ||
- * opus_packet_get_samples_per_frame(data[nb_packets], 48000)*nb_frames >
- * TARGET_DURATION_MS*48))
- * {
- * out_len = opus_repacketizer_out(rp, out, sizeof(out));
- * if (out_len < 0)
- * {
- * release_packets(data, nb_packets+1);
- * return (int)out_len;
- * }
- * output_next_packet(out, out_len);
- * opus_repacketizer_init(rp);
- * release_packets(data, nb_packets);
- * data[0] = data[nb_packets];
- * len[0] = len[nb_packets];
- * nb_packets = 0;
- * }
- * err = opus_repacketizer_cat(rp, data[nb_packets], len[nb_packets]);
- * if (err != OPUS_OK)
- * {
- * release_packets(data, nb_packets+1);
- * return err;
- * }
- * prev_toc = data[nb_packets][0];
- * nb_packets++;
- * }
- * // Output the final, partial packet.
- * if (nb_packets > 0)
- * {
- * out_len = opus_repacketizer_out(rp, out, sizeof(out));
- * release_packets(data, nb_packets);
- * if (out_len < 0)
- * return (int)out_len;
- * output_next_packet(out, out_len);
- * }
- * @endcode
- *
- * An alternate way of merging packets is to simply call opus_repacketizer_cat()
- * unconditionally until it fails. At that point, the merged packet can be
- * obtained with opus_repacketizer_out() and the input packet for which
- * opus_repacketizer_cat() needs to be re-added to a newly reinitialized
- * repacketizer state.
- */
-
-typedef struct OpusRepacketizer OpusRepacketizer;
-
-/** Gets the size of an <code>OpusRepacketizer</code> structure.
- * @returns The size in bytes.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_repacketizer_get_size(void);
-
-/** (Re)initializes a previously allocated repacketizer state.
- * The state must be at least the size returned by opus_repacketizer_get_size().
- * This can be used for applications which use their own allocator instead of
- * malloc().
- * It must also be called to reset the queue of packets waiting to be
- * repacketized, which is necessary if the maximum packet duration of 120 ms
- * is reached or if you wish to submit packets with a different Opus
- * configuration (coding mode, audio bandwidth, frame size, or channel count).
- * Failure to do so will prevent a new packet from being added with
- * opus_repacketizer_cat().
- * @see opus_repacketizer_create
- * @see opus_repacketizer_get_size
- * @see opus_repacketizer_cat
- * @param rp <tt>OpusRepacketizer*</tt>: The repacketizer state to
- * (re)initialize.
- * @returns A pointer to the same repacketizer state that was passed in.
- */
-OPUS_EXPORT OpusRepacketizer *opus_repacketizer_init(OpusRepacketizer *rp) OPUS_ARG_NONNULL(1);
-
-/** Allocates memory and initializes the new repacketizer with
- * opus_repacketizer_init().
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusRepacketizer *opus_repacketizer_create(void);
-
-/** Frees an <code>OpusRepacketizer</code> allocated by
- * opus_repacketizer_create().
- * @param[in] rp <tt>OpusRepacketizer*</tt>: State to be freed.
- */
-OPUS_EXPORT void opus_repacketizer_destroy(OpusRepacketizer *rp);
-
-/** Add a packet to the current repacketizer state.
- * This packet must match the configuration of any packets already submitted
- * for repacketization since the last call to opus_repacketizer_init().
- * This means that it must have the same coding mode, audio bandwidth, frame
- * size, and channel count.
- * This can be checked in advance by examining the top 6 bits of the first
- * byte of the packet, and ensuring they match the top 6 bits of the first
- * byte of any previously submitted packet.
- * The total duration of audio in the repacketizer state also must not exceed
- * 120 ms, the maximum duration of a single packet, after adding this packet.
- *
- * The contents of the current repacketizer state can be extracted into new
- * packets using opus_repacketizer_out() or opus_repacketizer_out_range().
- *
- * In order to add a packet with a different configuration or to add more
- * audio beyond 120 ms, you must clear the repacketizer state by calling
- * opus_repacketizer_init().
- * If a packet is too large to add to the current repacketizer state, no part
- * of it is added, even if it contains multiple frames, some of which might
- * fit.
- * If you wish to be able to add parts of such packets, you should first use
- * another repacketizer to split the packet into pieces and add them
- * individually.
- * @see opus_repacketizer_out_range
- * @see opus_repacketizer_out
- * @see opus_repacketizer_init
- * @param rp <tt>OpusRepacketizer*</tt>: The repacketizer state to which to
- * add the packet.
- * @param[in] data <tt>const unsigned char*</tt>: The packet data.
- * The application must ensure
- * this pointer remains valid
- * until the next call to
- * opus_repacketizer_init() or
- * opus_repacketizer_destroy().
- * @param len <tt>opus_int32</tt>: The number of bytes in the packet data.
- * @returns An error code indicating whether or not the operation succeeded.
- * @retval #OPUS_OK The packet's contents have been added to the repacketizer
- * state.
- * @retval #OPUS_INVALID_PACKET The packet did not have a valid TOC sequence,
- * the packet's TOC sequence was not compatible
- * with previously submitted packets (because
- * the coding mode, audio bandwidth, frame size,
- * or channel count did not match), or adding
- * this packet would increase the total amount of
- * audio stored in the repacketizer state to more
- * than 120 ms.
- */
-OPUS_EXPORT int opus_repacketizer_cat(OpusRepacketizer *rp, const unsigned char *data, opus_int32 len) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2);
-
-
-/** Construct a new packet from data previously submitted to the repacketizer
- * state via opus_repacketizer_cat().
- * @param rp <tt>OpusRepacketizer*</tt>: The repacketizer state from which to
- * construct the new packet.
- * @param begin <tt>int</tt>: The index of the first frame in the current
- * repacketizer state to include in the output.
- * @param end <tt>int</tt>: One past the index of the last frame in the
- * current repacketizer state to include in the
- * output.
- * @param[out] data <tt>const unsigned char*</tt>: The buffer in which to
- * store the output packet.
- * @param maxlen <tt>opus_int32</tt>: The maximum number of bytes to store in
- * the output buffer. In order to guarantee
- * success, this should be at least
- * <code>1276</code> for a single frame,
- * or for multiple frames,
- * <code>1277*(end-begin)</code>.
- * However, <code>1*(end-begin)</code> plus
- * the size of all packet data submitted to
- * the repacketizer since the last call to
- * opus_repacketizer_init() or
- * opus_repacketizer_create() is also
- * sufficient, and possibly much smaller.
- * @returns The total size of the output packet on success, or an error code
- * on failure.
- * @retval #OPUS_BAD_ARG <code>[begin,end)</code> was an invalid range of
- * frames (begin < 0, begin >= end, or end >
- * opus_repacketizer_get_nb_frames()).
- * @retval #OPUS_BUFFER_TOO_SMALL \a maxlen was insufficient to contain the
- * complete output packet.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_repacketizer_out_range(OpusRepacketizer *rp, int begin, int end, unsigned char *data, opus_int32 maxlen) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4);
-
-/** Return the total number of frames contained in packet data submitted to
- * the repacketizer state so far via opus_repacketizer_cat() since the last
- * call to opus_repacketizer_init() or opus_repacketizer_create().
- * This defines the valid range of packets that can be extracted with
- * opus_repacketizer_out_range() or opus_repacketizer_out().
- * @param rp <tt>OpusRepacketizer*</tt>: The repacketizer state containing the
- * frames.
- * @returns The total number of frames contained in the packet data submitted
- * to the repacketizer state.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_repacketizer_get_nb_frames(OpusRepacketizer *rp) OPUS_ARG_NONNULL(1);
-
-/** Construct a new packet from data previously submitted to the repacketizer
- * state via opus_repacketizer_cat().
- * This is a convenience routine that returns all the data submitted so far
- * in a single packet.
- * It is equivalent to calling
- * @code
- * opus_repacketizer_out_range(rp, 0, opus_repacketizer_get_nb_frames(rp),
- * data, maxlen)
- * @endcode
- * @param rp <tt>OpusRepacketizer*</tt>: The repacketizer state from which to
- * construct the new packet.
- * @param[out] data <tt>const unsigned char*</tt>: The buffer in which to
- * store the output packet.
- * @param maxlen <tt>opus_int32</tt>: The maximum number of bytes to store in
- * the output buffer. In order to guarantee
- * success, this should be at least
- * <code>1277*opus_repacketizer_get_nb_frames(rp)</code>.
- * However,
- * <code>1*opus_repacketizer_get_nb_frames(rp)</code>
- * plus the size of all packet data
- * submitted to the repacketizer since the
- * last call to opus_repacketizer_init() or
- * opus_repacketizer_create() is also
- * sufficient, and possibly much smaller.
- * @returns The total size of the output packet on success, or an error code
- * on failure.
- * @retval #OPUS_BUFFER_TOO_SMALL \a maxlen was insufficient to contain the
- * complete output packet.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_repacketizer_out(OpusRepacketizer *rp, unsigned char *data, opus_int32 maxlen) OPUS_ARG_NONNULL(1);
-
-/** Pads a given Opus packet to a larger size (possibly changing the TOC sequence).
- * @param[in,out] data <tt>const unsigned char*</tt>: The buffer containing the
- * packet to pad.
- * @param len <tt>opus_int32</tt>: The size of the packet.
- * This must be at least 1.
- * @param new_len <tt>opus_int32</tt>: The desired size of the packet after padding.
- * This must be at least as large as len.
- * @returns an error code
- * @retval #OPUS_OK \a on success.
- * @retval #OPUS_BAD_ARG \a len was less than 1 or new_len was less than len.
- * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet.
- */
-OPUS_EXPORT int opus_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len);
-
-/** Remove all padding from a given Opus packet and rewrite the TOC sequence to
- * minimize space usage.
- * @param[in,out] data <tt>const unsigned char*</tt>: The buffer containing the
- * packet to strip.
- * @param len <tt>opus_int32</tt>: The size of the packet.
- * This must be at least 1.
- * @returns The new size of the output packet on success, or an error code
- * on failure.
- * @retval #OPUS_BAD_ARG \a len was less than 1.
- * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_packet_unpad(unsigned char *data, opus_int32 len);
-
-/** Pads a given Opus multi-stream packet to a larger size (possibly changing the TOC sequence).
- * @param[in,out] data <tt>const unsigned char*</tt>: The buffer containing the
- * packet to pad.
- * @param len <tt>opus_int32</tt>: The size of the packet.
- * This must be at least 1.
- * @param new_len <tt>opus_int32</tt>: The desired size of the packet after padding.
- * This must be at least 1.
- * @param nb_streams <tt>opus_int32</tt>: The number of streams (not channels) in the packet.
- * This must be at least as large as len.
- * @returns an error code
- * @retval #OPUS_OK \a on success.
- * @retval #OPUS_BAD_ARG \a len was less than 1.
- * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet.
- */
-OPUS_EXPORT int opus_multistream_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len, int nb_streams);
-
-/** Remove all padding from a given Opus multi-stream packet and rewrite the TOC sequence to
- * minimize space usage.
- * @param[in,out] data <tt>const unsigned char*</tt>: The buffer containing the
- * packet to strip.
- * @param len <tt>opus_int32</tt>: The size of the packet.
- * This must be at least 1.
- * @param nb_streams <tt>opus_int32</tt>: The number of streams (not channels) in the packet.
- * This must be at least 1.
- * @returns The new size of the output packet on success, or an error code
- * on failure.
- * @retval #OPUS_BAD_ARG \a len was less than 1 or new_len was less than len.
- * @retval #OPUS_INVALID_PACKET \a data did not contain a valid Opus packet.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_multistream_packet_unpad(unsigned char *data, opus_int32 len, int nb_streams);
-
-/**@}*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OPUS_H */
diff --git a/drivers/opus/opus_compare.c b/drivers/opus/opus_compare.c
deleted file mode 100644
index 06c67d752f..0000000000
--- a/drivers/opus/opus_compare.c
+++ /dev/null
@@ -1,379 +0,0 @@
-/* Copyright (c) 2011-2012 Xiph.Org Foundation, Mozilla Corporation
- Written by Jean-Marc Valin and Timothy B. Terriberry */
-/*
- 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.
-
- 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 <stdio.h>
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-
-#define OPUS_PI (3.14159265F)
-
-#define OPUS_COSF(_x) ((float)cos(_x))
-#define OPUS_SINF(_x) ((float)sin(_x))
-
-static void *check_alloc(void *_ptr){
- if(_ptr==NULL){
- fprintf(stderr,"Out of memory.\n");
- exit(EXIT_FAILURE);
- }
- return _ptr;
-}
-
-static void *opus_malloc(size_t _size){
- return check_alloc(malloc(_size));
-}
-
-static void *opus_realloc(void *_ptr,size_t _size){
- return check_alloc(realloc(_ptr,_size));
-}
-
-static size_t read_pcm16(float **_samples,FILE *_fin,int _nchannels){
- unsigned char buf[1024];
- float *samples;
- size_t nsamples;
- size_t csamples;
- size_t xi;
- size_t nread;
- samples=NULL;
- nsamples=csamples=0;
- for(;;){
- nread=fread(buf,2*_nchannels,1024/(2*_nchannels),_fin);
- if(nread<=0)break;
- if(nsamples+nread>csamples){
- do csamples=csamples<<1|1;
- while(nsamples+nread>csamples);
- samples=(float *)opus_realloc(samples,
- _nchannels*csamples*sizeof(*samples));
- }
- for(xi=0;xi<nread;xi++){
- int ci;
- for(ci=0;ci<_nchannels;ci++){
- int s;
- s=buf[2*(xi*_nchannels+ci)+1]<<8|buf[2*(xi*_nchannels+ci)];
- s=((s&0xFFFF)^0x8000)-0x8000;
- samples[(nsamples+xi)*_nchannels+ci]=s;
- }
- }
- nsamples+=nread;
- }
- *_samples=(float *)opus_realloc(samples,
- _nchannels*nsamples*sizeof(*samples));
- return nsamples;
-}
-
-static void band_energy(float *_out,float *_ps,const int *_bands,int _nbands,
- const float *_in,int _nchannels,size_t _nframes,int _window_sz,
- int _step,int _downsample){
- float *window;
- float *x;
- float *c;
- float *s;
- size_t xi;
- int xj;
- int ps_sz;
- window=(float *)opus_malloc((3+_nchannels)*_window_sz*sizeof(*window));
- c=window+_window_sz;
- s=c+_window_sz;
- x=s+_window_sz;
- ps_sz=_window_sz/2;
- for(xj=0;xj<_window_sz;xj++){
- window[xj]=0.5F-0.5F*OPUS_COSF((2*OPUS_PI/(_window_sz-1))*xj);
- }
- for(xj=0;xj<_window_sz;xj++){
- c[xj]=OPUS_COSF((2*OPUS_PI/_window_sz)*xj);
- }
- for(xj=0;xj<_window_sz;xj++){
- s[xj]=OPUS_SINF((2*OPUS_PI/_window_sz)*xj);
- }
- for(xi=0;xi<_nframes;xi++){
- int ci;
- int xk;
- int bi;
- for(ci=0;ci<_nchannels;ci++){
- for(xk=0;xk<_window_sz;xk++){
- x[ci*_window_sz+xk]=window[xk]*_in[(xi*_step+xk)*_nchannels+ci];
- }
- }
- for(bi=xj=0;bi<_nbands;bi++){
- float p[2]={0};
- for(;xj<_bands[bi+1];xj++){
- for(ci=0;ci<_nchannels;ci++){
- float re;
- float im;
- int ti;
- ti=0;
- re=im=0;
- for(xk=0;xk<_window_sz;xk++){
- re+=c[ti]*x[ci*_window_sz+xk];
- im-=s[ti]*x[ci*_window_sz+xk];
- ti+=xj;
- if(ti>=_window_sz)ti-=_window_sz;
- }
- re*=_downsample;
- im*=_downsample;
- _ps[(xi*ps_sz+xj)*_nchannels+ci]=re*re+im*im+100000;
- p[ci]+=_ps[(xi*ps_sz+xj)*_nchannels+ci];
- }
- }
- if(_out){
- _out[(xi*_nbands+bi)*_nchannels]=p[0]/(_bands[bi+1]-_bands[bi]);
- if(_nchannels==2){
- _out[(xi*_nbands+bi)*_nchannels+1]=p[1]/(_bands[bi+1]-_bands[bi]);
- }
- }
- }
- }
- free(window);
-}
-
-#define NBANDS (21)
-#define NFREQS (240)
-
-/*Bands on which we compute the pseudo-NMR (Bark-derived
- CELT bands).*/
-static const int BANDS[NBANDS+1]={
- 0,2,4,6,8,10,12,14,16,20,24,28,32,40,48,56,68,80,96,120,156,200
-};
-
-#define TEST_WIN_SIZE (480)
-#define TEST_WIN_STEP (120)
-
-int main(int _argc,const char **_argv){
- FILE *fin1;
- FILE *fin2;
- float *x;
- float *y;
- float *xb;
- float *X;
- float *Y;
- double err;
- float Q;
- size_t xlength;
- size_t ylength;
- size_t nframes;
- size_t xi;
- int ci;
- int xj;
- int bi;
- int nchannels;
- unsigned rate;
- int downsample;
- int ybands;
- int yfreqs;
- int max_compare;
- if(_argc<3||_argc>6){
- fprintf(stderr,"Usage: %s [-s] [-r rate2] <file1.sw> <file2.sw>\n",
- _argv[0]);
- return EXIT_FAILURE;
- }
- nchannels=1;
- if(strcmp(_argv[1],"-s")==0){
- nchannels=2;
- _argv++;
- }
- rate=48000;
- ybands=NBANDS;
- yfreqs=NFREQS;
- downsample=1;
- if(strcmp(_argv[1],"-r")==0){
- rate=atoi(_argv[2]);
- if(rate!=8000&&rate!=12000&&rate!=16000&&rate!=24000&&rate!=48000){
- fprintf(stderr,
- "Sampling rate must be 8000, 12000, 16000, 24000, or 48000\n");
- return EXIT_FAILURE;
- }
- downsample=48000/rate;
- switch(rate){
- case 8000:ybands=13;break;
- case 12000:ybands=15;break;
- case 16000:ybands=17;break;
- case 24000:ybands=19;break;
- }
- yfreqs=NFREQS/downsample;
- _argv+=2;
- }
- fin1=fopen(_argv[1],"rb");
- if(fin1==NULL){
- fprintf(stderr,"Error opening '%s'.\n",_argv[1]);
- return EXIT_FAILURE;
- }
- fin2=fopen(_argv[2],"rb");
- if(fin2==NULL){
- fprintf(stderr,"Error opening '%s'.\n",_argv[2]);
- fclose(fin1);
- return EXIT_FAILURE;
- }
- /*Read in the data and allocate scratch space.*/
- xlength=read_pcm16(&x,fin1,2);
- if(nchannels==1){
- for(xi=0;xi<xlength;xi++)x[xi]=.5*(x[2*xi]+x[2*xi+1]);
- }
- fclose(fin1);
- ylength=read_pcm16(&y,fin2,nchannels);
- fclose(fin2);
- if(xlength!=ylength*downsample){
- fprintf(stderr,"Sample counts do not match (%lu!=%lu).\n",
- (unsigned long)xlength,(unsigned long)ylength*downsample);
- return EXIT_FAILURE;
- }
- if(xlength<TEST_WIN_SIZE){
- fprintf(stderr,"Insufficient sample data (%lu<%i).\n",
- (unsigned long)xlength,TEST_WIN_SIZE);
- return EXIT_FAILURE;
- }
- nframes=(xlength-TEST_WIN_SIZE+TEST_WIN_STEP)/TEST_WIN_STEP;
- xb=(float *)opus_malloc(nframes*NBANDS*nchannels*sizeof(*xb));
- X=(float *)opus_malloc(nframes*NFREQS*nchannels*sizeof(*X));
- Y=(float *)opus_malloc(nframes*yfreqs*nchannels*sizeof(*Y));
- /*Compute the per-band spectral energy of the original signal
- and the error.*/
- band_energy(xb,X,BANDS,NBANDS,x,nchannels,nframes,
- TEST_WIN_SIZE,TEST_WIN_STEP,1);
- free(x);
- band_energy(NULL,Y,BANDS,ybands,y,nchannels,nframes,
- TEST_WIN_SIZE/downsample,TEST_WIN_STEP/downsample,downsample);
- free(y);
- for(xi=0;xi<nframes;xi++){
- /*Frequency masking (low to high): 10 dB/Bark slope.*/
- for(bi=1;bi<NBANDS;bi++){
- for(ci=0;ci<nchannels;ci++){
- xb[(xi*NBANDS+bi)*nchannels+ci]+=
- 0.1F*xb[(xi*NBANDS+bi-1)*nchannels+ci];
- }
- }
- /*Frequency masking (high to low): 15 dB/Bark slope.*/
- for(bi=NBANDS-1;bi-->0;){
- for(ci=0;ci<nchannels;ci++){
- xb[(xi*NBANDS+bi)*nchannels+ci]+=
- 0.03F*xb[(xi*NBANDS+bi+1)*nchannels+ci];
- }
- }
- if(xi>0){
- /*Temporal masking: -3 dB/2.5ms slope.*/
- for(bi=0;bi<NBANDS;bi++){
- for(ci=0;ci<nchannels;ci++){
- xb[(xi*NBANDS+bi)*nchannels+ci]+=
- 0.5F*xb[((xi-1)*NBANDS+bi)*nchannels+ci];
- }
- }
- }
- /* Allowing some cross-talk */
- if(nchannels==2){
- for(bi=0;bi<NBANDS;bi++){
- float l,r;
- l=xb[(xi*NBANDS+bi)*nchannels+0];
- r=xb[(xi*NBANDS+bi)*nchannels+1];
- xb[(xi*NBANDS+bi)*nchannels+0]+=0.01F*r;
- xb[(xi*NBANDS+bi)*nchannels+1]+=0.01F*l;
- }
- }
-
- /* Apply masking */
- for(bi=0;bi<ybands;bi++){
- for(xj=BANDS[bi];xj<BANDS[bi+1];xj++){
- for(ci=0;ci<nchannels;ci++){
- X[(xi*NFREQS+xj)*nchannels+ci]+=
- 0.1F*xb[(xi*NBANDS+bi)*nchannels+ci];
- Y[(xi*yfreqs+xj)*nchannels+ci]+=
- 0.1F*xb[(xi*NBANDS+bi)*nchannels+ci];
- }
- }
- }
- }
-
- /* Average of consecutive frames to make comparison slightly less sensitive */
- for(bi=0;bi<ybands;bi++){
- for(xj=BANDS[bi];xj<BANDS[bi+1];xj++){
- for(ci=0;ci<nchannels;ci++){
- float xtmp;
- float ytmp;
- xtmp = X[xj*nchannels+ci];
- ytmp = Y[xj*nchannels+ci];
- for(xi=1;xi<nframes;xi++){
- float xtmp2;
- float ytmp2;
- xtmp2 = X[(xi*NFREQS+xj)*nchannels+ci];
- ytmp2 = Y[(xi*yfreqs+xj)*nchannels+ci];
- X[(xi*NFREQS+xj)*nchannels+ci] += xtmp;
- Y[(xi*yfreqs+xj)*nchannels+ci] += ytmp;
- xtmp = xtmp2;
- ytmp = ytmp2;
- }
- }
- }
- }
-
- /*If working at a lower sampling rate, don't take into account the last
- 300 Hz to allow for different transition bands.
- For 12 kHz, we don't skip anything, because the last band already skips
- 400 Hz.*/
- if(rate==48000)max_compare=BANDS[NBANDS];
- else if(rate==12000)max_compare=BANDS[ybands];
- else max_compare=BANDS[ybands]-3;
- err=0;
- for(xi=0;xi<nframes;xi++){
- double Ef;
- Ef=0;
- for(bi=0;bi<ybands;bi++){
- double Eb;
- Eb=0;
- for(xj=BANDS[bi];xj<BANDS[bi+1]&&xj<max_compare;xj++){
- for(ci=0;ci<nchannels;ci++){
- float re;
- float im;
- re=Y[(xi*yfreqs+xj)*nchannels+ci]/X[(xi*NFREQS+xj)*nchannels+ci];
- im=re-log(re)-1;
- /*Make comparison less sensitive around the SILK/CELT cross-over to
- allow for mode freedom in the filters.*/
- if(xj>=79&&xj<=81)im*=0.1F;
- if(xj==80)im*=0.1F;
- Eb+=im;
- }
- }
- Eb /= (BANDS[bi+1]-BANDS[bi])*nchannels;
- Ef += Eb*Eb;
- }
- /*Using a fixed normalization value means we're willing to accept slightly
- lower quality for lower sampling rates.*/
- Ef/=NBANDS;
- Ef*=Ef;
- err+=Ef*Ef;
- }
- err=pow(err/nframes,1.0/16);
- Q=100*(1-0.5*log(1+err)/log(1.13));
- if(Q<0){
- fprintf(stderr,"Test vector FAILS\n");
- fprintf(stderr,"Internal weighted error is %f\n",err);
- return EXIT_FAILURE;
- }
- else{
- fprintf(stderr,"Test vector PASSES\n");
- fprintf(stderr,
- "Opus quality metric: %.1f %% (internal weighted error is %f)\n",Q,err);
- return EXIT_SUCCESS;
- }
-}
diff --git a/drivers/opus/opus_config.h b/drivers/opus/opus_config.h
deleted file mode 100644
index 7b9c92c6a8..0000000000
--- a/drivers/opus/opus_config.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Opus configuration header */
-/* Based on the output of libopus configure script */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-#if (!defined( _MSC_VER ) || ( _MSC_VER >= 1800 ))
-
-/* Define to 1 if you have the `lrint' function. */
-#define HAVE_LRINT 1
-
-/* Define to 1 if you have the `lrintf' function. */
-#define HAVE_LRINTF 1
-
-#endif
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#define LT_OBJDIR ".libs/"
-
-#ifdef OPUS_ARM_OPT
-/* Make use of ARM asm optimization */
-#define OPUS_ARM_ASM 1
-
-/* Use generic ARMv4 inline asm optimizations */
-#define OPUS_ARM_INLINE_ASM 1
-
-/* Use ARMv5E inline asm optimizations */
-#define OPUS_ARM_INLINE_EDSP 1
-
-/* Use ARMv6 inline asm optimizations */
-#define OPUS_ARM_INLINE_MEDIA 1
-
-/* Use ARM NEON inline asm optimizations */
-#define OPUS_ARM_INLINE_NEON 1
-
-/* Define if assembler supports EDSP instructions */
-#define OPUS_ARM_MAY_HAVE_EDSP 1
-
-/* Define if assembler supports ARMv6 media instructions */
-#define OPUS_ARM_MAY_HAVE_MEDIA 1
-
-/* Define if compiler supports NEON instructions */
-#define OPUS_ARM_MAY_HAVE_NEON 1
-#endif // OPUS_ARM_OPT
-
-#ifdef OPUS_ARM64_OPT
-/* Make use of ARM asm optimization */
-#define OPUS_ARM_ASM 1
-
-/* Use ARMv6 inline asm optimizations */
-#define OPUS_ARM_INLINE_MEDIA 1 // work
-
-/* Use ARM NEON inline asm optimizations */
-#define OPUS_ARM_INLINE_NEON 1 // work
-
-/* Define if assembler supports EDSP instructions */
-#define OPUS_ARM_MAY_HAVE_EDSP 1 // work
-
-/* Define if assembler supports ARMv6 media instructions */
-#define OPUS_ARM_MAY_HAVE_MEDIA 1 // work
-
-/* Define if compiler supports NEON instructions */
-#define OPUS_ARM_MAY_HAVE_NEON 1
-
-#endif // OPUS_ARM64_OPT
-
-/* This is a build of OPUS */
-#define OPUS_BUILD /**/
-
-#ifndef WIN32
- /* Use C99 variable-size arrays */
- #define VAR_ARRAYS 1
-#else
- /* Fixes VS 2013 compile error */
- #define USE_ALLOCA 1
-#endif
-
-#ifndef OPUS_FIXED_POINT
-#define FLOAT_APPROX 1
-#endif
-
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to the equivalent of the C99 'restrict' keyword, or to
- nothing if this is not supported. Do not define if restrict is
- supported directly. */
-#if (!defined( _MSC_VER ) || ( _MSC_VER >= 1800 ))
-#define restrict __restrict
-#else
-#undef restrict
-#endif
-/* Work around a bug in Sun C++: it does not support _Restrict or
- __restrict__, even though the corresponding Sun C compiler ends up with
- "#define restrict _Restrict" or "#define restrict __restrict__" in the
- previous line. Perhaps some future version of Sun C++ will work with
- restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
-#if defined __SUNPRO_CC && !defined __RESTRICT
-# define _Restrict
-# define __restrict__
-#endif
diff --git a/drivers/opus/opus_custom.h b/drivers/opus/opus_custom.h
deleted file mode 100644
index 32fcb81ac7..0000000000
--- a/drivers/opus/opus_custom.h
+++ /dev/null
@@ -1,342 +0,0 @@
-/* Copyright (c) 2007-2008 CSIRO
- Copyright (c) 2007-2009 Xiph.Org Foundation
- Copyright (c) 2008-2012 Gregory Maxwell
- Written by Jean-Marc Valin and Gregory Maxwell */
-/*
- 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.
-
- 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 opus_custom.h
- @brief Opus-Custom reference implementation API
- */
-
-#ifndef OPUS_CUSTOM_H
-#define OPUS_CUSTOM_H
-
-#include "opus/opus_defines.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef CUSTOM_MODES
-# define OPUS_CUSTOM_EXPORT OPUS_EXPORT
-# define OPUS_CUSTOM_EXPORT_STATIC OPUS_EXPORT
-#else
-# define OPUS_CUSTOM_EXPORT
-# ifdef OPUS_BUILD
-# define OPUS_CUSTOM_EXPORT_STATIC static OPUS_INLINE
-# else
-# define OPUS_CUSTOM_EXPORT_STATIC
-# endif
-#endif
-
-/** @defgroup opus_custom Opus Custom
- * @{
- * Opus Custom is an optional part of the Opus specification and
- * reference implementation which uses a distinct API from the regular
- * API and supports frame sizes that are not normally supported.\ Use
- * of Opus Custom is discouraged for all but very special applications
- * for which a frame size different from 2.5, 5, 10, or 20 ms is needed
- * (for either complexity or latency reasons) and where interoperability
- * is less important.
- *
- * In addition to the interoperability limitations the use of Opus custom
- * disables a substantial chunk of the codec and generally lowers the
- * quality available at a given bitrate. Normally when an application needs
- * a different frame size from the codec it should buffer to match the
- * sizes but this adds a small amount of delay which may be important
- * in some very low latency applications. Some transports (especially
- * constant rate RF transports) may also work best with frames of
- * particular durations.
- *
- * Libopus only supports custom modes if they are enabled at compile time.
- *
- * The Opus Custom API is similar to the regular API but the
- * @ref opus_encoder_create and @ref opus_decoder_create calls take
- * an additional mode parameter which is a structure produced by
- * a call to @ref opus_custom_mode_create. Both the encoder and decoder
- * must create a mode using the same sample rate (fs) and frame size
- * (frame size) so these parameters must either be signaled out of band
- * or fixed in a particular implementation.
- *
- * Similar to regular Opus the custom modes support on the fly frame size
- * switching, but the sizes available depend on the particular frame size in
- * use. For some initial frame sizes on a single on the fly size is available.
- */
-
-/** Contains the state of an encoder. One encoder state is needed
- for each stream. It is initialized once at the beginning of the
- stream. Do *not* re-initialize the state for every frame.
- @brief Encoder state
- */
-typedef struct OpusCustomEncoder OpusCustomEncoder;
-
-/** State of the decoder. One decoder state is needed for each stream.
- It is initialized once at the beginning of the stream. Do *not*
- re-initialize the state for every frame.
- @brief Decoder state
- */
-typedef struct OpusCustomDecoder OpusCustomDecoder;
-
-/** The mode contains all the information necessary to create an
- encoder. Both the encoder and decoder need to be initialized
- with exactly the same mode, otherwise the output will be
- corrupted.
- @brief Mode configuration
- */
-typedef struct OpusCustomMode OpusCustomMode;
-
-/** Creates a new mode struct. This will be passed to an encoder or
- * decoder. The mode MUST NOT BE DESTROYED until the encoders and
- * decoders that use it are destroyed as well.
- * @param [in] Fs <tt>int</tt>: Sampling rate (8000 to 96000 Hz)
- * @param [in] frame_size <tt>int</tt>: Number of samples (per channel) to encode in each
- * packet (64 - 1024, prime factorization must contain zero or more 2s, 3s, or 5s and no other primes)
- * @param [out] error <tt>int*</tt>: Returned error code (if NULL, no error will be returned)
- * @return A newly created mode
- */
-OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomMode *opus_custom_mode_create(opus_int32 Fs, int frame_size, int *error);
-
-/** Destroys a mode struct. Only call this after all encoders and
- * decoders using this mode are destroyed as well.
- * @param [in] mode <tt>OpusCustomMode*</tt>: Mode to be freed.
- */
-OPUS_CUSTOM_EXPORT void opus_custom_mode_destroy(OpusCustomMode *mode);
-
-
-#if !defined(OPUS_BUILD) || defined(CELT_ENCODER_C)
-
-/* Encoder */
-/** Gets the size of an OpusCustomEncoder structure.
- * @param [in] mode <tt>OpusCustomMode *</tt>: Mode configuration
- * @param [in] channels <tt>int</tt>: Number of channels
- * @returns size
- */
-OPUS_CUSTOM_EXPORT_STATIC OPUS_WARN_UNUSED_RESULT int opus_custom_encoder_get_size(
- const OpusCustomMode *mode,
- int channels
-) OPUS_ARG_NONNULL(1);
-
-# ifdef CUSTOM_MODES
-/** Initializes a previously allocated encoder state
- * The memory pointed to by st must be the size returned by opus_custom_encoder_get_size.
- * This is intended for applications which use their own allocator instead of malloc.
- * @see opus_custom_encoder_create(),opus_custom_encoder_get_size()
- * To reset a previously initialized state use the OPUS_RESET_STATE CTL.
- * @param [in] st <tt>OpusCustomEncoder*</tt>: Encoder state
- * @param [in] mode <tt>OpusCustomMode *</tt>: Contains all the information about the characteristics of
- * the stream (must be the same characteristics as used for the
- * decoder)
- * @param [in] channels <tt>int</tt>: Number of channels
- * @return OPUS_OK Success or @ref opus_errorcodes
- */
-OPUS_CUSTOM_EXPORT int opus_custom_encoder_init(
- OpusCustomEncoder *st,
- const OpusCustomMode *mode,
- int channels
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2);
-# endif
-#endif
-
-
-/** Creates a new encoder state. Each stream needs its own encoder
- * state (can't be shared across simultaneous streams).
- * @param [in] mode <tt>OpusCustomMode*</tt>: Contains all the information about the characteristics of
- * the stream (must be the same characteristics as used for the
- * decoder)
- * @param [in] channels <tt>int</tt>: Number of channels
- * @param [out] error <tt>int*</tt>: Returns an error code
- * @return Newly created encoder state.
-*/
-OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomEncoder *opus_custom_encoder_create(
- const OpusCustomMode *mode,
- int channels,
- int *error
-) OPUS_ARG_NONNULL(1);
-
-
-/** Destroys a an encoder state.
- * @param[in] st <tt>OpusCustomEncoder*</tt>: State to be freed.
- */
-OPUS_CUSTOM_EXPORT void opus_custom_encoder_destroy(OpusCustomEncoder *st);
-
-/** Encodes a frame of audio.
- * @param [in] st <tt>OpusCustomEncoder*</tt>: Encoder state
- * @param [in] pcm <tt>float*</tt>: PCM audio in float format, with a normal range of +/-1.0.
- * Samples with a range beyond +/-1.0 are supported but will
- * be clipped by decoders using the integer API and should
- * only be used if it is known that the far end supports
- * extended dynamic range. There must be exactly
- * frame_size samples per channel.
- * @param [in] frame_size <tt>int</tt>: Number of samples per frame of input signal
- * @param [out] compressed <tt>char *</tt>: The compressed data is written here. This may not alias pcm and must be at least maxCompressedBytes long.
- * @param [in] maxCompressedBytes <tt>int</tt>: Maximum number of bytes to use for compressing the frame
- * (can change from one frame to another)
- * @return Number of bytes written to "compressed".
- * If negative, an error has occurred (see error codes). It is IMPORTANT that
- * the length returned be somehow transmitted to the decoder. Otherwise, no
- * decoding is possible.
- */
-OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT int opus_custom_encode_float(
- OpusCustomEncoder *st,
- const float *pcm,
- int frame_size,
- unsigned char *compressed,
- int maxCompressedBytes
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4);
-
-/** Encodes a frame of audio.
- * @param [in] st <tt>OpusCustomEncoder*</tt>: Encoder state
- * @param [in] pcm <tt>opus_int16*</tt>: PCM audio in signed 16-bit format (native endian).
- * There must be exactly frame_size samples per channel.
- * @param [in] frame_size <tt>int</tt>: Number of samples per frame of input signal
- * @param [out] compressed <tt>char *</tt>: The compressed data is written here. This may not alias pcm and must be at least maxCompressedBytes long.
- * @param [in] maxCompressedBytes <tt>int</tt>: Maximum number of bytes to use for compressing the frame
- * (can change from one frame to another)
- * @return Number of bytes written to "compressed".
- * If negative, an error has occurred (see error codes). It is IMPORTANT that
- * the length returned be somehow transmitted to the decoder. Otherwise, no
- * decoding is possible.
- */
-OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT int opus_custom_encode(
- OpusCustomEncoder *st,
- const opus_int16 *pcm,
- int frame_size,
- unsigned char *compressed,
- int maxCompressedBytes
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4);
-
-/** Perform a CTL function on an Opus custom encoder.
- *
- * Generally the request and subsequent arguments are generated
- * by a convenience macro.
- * @see opus_encoderctls
- */
-OPUS_CUSTOM_EXPORT int opus_custom_encoder_ctl(OpusCustomEncoder * OPUS_RESTRICT st, int request, ...) OPUS_ARG_NONNULL(1);
-
-
-#if !defined(OPUS_BUILD) || defined(CELT_DECODER_C)
-/* Decoder */
-
-/** Gets the size of an OpusCustomDecoder structure.
- * @param [in] mode <tt>OpusCustomMode *</tt>: Mode configuration
- * @param [in] channels <tt>int</tt>: Number of channels
- * @returns size
- */
-OPUS_CUSTOM_EXPORT_STATIC OPUS_WARN_UNUSED_RESULT int opus_custom_decoder_get_size(
- const OpusCustomMode *mode,
- int channels
-) OPUS_ARG_NONNULL(1);
-
-/** Initializes a previously allocated decoder state
- * The memory pointed to by st must be the size returned by opus_custom_decoder_get_size.
- * This is intended for applications which use their own allocator instead of malloc.
- * @see opus_custom_decoder_create(),opus_custom_decoder_get_size()
- * To reset a previously initialized state use the OPUS_RESET_STATE CTL.
- * @param [in] st <tt>OpusCustomDecoder*</tt>: Decoder state
- * @param [in] mode <tt>OpusCustomMode *</tt>: Contains all the information about the characteristics of
- * the stream (must be the same characteristics as used for the
- * encoder)
- * @param [in] channels <tt>int</tt>: Number of channels
- * @return OPUS_OK Success or @ref opus_errorcodes
- */
-OPUS_CUSTOM_EXPORT_STATIC int opus_custom_decoder_init(
- OpusCustomDecoder *st,
- const OpusCustomMode *mode,
- int channels
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2);
-
-#endif
-
-
-/** Creates a new decoder state. Each stream needs its own decoder state (can't
- * be shared across simultaneous streams).
- * @param [in] mode <tt>OpusCustomMode</tt>: Contains all the information about the characteristics of the
- * stream (must be the same characteristics as used for the encoder)
- * @param [in] channels <tt>int</tt>: Number of channels
- * @param [out] error <tt>int*</tt>: Returns an error code
- * @return Newly created decoder state.
- */
-OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT OpusCustomDecoder *opus_custom_decoder_create(
- const OpusCustomMode *mode,
- int channels,
- int *error
-) OPUS_ARG_NONNULL(1);
-
-/** Destroys a an decoder state.
- * @param[in] st <tt>OpusCustomDecoder*</tt>: State to be freed.
- */
-OPUS_CUSTOM_EXPORT void opus_custom_decoder_destroy(OpusCustomDecoder *st);
-
-/** Decode an opus custom frame with floating point output
- * @param [in] st <tt>OpusCustomDecoder*</tt>: Decoder state
- * @param [in] data <tt>char*</tt>: Input payload. Use a NULL pointer to indicate packet loss
- * @param [in] len <tt>int</tt>: Number of bytes in payload
- * @param [out] pcm <tt>float*</tt>: Output signal (interleaved if 2 channels). length
- * is frame_size*channels*sizeof(float)
- * @param [in] frame_size Number of samples per channel of available space in *pcm.
- * @returns Number of decoded samples or @ref opus_errorcodes
- */
-OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT int opus_custom_decode_float(
- OpusCustomDecoder *st,
- const unsigned char *data,
- int len,
- float *pcm,
- int frame_size
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4);
-
-/** Decode an opus custom frame
- * @param [in] st <tt>OpusCustomDecoder*</tt>: Decoder state
- * @param [in] data <tt>char*</tt>: Input payload. Use a NULL pointer to indicate packet loss
- * @param [in] len <tt>int</tt>: Number of bytes in payload
- * @param [out] pcm <tt>opus_int16*</tt>: Output signal (interleaved if 2 channels). length
- * is frame_size*channels*sizeof(opus_int16)
- * @param [in] frame_size Number of samples per channel of available space in *pcm.
- * @returns Number of decoded samples or @ref opus_errorcodes
- */
-OPUS_CUSTOM_EXPORT OPUS_WARN_UNUSED_RESULT int opus_custom_decode(
- OpusCustomDecoder *st,
- const unsigned char *data,
- int len,
- opus_int16 *pcm,
- int frame_size
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4);
-
-/** Perform a CTL function on an Opus custom decoder.
- *
- * Generally the request and subsequent arguments are generated
- * by a convenience macro.
- * @see opus_genericctls
- */
-OPUS_CUSTOM_EXPORT int opus_custom_decoder_ctl(OpusCustomDecoder * OPUS_RESTRICT st, int request, ...) OPUS_ARG_NONNULL(1);
-
-/**@}*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OPUS_CUSTOM_H */
diff --git a/drivers/opus/opus_decoder.c b/drivers/opus/opus_decoder.c
deleted file mode 100644
index b954b98f02..0000000000
--- a/drivers/opus/opus_decoder.c
+++ /dev/null
@@ -1,978 +0,0 @@
-/* Copyright (c) 2010 Xiph.Org Foundation, Skype Limited
- Written by Jean-Marc Valin and Koen Vos */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#ifndef OPUS_BUILD
-# error "OPUS_BUILD _MUST_ be defined to build Opus. This probably means you need other defines as well, as in a config.h. See the included build files for details."
-#endif
-
-#if defined(__GNUC__) && (__GNUC__ >= 2) && !defined(__OPTIMIZE__) && !defined(OPUS_WILL_BE_SLOW)
-# pragma message "You appear to be compiling without optimization, if so opus will be very slow."
-#endif
-
-#include <stdarg.h>
-#include "opus/celt/celt.h"
-#include "opus/opus.h"
-#include "opus/celt/entdec.h"
-#include "opus/celt/modes.h"
-#include "opus/silk/API.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/float_cast.h"
-#include "opus/opus_private.h"
-#include "opus/celt/os_support.h"
-#include "opus/silk/structs.h"
-#include "opus/silk/define.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/cpu_support.h"
-
-struct OpusDecoder {
- int celt_dec_offset;
- int silk_dec_offset;
- int channels;
- opus_int32 Fs; /** Sampling rate (at the API level) */
- silk_DecControlStruct DecControl;
- int decode_gain;
- int arch;
-
- /* Everything beyond this point gets cleared on a reset */
-#define OPUS_DECODER_RESET_START stream_channels
- int stream_channels;
-
- int bandwidth;
- int mode;
- int prev_mode;
- int frame_size;
- int prev_redundancy;
- int last_packet_duration;
-#ifndef OPUS_FIXED_POINT
- opus_val16 softclip_mem[2];
-#endif
-
- opus_uint32 rangeFinal;
-};
-
-
-int opus_decoder_get_size(int channels)
-{
- int silkDecSizeBytes, celtDecSizeBytes;
- int ret;
- if (channels<1 || channels > 2)
- return 0;
- ret = silk_Get_Decoder_Size( &silkDecSizeBytes );
- if(ret)
- return 0;
- silkDecSizeBytes = align(silkDecSizeBytes);
- celtDecSizeBytes = celt_decoder_get_size(channels);
- return align(sizeof(OpusDecoder))+silkDecSizeBytes+celtDecSizeBytes;
-}
-
-int opus_decoder_init(OpusDecoder *st, opus_int32 Fs, int channels)
-{
- void *silk_dec;
- CELTDecoder *celt_dec;
- int ret, silkDecSizeBytes;
-
- if ((Fs!=48000&&Fs!=24000&&Fs!=16000&&Fs!=12000&&Fs!=8000)
- || (channels!=1&&channels!=2))
- return OPUS_BAD_ARG;
-
- OPUS_CLEAR((char*)st, opus_decoder_get_size(channels));
- /* Initialize SILK encoder */
- ret = silk_Get_Decoder_Size(&silkDecSizeBytes);
- if (ret)
- return OPUS_INTERNAL_ERROR;
-
- silkDecSizeBytes = align(silkDecSizeBytes);
- st->silk_dec_offset = align(sizeof(OpusDecoder));
- st->celt_dec_offset = st->silk_dec_offset+silkDecSizeBytes;
- silk_dec = (char*)st+st->silk_dec_offset;
- celt_dec = (CELTDecoder*)((char*)st+st->celt_dec_offset);
- st->stream_channels = st->channels = channels;
-
- st->Fs = Fs;
- st->DecControl.API_sampleRate = st->Fs;
- st->DecControl.nChannelsAPI = st->channels;
-
- /* Reset decoder */
- ret = silk_InitDecoder( silk_dec );
- if(ret)return OPUS_INTERNAL_ERROR;
-
- /* Initialize CELT decoder */
- ret = celt_decoder_init(celt_dec, Fs, channels);
- if(ret!=OPUS_OK)return OPUS_INTERNAL_ERROR;
-
- celt_decoder_ctl(celt_dec, CELT_SET_SIGNALLING(0));
-
- st->prev_mode = 0;
- st->frame_size = Fs/400;
- st->arch = opus_select_arch();
- return OPUS_OK;
-}
-
-OpusDecoder *opus_decoder_create(opus_int32 Fs, int channels, int *error)
-{
- int ret;
- OpusDecoder *st;
- if ((Fs!=48000&&Fs!=24000&&Fs!=16000&&Fs!=12000&&Fs!=8000)
- || (channels!=1&&channels!=2))
- {
- if (error)
- *error = OPUS_BAD_ARG;
- return NULL;
- }
- st = (OpusDecoder *)opus_alloc(opus_decoder_get_size(channels));
- if (st == NULL)
- {
- if (error)
- *error = OPUS_ALLOC_FAIL;
- return NULL;
- }
- ret = opus_decoder_init(st, Fs, channels);
- if (error)
- *error = ret;
- if (ret != OPUS_OK)
- {
- opus_free(st);
- st = NULL;
- }
- return st;
-}
-
-static void smooth_fade(const opus_val16 *in1, const opus_val16 *in2,
- opus_val16 *out, int overlap, int channels,
- const opus_val16 *window, opus_int32 Fs)
-{
- int i, c;
- int inc = 48000/Fs;
- for (c=0;c<channels;c++)
- {
- for (i=0;i<overlap;i++)
- {
- opus_val16 w = MULT16_16_Q15(window[i*inc], window[i*inc]);
- out[i*channels+c] = SHR32(MAC16_16(MULT16_16(w,in2[i*channels+c]),
- Q15ONE-w, in1[i*channels+c]), 15);
- }
- }
-}
-
-static int opus_packet_get_mode(const unsigned char *data)
-{
- int mode;
- if (data[0]&0x80)
- {
- mode = MODE_CELT_ONLY;
- } else if ((data[0]&0x60) == 0x60)
- {
- mode = MODE_HYBRID;
- } else {
- mode = MODE_SILK_ONLY;
- }
- return mode;
-}
-
-static int opus_decode_frame(OpusDecoder *st, const unsigned char *data,
- opus_int32 len, opus_val16 *pcm, int frame_size, int decode_fec)
-{
- void *silk_dec;
- CELTDecoder *celt_dec;
- int i, silk_ret=0, celt_ret=0;
- ec_dec dec;
- opus_int32 silk_frame_size;
- int pcm_silk_size;
- VARDECL(opus_int16, pcm_silk);
- int pcm_transition_silk_size;
- VARDECL(opus_val16, pcm_transition_silk);
- int pcm_transition_celt_size;
- VARDECL(opus_val16, pcm_transition_celt);
- opus_val16 *pcm_transition=NULL;
- int redundant_audio_size;
- VARDECL(opus_val16, redundant_audio);
-
- int audiosize;
- int mode;
- int transition=0;
- int start_band;
- int redundancy=0;
- int redundancy_bytes = 0;
- int celt_to_silk=0;
- int c;
- int F2_5, F5, F10, F20;
- const opus_val16 *window;
- opus_uint32 redundant_rng = 0;
- int celt_accum;
- ALLOC_STACK;
-
- silk_dec = (char*)st+st->silk_dec_offset;
- celt_dec = (CELTDecoder*)((char*)st+st->celt_dec_offset);
- F20 = st->Fs/50;
- F10 = F20>>1;
- F5 = F10>>1;
- F2_5 = F5>>1;
- if (frame_size < F2_5)
- {
- RESTORE_STACK;
- return OPUS_BUFFER_TOO_SMALL;
- }
- /* Limit frame_size to avoid excessive stack allocations. */
- frame_size = IMIN(frame_size, st->Fs/25*3);
- /* Payloads of 1 (2 including ToC) or 0 trigger the PLC/DTX */
- if (len<=1)
- {
- data = NULL;
- /* In that case, don't conceal more than what the ToC says */
- frame_size = IMIN(frame_size, st->frame_size);
- }
- if (data != NULL)
- {
- audiosize = st->frame_size;
- mode = st->mode;
- ec_dec_init(&dec,(unsigned char*)data,len);
- } else {
- audiosize = frame_size;
- mode = st->prev_mode;
-
- if (mode == 0)
- {
- /* If we haven't got any packet yet, all we can do is return zeros */
- for (i=0;i<audiosize*st->channels;i++)
- pcm[i] = 0;
- RESTORE_STACK;
- return audiosize;
- }
-
- /* Avoids trying to run the PLC on sizes other than 2.5 (CELT), 5 (CELT),
- 10, or 20 (e.g. 12.5 or 30 ms). */
- if (audiosize > F20)
- {
- do {
- int ret = opus_decode_frame(st, NULL, 0, pcm, IMIN(audiosize, F20), 0);
- if (ret<0)
- {
- RESTORE_STACK;
- return ret;
- }
- pcm += ret*st->channels;
- audiosize -= ret;
- } while (audiosize > 0);
- RESTORE_STACK;
- return frame_size;
- } else if (audiosize < F20)
- {
- if (audiosize > F10)
- audiosize = F10;
- else if (mode != MODE_SILK_ONLY && audiosize > F5 && audiosize < F10)
- audiosize = F5;
- }
- }
-
- /* In fixed-point, we can tell CELT to do the accumulation on top of the
- SILK PCM buffer. This saves some stack space. */
-#ifdef OPUS_FIXED_POINT
- celt_accum = (mode != MODE_CELT_ONLY) && (frame_size >= F10);
-#else
- celt_accum = 0;
-#endif
-
- pcm_transition_silk_size = ALLOC_NONE;
- pcm_transition_celt_size = ALLOC_NONE;
- if (data!=NULL && st->prev_mode > 0 && (
- (mode == MODE_CELT_ONLY && st->prev_mode != MODE_CELT_ONLY && !st->prev_redundancy)
- || (mode != MODE_CELT_ONLY && st->prev_mode == MODE_CELT_ONLY) )
- )
- {
- transition = 1;
- /* Decide where to allocate the stack memory for pcm_transition */
- if (mode == MODE_CELT_ONLY)
- pcm_transition_celt_size = F5*st->channels;
- else
- pcm_transition_silk_size = F5*st->channels;
- }
- ALLOC(pcm_transition_celt, pcm_transition_celt_size, opus_val16);
- if (transition && mode == MODE_CELT_ONLY)
- {
- pcm_transition = pcm_transition_celt;
- opus_decode_frame(st, NULL, 0, pcm_transition, IMIN(F5, audiosize), 0);
- }
- if (audiosize > frame_size)
- {
- /*fprintf(stderr, "PCM buffer too small: %d vs %d (mode = %d)\n", audiosize, frame_size, mode);*/
- RESTORE_STACK;
- return OPUS_BAD_ARG;
- } else {
- frame_size = audiosize;
- }
-
- /* Don't allocate any memory when in CELT-only mode */
- pcm_silk_size = (mode != MODE_CELT_ONLY && !celt_accum) ? IMAX(F10, frame_size)*st->channels : ALLOC_NONE;
- ALLOC(pcm_silk, pcm_silk_size, opus_int16);
-
- /* SILK processing */
- if (mode != MODE_CELT_ONLY)
- {
- int lost_flag, decoded_samples;
- opus_int16 *pcm_ptr;
-#ifdef OPUS_FIXED_POINT
- if (celt_accum)
- pcm_ptr = pcm;
- else
-#endif
- pcm_ptr = pcm_silk;
-
- if (st->prev_mode==MODE_CELT_ONLY)
- silk_InitDecoder( silk_dec );
-
- /* The SILK PLC cannot produce frames of less than 10 ms */
- st->DecControl.payloadSize_ms = IMAX(10, 1000 * audiosize / st->Fs);
-
- if (data != NULL)
- {
- st->DecControl.nChannelsInternal = st->stream_channels;
- if( mode == MODE_SILK_ONLY ) {
- if( st->bandwidth == OPUS_BANDWIDTH_NARROWBAND ) {
- st->DecControl.internalSampleRate = 8000;
- } else if( st->bandwidth == OPUS_BANDWIDTH_MEDIUMBAND ) {
- st->DecControl.internalSampleRate = 12000;
- } else if( st->bandwidth == OPUS_BANDWIDTH_WIDEBAND ) {
- st->DecControl.internalSampleRate = 16000;
- } else {
- st->DecControl.internalSampleRate = 16000;
- silk_assert( 0 );
- }
- } else {
- /* Hybrid mode */
- st->DecControl.internalSampleRate = 16000;
- }
- }
-
- lost_flag = data == NULL ? 1 : 2 * decode_fec;
- decoded_samples = 0;
- do {
- /* Call SILK decoder */
- int first_frame = decoded_samples == 0;
- silk_ret = silk_Decode( silk_dec, &st->DecControl,
- lost_flag, first_frame, &dec, pcm_ptr, &silk_frame_size, st->arch );
- if( silk_ret ) {
- if (lost_flag) {
- /* PLC failure should not be fatal */
- silk_frame_size = frame_size;
- for (i=0;i<frame_size*st->channels;i++)
- pcm_ptr[i] = 0;
- } else {
- RESTORE_STACK;
- return OPUS_INTERNAL_ERROR;
- }
- }
- pcm_ptr += silk_frame_size * st->channels;
- decoded_samples += silk_frame_size;
- } while( decoded_samples < frame_size );
- }
-
- start_band = 0;
- if (!decode_fec && mode != MODE_CELT_ONLY && data != NULL
- && ec_tell(&dec)+17+20*(st->mode == MODE_HYBRID) <= 8*len)
- {
- /* Check if we have a redundant 0-8 kHz band */
- if (mode == MODE_HYBRID)
- redundancy = ec_dec_bit_logp(&dec, 12);
- else
- redundancy = 1;
- if (redundancy)
- {
- celt_to_silk = ec_dec_bit_logp(&dec, 1);
- /* redundancy_bytes will be at least two, in the non-hybrid
- case due to the ec_tell() check above */
- redundancy_bytes = mode==MODE_HYBRID ?
- (opus_int32)ec_dec_uint(&dec, 256)+2 :
- len-((ec_tell(&dec)+7)>>3);
- len -= redundancy_bytes;
- /* This is a sanity check. It should never happen for a valid
- packet, so the exact behaviour is not normative. */
- if (len*8 < ec_tell(&dec))
- {
- len = 0;
- redundancy_bytes = 0;
- redundancy = 0;
- }
- /* Shrink decoder because of raw bits */
- dec.storage -= redundancy_bytes;
- }
- }
- if (mode != MODE_CELT_ONLY)
- start_band = 17;
-
- {
- int endband=21;
-
- switch(st->bandwidth)
- {
- case OPUS_BANDWIDTH_NARROWBAND:
- endband = 13;
- break;
- case OPUS_BANDWIDTH_MEDIUMBAND:
- case OPUS_BANDWIDTH_WIDEBAND:
- endband = 17;
- break;
- case OPUS_BANDWIDTH_SUPERWIDEBAND:
- endband = 19;
- break;
- case OPUS_BANDWIDTH_FULLBAND:
- endband = 21;
- break;
- }
- celt_decoder_ctl(celt_dec, CELT_SET_END_BAND(endband));
- celt_decoder_ctl(celt_dec, CELT_SET_CHANNELS(st->stream_channels));
- }
-
- if (redundancy)
- {
- transition = 0;
- pcm_transition_silk_size=ALLOC_NONE;
- }
-
- ALLOC(pcm_transition_silk, pcm_transition_silk_size, opus_val16);
-
- if (transition && mode != MODE_CELT_ONLY)
- {
- pcm_transition = pcm_transition_silk;
- opus_decode_frame(st, NULL, 0, pcm_transition, IMIN(F5, audiosize), 0);
- }
-
- /* Only allocation memory for redundancy if/when needed */
- redundant_audio_size = redundancy ? F5*st->channels : ALLOC_NONE;
- ALLOC(redundant_audio, redundant_audio_size, opus_val16);
-
- /* 5 ms redundant frame for CELT->SILK*/
- if (redundancy && celt_to_silk)
- {
- celt_decoder_ctl(celt_dec, CELT_SET_START_BAND(0));
- celt_decode_with_ec(celt_dec, data+len, redundancy_bytes,
- redundant_audio, F5, NULL, 0);
- celt_decoder_ctl(celt_dec, OPUS_GET_FINAL_RANGE(&redundant_rng));
- }
-
- /* MUST be after PLC */
- celt_decoder_ctl(celt_dec, CELT_SET_START_BAND(start_band));
-
- if (mode != MODE_SILK_ONLY)
- {
- int celt_frame_size = IMIN(F20, frame_size);
- /* Make sure to discard any previous CELT state */
- if (mode != st->prev_mode && st->prev_mode > 0 && !st->prev_redundancy)
- celt_decoder_ctl(celt_dec, OPUS_RESET_STATE);
- /* Decode CELT */
- celt_ret = celt_decode_with_ec(celt_dec, decode_fec ? NULL : data,
- len, pcm, celt_frame_size, &dec, celt_accum);
- } else {
- unsigned char silence[2] = {0xFF, 0xFF};
- if (!celt_accum)
- {
- for (i=0;i<frame_size*st->channels;i++)
- pcm[i] = 0;
- }
- /* For hybrid -> SILK transitions, we let the CELT MDCT
- do a fade-out by decoding a silence frame */
- if (st->prev_mode == MODE_HYBRID && !(redundancy && celt_to_silk && st->prev_redundancy) )
- {
- celt_decoder_ctl(celt_dec, CELT_SET_START_BAND(0));
- celt_decode_with_ec(celt_dec, silence, 2, pcm, F2_5, NULL, celt_accum);
- }
- }
-
- if (mode != MODE_CELT_ONLY && !celt_accum)
- {
-#ifdef OPUS_FIXED_POINT
- for (i=0;i<frame_size*st->channels;i++)
- pcm[i] = SAT16(ADD32(pcm[i], pcm_silk[i]));
-#else
- for (i=0;i<frame_size*st->channels;i++)
- pcm[i] = pcm[i] + (opus_val16)((1.f/32768.f)*pcm_silk[i]);
-#endif
- }
-
- {
- const CELTMode *celt_mode;
- celt_decoder_ctl(celt_dec, CELT_GET_MODE(&celt_mode));
- window = celt_mode->window;
- }
-
- /* 5 ms redundant frame for SILK->CELT */
- if (redundancy && !celt_to_silk)
- {
- celt_decoder_ctl(celt_dec, OPUS_RESET_STATE);
- celt_decoder_ctl(celt_dec, CELT_SET_START_BAND(0));
-
- celt_decode_with_ec(celt_dec, data+len, redundancy_bytes, redundant_audio, F5, NULL, 0);
- celt_decoder_ctl(celt_dec, OPUS_GET_FINAL_RANGE(&redundant_rng));
- smooth_fade(pcm+st->channels*(frame_size-F2_5), redundant_audio+st->channels*F2_5,
- pcm+st->channels*(frame_size-F2_5), F2_5, st->channels, window, st->Fs);
- }
- if (redundancy && celt_to_silk)
- {
- for (c=0;c<st->channels;c++)
- {
- for (i=0;i<F2_5;i++)
- pcm[st->channels*i+c] = redundant_audio[st->channels*i+c];
- }
- smooth_fade(redundant_audio+st->channels*F2_5, pcm+st->channels*F2_5,
- pcm+st->channels*F2_5, F2_5, st->channels, window, st->Fs);
- }
- if (transition)
- {
- if (audiosize >= F5)
- {
- for (i=0;i<st->channels*F2_5;i++)
- pcm[i] = pcm_transition[i];
- smooth_fade(pcm_transition+st->channels*F2_5, pcm+st->channels*F2_5,
- pcm+st->channels*F2_5, F2_5,
- st->channels, window, st->Fs);
- } else {
- /* Not enough time to do a clean transition, but we do it anyway
- This will not preserve amplitude perfectly and may introduce
- a bit of temporal aliasing, but it shouldn't be too bad and
- that's pretty much the best we can do. In any case, generating this
- transition it pretty silly in the first place */
- smooth_fade(pcm_transition, pcm,
- pcm, F2_5,
- st->channels, window, st->Fs);
- }
- }
-
- if(st->decode_gain)
- {
- opus_val32 gain;
- gain = celt_exp2(MULT16_16_P15(QCONST16(6.48814081e-4f, 25), st->decode_gain));
- for (i=0;i<frame_size*st->channels;i++)
- {
- opus_val32 x;
- x = MULT16_32_P16(pcm[i],gain);
- pcm[i] = SATURATE(x, 32767);
- }
- }
-
- if (len <= 1)
- st->rangeFinal = 0;
- else
- st->rangeFinal = dec.rng ^ redundant_rng;
-
- st->prev_mode = mode;
- st->prev_redundancy = redundancy && !celt_to_silk;
-
- if (celt_ret>=0)
- {
- if (OPUS_CHECK_ARRAY(pcm, audiosize*st->channels))
- OPUS_PRINT_INT(audiosize);
- }
-
- RESTORE_STACK;
- return celt_ret < 0 ? celt_ret : audiosize;
-
-}
-
-int opus_decode_native(OpusDecoder *st, const unsigned char *data,
- opus_int32 len, opus_val16 *pcm, int frame_size, int decode_fec,
- int self_delimited, opus_int32 *packet_offset, int soft_clip)
-{
- int i, nb_samples;
- int count, offset;
- unsigned char toc;
- int packet_frame_size, packet_bandwidth, packet_mode, packet_stream_channels;
- /* 48 x 2.5 ms = 120 ms */
- opus_int16 size[48];
- if (decode_fec<0 || decode_fec>1)
- return OPUS_BAD_ARG;
- /* For FEC/PLC, frame_size has to be to have a multiple of 2.5 ms */
- if ((decode_fec || len==0 || data==NULL) && frame_size%(st->Fs/400)!=0)
- return OPUS_BAD_ARG;
- if (len==0 || data==NULL)
- {
- int pcm_count=0;
- do {
- int ret;
- ret = opus_decode_frame(st, NULL, 0, pcm+pcm_count*st->channels, frame_size-pcm_count, 0);
- if (ret<0)
- return ret;
- pcm_count += ret;
- } while (pcm_count < frame_size);
- celt_assert(pcm_count == frame_size);
- if (OPUS_CHECK_ARRAY(pcm, pcm_count*st->channels))
- OPUS_PRINT_INT(pcm_count);
- st->last_packet_duration = pcm_count;
- return pcm_count;
- } else if (len<0)
- return OPUS_BAD_ARG;
-
- packet_mode = opus_packet_get_mode(data);
- packet_bandwidth = opus_packet_get_bandwidth(data);
- packet_frame_size = opus_packet_get_samples_per_frame(data, st->Fs);
- packet_stream_channels = opus_packet_get_nb_channels(data);
-
- count = opus_packet_parse_impl(data, len, self_delimited, &toc, NULL,
- size, &offset, packet_offset);
- if (count<0)
- return count;
-
- data += offset;
-
- if (decode_fec)
- {
- int duration_copy;
- int ret;
- /* If no FEC can be present, run the PLC (recursive call) */
- if (frame_size < packet_frame_size || packet_mode == MODE_CELT_ONLY || st->mode == MODE_CELT_ONLY)
- return opus_decode_native(st, NULL, 0, pcm, frame_size, 0, 0, NULL, soft_clip);
- /* Otherwise, run the PLC on everything except the size for which we might have FEC */
- duration_copy = st->last_packet_duration;
- if (frame_size-packet_frame_size!=0)
- {
- ret = opus_decode_native(st, NULL, 0, pcm, frame_size-packet_frame_size, 0, 0, NULL, soft_clip);
- if (ret<0)
- {
- st->last_packet_duration = duration_copy;
- return ret;
- }
- celt_assert(ret==frame_size-packet_frame_size);
- }
- /* Complete with FEC */
- st->mode = packet_mode;
- st->bandwidth = packet_bandwidth;
- st->frame_size = packet_frame_size;
- st->stream_channels = packet_stream_channels;
- ret = opus_decode_frame(st, data, size[0], pcm+st->channels*(frame_size-packet_frame_size),
- packet_frame_size, 1);
- if (ret<0)
- return ret;
- else {
- if (OPUS_CHECK_ARRAY(pcm, frame_size*st->channels))
- OPUS_PRINT_INT(frame_size);
- st->last_packet_duration = frame_size;
- return frame_size;
- }
- }
-
- if (count*packet_frame_size > frame_size)
- return OPUS_BUFFER_TOO_SMALL;
-
- /* Update the state as the last step to avoid updating it on an invalid packet */
- st->mode = packet_mode;
- st->bandwidth = packet_bandwidth;
- st->frame_size = packet_frame_size;
- st->stream_channels = packet_stream_channels;
-
- nb_samples=0;
- for (i=0;i<count;i++)
- {
- int ret;
- ret = opus_decode_frame(st, data, size[i], pcm+nb_samples*st->channels, frame_size-nb_samples, 0);
- if (ret<0)
- return ret;
- celt_assert(ret==packet_frame_size);
- data += size[i];
- nb_samples += ret;
- }
- st->last_packet_duration = nb_samples;
- if (OPUS_CHECK_ARRAY(pcm, nb_samples*st->channels))
- OPUS_PRINT_INT(nb_samples);
-#ifndef OPUS_FIXED_POINT
- if (soft_clip)
- opus_pcm_soft_clip(pcm, nb_samples, st->channels, st->softclip_mem);
- else
- st->softclip_mem[0]=st->softclip_mem[1]=0;
-#endif
- return nb_samples;
-}
-
-#ifdef OPUS_FIXED_POINT
-
-int opus_decode(OpusDecoder *st, const unsigned char *data,
- opus_int32 len, opus_val16 *pcm, int frame_size, int decode_fec)
-{
- if(frame_size<=0)
- return OPUS_BAD_ARG;
- return opus_decode_native(st, data, len, pcm, frame_size, decode_fec, 0, NULL, 0);
-}
-
-#ifndef DISABLE_FLOAT_API
-int opus_decode_float(OpusDecoder *st, const unsigned char *data,
- opus_int32 len, float *pcm, int frame_size, int decode_fec)
-{
- VARDECL(opus_int16, out);
- int ret, i;
- int nb_samples;
- ALLOC_STACK;
-
- if(frame_size<=0)
- {
- RESTORE_STACK;
- return OPUS_BAD_ARG;
- }
- if (data != NULL && len > 0 && !decode_fec)
- {
- nb_samples = opus_decoder_get_nb_samples(st, data, len);
- if (nb_samples>0)
- frame_size = IMIN(frame_size, nb_samples);
- else
- return OPUS_INVALID_PACKET;
- }
- ALLOC(out, frame_size*st->channels, opus_int16);
-
- ret = opus_decode_native(st, data, len, out, frame_size, decode_fec, 0, NULL, 0);
- if (ret > 0)
- {
- for (i=0;i<ret*st->channels;i++)
- pcm[i] = (1.f/32768.f)*(out[i]);
- }
- RESTORE_STACK;
- return ret;
-}
-#endif
-
-
-#else
-int opus_decode(OpusDecoder *st, const unsigned char *data,
- opus_int32 len, opus_int16 *pcm, int frame_size, int decode_fec)
-{
- VARDECL(float, out);
- int ret, i;
- int nb_samples;
- ALLOC_STACK;
-
- if(frame_size<=0)
- {
- RESTORE_STACK;
- return OPUS_BAD_ARG;
- }
-
- if (data != NULL && len > 0 && !decode_fec)
- {
- nb_samples = opus_decoder_get_nb_samples(st, data, len);
- if (nb_samples>0)
- frame_size = IMIN(frame_size, nb_samples);
- else
- return OPUS_INVALID_PACKET;
- }
- ALLOC(out, frame_size*st->channels, float);
-
- ret = opus_decode_native(st, data, len, out, frame_size, decode_fec, 0, NULL, 1);
- if (ret > 0)
- {
- for (i=0;i<ret*st->channels;i++)
- pcm[i] = FLOAT2INT16(out[i]);
- }
- RESTORE_STACK;
- return ret;
-}
-
-int opus_decode_float(OpusDecoder *st, const unsigned char *data,
- opus_int32 len, opus_val16 *pcm, int frame_size, int decode_fec)
-{
- if(frame_size<=0)
- return OPUS_BAD_ARG;
- return opus_decode_native(st, data, len, pcm, frame_size, decode_fec, 0, NULL, 0);
-}
-
-#endif
-
-int opus_decoder_ctl(OpusDecoder *st, int request, ...)
-{
- int ret = OPUS_OK;
- va_list ap;
- void *silk_dec;
- CELTDecoder *celt_dec;
-
- silk_dec = (char*)st+st->silk_dec_offset;
- celt_dec = (CELTDecoder*)((char*)st+st->celt_dec_offset);
-
-
- va_start(ap, request);
-
- switch (request)
- {
- case OPUS_GET_BANDWIDTH_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->bandwidth;
- }
- break;
- case OPUS_GET_FINAL_RANGE_REQUEST:
- {
- opus_uint32 *value = va_arg(ap, opus_uint32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->rangeFinal;
- }
- break;
- case OPUS_RESET_STATE:
- {
- OPUS_CLEAR((char*)&st->OPUS_DECODER_RESET_START,
- sizeof(OpusDecoder)-
- ((char*)&st->OPUS_DECODER_RESET_START - (char*)st));
-
- celt_decoder_ctl(celt_dec, OPUS_RESET_STATE);
- silk_InitDecoder( silk_dec );
- st->stream_channels = st->channels;
- st->frame_size = st->Fs/400;
- }
- break;
- case OPUS_GET_SAMPLE_RATE_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->Fs;
- }
- break;
- case OPUS_GET_PITCH_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- if (st->prev_mode == MODE_CELT_ONLY)
- celt_decoder_ctl(celt_dec, OPUS_GET_PITCH(value));
- else
- *value = st->DecControl.prevPitchLag;
- }
- break;
- case OPUS_GET_GAIN_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->decode_gain;
- }
- break;
- case OPUS_SET_GAIN_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<-32768 || value>32767)
- {
- goto bad_arg;
- }
- st->decode_gain = value;
- }
- break;
- case OPUS_GET_LAST_PACKET_DURATION_REQUEST:
- {
- opus_uint32 *value = va_arg(ap, opus_uint32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->last_packet_duration;
- }
- break;
- default:
- /*fprintf(stderr, "unknown opus_decoder_ctl() request: %d", request);*/
- ret = OPUS_UNIMPLEMENTED;
- break;
- }
-
- va_end(ap);
- return ret;
-bad_arg:
- va_end(ap);
- return OPUS_BAD_ARG;
-}
-
-void opus_decoder_destroy(OpusDecoder *st)
-{
- opus_free(st);
-}
-
-
-int opus_packet_get_bandwidth(const unsigned char *data)
-{
- int bandwidth;
- if (data[0]&0x80)
- {
- bandwidth = OPUS_BANDWIDTH_MEDIUMBAND + ((data[0]>>5)&0x3);
- if (bandwidth == OPUS_BANDWIDTH_MEDIUMBAND)
- bandwidth = OPUS_BANDWIDTH_NARROWBAND;
- } else if ((data[0]&0x60) == 0x60)
- {
- bandwidth = (data[0]&0x10) ? OPUS_BANDWIDTH_FULLBAND :
- OPUS_BANDWIDTH_SUPERWIDEBAND;
- } else {
- bandwidth = OPUS_BANDWIDTH_NARROWBAND + ((data[0]>>5)&0x3);
- }
- return bandwidth;
-}
-
-int opus_packet_get_nb_channels(const unsigned char *data)
-{
- return (data[0]&0x4) ? 2 : 1;
-}
-
-int opus_packet_get_nb_frames(const unsigned char packet[], opus_int32 len)
-{
- int count;
- if (len<1)
- return OPUS_BAD_ARG;
- count = packet[0]&0x3;
- if (count==0)
- return 1;
- else if (count!=3)
- return 2;
- else if (len<2)
- return OPUS_INVALID_PACKET;
- else
- return packet[1]&0x3F;
-}
-
-int opus_packet_get_nb_samples(const unsigned char packet[], opus_int32 len,
- opus_int32 Fs)
-{
- int samples;
- int count = opus_packet_get_nb_frames(packet, len);
-
- if (count<0)
- return count;
-
- samples = count*opus_packet_get_samples_per_frame(packet, Fs);
- /* Can't have more than 120 ms */
- if (samples*25 > Fs*3)
- return OPUS_INVALID_PACKET;
- else
- return samples;
-}
-
-int opus_decoder_get_nb_samples(const OpusDecoder *dec,
- const unsigned char packet[], opus_int32 len)
-{
- return opus_packet_get_nb_samples(packet, len, dec->Fs);
-}
diff --git a/drivers/opus/opus_defines.h b/drivers/opus/opus_defines.h
deleted file mode 100644
index b972ce0eb9..0000000000
--- a/drivers/opus/opus_defines.h
+++ /dev/null
@@ -1,753 +0,0 @@
-/* Copyright (c) 2010-2011 Xiph.Org Foundation, Skype Limited
- Written by Jean-Marc Valin and Koen Vos */
-/*
- 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.
-
- 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 opus_defines.h
- * @brief Opus reference implementation constants
- */
-
-#ifndef OPUS_DEFINES_H
-#define OPUS_DEFINES_H
-
-#include "opus/opus_types.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @defgroup opus_errorcodes Error codes
- * @{
- */
-/** No error @hideinitializer*/
-#define OPUS_OK 0
-/** One or more invalid/out of range arguments @hideinitializer*/
-#define OPUS_BAD_ARG -1
-/** Not enough bytes allocated in the buffer @hideinitializer*/
-#define OPUS_BUFFER_TOO_SMALL -2
-/** An internal error was detected @hideinitializer*/
-#define OPUS_INTERNAL_ERROR -3
-/** The compressed data passed is corrupted @hideinitializer*/
-#define OPUS_INVALID_PACKET -4
-/** Invalid/unsupported request number @hideinitializer*/
-#define OPUS_UNIMPLEMENTED -5
-/** An encoder or decoder structure is invalid or already freed @hideinitializer*/
-#define OPUS_INVALID_STATE -6
-/** Memory allocation has failed @hideinitializer*/
-#define OPUS_ALLOC_FAIL -7
-/**@}*/
-
-/** @cond OPUS_INTERNAL_DOC */
-/**Export control for opus functions */
-
-#ifndef OPUS_EXPORT
-# if defined(WIN32)
-# ifdef OPUS_BUILD
-# define OPUS_EXPORT __declspec(dllexport)
-# else
-# define OPUS_EXPORT
-# endif
-# elif defined(__GNUC__) && defined(OPUS_BUILD)
-# define OPUS_EXPORT __attribute__ ((visibility ("default")))
-# else
-# define OPUS_EXPORT
-# endif
-#endif
-
-# if !defined(OPUS_GNUC_PREREQ)
-# if defined(__GNUC__)&&defined(__GNUC_MINOR__)
-# define OPUS_GNUC_PREREQ(_maj,_min) \
- ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min))
-# else
-# define OPUS_GNUC_PREREQ(_maj,_min) 0
-# endif
-# endif
-
-#if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) )
-# if OPUS_GNUC_PREREQ(3,0)
-# define OPUS_RESTRICT __restrict__
-# elif (defined(_MSC_VER) && _MSC_VER >= 1400)
-# define OPUS_RESTRICT __restrict
-# else
-# define OPUS_RESTRICT
-# endif
-#else
-# define OPUS_RESTRICT restrict
-#endif
-
-#if (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L) )
-# if OPUS_GNUC_PREREQ(2,7)
-# define OPUS_INLINE __inline__
-# elif (defined(_MSC_VER))
-# define OPUS_INLINE __inline
-# else
-# define OPUS_INLINE
-# endif
-#else
-# define OPUS_INLINE inline
-#endif
-
-/**Warning attributes for opus functions
- * NONNULL is not used in OPUS_BUILD to avoid the compiler optimizing out
- * some paranoid null checks. */
-#if defined(__GNUC__) && OPUS_GNUC_PREREQ(3, 4)
-# define OPUS_WARN_UNUSED_RESULT __attribute__ ((__warn_unused_result__))
-#else
-# define OPUS_WARN_UNUSED_RESULT
-#endif
-#if !defined(OPUS_BUILD) && defined(__GNUC__) && OPUS_GNUC_PREREQ(3, 4)
-# define OPUS_ARG_NONNULL(_x) __attribute__ ((__nonnull__(_x)))
-#else
-# define OPUS_ARG_NONNULL(_x)
-#endif
-
-/** These are the actual Encoder CTL ID numbers.
- * They should not be used directly by applications.
- * In general, SETs should be even and GETs should be odd.*/
-#define OPUS_SET_APPLICATION_REQUEST 4000
-#define OPUS_GET_APPLICATION_REQUEST 4001
-#define OPUS_SET_BITRATE_REQUEST 4002
-#define OPUS_GET_BITRATE_REQUEST 4003
-#define OPUS_SET_MAX_BANDWIDTH_REQUEST 4004
-#define OPUS_GET_MAX_BANDWIDTH_REQUEST 4005
-#define OPUS_SET_VBR_REQUEST 4006
-#define OPUS_GET_VBR_REQUEST 4007
-#define OPUS_SET_BANDWIDTH_REQUEST 4008
-#define OPUS_GET_BANDWIDTH_REQUEST 4009
-#define OPUS_SET_COMPLEXITY_REQUEST 4010
-#define OPUS_GET_COMPLEXITY_REQUEST 4011
-#define OPUS_SET_INBAND_FEC_REQUEST 4012
-#define OPUS_GET_INBAND_FEC_REQUEST 4013
-#define OPUS_SET_PACKET_LOSS_PERC_REQUEST 4014
-#define OPUS_GET_PACKET_LOSS_PERC_REQUEST 4015
-#define OPUS_SET_DTX_REQUEST 4016
-#define OPUS_GET_DTX_REQUEST 4017
-#define OPUS_SET_VBR_CONSTRAINT_REQUEST 4020
-#define OPUS_GET_VBR_CONSTRAINT_REQUEST 4021
-#define OPUS_SET_FORCE_CHANNELS_REQUEST 4022
-#define OPUS_GET_FORCE_CHANNELS_REQUEST 4023
-#define OPUS_SET_SIGNAL_REQUEST 4024
-#define OPUS_GET_SIGNAL_REQUEST 4025
-#define OPUS_GET_LOOKAHEAD_REQUEST 4027
-/* #define OPUS_RESET_STATE 4028 */
-#define OPUS_GET_SAMPLE_RATE_REQUEST 4029
-#define OPUS_GET_FINAL_RANGE_REQUEST 4031
-#define OPUS_GET_PITCH_REQUEST 4033
-#define OPUS_SET_GAIN_REQUEST 4034
-#define OPUS_GET_GAIN_REQUEST 4045 /* Should have been 4035 */
-#define OPUS_SET_LSB_DEPTH_REQUEST 4036
-#define OPUS_GET_LSB_DEPTH_REQUEST 4037
-#define OPUS_GET_LAST_PACKET_DURATION_REQUEST 4039
-#define OPUS_SET_EXPERT_FRAME_DURATION_REQUEST 4040
-#define OPUS_GET_EXPERT_FRAME_DURATION_REQUEST 4041
-#define OPUS_SET_PREDICTION_DISABLED_REQUEST 4042
-#define OPUS_GET_PREDICTION_DISABLED_REQUEST 4043
-
-/* Don't use 4045, it's already taken by OPUS_GET_GAIN_REQUEST */
-
-/* Macros to trigger compilation errors when the wrong types are provided to a CTL */
-#define __opus_check_int(x) (((void)((x) == (opus_int32)0)), (opus_int32)(x))
-#define __opus_check_int_ptr(ptr) ((ptr) + ((ptr) - (opus_int32*)(ptr)))
-#define __opus_check_uint_ptr(ptr) ((ptr) + ((ptr) - (opus_uint32*)(ptr)))
-#define __opus_check_val16_ptr(ptr) ((ptr) + ((ptr) - (opus_val16*)(ptr)))
-/** @endcond */
-
-/** @defgroup opus_ctlvalues Pre-defined values for CTL interface
- * @see opus_genericctls, opus_encoderctls
- * @{
- */
-/* Values for the various encoder CTLs */
-#define OPUS_AUTO -1000 /**<Auto/default setting @hideinitializer*/
-#define OPUS_BITRATE_MAX -1 /**<Maximum bitrate @hideinitializer*/
-
-/** Best for most VoIP/videoconference applications where listening quality and intelligibility matter most
- * @hideinitializer */
-#define OPUS_APPLICATION_VOIP 2048
-/** Best for broadcast/high-fidelity application where the decoded audio should be as close as possible to the input
- * @hideinitializer */
-#define OPUS_APPLICATION_AUDIO 2049
-/** Only use when lowest-achievable latency is what matters most. Voice-optimized modes cannot be used.
- * @hideinitializer */
-#define OPUS_APPLICATION_RESTRICTED_LOWDELAY 2051
-
-#define OPUS_SIGNAL_VOICE 3001 /**< Signal being encoded is voice */
-#define OPUS_SIGNAL_MUSIC 3002 /**< Signal being encoded is music */
-#define OPUS_BANDWIDTH_NARROWBAND 1101 /**< 4 kHz bandpass @hideinitializer*/
-#define OPUS_BANDWIDTH_MEDIUMBAND 1102 /**< 6 kHz bandpass @hideinitializer*/
-#define OPUS_BANDWIDTH_WIDEBAND 1103 /**< 8 kHz bandpass @hideinitializer*/
-#define OPUS_BANDWIDTH_SUPERWIDEBAND 1104 /**<12 kHz bandpass @hideinitializer*/
-#define OPUS_BANDWIDTH_FULLBAND 1105 /**<20 kHz bandpass @hideinitializer*/
-
-#define OPUS_FRAMESIZE_ARG 5000 /**< Select frame size from the argument (default) */
-#define OPUS_FRAMESIZE_2_5_MS 5001 /**< Use 2.5 ms frames */
-#define OPUS_FRAMESIZE_5_MS 5002 /**< Use 5 ms frames */
-#define OPUS_FRAMESIZE_10_MS 5003 /**< Use 10 ms frames */
-#define OPUS_FRAMESIZE_20_MS 5004 /**< Use 20 ms frames */
-#define OPUS_FRAMESIZE_40_MS 5005 /**< Use 40 ms frames */
-#define OPUS_FRAMESIZE_60_MS 5006 /**< Use 60 ms frames */
-
-/**@}*/
-
-
-/** @defgroup opus_encoderctls Encoder related CTLs
- *
- * These are convenience macros for use with the \c opus_encode_ctl
- * interface. They are used to generate the appropriate series of
- * arguments for that call, passing the correct type, size and so
- * on as expected for each particular request.
- *
- * Some usage examples:
- *
- * @code
- * int ret;
- * ret = opus_encoder_ctl(enc_ctx, OPUS_SET_BANDWIDTH(OPUS_AUTO));
- * if (ret != OPUS_OK) return ret;
- *
- * opus_int32 rate;
- * opus_encoder_ctl(enc_ctx, OPUS_GET_BANDWIDTH(&rate));
- *
- * opus_encoder_ctl(enc_ctx, OPUS_RESET_STATE);
- * @endcode
- *
- * @see opus_genericctls, opus_encoder
- * @{
- */
-
-/** Configures the encoder's computational complexity.
- * The supported range is 0-10 inclusive with 10 representing the highest complexity.
- * @see OPUS_GET_COMPLEXITY
- * @param[in] x <tt>opus_int32</tt>: Allowed values: 0-10, inclusive.
- *
- * @hideinitializer */
-#define OPUS_SET_COMPLEXITY(x) OPUS_SET_COMPLEXITY_REQUEST, __opus_check_int(x)
-/** Gets the encoder's complexity configuration.
- * @see OPUS_SET_COMPLEXITY
- * @param[out] x <tt>opus_int32 *</tt>: Returns a value in the range 0-10,
- * inclusive.
- * @hideinitializer */
-#define OPUS_GET_COMPLEXITY(x) OPUS_GET_COMPLEXITY_REQUEST, __opus_check_int_ptr(x)
-
-/** Configures the bitrate in the encoder.
- * Rates from 500 to 512000 bits per second are meaningful, as well as the
- * special values #OPUS_AUTO and #OPUS_BITRATE_MAX.
- * The value #OPUS_BITRATE_MAX can be used to cause the codec to use as much
- * rate as it can, which is useful for controlling the rate by adjusting the
- * output buffer size.
- * @see OPUS_GET_BITRATE
- * @param[in] x <tt>opus_int32</tt>: Bitrate in bits per second. The default
- * is determined based on the number of
- * channels and the input sampling rate.
- * @hideinitializer */
-#define OPUS_SET_BITRATE(x) OPUS_SET_BITRATE_REQUEST, __opus_check_int(x)
-/** Gets the encoder's bitrate configuration.
- * @see OPUS_SET_BITRATE
- * @param[out] x <tt>opus_int32 *</tt>: Returns the bitrate in bits per second.
- * The default is determined based on the
- * number of channels and the input
- * sampling rate.
- * @hideinitializer */
-#define OPUS_GET_BITRATE(x) OPUS_GET_BITRATE_REQUEST, __opus_check_int_ptr(x)
-
-/** Enables or disables variable bitrate (VBR) in the encoder.
- * The configured bitrate may not be met exactly because frames must
- * be an integer number of bytes in length.
- * @see OPUS_GET_VBR
- * @see OPUS_SET_VBR_CONSTRAINT
- * @param[in] x <tt>opus_int32</tt>: Allowed values:
- * <dl>
- * <dt>0</dt><dd>Hard CBR. For LPC/hybrid modes at very low bit-rate, this can
- * cause noticeable quality degradation.</dd>
- * <dt>1</dt><dd>VBR (default). The exact type of VBR is controlled by
- * #OPUS_SET_VBR_CONSTRAINT.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_VBR(x) OPUS_SET_VBR_REQUEST, __opus_check_int(x)
-/** Determine if variable bitrate (VBR) is enabled in the encoder.
- * @see OPUS_SET_VBR
- * @see OPUS_GET_VBR_CONSTRAINT
- * @param[out] x <tt>opus_int32 *</tt>: Returns one of the following values:
- * <dl>
- * <dt>0</dt><dd>Hard CBR.</dd>
- * <dt>1</dt><dd>VBR (default). The exact type of VBR may be retrieved via
- * #OPUS_GET_VBR_CONSTRAINT.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_VBR(x) OPUS_GET_VBR_REQUEST, __opus_check_int_ptr(x)
-
-/** Enables or disables constrained VBR in the encoder.
- * This setting is ignored when the encoder is in CBR mode.
- * @warning Only the MDCT mode of Opus currently heeds the constraint.
- * Speech mode ignores it completely, hybrid mode may fail to obey it
- * if the LPC layer uses more bitrate than the constraint would have
- * permitted.
- * @see OPUS_GET_VBR_CONSTRAINT
- * @see OPUS_SET_VBR
- * @param[in] x <tt>opus_int32</tt>: Allowed values:
- * <dl>
- * <dt>0</dt><dd>Unconstrained VBR.</dd>
- * <dt>1</dt><dd>Constrained VBR (default). This creates a maximum of one
- * frame of buffering delay assuming a transport with a
- * serialization speed of the nominal bitrate.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_VBR_CONSTRAINT(x) OPUS_SET_VBR_CONSTRAINT_REQUEST, __opus_check_int(x)
-/** Determine if constrained VBR is enabled in the encoder.
- * @see OPUS_SET_VBR_CONSTRAINT
- * @see OPUS_GET_VBR
- * @param[out] x <tt>opus_int32 *</tt>: Returns one of the following values:
- * <dl>
- * <dt>0</dt><dd>Unconstrained VBR.</dd>
- * <dt>1</dt><dd>Constrained VBR (default).</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_VBR_CONSTRAINT(x) OPUS_GET_VBR_CONSTRAINT_REQUEST, __opus_check_int_ptr(x)
-
-/** Configures mono/stereo forcing in the encoder.
- * This can force the encoder to produce packets encoded as either mono or
- * stereo, regardless of the format of the input audio. This is useful when
- * the caller knows that the input signal is currently a mono source embedded
- * in a stereo stream.
- * @see OPUS_GET_FORCE_CHANNELS
- * @param[in] x <tt>opus_int32</tt>: Allowed values:
- * <dl>
- * <dt>#OPUS_AUTO</dt><dd>Not forced (default)</dd>
- * <dt>1</dt> <dd>Forced mono</dd>
- * <dt>2</dt> <dd>Forced stereo</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_FORCE_CHANNELS(x) OPUS_SET_FORCE_CHANNELS_REQUEST, __opus_check_int(x)
-/** Gets the encoder's forced channel configuration.
- * @see OPUS_SET_FORCE_CHANNELS
- * @param[out] x <tt>opus_int32 *</tt>:
- * <dl>
- * <dt>#OPUS_AUTO</dt><dd>Not forced (default)</dd>
- * <dt>1</dt> <dd>Forced mono</dd>
- * <dt>2</dt> <dd>Forced stereo</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_FORCE_CHANNELS(x) OPUS_GET_FORCE_CHANNELS_REQUEST, __opus_check_int_ptr(x)
-
-/** Configures the maximum bandpass that the encoder will select automatically.
- * Applications should normally use this instead of #OPUS_SET_BANDWIDTH
- * (leaving that set to the default, #OPUS_AUTO). This allows the
- * application to set an upper bound based on the type of input it is
- * providing, but still gives the encoder the freedom to reduce the bandpass
- * when the bitrate becomes too low, for better overall quality.
- * @see OPUS_GET_MAX_BANDWIDTH
- * @param[in] x <tt>opus_int32</tt>: Allowed values:
- * <dl>
- * <dt>OPUS_BANDWIDTH_NARROWBAND</dt> <dd>4 kHz passband</dd>
- * <dt>OPUS_BANDWIDTH_MEDIUMBAND</dt> <dd>6 kHz passband</dd>
- * <dt>OPUS_BANDWIDTH_WIDEBAND</dt> <dd>8 kHz passband</dd>
- * <dt>OPUS_BANDWIDTH_SUPERWIDEBAND</dt><dd>12 kHz passband</dd>
- * <dt>OPUS_BANDWIDTH_FULLBAND</dt> <dd>20 kHz passband (default)</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_MAX_BANDWIDTH(x) OPUS_SET_MAX_BANDWIDTH_REQUEST, __opus_check_int(x)
-
-/** Gets the encoder's configured maximum allowed bandpass.
- * @see OPUS_SET_MAX_BANDWIDTH
- * @param[out] x <tt>opus_int32 *</tt>: Allowed values:
- * <dl>
- * <dt>#OPUS_BANDWIDTH_NARROWBAND</dt> <dd>4 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_MEDIUMBAND</dt> <dd>6 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_WIDEBAND</dt> <dd>8 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_SUPERWIDEBAND</dt><dd>12 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_FULLBAND</dt> <dd>20 kHz passband (default)</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_MAX_BANDWIDTH(x) OPUS_GET_MAX_BANDWIDTH_REQUEST, __opus_check_int_ptr(x)
-
-/** Sets the encoder's bandpass to a specific value.
- * This prevents the encoder from automatically selecting the bandpass based
- * on the available bitrate. If an application knows the bandpass of the input
- * audio it is providing, it should normally use #OPUS_SET_MAX_BANDWIDTH
- * instead, which still gives the encoder the freedom to reduce the bandpass
- * when the bitrate becomes too low, for better overall quality.
- * @see OPUS_GET_BANDWIDTH
- * @param[in] x <tt>opus_int32</tt>: Allowed values:
- * <dl>
- * <dt>#OPUS_AUTO</dt> <dd>(default)</dd>
- * <dt>#OPUS_BANDWIDTH_NARROWBAND</dt> <dd>4 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_MEDIUMBAND</dt> <dd>6 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_WIDEBAND</dt> <dd>8 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_SUPERWIDEBAND</dt><dd>12 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_FULLBAND</dt> <dd>20 kHz passband</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_BANDWIDTH(x) OPUS_SET_BANDWIDTH_REQUEST, __opus_check_int(x)
-
-/** Configures the type of signal being encoded.
- * This is a hint which helps the encoder's mode selection.
- * @see OPUS_GET_SIGNAL
- * @param[in] x <tt>opus_int32</tt>: Allowed values:
- * <dl>
- * <dt>#OPUS_AUTO</dt> <dd>(default)</dd>
- * <dt>#OPUS_SIGNAL_VOICE</dt><dd>Bias thresholds towards choosing LPC or Hybrid modes.</dd>
- * <dt>#OPUS_SIGNAL_MUSIC</dt><dd>Bias thresholds towards choosing MDCT modes.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_SIGNAL(x) OPUS_SET_SIGNAL_REQUEST, __opus_check_int(x)
-/** Gets the encoder's configured signal type.
- * @see OPUS_SET_SIGNAL
- * @param[out] x <tt>opus_int32 *</tt>: Returns one of the following values:
- * <dl>
- * <dt>#OPUS_AUTO</dt> <dd>(default)</dd>
- * <dt>#OPUS_SIGNAL_VOICE</dt><dd>Bias thresholds towards choosing LPC or Hybrid modes.</dd>
- * <dt>#OPUS_SIGNAL_MUSIC</dt><dd>Bias thresholds towards choosing MDCT modes.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_SIGNAL(x) OPUS_GET_SIGNAL_REQUEST, __opus_check_int_ptr(x)
-
-
-/** Configures the encoder's intended application.
- * The initial value is a mandatory argument to the encoder_create function.
- * @see OPUS_GET_APPLICATION
- * @param[in] x <tt>opus_int32</tt>: Returns one of the following values:
- * <dl>
- * <dt>#OPUS_APPLICATION_VOIP</dt>
- * <dd>Process signal for improved speech intelligibility.</dd>
- * <dt>#OPUS_APPLICATION_AUDIO</dt>
- * <dd>Favor faithfulness to the original input.</dd>
- * <dt>#OPUS_APPLICATION_RESTRICTED_LOWDELAY</dt>
- * <dd>Configure the minimum possible coding delay by disabling certain modes
- * of operation.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_APPLICATION(x) OPUS_SET_APPLICATION_REQUEST, __opus_check_int(x)
-/** Gets the encoder's configured application.
- * @see OPUS_SET_APPLICATION
- * @param[out] x <tt>opus_int32 *</tt>: Returns one of the following values:
- * <dl>
- * <dt>#OPUS_APPLICATION_VOIP</dt>
- * <dd>Process signal for improved speech intelligibility.</dd>
- * <dt>#OPUS_APPLICATION_AUDIO</dt>
- * <dd>Favor faithfulness to the original input.</dd>
- * <dt>#OPUS_APPLICATION_RESTRICTED_LOWDELAY</dt>
- * <dd>Configure the minimum possible coding delay by disabling certain modes
- * of operation.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_APPLICATION(x) OPUS_GET_APPLICATION_REQUEST, __opus_check_int_ptr(x)
-
-/** Gets the total samples of delay added by the entire codec.
- * This can be queried by the encoder and then the provided number of samples can be
- * skipped on from the start of the decoder's output to provide time aligned input
- * and output. From the perspective of a decoding application the real data begins this many
- * samples late.
- *
- * The decoder contribution to this delay is identical for all decoders, but the
- * encoder portion of the delay may vary from implementation to implementation,
- * version to version, or even depend on the encoder's initial configuration.
- * Applications needing delay compensation should call this CTL rather than
- * hard-coding a value.
- * @param[out] x <tt>opus_int32 *</tt>: Number of lookahead samples
- * @hideinitializer */
-#define OPUS_GET_LOOKAHEAD(x) OPUS_GET_LOOKAHEAD_REQUEST, __opus_check_int_ptr(x)
-
-/** Configures the encoder's use of inband forward error correction (FEC).
- * @note This is only applicable to the LPC layer
- * @see OPUS_GET_INBAND_FEC
- * @param[in] x <tt>opus_int32</tt>: Allowed values:
- * <dl>
- * <dt>0</dt><dd>Disable inband FEC (default).</dd>
- * <dt>1</dt><dd>Enable inband FEC.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_INBAND_FEC(x) OPUS_SET_INBAND_FEC_REQUEST, __opus_check_int(x)
-/** Gets encoder's configured use of inband forward error correction.
- * @see OPUS_SET_INBAND_FEC
- * @param[out] x <tt>opus_int32 *</tt>: Returns one of the following values:
- * <dl>
- * <dt>0</dt><dd>Inband FEC disabled (default).</dd>
- * <dt>1</dt><dd>Inband FEC enabled.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_INBAND_FEC(x) OPUS_GET_INBAND_FEC_REQUEST, __opus_check_int_ptr(x)
-
-/** Configures the encoder's expected packet loss percentage.
- * Higher values trigger progressively more loss resistant behavior in the encoder
- * at the expense of quality at a given bitrate in the absence of packet loss, but
- * greater quality under loss.
- * @see OPUS_GET_PACKET_LOSS_PERC
- * @param[in] x <tt>opus_int32</tt>: Loss percentage in the range 0-100, inclusive (default: 0).
- * @hideinitializer */
-#define OPUS_SET_PACKET_LOSS_PERC(x) OPUS_SET_PACKET_LOSS_PERC_REQUEST, __opus_check_int(x)
-/** Gets the encoder's configured packet loss percentage.
- * @see OPUS_SET_PACKET_LOSS_PERC
- * @param[out] x <tt>opus_int32 *</tt>: Returns the configured loss percentage
- * in the range 0-100, inclusive (default: 0).
- * @hideinitializer */
-#define OPUS_GET_PACKET_LOSS_PERC(x) OPUS_GET_PACKET_LOSS_PERC_REQUEST, __opus_check_int_ptr(x)
-
-/** Configures the encoder's use of discontinuous transmission (DTX).
- * @note This is only applicable to the LPC layer
- * @see OPUS_GET_DTX
- * @param[in] x <tt>opus_int32</tt>: Allowed values:
- * <dl>
- * <dt>0</dt><dd>Disable DTX (default).</dd>
- * <dt>1</dt><dd>Enabled DTX.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_DTX(x) OPUS_SET_DTX_REQUEST, __opus_check_int(x)
-/** Gets encoder's configured use of discontinuous transmission.
- * @see OPUS_SET_DTX
- * @param[out] x <tt>opus_int32 *</tt>: Returns one of the following values:
- * <dl>
- * <dt>0</dt><dd>DTX disabled (default).</dd>
- * <dt>1</dt><dd>DTX enabled.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_DTX(x) OPUS_GET_DTX_REQUEST, __opus_check_int_ptr(x)
-/** Configures the depth of signal being encoded.
- *
- * This is a hint which helps the encoder identify silence and near-silence.
- * It represents the number of significant bits of linear intensity below
- * which the signal contains ignorable quantization or other noise.
- *
- * For example, OPUS_SET_LSB_DEPTH(14) would be an appropriate setting
- * for G.711 u-law input. OPUS_SET_LSB_DEPTH(16) would be appropriate
- * for 16-bit linear pcm input with opus_encode_float().
- *
- * When using opus_encode() instead of opus_encode_float(), or when libopus
- * is compiled for fixed-point, the encoder uses the minimum of the value
- * set here and the value 16.
- *
- * @see OPUS_GET_LSB_DEPTH
- * @param[in] x <tt>opus_int32</tt>: Input precision in bits, between 8 and 24
- * (default: 24).
- * @hideinitializer */
-#define OPUS_SET_LSB_DEPTH(x) OPUS_SET_LSB_DEPTH_REQUEST, __opus_check_int(x)
-/** Gets the encoder's configured signal depth.
- * @see OPUS_SET_LSB_DEPTH
- * @param[out] x <tt>opus_int32 *</tt>: Input precision in bits, between 8 and
- * 24 (default: 24).
- * @hideinitializer */
-#define OPUS_GET_LSB_DEPTH(x) OPUS_GET_LSB_DEPTH_REQUEST, __opus_check_int_ptr(x)
-
-/** Configures the encoder's use of variable duration frames.
- * When variable duration is enabled, the encoder is free to use a shorter frame
- * size than the one requested in the opus_encode*() call.
- * It is then the user's responsibility
- * to verify how much audio was encoded by checking the ToC byte of the encoded
- * packet. The part of the audio that was not encoded needs to be resent to the
- * encoder for the next call. Do not use this option unless you <b>really</b>
- * know what you are doing.
- * @see OPUS_GET_EXPERT_FRAME_DURATION
- * @param[in] x <tt>opus_int32</tt>: Allowed values:
- * <dl>
- * <dt>OPUS_FRAMESIZE_ARG</dt><dd>Select frame size from the argument (default).</dd>
- * <dt>OPUS_FRAMESIZE_2_5_MS</dt><dd>Use 2.5 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_5_MS</dt><dd>Use 5 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_10_MS</dt><dd>Use 10 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_20_MS</dt><dd>Use 20 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_40_MS</dt><dd>Use 40 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_60_MS</dt><dd>Use 60 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_VARIABLE</dt><dd>Optimize the frame size dynamically.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_EXPERT_FRAME_DURATION(x) OPUS_SET_EXPERT_FRAME_DURATION_REQUEST, __opus_check_int(x)
-/** Gets the encoder's configured use of variable duration frames.
- * @see OPUS_SET_EXPERT_FRAME_DURATION
- * @param[out] x <tt>opus_int32 *</tt>: Returns one of the following values:
- * <dl>
- * <dt>OPUS_FRAMESIZE_ARG</dt><dd>Select frame size from the argument (default).</dd>
- * <dt>OPUS_FRAMESIZE_2_5_MS</dt><dd>Use 2.5 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_5_MS</dt><dd>Use 5 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_10_MS</dt><dd>Use 10 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_20_MS</dt><dd>Use 20 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_40_MS</dt><dd>Use 40 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_60_MS</dt><dd>Use 60 ms frames.</dd>
- * <dt>OPUS_FRAMESIZE_VARIABLE</dt><dd>Optimize the frame size dynamically.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_EXPERT_FRAME_DURATION(x) OPUS_GET_EXPERT_FRAME_DURATION_REQUEST, __opus_check_int_ptr(x)
-
-/** If set to 1, disables almost all use of prediction, making frames almost
- * completely independent. This reduces quality.
- * @see OPUS_GET_PREDICTION_DISABLED
- * @param[in] x <tt>opus_int32</tt>: Allowed values:
- * <dl>
- * <dt>0</dt><dd>Enable prediction (default).</dd>
- * <dt>1</dt><dd>Disable prediction.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_SET_PREDICTION_DISABLED(x) OPUS_SET_PREDICTION_DISABLED_REQUEST, __opus_check_int(x)
-/** Gets the encoder's configured prediction status.
- * @see OPUS_SET_PREDICTION_DISABLED
- * @param[out] x <tt>opus_int32 *</tt>: Returns one of the following values:
- * <dl>
- * <dt>0</dt><dd>Prediction enabled (default).</dd>
- * <dt>1</dt><dd>Prediction disabled.</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_PREDICTION_DISABLED(x) OPUS_GET_PREDICTION_DISABLED_REQUEST, __opus_check_int_ptr(x)
-
-/**@}*/
-
-/** @defgroup opus_genericctls Generic CTLs
- *
- * These macros are used with the \c opus_decoder_ctl and
- * \c opus_encoder_ctl calls to generate a particular
- * request.
- *
- * When called on an \c OpusDecoder they apply to that
- * particular decoder instance. When called on an
- * \c OpusEncoder they apply to the corresponding setting
- * on that encoder instance, if present.
- *
- * Some usage examples:
- *
- * @code
- * int ret;
- * opus_int32 pitch;
- * ret = opus_decoder_ctl(dec_ctx, OPUS_GET_PITCH(&pitch));
- * if (ret == OPUS_OK) return ret;
- *
- * opus_encoder_ctl(enc_ctx, OPUS_RESET_STATE);
- * opus_decoder_ctl(dec_ctx, OPUS_RESET_STATE);
- *
- * opus_int32 enc_bw, dec_bw;
- * opus_encoder_ctl(enc_ctx, OPUS_GET_BANDWIDTH(&enc_bw));
- * opus_decoder_ctl(dec_ctx, OPUS_GET_BANDWIDTH(&dec_bw));
- * if (enc_bw != dec_bw) {
- * printf("packet bandwidth mismatch!\n");
- * }
- * @endcode
- *
- * @see opus_encoder, opus_decoder_ctl, opus_encoder_ctl, opus_decoderctls, opus_encoderctls
- * @{
- */
-
-/** Resets the codec state to be equivalent to a freshly initialized state.
- * This should be called when switching streams in order to prevent
- * the back to back decoding from giving different results from
- * one at a time decoding.
- * @hideinitializer */
-#define OPUS_RESET_STATE 4028
-
-/** Gets the final state of the codec's entropy coder.
- * This is used for testing purposes,
- * The encoder and decoder state should be identical after coding a payload
- * (assuming no data corruption or software bugs)
- *
- * @param[out] x <tt>opus_uint32 *</tt>: Entropy coder state
- *
- * @hideinitializer */
-#define OPUS_GET_FINAL_RANGE(x) OPUS_GET_FINAL_RANGE_REQUEST, __opus_check_uint_ptr(x)
-
-/** Gets the encoder's configured bandpass or the decoder's last bandpass.
- * @see OPUS_SET_BANDWIDTH
- * @param[out] x <tt>opus_int32 *</tt>: Returns one of the following values:
- * <dl>
- * <dt>#OPUS_AUTO</dt> <dd>(default)</dd>
- * <dt>#OPUS_BANDWIDTH_NARROWBAND</dt> <dd>4 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_MEDIUMBAND</dt> <dd>6 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_WIDEBAND</dt> <dd>8 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_SUPERWIDEBAND</dt><dd>12 kHz passband</dd>
- * <dt>#OPUS_BANDWIDTH_FULLBAND</dt> <dd>20 kHz passband</dd>
- * </dl>
- * @hideinitializer */
-#define OPUS_GET_BANDWIDTH(x) OPUS_GET_BANDWIDTH_REQUEST, __opus_check_int_ptr(x)
-
-/** Gets the sampling rate the encoder or decoder was initialized with.
- * This simply returns the <code>Fs</code> value passed to opus_encoder_init()
- * or opus_decoder_init().
- * @param[out] x <tt>opus_int32 *</tt>: Sampling rate of encoder or decoder.
- * @hideinitializer
- */
-#define OPUS_GET_SAMPLE_RATE(x) OPUS_GET_SAMPLE_RATE_REQUEST, __opus_check_int_ptr(x)
-
-/**@}*/
-
-/** @defgroup opus_decoderctls Decoder related CTLs
- * @see opus_genericctls, opus_encoderctls, opus_decoder
- * @{
- */
-
-/** Configures decoder gain adjustment.
- * Scales the decoded output by a factor specified in Q8 dB units.
- * This has a maximum range of -32768 to 32767 inclusive, and returns
- * OPUS_BAD_ARG otherwise. The default is zero indicating no adjustment.
- * This setting survives decoder reset.
- *
- * gain = pow(10, x/(20.0*256))
- *
- * @param[in] x <tt>opus_int32</tt>: Amount to scale PCM signal by in Q8 dB units.
- * @hideinitializer */
-#define OPUS_SET_GAIN(x) OPUS_SET_GAIN_REQUEST, __opus_check_int(x)
-/** Gets the decoder's configured gain adjustment. @see OPUS_SET_GAIN
- *
- * @param[out] x <tt>opus_int32 *</tt>: Amount to scale PCM signal by in Q8 dB units.
- * @hideinitializer */
-#define OPUS_GET_GAIN(x) OPUS_GET_GAIN_REQUEST, __opus_check_int_ptr(x)
-
-/** Gets the duration (in samples) of the last packet successfully decoded or concealed.
- * @param[out] x <tt>opus_int32 *</tt>: Number of samples (at current sampling rate).
- * @hideinitializer */
-#define OPUS_GET_LAST_PACKET_DURATION(x) OPUS_GET_LAST_PACKET_DURATION_REQUEST, __opus_check_int_ptr(x)
-
-/** Gets the pitch of the last decoded frame, if available.
- * This can be used for any post-processing algorithm requiring the use of pitch,
- * e.g. time stretching/shortening. If the last frame was not voiced, or if the
- * pitch was not coded in the frame, then zero is returned.
- *
- * This CTL is only implemented for decoder instances.
- *
- * @param[out] x <tt>opus_int32 *</tt>: pitch period at 48 kHz (or 0 if not available)
- *
- * @hideinitializer */
-#define OPUS_GET_PITCH(x) OPUS_GET_PITCH_REQUEST, __opus_check_int_ptr(x)
-
-/**@}*/
-
-/** @defgroup opus_libinfo Opus library information functions
- * @{
- */
-
-/** Converts an opus error code into a human readable string.
- *
- * @param[in] error <tt>int</tt>: Error number
- * @returns Error string
- */
-OPUS_EXPORT const char *opus_strerror(int error);
-
-/** Gets the libopus version string.
- *
- * Applications may look for the substring "-fixed" in the version string to
- * determine whether they have a fixed-point or floating-point build at
- * runtime.
- *
- * @returns Version string
- */
-OPUS_EXPORT const char *opus_get_version_string(void);
-/**@}*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OPUS_DEFINES_H */
diff --git a/drivers/opus/opus_encoder.c b/drivers/opus/opus_encoder.c
deleted file mode 100644
index 5c6af5a199..0000000000
--- a/drivers/opus/opus_encoder.c
+++ /dev/null
@@ -1,2524 +0,0 @@
-/* Copyright (c) 2010-2011 Xiph.Org Foundation, Skype Limited
- Written by Jean-Marc Valin and Koen Vos */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <stdarg.h>
-#include "opus/celt/celt.h"
-#include "opus/celt/entenc.h"
-#include "opus/celt/modes.h"
-#include "opus/silk/API.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/float_cast.h"
-#include "opus/opus.h"
-#include "opus/celt/arch.h"
-#include "opus/celt/pitch.h"
-#include "opus/opus_private.h"
-#include "opus/celt/os_support.h"
-#include "opus/celt/cpu_support.h"
-#include "opus/analysis.h"
-#include "opus/celt/mathops.h"
-#include "opus/silk/tuning_parameters.h"
-#ifdef OPUS_FIXED_POINT
-#include "opus/silk/fixed/structs_FIX.h"
-#else
-#include "opus/silk/float/structs_FLP.h"
-#endif
-
-#define MAX_ENCODER_BUFFER 480
-
-typedef struct {
- opus_val32 XX, XY, YY;
- opus_val16 smoothed_width;
- opus_val16 max_follower;
-} StereoWidthState;
-
-struct OpusEncoder {
- int celt_enc_offset;
- int silk_enc_offset;
- silk_EncControlStruct silk_mode;
- int application;
- int channels;
- int delay_compensation;
- int force_channels;
- int signal_type;
- int user_bandwidth;
- int max_bandwidth;
- int user_forced_mode;
- int voice_ratio;
- opus_int32 Fs;
- int use_vbr;
- int vbr_constraint;
- int variable_duration;
- opus_int32 bitrate_bps;
- opus_int32 user_bitrate_bps;
- int lsb_depth;
- int encoder_buffer;
- int lfe;
- int arch;
-#ifndef DISABLE_FLOAT_API
- TonalityAnalysisState analysis;
-#endif
-
-#define OPUS_ENCODER_RESET_START stream_channels
- int stream_channels;
- opus_int16 hybrid_stereo_width_Q14;
- opus_int32 variable_HP_smth2_Q15;
- opus_val16 prev_HB_gain;
- opus_val32 hp_mem[4];
- int mode;
- int prev_mode;
- int prev_channels;
- int prev_framesize;
- int bandwidth;
- int silk_bw_switch;
- /* Sampling rate (at the API level) */
- int first;
- opus_val16 * energy_masking;
- StereoWidthState width_mem;
- opus_val16 delay_buffer[MAX_ENCODER_BUFFER*2];
-#ifndef DISABLE_FLOAT_API
- int detected_bandwidth;
-#endif
- opus_uint32 rangeFinal;
-};
-
-/* Transition tables for the voice and music. First column is the
- middle (memoriless) threshold. The second column is the hysteresis
- (difference with the middle) */
-static const opus_int32 mono_voice_bandwidth_thresholds[8] = {
- 11000, 1000, /* NB<->MB */
- 14000, 1000, /* MB<->WB */
- 17000, 1000, /* WB<->SWB */
- 21000, 2000, /* SWB<->FB */
-};
-static const opus_int32 mono_music_bandwidth_thresholds[8] = {
- 12000, 1000, /* NB<->MB */
- 15000, 1000, /* MB<->WB */
- 18000, 2000, /* WB<->SWB */
- 22000, 2000, /* SWB<->FB */
-};
-static const opus_int32 stereo_voice_bandwidth_thresholds[8] = {
- 11000, 1000, /* NB<->MB */
- 14000, 1000, /* MB<->WB */
- 21000, 2000, /* WB<->SWB */
- 28000, 2000, /* SWB<->FB */
-};
-static const opus_int32 stereo_music_bandwidth_thresholds[8] = {
- 12000, 1000, /* NB<->MB */
- 18000, 2000, /* MB<->WB */
- 21000, 2000, /* WB<->SWB */
- 30000, 2000, /* SWB<->FB */
-};
-/* Threshold bit-rates for switching between mono and stereo */
-static const opus_int32 stereo_voice_threshold = 30000;
-static const opus_int32 stereo_music_threshold = 30000;
-
-/* Threshold bit-rate for switching between SILK/hybrid and CELT-only */
-static const opus_int32 mode_thresholds[2][2] = {
- /* voice */ /* music */
- { 64000, 16000}, /* mono */
- { 36000, 16000}, /* stereo */
-};
-
-int opus_encoder_get_size(int channels)
-{
- int silkEncSizeBytes, celtEncSizeBytes;
- int ret;
- if (channels<1 || channels > 2)
- return 0;
- ret = silk_Get_Encoder_Size( &silkEncSizeBytes );
- if (ret)
- return 0;
- silkEncSizeBytes = align(silkEncSizeBytes);
- celtEncSizeBytes = celt_encoder_get_size(channels);
- return align(sizeof(OpusEncoder))+silkEncSizeBytes+celtEncSizeBytes;
-}
-
-int opus_encoder_init(OpusEncoder* st, opus_int32 Fs, int channels, int application)
-{
- void *silk_enc;
- CELTEncoder *celt_enc;
- int err;
- int ret, silkEncSizeBytes;
-
- if((Fs!=48000&&Fs!=24000&&Fs!=16000&&Fs!=12000&&Fs!=8000)||(channels!=1&&channels!=2)||
- (application != OPUS_APPLICATION_VOIP && application != OPUS_APPLICATION_AUDIO
- && application != OPUS_APPLICATION_RESTRICTED_LOWDELAY))
- return OPUS_BAD_ARG;
-
- OPUS_CLEAR((char*)st, opus_encoder_get_size(channels));
- /* Create SILK encoder */
- ret = silk_Get_Encoder_Size( &silkEncSizeBytes );
- if (ret)
- return OPUS_BAD_ARG;
- silkEncSizeBytes = align(silkEncSizeBytes);
- st->silk_enc_offset = align(sizeof(OpusEncoder));
- st->celt_enc_offset = st->silk_enc_offset+silkEncSizeBytes;
- silk_enc = (char*)st+st->silk_enc_offset;
- celt_enc = (CELTEncoder*)((char*)st+st->celt_enc_offset);
-
- st->stream_channels = st->channels = channels;
-
- st->Fs = Fs;
-
- st->arch = opus_select_arch();
-
- ret = silk_InitEncoder( silk_enc, st->arch, &st->silk_mode );
- if(ret)return OPUS_INTERNAL_ERROR;
-
- /* default SILK parameters */
- st->silk_mode.nChannelsAPI = channels;
- st->silk_mode.nChannelsInternal = channels;
- st->silk_mode.API_sampleRate = st->Fs;
- st->silk_mode.maxInternalSampleRate = 16000;
- st->silk_mode.minInternalSampleRate = 8000;
- st->silk_mode.desiredInternalSampleRate = 16000;
- st->silk_mode.payloadSize_ms = 20;
- st->silk_mode.bitRate = 25000;
- st->silk_mode.packetLossPercentage = 0;
- st->silk_mode.complexity = 9;
- st->silk_mode.useInBandFEC = 0;
- st->silk_mode.useDTX = 0;
- st->silk_mode.useCBR = 0;
- st->silk_mode.reducedDependency = 0;
-
- /* Create CELT encoder */
- /* Initialize CELT encoder */
- err = celt_encoder_init(celt_enc, Fs, channels, st->arch);
- if(err!=OPUS_OK)return OPUS_INTERNAL_ERROR;
-
- celt_encoder_ctl(celt_enc, CELT_SET_SIGNALLING(0));
- celt_encoder_ctl(celt_enc, OPUS_SET_COMPLEXITY(st->silk_mode.complexity));
-
- st->use_vbr = 1;
- /* Makes constrained VBR the default (safer for real-time use) */
- st->vbr_constraint = 1;
- st->user_bitrate_bps = OPUS_AUTO;
- st->bitrate_bps = 3000+Fs*channels;
- st->application = application;
- st->signal_type = OPUS_AUTO;
- st->user_bandwidth = OPUS_AUTO;
- st->max_bandwidth = OPUS_BANDWIDTH_FULLBAND;
- st->force_channels = OPUS_AUTO;
- st->user_forced_mode = OPUS_AUTO;
- st->voice_ratio = -1;
- st->encoder_buffer = st->Fs/100;
- st->lsb_depth = 24;
- st->variable_duration = OPUS_FRAMESIZE_ARG;
-
- /* Delay compensation of 4 ms (2.5 ms for SILK's extra look-ahead
- + 1.5 ms for SILK resamplers and stereo prediction) */
- st->delay_compensation = st->Fs/250;
-
- st->hybrid_stereo_width_Q14 = 1 << 14;
- st->prev_HB_gain = Q15ONE;
- st->variable_HP_smth2_Q15 = silk_LSHIFT( silk_lin2log( VARIABLE_HP_MIN_CUTOFF_HZ ), 8 );
- st->first = 1;
- st->mode = MODE_HYBRID;
- st->bandwidth = OPUS_BANDWIDTH_FULLBAND;
-
-#ifndef DISABLE_FLOAT_API
- tonality_analysis_init(&st->analysis);
-#endif
-
- return OPUS_OK;
-}
-
-static unsigned char gen_toc(int mode, int framerate, int bandwidth, int channels)
-{
- int period;
- unsigned char toc;
- period = 0;
- while (framerate < 400)
- {
- framerate <<= 1;
- period++;
- }
- if (mode == MODE_SILK_ONLY)
- {
- toc = (bandwidth-OPUS_BANDWIDTH_NARROWBAND)<<5;
- toc |= (period-2)<<3;
- } else if (mode == MODE_CELT_ONLY)
- {
- int tmp = bandwidth-OPUS_BANDWIDTH_MEDIUMBAND;
- if (tmp < 0)
- tmp = 0;
- toc = 0x80;
- toc |= tmp << 5;
- toc |= period<<3;
- } else /* Hybrid */
- {
- toc = 0x60;
- toc |= (bandwidth-OPUS_BANDWIDTH_SUPERWIDEBAND)<<4;
- toc |= (period-2)<<3;
- }
- toc |= (channels==2)<<2;
- return toc;
-}
-
-#ifndef OPUS_FIXED_POINT
-static void silk_biquad_float(
- const opus_val16 *in, /* I: Input signal */
- const opus_int32 *B_Q28, /* I: MA coefficients [3] */
- const opus_int32 *A_Q28, /* I: AR coefficients [2] */
- opus_val32 *S, /* I/O: State vector [2] */
- opus_val16 *out, /* O: Output signal */
- const opus_int32 len, /* I: Signal length (must be even) */
- int stride
-)
-{
- /* DIRECT FORM II TRANSPOSED (uses 2 element state vector) */
- opus_int k;
- opus_val32 vout;
- opus_val32 inval;
- opus_val32 A[2], B[3];
-
- A[0] = (opus_val32)(A_Q28[0] * (1.f/((opus_int32)1<<28)));
- A[1] = (opus_val32)(A_Q28[1] * (1.f/((opus_int32)1<<28)));
- B[0] = (opus_val32)(B_Q28[0] * (1.f/((opus_int32)1<<28)));
- B[1] = (opus_val32)(B_Q28[1] * (1.f/((opus_int32)1<<28)));
- B[2] = (opus_val32)(B_Q28[2] * (1.f/((opus_int32)1<<28)));
-
- /* Negate A_Q28 values and split in two parts */
-
- for( k = 0; k < len; k++ ) {
- /* S[ 0 ], S[ 1 ]: Q12 */
- inval = in[ k*stride ];
- vout = S[ 0 ] + B[0]*inval;
-
- S[ 0 ] = S[1] - vout*A[0] + B[1]*inval;
-
- S[ 1 ] = - vout*A[1] + B[2]*inval + VERY_SMALL;
-
- /* Scale back to Q0 and saturate */
- out[ k*stride ] = vout;
- }
-}
-#endif
-
-static void hp_cutoff(const opus_val16 *in, opus_int32 cutoff_Hz, opus_val16 *out, opus_val32 *hp_mem, int len, int channels, opus_int32 Fs)
-{
- opus_int32 B_Q28[ 3 ], A_Q28[ 2 ];
- opus_int32 Fc_Q19, r_Q28, r_Q22;
-
- silk_assert( cutoff_Hz <= silk_int32_MAX / SILK_FIX_CONST( 1.5 * 3.14159 / 1000, 19 ) );
- Fc_Q19 = silk_DIV32_16( silk_SMULBB( SILK_FIX_CONST( 1.5 * 3.14159 / 1000, 19 ), cutoff_Hz ), Fs/1000 );
- silk_assert( Fc_Q19 > 0 && Fc_Q19 < 32768 );
-
- r_Q28 = SILK_FIX_CONST( 1.0, 28 ) - silk_MUL( SILK_FIX_CONST( 0.92, 9 ), Fc_Q19 );
-
- /* b = r * [ 1; -2; 1 ]; */
- /* a = [ 1; -2 * r * ( 1 - 0.5 * Fc^2 ); r^2 ]; */
- B_Q28[ 0 ] = r_Q28;
- B_Q28[ 1 ] = silk_LSHIFT( -r_Q28, 1 );
- B_Q28[ 2 ] = r_Q28;
-
- /* -r * ( 2 - Fc * Fc ); */
- r_Q22 = silk_RSHIFT( r_Q28, 6 );
- A_Q28[ 0 ] = silk_SMULWW( r_Q22, silk_SMULWW( Fc_Q19, Fc_Q19 ) - SILK_FIX_CONST( 2.0, 22 ) );
- A_Q28[ 1 ] = silk_SMULWW( r_Q22, r_Q22 );
-
-#ifdef OPUS_FIXED_POINT
- silk_biquad_alt( in, B_Q28, A_Q28, hp_mem, out, len, channels );
- if( channels == 2 ) {
- silk_biquad_alt( in+1, B_Q28, A_Q28, hp_mem+2, out+1, len, channels );
- }
-#else
- silk_biquad_float( in, B_Q28, A_Q28, hp_mem, out, len, channels );
- if( channels == 2 ) {
- silk_biquad_float( in+1, B_Q28, A_Q28, hp_mem+2, out+1, len, channels );
- }
-#endif
-}
-
-#ifdef OPUS_FIXED_POINT
-static void dc_reject(const opus_val16 *in, opus_int32 cutoff_Hz, opus_val16 *out, opus_val32 *hp_mem, int len, int channels, opus_int32 Fs)
-{
- int c, i;
- int shift;
-
- /* Approximates -round(log2(4.*cutoff_Hz/Fs)) */
- shift=celt_ilog2(Fs/(cutoff_Hz*3));
- for (c=0;c<channels;c++)
- {
- for (i=0;i<len;i++)
- {
- opus_val32 x, tmp, y;
- x = SHL32(EXTEND32(in[channels*i+c]), 15);
- /* First stage */
- tmp = x-hp_mem[2*c];
- hp_mem[2*c] = hp_mem[2*c] + PSHR32(x - hp_mem[2*c], shift);
- /* Second stage */
- y = tmp - hp_mem[2*c+1];
- hp_mem[2*c+1] = hp_mem[2*c+1] + PSHR32(tmp - hp_mem[2*c+1], shift);
- out[channels*i+c] = EXTRACT16(SATURATE(PSHR32(y, 15), 32767));
- }
- }
-}
-
-#else
-static void dc_reject(const opus_val16 *in, opus_int32 cutoff_Hz, opus_val16 *out, opus_val32 *hp_mem, int len, int channels, opus_int32 Fs)
-{
- int c, i;
- float coef;
-
- coef = 4.0f*cutoff_Hz/Fs;
- for (c=0;c<channels;c++)
- {
- for (i=0;i<len;i++)
- {
- opus_val32 x, tmp, y;
- x = in[channels*i+c];
- /* First stage */
- tmp = x-hp_mem[2*c];
- hp_mem[2*c] = hp_mem[2*c] + coef*(x - hp_mem[2*c]) + VERY_SMALL;
- /* Second stage */
- y = tmp - hp_mem[2*c+1];
- hp_mem[2*c+1] = hp_mem[2*c+1] + coef*(tmp - hp_mem[2*c+1]) + VERY_SMALL;
- out[channels*i+c] = y;
- }
- }
-}
-#endif
-
-static void stereo_fade(const opus_val16 *in, opus_val16 *out, opus_val16 g1, opus_val16 g2,
- int overlap48, int frame_size, int channels, const opus_val16 *window, opus_int32 Fs)
-{
- int i;
- int overlap;
- int inc;
- inc = 48000/Fs;
- overlap=overlap48/inc;
- g1 = Q15ONE-g1;
- g2 = Q15ONE-g2;
- for (i=0;i<overlap;i++)
- {
- opus_val32 diff;
- opus_val16 g, w;
- w = MULT16_16_Q15(window[i*inc], window[i*inc]);
- g = SHR32(MAC16_16(MULT16_16(w,g2),
- Q15ONE-w, g1), 15);
- diff = EXTRACT16(HALF32((opus_val32)in[i*channels] - (opus_val32)in[i*channels+1]));
- diff = MULT16_16_Q15(g, diff);
- out[i*channels] = out[i*channels] - diff;
- out[i*channels+1] = out[i*channels+1] + diff;
- }
- for (;i<frame_size;i++)
- {
- opus_val32 diff;
- diff = EXTRACT16(HALF32((opus_val32)in[i*channels] - (opus_val32)in[i*channels+1]));
- diff = MULT16_16_Q15(g2, diff);
- out[i*channels] = out[i*channels] - diff;
- out[i*channels+1] = out[i*channels+1] + diff;
- }
-}
-
-static void gain_fade(const opus_val16 *in, opus_val16 *out, opus_val16 g1, opus_val16 g2,
- int overlap48, int frame_size, int channels, const opus_val16 *window, opus_int32 Fs)
-{
- int i;
- int inc;
- int overlap;
- int c;
- inc = 48000/Fs;
- overlap=overlap48/inc;
- if (channels==1)
- {
- for (i=0;i<overlap;i++)
- {
- opus_val16 g, w;
- w = MULT16_16_Q15(window[i*inc], window[i*inc]);
- g = SHR32(MAC16_16(MULT16_16(w,g2),
- Q15ONE-w, g1), 15);
- out[i] = MULT16_16_Q15(g, in[i]);
- }
- } else {
- for (i=0;i<overlap;i++)
- {
- opus_val16 g, w;
- w = MULT16_16_Q15(window[i*inc], window[i*inc]);
- g = SHR32(MAC16_16(MULT16_16(w,g2),
- Q15ONE-w, g1), 15);
- out[i*2] = MULT16_16_Q15(g, in[i*2]);
- out[i*2+1] = MULT16_16_Q15(g, in[i*2+1]);
- }
- }
- c=0;do {
- for (i=overlap;i<frame_size;i++)
- {
- out[i*channels+c] = MULT16_16_Q15(g2, in[i*channels+c]);
- }
- }
- while (++c<channels);
-}
-
-OpusEncoder *opus_encoder_create(opus_int32 Fs, int channels, int application, int *error)
-{
- int ret;
- OpusEncoder *st;
- if((Fs!=48000&&Fs!=24000&&Fs!=16000&&Fs!=12000&&Fs!=8000)||(channels!=1&&channels!=2)||
- (application != OPUS_APPLICATION_VOIP && application != OPUS_APPLICATION_AUDIO
- && application != OPUS_APPLICATION_RESTRICTED_LOWDELAY))
- {
- if (error)
- *error = OPUS_BAD_ARG;
- return NULL;
- }
- st = (OpusEncoder *)opus_alloc(opus_encoder_get_size(channels));
- if (st == NULL)
- {
- if (error)
- *error = OPUS_ALLOC_FAIL;
- return NULL;
- }
- ret = opus_encoder_init(st, Fs, channels, application);
- if (error)
- *error = ret;
- if (ret != OPUS_OK)
- {
- opus_free(st);
- st = NULL;
- }
- return st;
-}
-
-static opus_int32 user_bitrate_to_bitrate(OpusEncoder *st, int frame_size, int max_data_bytes)
-{
- if(!frame_size)frame_size=st->Fs/400;
- if (st->user_bitrate_bps==OPUS_AUTO)
- return 60*st->Fs/frame_size + st->Fs*st->channels;
- else if (st->user_bitrate_bps==OPUS_BITRATE_MAX)
- return max_data_bytes*8*st->Fs/frame_size;
- else
- return st->user_bitrate_bps;
-}
-
-#ifndef DISABLE_FLOAT_API
-/* Don't use more than 60 ms for the frame size analysis */
-#define MAX_DYNAMIC_FRAMESIZE 24
-/* Estimates how much the bitrate will be boosted based on the sub-frame energy */
-static float transient_boost(const float *E, const float *E_1, int LM, int maxM)
-{
- int i;
- int M;
- float sumE=0, sumE_1=0;
- float metric;
-
- M = IMIN(maxM, (1<<LM)+1);
- for (i=0;i<M;i++)
- {
- sumE += E[i];
- sumE_1 += E_1[i];
- }
- metric = sumE*sumE_1/(M*M);
- /*if (LM==3)
- printf("%f\n", metric);*/
- /*return metric>10 ? 1 : 0;*/
- /*return MAX16(0,1-exp(-.25*(metric-2.)));*/
- return MIN16(1,(float)sqrt(MAX16(0,.05f*(metric-2))));
-}
-
-/* Viterbi decoding trying to find the best frame size combination using look-ahead
-
- State numbering:
- 0: unused
- 1: 2.5 ms
- 2: 5 ms (#1)
- 3: 5 ms (#2)
- 4: 10 ms (#1)
- 5: 10 ms (#2)
- 6: 10 ms (#3)
- 7: 10 ms (#4)
- 8: 20 ms (#1)
- 9: 20 ms (#2)
- 10: 20 ms (#3)
- 11: 20 ms (#4)
- 12: 20 ms (#5)
- 13: 20 ms (#6)
- 14: 20 ms (#7)
- 15: 20 ms (#8)
-*/
-static int transient_viterbi(const float *E, const float *E_1, int N, int frame_cost, int rate)
-{
- int i;
- float cost[MAX_DYNAMIC_FRAMESIZE][16];
- int states[MAX_DYNAMIC_FRAMESIZE][16];
- float best_cost;
- int best_state;
- float factor;
- /* Take into account that we damp VBR in the 32 kb/s to 64 kb/s range. */
- if (rate<80)
- factor=0;
- else if (rate>160)
- factor=1;
- else
- factor = (rate-80.f)/80.f;
- /* Makes variable framesize less aggressive at lower bitrates, but I can't
- find any valid theoretical justification for this (other than it seems
- to help) */
- for (i=0;i<16;i++)
- {
- /* Impossible state */
- states[0][i] = -1;
- cost[0][i] = 1e10;
- }
- for (i=0;i<4;i++)
- {
- cost[0][1<<i] = (frame_cost + rate*(1<<i))*(1+factor*transient_boost(E, E_1, i, N+1));
- states[0][1<<i] = i;
- }
- for (i=1;i<N;i++)
- {
- int j;
-
- /* Follow continuations */
- for (j=2;j<16;j++)
- {
- cost[i][j] = cost[i-1][j-1];
- states[i][j] = j-1;
- }
-
- /* New frames */
- for(j=0;j<4;j++)
- {
- int k;
- float min_cost;
- float curr_cost;
- states[i][1<<j] = 1;
- min_cost = cost[i-1][1];
- for(k=1;k<4;k++)
- {
- float tmp = cost[i-1][(1<<(k+1))-1];
- if (tmp < min_cost)
- {
- states[i][1<<j] = (1<<(k+1))-1;
- min_cost = tmp;
- }
- }
- curr_cost = (frame_cost + rate*(1<<j))*(1+factor*transient_boost(E+i, E_1+i, j, N-i+1));
- cost[i][1<<j] = min_cost;
- /* If part of the frame is outside the analysis window, only count part of the cost */
- if (N-i < (1<<j))
- cost[i][1<<j] += curr_cost*(float)(N-i)/(1<<j);
- else
- cost[i][1<<j] += curr_cost;
- }
- }
-
- best_state=1;
- best_cost = cost[N-1][1];
- /* Find best end state (doesn't force a frame to end at N-1) */
- for (i=2;i<16;i++)
- {
- if (cost[N-1][i]<best_cost)
- {
- best_cost = cost[N-1][i];
- best_state = i;
- }
- }
-
- /* Follow transitions back */
- for (i=N-1;i>=0;i--)
- {
- /*printf("%d ", best_state);*/
- best_state = states[i][best_state];
- }
- /*printf("%d\n", best_state);*/
- return best_state;
-}
-
-static int optimize_framesize(const void *x, int len, int C, opus_int32 Fs,
- int bitrate, opus_val16 tonality, float *mem, int buffering,
- downmix_func downmix)
-{
- int N;
- int i;
- float e[MAX_DYNAMIC_FRAMESIZE+4];
- float e_1[MAX_DYNAMIC_FRAMESIZE+3];
- opus_val32 memx;
- int bestLM=0;
- int subframe;
- int pos;
- int offset;
- VARDECL(opus_val32, sub);
-
- subframe = Fs/400;
- ALLOC(sub, subframe, opus_val32);
- e[0]=mem[0];
- e_1[0]=1.f/(EPSILON+mem[0]);
- if (buffering)
- {
- /* Consider the CELT delay when not in restricted-lowdelay */
- /* We assume the buffering is between 2.5 and 5 ms */
- offset = 2*subframe - buffering;
- celt_assert(offset>=0 && offset <= subframe);
- len -= offset;
- e[1]=mem[1];
- e_1[1]=1.f/(EPSILON+mem[1]);
- e[2]=mem[2];
- e_1[2]=1.f/(EPSILON+mem[2]);
- pos = 3;
- } else {
- pos=1;
- offset=0;
- }
- N=IMIN(len/subframe, MAX_DYNAMIC_FRAMESIZE);
- /* Just silencing a warning, it's really initialized later */
- memx = 0;
- for (i=0;i<N;i++)
- {
- float tmp;
- opus_val32 tmpx;
- int j;
- tmp=EPSILON;
-
- downmix(x, sub, subframe, i*subframe+offset, 0, -2, C);
- if (i==0)
- memx = sub[0];
- for (j=0;j<subframe;j++)
- {
- tmpx = sub[j];
- tmp += (tmpx-memx)*(float)(tmpx-memx);
- memx = tmpx;
- }
- e[i+pos] = tmp;
- e_1[i+pos] = 1.f/tmp;
- }
- /* Hack to get 20 ms working with APPLICATION_AUDIO
- The real problem is that the corresponding memory needs to use 1.5 ms
- from this frame and 1 ms from the next frame */
- e[i+pos] = e[i+pos-1];
- if (buffering)
- N=IMIN(MAX_DYNAMIC_FRAMESIZE, N+2);
- bestLM = transient_viterbi(e, e_1, N, (int)((1.f+.5f*tonality)*(60*C+40)), bitrate/400);
- mem[0] = e[1<<bestLM];
- if (buffering)
- {
- mem[1] = e[(1<<bestLM)+1];
- mem[2] = e[(1<<bestLM)+2];
- }
- return bestLM;
-}
-
-#endif
-
-#ifndef DISABLE_FLOAT_API
-#ifdef OPUS_FIXED_POINT
-#define PCM2VAL(x) FLOAT2INT16(x)
-#else
-#define PCM2VAL(x) SCALEIN(x)
-#endif
-void downmix_float(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C)
-{
- const float *x;
- opus_val32 scale;
- int j;
- x = (const float *)_x;
- for (j=0;j<subframe;j++)
- sub[j] = PCM2VAL(x[(j+offset)*C+c1]);
- if (c2>-1)
- {
- for (j=0;j<subframe;j++)
- sub[j] += PCM2VAL(x[(j+offset)*C+c2]);
- } else if (c2==-2)
- {
- int c;
- for (c=1;c<C;c++)
- {
- for (j=0;j<subframe;j++)
- sub[j] += PCM2VAL(x[(j+offset)*C+c]);
- }
- }
-#ifdef OPUS_FIXED_POINT
- scale = (1<<SIG_SHIFT);
-#else
- scale = 1.f;
-#endif
- if (C==-2)
- scale /= C;
- else
- scale /= 2;
- for (j=0;j<subframe;j++)
- sub[j] *= scale;
-}
-#endif
-
-void downmix_int(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C)
-{
- const opus_int16 *x;
- opus_val32 scale;
- int j;
- x = (const opus_int16 *)_x;
- for (j=0;j<subframe;j++)
- sub[j] = x[(j+offset)*C+c1];
- if (c2>-1)
- {
- for (j=0;j<subframe;j++)
- sub[j] += x[(j+offset)*C+c2];
- } else if (c2==-2)
- {
- int c;
- for (c=1;c<C;c++)
- {
- for (j=0;j<subframe;j++)
- sub[j] += x[(j+offset)*C+c];
- }
- }
-#ifdef OPUS_FIXED_POINT
- scale = (1<<SIG_SHIFT);
-#else
- scale = 1.f/32768;
-#endif
- if (C==-2)
- scale /= C;
- else
- scale /= 2;
- for (j=0;j<subframe;j++)
- sub[j] *= scale;
-}
-
-opus_int32 frame_size_select(opus_int32 frame_size, int variable_duration, opus_int32 Fs)
-{
- int new_size;
- if (frame_size<Fs/400)
- return -1;
- if (variable_duration == OPUS_FRAMESIZE_ARG)
- new_size = frame_size;
- else if (variable_duration == OPUS_FRAMESIZE_VARIABLE)
- new_size = Fs/50;
- else if (variable_duration >= OPUS_FRAMESIZE_2_5_MS && variable_duration <= OPUS_FRAMESIZE_60_MS)
- new_size = IMIN(3*Fs/50, (Fs/400)<<(variable_duration-OPUS_FRAMESIZE_2_5_MS));
- else
- return -1;
- if (new_size>frame_size)
- return -1;
- if (400*new_size!=Fs && 200*new_size!=Fs && 100*new_size!=Fs &&
- 50*new_size!=Fs && 25*new_size!=Fs && 50*new_size!=3*Fs)
- return -1;
- return new_size;
-}
-
-opus_int32 compute_frame_size(const void *analysis_pcm, int frame_size,
- int variable_duration, int C, opus_int32 Fs, int bitrate_bps,
- int delay_compensation, downmix_func downmix
-#ifndef DISABLE_FLOAT_API
- , float *subframe_mem
-#endif
- )
-{
-#ifndef DISABLE_FLOAT_API
- if (variable_duration == OPUS_FRAMESIZE_VARIABLE && frame_size >= Fs/200)
- {
- int LM = 3;
- LM = optimize_framesize(analysis_pcm, frame_size, C, Fs, bitrate_bps,
- 0, subframe_mem, delay_compensation, downmix);
- while ((Fs/400<<LM)>frame_size)
- LM--;
- frame_size = (Fs/400<<LM);
- } else
-#else
- (void)analysis_pcm;
- (void)C;
- (void)bitrate_bps;
- (void)delay_compensation;
- (void)downmix;
-#endif
- {
- frame_size = frame_size_select(frame_size, variable_duration, Fs);
- }
- if (frame_size<0)
- return -1;
- return frame_size;
-}
-
-opus_val16 compute_stereo_width(const opus_val16 *pcm, int frame_size, opus_int32 Fs, StereoWidthState *mem)
-{
- opus_val16 corr;
- opus_val16 ldiff;
- opus_val16 width;
- opus_val32 xx, xy, yy;
- opus_val16 sqrt_xx, sqrt_yy;
- opus_val16 qrrt_xx, qrrt_yy;
- int frame_rate;
- int i;
- opus_val16 short_alpha;
-
- frame_rate = Fs/frame_size;
- short_alpha = Q15ONE - 25*Q15ONE/IMAX(50,frame_rate);
- xx=xy=yy=0;
- for (i=0;i<frame_size;i+=4)
- {
- opus_val32 pxx=0;
- opus_val32 pxy=0;
- opus_val32 pyy=0;
- opus_val16 x, y;
- x = pcm[2*i];
- y = pcm[2*i+1];
- pxx = SHR32(MULT16_16(x,x),2);
- pxy = SHR32(MULT16_16(x,y),2);
- pyy = SHR32(MULT16_16(y,y),2);
- x = pcm[2*i+2];
- y = pcm[2*i+3];
- pxx += SHR32(MULT16_16(x,x),2);
- pxy += SHR32(MULT16_16(x,y),2);
- pyy += SHR32(MULT16_16(y,y),2);
- x = pcm[2*i+4];
- y = pcm[2*i+5];
- pxx += SHR32(MULT16_16(x,x),2);
- pxy += SHR32(MULT16_16(x,y),2);
- pyy += SHR32(MULT16_16(y,y),2);
- x = pcm[2*i+6];
- y = pcm[2*i+7];
- pxx += SHR32(MULT16_16(x,x),2);
- pxy += SHR32(MULT16_16(x,y),2);
- pyy += SHR32(MULT16_16(y,y),2);
-
- xx += SHR32(pxx, 10);
- xy += SHR32(pxy, 10);
- yy += SHR32(pyy, 10);
- }
- mem->XX += MULT16_32_Q15(short_alpha, xx-mem->XX);
- mem->XY += MULT16_32_Q15(short_alpha, xy-mem->XY);
- mem->YY += MULT16_32_Q15(short_alpha, yy-mem->YY);
- mem->XX = MAX32(0, mem->XX);
- mem->XY = MAX32(0, mem->XY);
- mem->YY = MAX32(0, mem->YY);
- if (MAX32(mem->XX, mem->YY)>QCONST16(8e-4f, 18))
- {
- sqrt_xx = celt_sqrt(mem->XX);
- sqrt_yy = celt_sqrt(mem->YY);
- qrrt_xx = celt_sqrt(sqrt_xx);
- qrrt_yy = celt_sqrt(sqrt_yy);
- /* Inter-channel correlation */
- mem->XY = MIN32(mem->XY, sqrt_xx*sqrt_yy);
- corr = SHR32(frac_div32(mem->XY,EPSILON+MULT16_16(sqrt_xx,sqrt_yy)),16);
- /* Approximate loudness difference */
- ldiff = Q15ONE*ABS16(qrrt_xx-qrrt_yy)/(EPSILON+qrrt_xx+qrrt_yy);
- width = MULT16_16_Q15(celt_sqrt(QCONST32(1.f,30)-MULT16_16(corr,corr)), ldiff);
- /* Smoothing over one second */
- mem->smoothed_width += (width-mem->smoothed_width)/frame_rate;
- /* Peak follower */
- mem->max_follower = MAX16(mem->max_follower-QCONST16(.02f,15)/frame_rate, mem->smoothed_width);
- } else {
- width = 0;
- corr=Q15ONE;
- ldiff=0;
- }
- /*printf("%f %f %f %f %f ", corr/(float)Q15ONE, ldiff/(float)Q15ONE, width/(float)Q15ONE, mem->smoothed_width/(float)Q15ONE, mem->max_follower/(float)Q15ONE);*/
- return EXTRACT16(MIN32(Q15ONE,20*mem->max_follower));
-}
-
-opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_size,
- unsigned char *data, opus_int32 out_data_bytes, int lsb_depth,
- const void *analysis_pcm, opus_int32 analysis_size, int c1, int c2,
- int analysis_channels, downmix_func downmix, int float_api)
-{
- void *silk_enc;
- CELTEncoder *celt_enc;
- int i;
- int ret=0;
- opus_int32 nBytes;
- ec_enc enc;
- int bytes_target;
- int prefill=0;
- int start_band = 0;
- int redundancy = 0;
- int redundancy_bytes = 0; /* Number of bytes to use for redundancy frame */
- int celt_to_silk = 0;
- VARDECL(opus_val16, pcm_buf);
- int nb_compr_bytes;
- int to_celt = 0;
- opus_uint32 redundant_rng = 0;
- int cutoff_Hz, hp_freq_smth1;
- int voice_est; /* Probability of voice in Q7 */
- opus_int32 equiv_rate;
- int delay_compensation;
- int frame_rate;
- opus_int32 max_rate; /* Max bitrate we're allowed to use */
- int curr_bandwidth;
- opus_val16 HB_gain;
- opus_int32 max_data_bytes; /* Max number of bytes we're allowed to use */
- int total_buffer;
- opus_val16 stereo_width;
- const CELTMode *celt_mode;
-#ifndef DISABLE_FLOAT_API
- AnalysisInfo analysis_info;
- int analysis_read_pos_bak=-1;
- int analysis_read_subframe_bak=-1;
-#endif
- VARDECL(opus_val16, tmp_prefill);
-
- ALLOC_STACK;
-
- max_data_bytes = IMIN(1276, out_data_bytes);
-
- st->rangeFinal = 0;
- if ((!st->variable_duration && 400*frame_size != st->Fs && 200*frame_size != st->Fs && 100*frame_size != st->Fs &&
- 50*frame_size != st->Fs && 25*frame_size != st->Fs && 50*frame_size != 3*st->Fs)
- || (400*frame_size < st->Fs)
- || max_data_bytes<=0
- )
- {
- RESTORE_STACK;
- return OPUS_BAD_ARG;
- }
- silk_enc = (char*)st+st->silk_enc_offset;
- celt_enc = (CELTEncoder*)((char*)st+st->celt_enc_offset);
- if (st->application == OPUS_APPLICATION_RESTRICTED_LOWDELAY)
- delay_compensation = 0;
- else
- delay_compensation = st->delay_compensation;
-
- lsb_depth = IMIN(lsb_depth, st->lsb_depth);
-
- celt_encoder_ctl(celt_enc, CELT_GET_MODE(&celt_mode));
-#ifndef DISABLE_FLOAT_API
- analysis_info.valid = 0;
-#ifdef OPUS_FIXED_POINT
- if (st->silk_mode.complexity >= 10 && st->Fs==48000)
-#else
- if (st->silk_mode.complexity >= 7 && st->Fs==48000)
-#endif
- {
- analysis_read_pos_bak = st->analysis.read_pos;
- analysis_read_subframe_bak = st->analysis.read_subframe;
- run_analysis(&st->analysis, celt_mode, analysis_pcm, analysis_size, frame_size,
- c1, c2, analysis_channels, st->Fs,
- lsb_depth, downmix, &analysis_info);
- }
-#else
- (void)analysis_pcm;
- (void)analysis_size;
-#endif
-
- st->voice_ratio = -1;
-
-#ifndef DISABLE_FLOAT_API
- st->detected_bandwidth = 0;
- if (analysis_info.valid)
- {
- int analysis_bandwidth;
- if (st->signal_type == OPUS_AUTO)
- st->voice_ratio = (int)floor(.5+100*(1-analysis_info.music_prob));
-
- analysis_bandwidth = analysis_info.bandwidth;
- if (analysis_bandwidth<=12)
- st->detected_bandwidth = OPUS_BANDWIDTH_NARROWBAND;
- else if (analysis_bandwidth<=14)
- st->detected_bandwidth = OPUS_BANDWIDTH_MEDIUMBAND;
- else if (analysis_bandwidth<=16)
- st->detected_bandwidth = OPUS_BANDWIDTH_WIDEBAND;
- else if (analysis_bandwidth<=18)
- st->detected_bandwidth = OPUS_BANDWIDTH_SUPERWIDEBAND;
- else
- st->detected_bandwidth = OPUS_BANDWIDTH_FULLBAND;
- }
-#endif
-
- if (st->channels==2 && st->force_channels!=1)
- stereo_width = compute_stereo_width(pcm, frame_size, st->Fs, &st->width_mem);
- else
- stereo_width = 0;
- total_buffer = delay_compensation;
- st->bitrate_bps = user_bitrate_to_bitrate(st, frame_size, max_data_bytes);
-
- frame_rate = st->Fs/frame_size;
- if (max_data_bytes<3 || st->bitrate_bps < 3*frame_rate*8
- || (frame_rate<50 && (max_data_bytes*frame_rate<300 || st->bitrate_bps < 2400)))
- {
- /*If the space is too low to do something useful, emit 'PLC' frames.*/
- int tocmode = st->mode;
- int bw = st->bandwidth == 0 ? OPUS_BANDWIDTH_NARROWBAND : st->bandwidth;
- if (tocmode==0)
- tocmode = MODE_SILK_ONLY;
- if (frame_rate>100)
- tocmode = MODE_CELT_ONLY;
- if (frame_rate < 50)
- tocmode = MODE_SILK_ONLY;
- if(tocmode==MODE_SILK_ONLY&&bw>OPUS_BANDWIDTH_WIDEBAND)
- bw=OPUS_BANDWIDTH_WIDEBAND;
- else if (tocmode==MODE_CELT_ONLY&&bw==OPUS_BANDWIDTH_MEDIUMBAND)
- bw=OPUS_BANDWIDTH_NARROWBAND;
- else if (bw<=OPUS_BANDWIDTH_SUPERWIDEBAND)
- bw=OPUS_BANDWIDTH_SUPERWIDEBAND;
- data[0] = gen_toc(tocmode, frame_rate, bw, st->stream_channels);
- RESTORE_STACK;
- return 1;
- }
- if (!st->use_vbr)
- {
- int cbrBytes;
- cbrBytes = IMIN( (st->bitrate_bps + 4*frame_rate)/(8*frame_rate) , max_data_bytes);
- st->bitrate_bps = cbrBytes * (8*frame_rate);
- max_data_bytes = cbrBytes;
- }
- max_rate = frame_rate*max_data_bytes*8;
-
- /* Equivalent 20-ms rate for mode/channel/bandwidth decisions */
- equiv_rate = st->bitrate_bps - (40*st->channels+20)*(st->Fs/frame_size - 50);
-
- if (st->signal_type == OPUS_SIGNAL_VOICE)
- voice_est = 127;
- else if (st->signal_type == OPUS_SIGNAL_MUSIC)
- voice_est = 0;
- else if (st->voice_ratio >= 0)
- {
- voice_est = st->voice_ratio*327>>8;
- /* For AUDIO, never be more than 90% confident of having speech */
- if (st->application == OPUS_APPLICATION_AUDIO)
- voice_est = IMIN(voice_est, 115);
- } else if (st->application == OPUS_APPLICATION_VOIP)
- voice_est = 115;
- else
- voice_est = 48;
-
- if (st->force_channels!=OPUS_AUTO && st->channels == 2)
- {
- st->stream_channels = st->force_channels;
- } else {
-#ifdef FUZZING
- /* Random mono/stereo decision */
- if (st->channels == 2 && (rand()&0x1F)==0)
- st->stream_channels = 3-st->stream_channels;
-#else
- /* Rate-dependent mono-stereo decision */
- if (st->channels == 2)
- {
- opus_int32 stereo_threshold;
- stereo_threshold = stereo_music_threshold + ((voice_est*voice_est*(stereo_voice_threshold-stereo_music_threshold))>>14);
- if (st->stream_channels == 2)
- stereo_threshold -= 1000;
- else
- stereo_threshold += 1000;
- st->stream_channels = (equiv_rate > stereo_threshold) ? 2 : 1;
- } else {
- st->stream_channels = st->channels;
- }
-#endif
- }
- equiv_rate = st->bitrate_bps - (40*st->stream_channels+20)*(st->Fs/frame_size - 50);
-
- /* Mode selection depending on application and signal type */
- if (st->application == OPUS_APPLICATION_RESTRICTED_LOWDELAY)
- {
- st->mode = MODE_CELT_ONLY;
- } else if (st->user_forced_mode == OPUS_AUTO)
- {
-#ifdef FUZZING
- /* Random mode switching */
- if ((rand()&0xF)==0)
- {
- if ((rand()&0x1)==0)
- st->mode = MODE_CELT_ONLY;
- else
- st->mode = MODE_SILK_ONLY;
- } else {
- if (st->prev_mode==MODE_CELT_ONLY)
- st->mode = MODE_CELT_ONLY;
- else
- st->mode = MODE_SILK_ONLY;
- }
-#else
- opus_int32 mode_voice, mode_music;
- opus_int32 threshold;
-
- /* Interpolate based on stereo width */
- mode_voice = (opus_int32)(MULT16_32_Q15(Q15ONE-stereo_width,mode_thresholds[0][0])
- + MULT16_32_Q15(stereo_width,mode_thresholds[1][0]));
- mode_music = (opus_int32)(MULT16_32_Q15(Q15ONE-stereo_width,mode_thresholds[1][1])
- + MULT16_32_Q15(stereo_width,mode_thresholds[1][1]));
- /* Interpolate based on speech/music probability */
- threshold = mode_music + ((voice_est*voice_est*(mode_voice-mode_music))>>14);
- /* Bias towards SILK for VoIP because of some useful features */
- if (st->application == OPUS_APPLICATION_VOIP)
- threshold += 8000;
-
- /*printf("%f %d\n", stereo_width/(float)Q15ONE, threshold);*/
- /* Hysteresis */
- if (st->prev_mode == MODE_CELT_ONLY)
- threshold -= 4000;
- else if (st->prev_mode>0)
- threshold += 4000;
-
- st->mode = (equiv_rate >= threshold) ? MODE_CELT_ONLY: MODE_SILK_ONLY;
-
- /* When FEC is enabled and there's enough packet loss, use SILK */
- if (st->silk_mode.useInBandFEC && st->silk_mode.packetLossPercentage > (128-voice_est)>>4)
- st->mode = MODE_SILK_ONLY;
- /* When encoding voice and DTX is enabled, set the encoder to SILK mode (at least for now) */
- if (st->silk_mode.useDTX && voice_est > 100)
- st->mode = MODE_SILK_ONLY;
-#endif
- } else {
- st->mode = st->user_forced_mode;
- }
-
- /* Override the chosen mode to make sure we meet the requested frame size */
- if (st->mode != MODE_CELT_ONLY && frame_size < st->Fs/100)
- st->mode = MODE_CELT_ONLY;
- if (st->lfe)
- st->mode = MODE_CELT_ONLY;
- /* If max_data_bytes represents less than 8 kb/s, switch to CELT-only mode */
- if (max_data_bytes < (frame_rate > 50 ? 12000 : 8000)*frame_size / (st->Fs * 8))
- st->mode = MODE_CELT_ONLY;
-
- if (st->stream_channels == 1 && st->prev_channels ==2 && st->silk_mode.toMono==0
- && st->mode != MODE_CELT_ONLY && st->prev_mode != MODE_CELT_ONLY)
- {
- /* Delay stereo->mono transition by two frames so that SILK can do a smooth downmix */
- st->silk_mode.toMono = 1;
- st->stream_channels = 2;
- } else {
- st->silk_mode.toMono = 0;
- }
-
- if (st->prev_mode > 0 &&
- ((st->mode != MODE_CELT_ONLY && st->prev_mode == MODE_CELT_ONLY) ||
- (st->mode == MODE_CELT_ONLY && st->prev_mode != MODE_CELT_ONLY)))
- {
- redundancy = 1;
- celt_to_silk = (st->mode != MODE_CELT_ONLY);
- if (!celt_to_silk)
- {
- /* Switch to SILK/hybrid if frame size is 10 ms or more*/
- if (frame_size >= st->Fs/100)
- {
- st->mode = st->prev_mode;
- to_celt = 1;
- } else {
- redundancy=0;
- }
- }
- }
- /* For the first frame at a new SILK bandwidth */
- if (st->silk_bw_switch)
- {
- redundancy = 1;
- celt_to_silk = 1;
- st->silk_bw_switch = 0;
- prefill=1;
- }
-
- if (redundancy)
- {
- /* Fair share of the max size allowed */
- redundancy_bytes = IMIN(257, max_data_bytes*(opus_int32)(st->Fs/200)/(frame_size+st->Fs/200));
- /* For VBR, target the actual bitrate (subject to the limit above) */
- if (st->use_vbr)
- redundancy_bytes = IMIN(redundancy_bytes, st->bitrate_bps/1600);
- }
-
- if (st->mode != MODE_CELT_ONLY && st->prev_mode == MODE_CELT_ONLY)
- {
- silk_EncControlStruct dummy;
- silk_InitEncoder( silk_enc, st->arch, &dummy);
- prefill=1;
- }
-
- /* Automatic (rate-dependent) bandwidth selection */
- if (st->mode == MODE_CELT_ONLY || st->first || st->silk_mode.allowBandwidthSwitch)
- {
- const opus_int32 *voice_bandwidth_thresholds, *music_bandwidth_thresholds;
- opus_int32 bandwidth_thresholds[8];
- int bandwidth = OPUS_BANDWIDTH_FULLBAND;
- opus_int32 equiv_rate2;
-
- equiv_rate2 = equiv_rate;
- if (st->mode != MODE_CELT_ONLY)
- {
- /* Adjust the threshold +/- 10% depending on complexity */
- equiv_rate2 = equiv_rate2 * (45+st->silk_mode.complexity)/50;
- /* CBR is less efficient by ~1 kb/s */
- if (!st->use_vbr)
- equiv_rate2 -= 1000;
- }
- if (st->channels==2 && st->force_channels!=1)
- {
- voice_bandwidth_thresholds = stereo_voice_bandwidth_thresholds;
- music_bandwidth_thresholds = stereo_music_bandwidth_thresholds;
- } else {
- voice_bandwidth_thresholds = mono_voice_bandwidth_thresholds;
- music_bandwidth_thresholds = mono_music_bandwidth_thresholds;
- }
- /* Interpolate bandwidth thresholds depending on voice estimation */
- for (i=0;i<8;i++)
- {
- bandwidth_thresholds[i] = music_bandwidth_thresholds[i]
- + ((voice_est*voice_est*(voice_bandwidth_thresholds[i]-music_bandwidth_thresholds[i]))>>14);
- }
- do {
- int threshold, hysteresis;
- threshold = bandwidth_thresholds[2*(bandwidth-OPUS_BANDWIDTH_MEDIUMBAND)];
- hysteresis = bandwidth_thresholds[2*(bandwidth-OPUS_BANDWIDTH_MEDIUMBAND)+1];
- if (!st->first)
- {
- if (st->bandwidth >= bandwidth)
- threshold -= hysteresis;
- else
- threshold += hysteresis;
- }
- if (equiv_rate2 >= threshold)
- break;
- } while (--bandwidth>OPUS_BANDWIDTH_NARROWBAND);
- st->bandwidth = bandwidth;
- /* Prevents any transition to SWB/FB until the SILK layer has fully
- switched to WB mode and turned the variable LP filter off */
- if (!st->first && st->mode != MODE_CELT_ONLY && !st->silk_mode.inWBmodeWithoutVariableLP && st->bandwidth > OPUS_BANDWIDTH_WIDEBAND)
- st->bandwidth = OPUS_BANDWIDTH_WIDEBAND;
- }
-
- if (st->bandwidth>st->max_bandwidth)
- st->bandwidth = st->max_bandwidth;
-
- if (st->user_bandwidth != OPUS_AUTO)
- st->bandwidth = st->user_bandwidth;
-
- /* This prevents us from using hybrid at unsafe CBR/max rates */
- if (st->mode != MODE_CELT_ONLY && max_rate < 15000)
- {
- st->bandwidth = IMIN(st->bandwidth, OPUS_BANDWIDTH_WIDEBAND);
- }
-
- /* Prevents Opus from wasting bits on frequencies that are above
- the Nyquist rate of the input signal */
- if (st->Fs <= 24000 && st->bandwidth > OPUS_BANDWIDTH_SUPERWIDEBAND)
- st->bandwidth = OPUS_BANDWIDTH_SUPERWIDEBAND;
- if (st->Fs <= 16000 && st->bandwidth > OPUS_BANDWIDTH_WIDEBAND)
- st->bandwidth = OPUS_BANDWIDTH_WIDEBAND;
- if (st->Fs <= 12000 && st->bandwidth > OPUS_BANDWIDTH_MEDIUMBAND)
- st->bandwidth = OPUS_BANDWIDTH_MEDIUMBAND;
- if (st->Fs <= 8000 && st->bandwidth > OPUS_BANDWIDTH_NARROWBAND)
- st->bandwidth = OPUS_BANDWIDTH_NARROWBAND;
-#ifndef DISABLE_FLOAT_API
- /* Use detected bandwidth to reduce the encoded bandwidth. */
- if (st->detected_bandwidth && st->user_bandwidth == OPUS_AUTO)
- {
- int min_detected_bandwidth;
- /* Makes bandwidth detection more conservative just in case the detector
- gets it wrong when we could have coded a high bandwidth transparently.
- When operating in SILK/hybrid mode, we don't go below wideband to avoid
- more complicated switches that require redundancy. */
- if (equiv_rate <= 18000*st->stream_channels && st->mode == MODE_CELT_ONLY)
- min_detected_bandwidth = OPUS_BANDWIDTH_NARROWBAND;
- else if (equiv_rate <= 24000*st->stream_channels && st->mode == MODE_CELT_ONLY)
- min_detected_bandwidth = OPUS_BANDWIDTH_MEDIUMBAND;
- else if (equiv_rate <= 30000*st->stream_channels)
- min_detected_bandwidth = OPUS_BANDWIDTH_WIDEBAND;
- else if (equiv_rate <= 44000*st->stream_channels)
- min_detected_bandwidth = OPUS_BANDWIDTH_SUPERWIDEBAND;
- else
- min_detected_bandwidth = OPUS_BANDWIDTH_FULLBAND;
-
- st->detected_bandwidth = IMAX(st->detected_bandwidth, min_detected_bandwidth);
- st->bandwidth = IMIN(st->bandwidth, st->detected_bandwidth);
- }
-#endif
- celt_encoder_ctl(celt_enc, OPUS_SET_LSB_DEPTH(lsb_depth));
-
- /* CELT mode doesn't support mediumband, use wideband instead */
- if (st->mode == MODE_CELT_ONLY && st->bandwidth == OPUS_BANDWIDTH_MEDIUMBAND)
- st->bandwidth = OPUS_BANDWIDTH_WIDEBAND;
- if (st->lfe)
- st->bandwidth = OPUS_BANDWIDTH_NARROWBAND;
-
- /* Can't support higher than wideband for >20 ms frames */
- if (frame_size > st->Fs/50 && (st->mode == MODE_CELT_ONLY || st->bandwidth > OPUS_BANDWIDTH_WIDEBAND))
- {
- VARDECL(unsigned char, tmp_data);
- int nb_frames;
- int bak_mode, bak_bandwidth, bak_channels, bak_to_mono;
- VARDECL(OpusRepacketizer, rp);
- opus_int32 bytes_per_frame;
- opus_int32 repacketize_len;
-
-#ifndef DISABLE_FLOAT_API
- if (analysis_read_pos_bak!= -1)
- {
- st->analysis.read_pos = analysis_read_pos_bak;
- st->analysis.read_subframe = analysis_read_subframe_bak;
- }
-#endif
-
- nb_frames = frame_size > st->Fs/25 ? 3 : 2;
- bytes_per_frame = IMIN(1276,(out_data_bytes-3)/nb_frames);
-
- ALLOC(tmp_data, nb_frames*bytes_per_frame, unsigned char);
-
- ALLOC(rp, 1, OpusRepacketizer);
- opus_repacketizer_init(rp);
-
- bak_mode = st->user_forced_mode;
- bak_bandwidth = st->user_bandwidth;
- bak_channels = st->force_channels;
-
- st->user_forced_mode = st->mode;
- st->user_bandwidth = st->bandwidth;
- st->force_channels = st->stream_channels;
- bak_to_mono = st->silk_mode.toMono;
-
- if (bak_to_mono)
- st->force_channels = 1;
- else
- st->prev_channels = st->stream_channels;
- for (i=0;i<nb_frames;i++)
- {
- int tmp_len;
- st->silk_mode.toMono = 0;
- /* When switching from SILK/Hybrid to CELT, only ask for a switch at the last frame */
- if (to_celt && i==nb_frames-1)
- st->user_forced_mode = MODE_CELT_ONLY;
- tmp_len = opus_encode_native(st, pcm+i*(st->channels*st->Fs/50), st->Fs/50,
- tmp_data+i*bytes_per_frame, bytes_per_frame, lsb_depth,
- NULL, 0, c1, c2, analysis_channels, downmix, float_api);
- if (tmp_len<0)
- {
- RESTORE_STACK;
- return OPUS_INTERNAL_ERROR;
- }
- ret = opus_repacketizer_cat(rp, tmp_data+i*bytes_per_frame, tmp_len);
- if (ret<0)
- {
- RESTORE_STACK;
- return OPUS_INTERNAL_ERROR;
- }
- }
- if (st->use_vbr)
- repacketize_len = out_data_bytes;
- else
- repacketize_len = IMIN(3*st->bitrate_bps/(3*8*50/nb_frames), out_data_bytes);
- ret = opus_repacketizer_out_range_impl(rp, 0, nb_frames, data, repacketize_len, 0, !st->use_vbr);
- if (ret<0)
- {
- RESTORE_STACK;
- return OPUS_INTERNAL_ERROR;
- }
- st->user_forced_mode = bak_mode;
- st->user_bandwidth = bak_bandwidth;
- st->force_channels = bak_channels;
- st->silk_mode.toMono = bak_to_mono;
- RESTORE_STACK;
- return ret;
- }
- curr_bandwidth = st->bandwidth;
-
- /* Chooses the appropriate mode for speech
- *NEVER* switch to/from CELT-only mode here as this will invalidate some assumptions */
- if (st->mode == MODE_SILK_ONLY && curr_bandwidth > OPUS_BANDWIDTH_WIDEBAND)
- st->mode = MODE_HYBRID;
- if (st->mode == MODE_HYBRID && curr_bandwidth <= OPUS_BANDWIDTH_WIDEBAND)
- st->mode = MODE_SILK_ONLY;
-
- /* printf("%d %d %d %d\n", st->bitrate_bps, st->stream_channels, st->mode, curr_bandwidth); */
- bytes_target = IMIN(max_data_bytes-redundancy_bytes, st->bitrate_bps * frame_size / (st->Fs * 8)) - 1;
-
- data += 1;
-
- ec_enc_init(&enc, data, max_data_bytes-1);
-
- ALLOC(pcm_buf, (total_buffer+frame_size)*st->channels, opus_val16);
- OPUS_COPY(pcm_buf, &st->delay_buffer[(st->encoder_buffer-total_buffer)*st->channels], total_buffer*st->channels);
-
- if (st->mode == MODE_CELT_ONLY)
- hp_freq_smth1 = silk_LSHIFT( silk_lin2log( VARIABLE_HP_MIN_CUTOFF_HZ ), 8 );
- else
- hp_freq_smth1 = ((silk_encoder*)silk_enc)->state_Fxx[0].sCmn.variable_HP_smth1_Q15;
-
- st->variable_HP_smth2_Q15 = silk_SMLAWB( st->variable_HP_smth2_Q15,
- hp_freq_smth1 - st->variable_HP_smth2_Q15, SILK_FIX_CONST( VARIABLE_HP_SMTH_COEF2, 16 ) );
-
- /* convert from log scale to Hertz */
- cutoff_Hz = silk_log2lin( silk_RSHIFT( st->variable_HP_smth2_Q15, 8 ) );
-
- if (st->application == OPUS_APPLICATION_VOIP)
- {
- hp_cutoff(pcm, cutoff_Hz, &pcm_buf[total_buffer*st->channels], st->hp_mem, frame_size, st->channels, st->Fs);
- } else {
- dc_reject(pcm, 3, &pcm_buf[total_buffer*st->channels], st->hp_mem, frame_size, st->channels, st->Fs);
- }
-#ifndef OPUS_FIXED_POINT
- if (float_api)
- {
- opus_val32 sum;
- sum = celt_inner_prod(&pcm_buf[total_buffer*st->channels], &pcm_buf[total_buffer*st->channels], frame_size*st->channels, st->arch);
- /* This should filter out both NaNs and ridiculous signals that could
- cause NaNs further down. */
- if (!(sum < 1e9f) || celt_isnan(sum))
- {
- OPUS_CLEAR(&pcm_buf[total_buffer*st->channels], frame_size*st->channels);
- st->hp_mem[0] = st->hp_mem[1] = st->hp_mem[2] = st->hp_mem[3] = 0;
- }
- }
-#endif
-
-
- /* SILK processing */
- HB_gain = Q15ONE;
- if (st->mode != MODE_CELT_ONLY)
- {
- opus_int32 total_bitRate, celt_rate;
-#ifdef OPUS_FIXED_POINT
- const opus_int16 *pcm_silk;
-#else
- VARDECL(opus_int16, pcm_silk);
- ALLOC(pcm_silk, st->channels*frame_size, opus_int16);
-#endif
-
- /* Distribute bits between SILK and CELT */
- total_bitRate = 8 * bytes_target * frame_rate;
- if( st->mode == MODE_HYBRID ) {
- int HB_gain_ref;
- /* Base rate for SILK */
- st->silk_mode.bitRate = st->stream_channels * ( 5000 + 1000 * ( st->Fs == 100 * frame_size ) );
- if( curr_bandwidth == OPUS_BANDWIDTH_SUPERWIDEBAND ) {
- /* SILK gets 2/3 of the remaining bits */
- st->silk_mode.bitRate += ( total_bitRate - st->silk_mode.bitRate ) * 2 / 3;
- } else { /* FULLBAND */
- /* SILK gets 3/5 of the remaining bits */
- st->silk_mode.bitRate += ( total_bitRate - st->silk_mode.bitRate ) * 3 / 5;
- }
- /* Don't let SILK use more than 80% */
- if( st->silk_mode.bitRate > total_bitRate * 4/5 ) {
- st->silk_mode.bitRate = total_bitRate * 4/5;
- }
- if (!st->energy_masking)
- {
- /* Increasingly attenuate high band when it gets allocated fewer bits */
- celt_rate = total_bitRate - st->silk_mode.bitRate;
- HB_gain_ref = (curr_bandwidth == OPUS_BANDWIDTH_SUPERWIDEBAND) ? 3000 : 3600;
- HB_gain = SHL32((opus_val32)celt_rate, 9) / SHR32((opus_val32)celt_rate + st->stream_channels * HB_gain_ref, 6);
- HB_gain = HB_gain < Q15ONE*6/7 ? HB_gain + Q15ONE/7 : Q15ONE;
- }
- } else {
- /* SILK gets all bits */
- st->silk_mode.bitRate = total_bitRate;
- }
-
- /* Surround masking for SILK */
- if (st->energy_masking && st->use_vbr && !st->lfe)
- {
- opus_val32 mask_sum=0;
- opus_val16 masking_depth;
- opus_int32 rate_offset;
- int c;
- int end = 17;
- opus_int16 srate = 16000;
- if (st->bandwidth == OPUS_BANDWIDTH_NARROWBAND)
- {
- end = 13;
- srate = 8000;
- } else if (st->bandwidth == OPUS_BANDWIDTH_MEDIUMBAND)
- {
- end = 15;
- srate = 12000;
- }
- for (c=0;c<st->channels;c++)
- {
- for(i=0;i<end;i++)
- {
- opus_val16 mask;
- mask = MAX16(MIN16(st->energy_masking[21*c+i],
- QCONST16(.5f, DB_SHIFT)), -QCONST16(2.0f, DB_SHIFT));
- if (mask > 0)
- mask = HALF16(mask);
- mask_sum += mask;
- }
- }
- /* Conservative rate reduction, we cut the masking in half */
- masking_depth = mask_sum / end*st->channels;
- masking_depth += QCONST16(.2f, DB_SHIFT);
- rate_offset = (opus_int32)PSHR32(MULT16_16(srate, masking_depth), DB_SHIFT);
- rate_offset = MAX32(rate_offset, -2*st->silk_mode.bitRate/3);
- /* Split the rate change between the SILK and CELT part for hybrid. */
- if (st->bandwidth==OPUS_BANDWIDTH_SUPERWIDEBAND || st->bandwidth==OPUS_BANDWIDTH_FULLBAND)
- st->silk_mode.bitRate += 3*rate_offset/5;
- else
- st->silk_mode.bitRate += rate_offset;
- bytes_target += rate_offset * frame_size / (8 * st->Fs);
- }
-
- st->silk_mode.payloadSize_ms = 1000 * frame_size / st->Fs;
- st->silk_mode.nChannelsAPI = st->channels;
- st->silk_mode.nChannelsInternal = st->stream_channels;
- if (curr_bandwidth == OPUS_BANDWIDTH_NARROWBAND) {
- st->silk_mode.desiredInternalSampleRate = 8000;
- } else if (curr_bandwidth == OPUS_BANDWIDTH_MEDIUMBAND) {
- st->silk_mode.desiredInternalSampleRate = 12000;
- } else {
- silk_assert( st->mode == MODE_HYBRID || curr_bandwidth == OPUS_BANDWIDTH_WIDEBAND );
- st->silk_mode.desiredInternalSampleRate = 16000;
- }
- if( st->mode == MODE_HYBRID ) {
- /* Don't allow bandwidth reduction at lowest bitrates in hybrid mode */
- st->silk_mode.minInternalSampleRate = 16000;
- } else {
- st->silk_mode.minInternalSampleRate = 8000;
- }
-
- if (st->mode == MODE_SILK_ONLY)
- {
- opus_int32 effective_max_rate = max_rate;
- st->silk_mode.maxInternalSampleRate = 16000;
- if (frame_rate > 50)
- effective_max_rate = effective_max_rate*2/3;
- if (effective_max_rate < 13000)
- {
- st->silk_mode.maxInternalSampleRate = 12000;
- st->silk_mode.desiredInternalSampleRate = IMIN(12000, st->silk_mode.desiredInternalSampleRate);
- }
- if (effective_max_rate < 9600)
- {
- st->silk_mode.maxInternalSampleRate = 8000;
- st->silk_mode.desiredInternalSampleRate = IMIN(8000, st->silk_mode.desiredInternalSampleRate);
- }
- } else {
- st->silk_mode.maxInternalSampleRate = 16000;
- }
-
- st->silk_mode.useCBR = !st->use_vbr;
-
- /* Call SILK encoder for the low band */
- nBytes = IMIN(1275, max_data_bytes-1-redundancy_bytes);
-
- st->silk_mode.maxBits = nBytes*8;
- /* Only allow up to 90% of the bits for hybrid mode*/
- if (st->mode == MODE_HYBRID)
- st->silk_mode.maxBits = (opus_int32)st->silk_mode.maxBits*9/10;
- if (st->silk_mode.useCBR)
- {
- st->silk_mode.maxBits = (st->silk_mode.bitRate * frame_size / (st->Fs * 8))*8;
- /* Reduce the initial target to make it easier to reach the CBR rate */
- st->silk_mode.bitRate = IMAX(1, st->silk_mode.bitRate-2000);
- }
-
- if (prefill)
- {
- opus_int32 zero=0;
- int prefill_offset;
- /* Use a smooth onset for the SILK prefill to avoid the encoder trying to encode
- a discontinuity. The exact location is what we need to avoid leaving any "gap"
- in the audio when mixing with the redundant CELT frame. Here we can afford to
- overwrite st->delay_buffer because the only thing that uses it before it gets
- rewritten is tmp_prefill[] and even then only the part after the ramp really
- gets used (rather than sent to the encoder and discarded) */
- prefill_offset = st->channels*(st->encoder_buffer-st->delay_compensation-st->Fs/400);
- gain_fade(st->delay_buffer+prefill_offset, st->delay_buffer+prefill_offset,
- 0, Q15ONE, celt_mode->overlap, st->Fs/400, st->channels, celt_mode->window, st->Fs);
- OPUS_CLEAR(st->delay_buffer, prefill_offset);
-#ifdef OPUS_FIXED_POINT
- pcm_silk = st->delay_buffer;
-#else
- for (i=0;i<st->encoder_buffer*st->channels;i++)
- pcm_silk[i] = FLOAT2INT16(st->delay_buffer[i]);
-#endif
- silk_Encode( silk_enc, &st->silk_mode, pcm_silk, st->encoder_buffer, NULL, &zero, 1 );
- }
-
-#ifdef OPUS_FIXED_POINT
- pcm_silk = pcm_buf+total_buffer*st->channels;
-#else
- for (i=0;i<frame_size*st->channels;i++)
- pcm_silk[i] = FLOAT2INT16(pcm_buf[total_buffer*st->channels + i]);
-#endif
- ret = silk_Encode( silk_enc, &st->silk_mode, pcm_silk, frame_size, &enc, &nBytes, 0 );
- if( ret ) {
- /*fprintf (stderr, "SILK encode error: %d\n", ret);*/
- /* Handle error */
- RESTORE_STACK;
- return OPUS_INTERNAL_ERROR;
- }
- if (nBytes==0)
- {
- st->rangeFinal = 0;
- data[-1] = gen_toc(st->mode, st->Fs/frame_size, curr_bandwidth, st->stream_channels);
- RESTORE_STACK;
- return 1;
- }
- /* Extract SILK internal bandwidth for signaling in first byte */
- if( st->mode == MODE_SILK_ONLY ) {
- if( st->silk_mode.internalSampleRate == 8000 ) {
- curr_bandwidth = OPUS_BANDWIDTH_NARROWBAND;
- } else if( st->silk_mode.internalSampleRate == 12000 ) {
- curr_bandwidth = OPUS_BANDWIDTH_MEDIUMBAND;
- } else if( st->silk_mode.internalSampleRate == 16000 ) {
- curr_bandwidth = OPUS_BANDWIDTH_WIDEBAND;
- }
- } else {
- silk_assert( st->silk_mode.internalSampleRate == 16000 );
- }
-
- st->silk_mode.opusCanSwitch = st->silk_mode.switchReady;
- /* FIXME: How do we allocate the redundancy for CBR? */
- if (st->silk_mode.opusCanSwitch)
- {
- redundancy = 1;
- celt_to_silk = 0;
- st->silk_bw_switch = 1;
- }
- }
-
- /* CELT processing */
- {
- int endband=21;
-
- switch(curr_bandwidth)
- {
- case OPUS_BANDWIDTH_NARROWBAND:
- endband = 13;
- break;
- case OPUS_BANDWIDTH_MEDIUMBAND:
- case OPUS_BANDWIDTH_WIDEBAND:
- endband = 17;
- break;
- case OPUS_BANDWIDTH_SUPERWIDEBAND:
- endband = 19;
- break;
- case OPUS_BANDWIDTH_FULLBAND:
- endband = 21;
- break;
- }
- celt_encoder_ctl(celt_enc, CELT_SET_END_BAND(endband));
- celt_encoder_ctl(celt_enc, CELT_SET_CHANNELS(st->stream_channels));
- }
- celt_encoder_ctl(celt_enc, OPUS_SET_BITRATE(OPUS_BITRATE_MAX));
- if (st->mode != MODE_SILK_ONLY)
- {
- opus_val32 celt_pred=2;
- celt_encoder_ctl(celt_enc, OPUS_SET_VBR(0));
- /* We may still decide to disable prediction later */
- if (st->silk_mode.reducedDependency)
- celt_pred = 0;
- celt_encoder_ctl(celt_enc, CELT_SET_PREDICTION(celt_pred));
-
- if (st->mode == MODE_HYBRID)
- {
- int len;
-
- len = (ec_tell(&enc)+7)>>3;
- if (redundancy)
- len += st->mode == MODE_HYBRID ? 3 : 1;
- if( st->use_vbr ) {
- nb_compr_bytes = len + bytes_target - (st->silk_mode.bitRate * frame_size) / (8 * st->Fs);
- } else {
- /* check if SILK used up too much */
- nb_compr_bytes = len > bytes_target ? len : bytes_target;
- }
- } else {
- if (st->use_vbr)
- {
- opus_int32 bonus=0;
-#ifndef DISABLE_FLOAT_API
- if (st->variable_duration==OPUS_FRAMESIZE_VARIABLE && frame_size != st->Fs/50)
- {
- bonus = (60*st->stream_channels+40)*(st->Fs/frame_size-50);
- if (analysis_info.valid)
- bonus = (opus_int32)(bonus*(1.f+.5f*analysis_info.tonality));
- }
-#endif
- celt_encoder_ctl(celt_enc, OPUS_SET_VBR(1));
- celt_encoder_ctl(celt_enc, OPUS_SET_VBR_CONSTRAINT(st->vbr_constraint));
- celt_encoder_ctl(celt_enc, OPUS_SET_BITRATE(st->bitrate_bps+bonus));
- nb_compr_bytes = max_data_bytes-1-redundancy_bytes;
- } else {
- nb_compr_bytes = bytes_target;
- }
- }
-
- } else {
- nb_compr_bytes = 0;
- }
-
- ALLOC(tmp_prefill, st->channels*st->Fs/400, opus_val16);
- if (st->mode != MODE_SILK_ONLY && st->mode != st->prev_mode && st->prev_mode > 0)
- {
- OPUS_COPY(tmp_prefill, &st->delay_buffer[(st->encoder_buffer-total_buffer-st->Fs/400)*st->channels], st->channels*st->Fs/400);
- }
-
- if (st->channels*(st->encoder_buffer-(frame_size+total_buffer)) > 0)
- {
- OPUS_MOVE(st->delay_buffer, &st->delay_buffer[st->channels*frame_size], st->channels*(st->encoder_buffer-frame_size-total_buffer));
- OPUS_COPY(&st->delay_buffer[st->channels*(st->encoder_buffer-frame_size-total_buffer)],
- &pcm_buf[0],
- (frame_size+total_buffer)*st->channels);
- } else {
- OPUS_COPY(st->delay_buffer, &pcm_buf[(frame_size+total_buffer-st->encoder_buffer)*st->channels], st->encoder_buffer*st->channels);
- }
- /* gain_fade() and stereo_fade() need to be after the buffer copying
- because we don't want any of this to affect the SILK part */
- if( st->prev_HB_gain < Q15ONE || HB_gain < Q15ONE ) {
- gain_fade(pcm_buf, pcm_buf,
- st->prev_HB_gain, HB_gain, celt_mode->overlap, frame_size, st->channels, celt_mode->window, st->Fs);
- }
- st->prev_HB_gain = HB_gain;
- if (st->mode != MODE_HYBRID || st->stream_channels==1)
- st->silk_mode.stereoWidth_Q14 = IMIN((1<<14),2*IMAX(0,equiv_rate-30000));
- if( !st->energy_masking && st->channels == 2 ) {
- /* Apply stereo width reduction (at low bitrates) */
- if( st->hybrid_stereo_width_Q14 < (1 << 14) || st->silk_mode.stereoWidth_Q14 < (1 << 14) ) {
- opus_val16 g1, g2;
- g1 = st->hybrid_stereo_width_Q14;
- g2 = (opus_val16)(st->silk_mode.stereoWidth_Q14);
-#ifdef OPUS_FIXED_POINT
- g1 = g1==16384 ? Q15ONE : SHL16(g1,1);
- g2 = g2==16384 ? Q15ONE : SHL16(g2,1);
-#else
- g1 *= (1.f/16384);
- g2 *= (1.f/16384);
-#endif
- stereo_fade(pcm_buf, pcm_buf, g1, g2, celt_mode->overlap,
- frame_size, st->channels, celt_mode->window, st->Fs);
- st->hybrid_stereo_width_Q14 = st->silk_mode.stereoWidth_Q14;
- }
- }
-
- if ( st->mode != MODE_CELT_ONLY && ec_tell(&enc)+17+20*(st->mode == MODE_HYBRID) <= 8*(max_data_bytes-1))
- {
- /* For SILK mode, the redundancy is inferred from the length */
- if (st->mode == MODE_HYBRID && (redundancy || ec_tell(&enc)+37 <= 8*nb_compr_bytes))
- ec_enc_bit_logp(&enc, redundancy, 12);
- if (redundancy)
- {
- int max_redundancy;
- ec_enc_bit_logp(&enc, celt_to_silk, 1);
- if (st->mode == MODE_HYBRID)
- max_redundancy = (max_data_bytes-1)-nb_compr_bytes;
- else
- max_redundancy = (max_data_bytes-1)-((ec_tell(&enc)+7)>>3);
- /* Target the same bit-rate for redundancy as for the rest,
- up to a max of 257 bytes */
- redundancy_bytes = IMIN(max_redundancy, st->bitrate_bps/1600);
- redundancy_bytes = IMIN(257, IMAX(2, redundancy_bytes));
- if (st->mode == MODE_HYBRID)
- ec_enc_uint(&enc, redundancy_bytes-2, 256);
- }
- } else {
- redundancy = 0;
- }
-
- if (!redundancy)
- {
- st->silk_bw_switch = 0;
- redundancy_bytes = 0;
- }
- if (st->mode != MODE_CELT_ONLY)start_band=17;
-
- if (st->mode == MODE_SILK_ONLY)
- {
- ret = (ec_tell(&enc)+7)>>3;
- ec_enc_done(&enc);
- nb_compr_bytes = ret;
- } else {
- nb_compr_bytes = IMIN((max_data_bytes-1)-redundancy_bytes, nb_compr_bytes);
- ec_enc_shrink(&enc, nb_compr_bytes);
- }
-
-#ifndef DISABLE_FLOAT_API
- if (redundancy || st->mode != MODE_SILK_ONLY)
- celt_encoder_ctl(celt_enc, CELT_SET_ANALYSIS(&analysis_info));
-#endif
-
- /* 5 ms redundant frame for CELT->SILK */
- if (redundancy && celt_to_silk)
- {
- int err;
- celt_encoder_ctl(celt_enc, CELT_SET_START_BAND(0));
- celt_encoder_ctl(celt_enc, OPUS_SET_VBR(0));
- err = celt_encode_with_ec(celt_enc, pcm_buf, st->Fs/200, data+nb_compr_bytes, redundancy_bytes, NULL);
- if (err < 0)
- {
- RESTORE_STACK;
- return OPUS_INTERNAL_ERROR;
- }
- celt_encoder_ctl(celt_enc, OPUS_GET_FINAL_RANGE(&redundant_rng));
- celt_encoder_ctl(celt_enc, OPUS_RESET_STATE);
- }
-
- celt_encoder_ctl(celt_enc, CELT_SET_START_BAND(start_band));
-
- if (st->mode != MODE_SILK_ONLY)
- {
- if (st->mode != st->prev_mode && st->prev_mode > 0)
- {
- unsigned char dummy[2];
- celt_encoder_ctl(celt_enc, OPUS_RESET_STATE);
-
- /* Prefilling */
- celt_encode_with_ec(celt_enc, tmp_prefill, st->Fs/400, dummy, 2, NULL);
- celt_encoder_ctl(celt_enc, CELT_SET_PREDICTION(0));
- }
- /* If false, we already busted the budget and we'll end up with a "PLC packet" */
- if (ec_tell(&enc) <= 8*nb_compr_bytes)
- {
- ret = celt_encode_with_ec(celt_enc, pcm_buf, frame_size, NULL, nb_compr_bytes, &enc);
- if (ret < 0)
- {
- RESTORE_STACK;
- return OPUS_INTERNAL_ERROR;
- }
- }
- }
-
- /* 5 ms redundant frame for SILK->CELT */
- if (redundancy && !celt_to_silk)
- {
- int err;
- unsigned char dummy[2];
- int N2, N4;
- N2 = st->Fs/200;
- N4 = st->Fs/400;
-
- celt_encoder_ctl(celt_enc, OPUS_RESET_STATE);
- celt_encoder_ctl(celt_enc, CELT_SET_START_BAND(0));
- celt_encoder_ctl(celt_enc, CELT_SET_PREDICTION(0));
-
- /* NOTE: We could speed this up slightly (at the expense of code size) by just adding a function that prefills the buffer */
- celt_encode_with_ec(celt_enc, pcm_buf+st->channels*(frame_size-N2-N4), N4, dummy, 2, NULL);
-
- err = celt_encode_with_ec(celt_enc, pcm_buf+st->channels*(frame_size-N2), N2, data+nb_compr_bytes, redundancy_bytes, NULL);
- if (err < 0)
- {
- RESTORE_STACK;
- return OPUS_INTERNAL_ERROR;
- }
- celt_encoder_ctl(celt_enc, OPUS_GET_FINAL_RANGE(&redundant_rng));
- }
-
-
-
- /* Signalling the mode in the first byte */
- data--;
- data[0] = gen_toc(st->mode, st->Fs/frame_size, curr_bandwidth, st->stream_channels);
-
- st->rangeFinal = enc.rng ^ redundant_rng;
-
- if (to_celt)
- st->prev_mode = MODE_CELT_ONLY;
- else
- st->prev_mode = st->mode;
- st->prev_channels = st->stream_channels;
- st->prev_framesize = frame_size;
-
- st->first = 0;
-
- /* In the unlikely case that the SILK encoder busted its target, tell
- the decoder to call the PLC */
- if (ec_tell(&enc) > (max_data_bytes-1)*8)
- {
- if (max_data_bytes < 2)
- {
- RESTORE_STACK;
- return OPUS_BUFFER_TOO_SMALL;
- }
- data[1] = 0;
- ret = 1;
- st->rangeFinal = 0;
- } else if (st->mode==MODE_SILK_ONLY&&!redundancy)
- {
- /*When in LPC only mode it's perfectly
- reasonable to strip off trailing zero bytes as
- the required range decoder behavior is to
- fill these in. This can't be done when the MDCT
- modes are used because the decoder needs to know
- the actual length for allocation purposes.*/
- while(ret>2&&data[ret]==0)ret--;
- }
- /* Count ToC and redundancy */
- ret += 1+redundancy_bytes;
- if (!st->use_vbr)
- {
- if (opus_packet_pad(data, ret, max_data_bytes) != OPUS_OK)
-
- {
- RESTORE_STACK;
- return OPUS_INTERNAL_ERROR;
- }
- ret = max_data_bytes;
- }
- RESTORE_STACK;
- return ret;
-}
-
-#ifdef OPUS_FIXED_POINT
-
-#ifndef DISABLE_FLOAT_API
-opus_int32 opus_encode_float(OpusEncoder *st, const float *pcm, int analysis_frame_size,
- unsigned char *data, opus_int32 max_data_bytes)
-{
- int i, ret;
- int frame_size;
- int delay_compensation;
- VARDECL(opus_int16, in);
- ALLOC_STACK;
-
- if (st->application == OPUS_APPLICATION_RESTRICTED_LOWDELAY)
- delay_compensation = 0;
- else
- delay_compensation = st->delay_compensation;
- frame_size = compute_frame_size(pcm, analysis_frame_size,
- st->variable_duration, st->channels, st->Fs, st->bitrate_bps,
- delay_compensation, downmix_float, st->analysis.subframe_mem);
-
- ALLOC(in, frame_size*st->channels, opus_int16);
-
- for (i=0;i<frame_size*st->channels;i++)
- in[i] = FLOAT2INT16(pcm[i]);
- ret = opus_encode_native(st, in, frame_size, data, max_data_bytes, 16,
- pcm, analysis_frame_size, 0, -2, st->channels, downmix_float, 1);
- RESTORE_STACK;
- return ret;
-}
-#endif
-
-opus_int32 opus_encode(OpusEncoder *st, const opus_int16 *pcm, int analysis_frame_size,
- unsigned char *data, opus_int32 out_data_bytes)
-{
- int frame_size;
- int delay_compensation;
- if (st->application == OPUS_APPLICATION_RESTRICTED_LOWDELAY)
- delay_compensation = 0;
- else
- delay_compensation = st->delay_compensation;
- frame_size = compute_frame_size(pcm, analysis_frame_size,
- st->variable_duration, st->channels, st->Fs, st->bitrate_bps,
- delay_compensation, downmix_int
-#ifndef DISABLE_FLOAT_API
- , st->analysis.subframe_mem
-#endif
- );
- return opus_encode_native(st, pcm, frame_size, data, out_data_bytes, 16,
- pcm, analysis_frame_size, 0, -2, st->channels, downmix_int, 0);
-}
-
-#else
-opus_int32 opus_encode(OpusEncoder *st, const opus_int16 *pcm, int analysis_frame_size,
- unsigned char *data, opus_int32 max_data_bytes)
-{
- int i, ret;
- int frame_size;
- int delay_compensation;
- VARDECL(float, in);
- ALLOC_STACK;
-
- if (st->application == OPUS_APPLICATION_RESTRICTED_LOWDELAY)
- delay_compensation = 0;
- else
- delay_compensation = st->delay_compensation;
- frame_size = compute_frame_size(pcm, analysis_frame_size,
- st->variable_duration, st->channels, st->Fs, st->bitrate_bps,
- delay_compensation, downmix_int, st->analysis.subframe_mem);
-
- ALLOC(in, frame_size*st->channels, float);
-
- for (i=0;i<frame_size*st->channels;i++)
- in[i] = (1.0f/32768)*pcm[i];
- ret = opus_encode_native(st, in, frame_size, data, max_data_bytes, 16,
- pcm, analysis_frame_size, 0, -2, st->channels, downmix_int, 0);
- RESTORE_STACK;
- return ret;
-}
-opus_int32 opus_encode_float(OpusEncoder *st, const float *pcm, int analysis_frame_size,
- unsigned char *data, opus_int32 out_data_bytes)
-{
- int frame_size;
- int delay_compensation;
- if (st->application == OPUS_APPLICATION_RESTRICTED_LOWDELAY)
- delay_compensation = 0;
- else
- delay_compensation = st->delay_compensation;
- frame_size = compute_frame_size(pcm, analysis_frame_size,
- st->variable_duration, st->channels, st->Fs, st->bitrate_bps,
- delay_compensation, downmix_float, st->analysis.subframe_mem);
- return opus_encode_native(st, pcm, frame_size, data, out_data_bytes, 24,
- pcm, analysis_frame_size, 0, -2, st->channels, downmix_float, 1);
-}
-#endif
-
-
-int opus_encoder_ctl(OpusEncoder *st, int request, ...)
-{
- int ret;
- CELTEncoder *celt_enc;
- va_list ap;
-
- ret = OPUS_OK;
- va_start(ap, request);
-
- celt_enc = (CELTEncoder*)((char*)st+st->celt_enc_offset);
-
- switch (request)
- {
- case OPUS_SET_APPLICATION_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if ( (value != OPUS_APPLICATION_VOIP && value != OPUS_APPLICATION_AUDIO
- && value != OPUS_APPLICATION_RESTRICTED_LOWDELAY)
- || (!st->first && st->application != value))
- {
- ret = OPUS_BAD_ARG;
- break;
- }
- st->application = value;
- }
- break;
- case OPUS_GET_APPLICATION_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->application;
- }
- break;
- case OPUS_SET_BITRATE_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value != OPUS_AUTO && value != OPUS_BITRATE_MAX)
- {
- if (value <= 0)
- goto bad_arg;
- else if (value <= 500)
- value = 500;
- else if (value > (opus_int32)300000*st->channels)
- value = (opus_int32)300000*st->channels;
- }
- st->user_bitrate_bps = value;
- }
- break;
- case OPUS_GET_BITRATE_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = user_bitrate_to_bitrate(st, st->prev_framesize, 1276);
- }
- break;
- case OPUS_SET_FORCE_CHANNELS_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if((value<1 || value>st->channels) && value != OPUS_AUTO)
- {
- goto bad_arg;
- }
- st->force_channels = value;
- }
- break;
- case OPUS_GET_FORCE_CHANNELS_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->force_channels;
- }
- break;
- case OPUS_SET_MAX_BANDWIDTH_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value < OPUS_BANDWIDTH_NARROWBAND || value > OPUS_BANDWIDTH_FULLBAND)
- {
- goto bad_arg;
- }
- st->max_bandwidth = value;
- if (st->max_bandwidth == OPUS_BANDWIDTH_NARROWBAND) {
- st->silk_mode.maxInternalSampleRate = 8000;
- } else if (st->max_bandwidth == OPUS_BANDWIDTH_MEDIUMBAND) {
- st->silk_mode.maxInternalSampleRate = 12000;
- } else {
- st->silk_mode.maxInternalSampleRate = 16000;
- }
- }
- break;
- case OPUS_GET_MAX_BANDWIDTH_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->max_bandwidth;
- }
- break;
- case OPUS_SET_BANDWIDTH_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if ((value < OPUS_BANDWIDTH_NARROWBAND || value > OPUS_BANDWIDTH_FULLBAND) && value != OPUS_AUTO)
- {
- goto bad_arg;
- }
- st->user_bandwidth = value;
- if (st->user_bandwidth == OPUS_BANDWIDTH_NARROWBAND) {
- st->silk_mode.maxInternalSampleRate = 8000;
- } else if (st->user_bandwidth == OPUS_BANDWIDTH_MEDIUMBAND) {
- st->silk_mode.maxInternalSampleRate = 12000;
- } else {
- st->silk_mode.maxInternalSampleRate = 16000;
- }
- }
- break;
- case OPUS_GET_BANDWIDTH_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->bandwidth;
- }
- break;
- case OPUS_SET_DTX_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if(value<0 || value>1)
- {
- goto bad_arg;
- }
- st->silk_mode.useDTX = value;
- }
- break;
- case OPUS_GET_DTX_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->silk_mode.useDTX;
- }
- break;
- case OPUS_SET_COMPLEXITY_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if(value<0 || value>10)
- {
- goto bad_arg;
- }
- st->silk_mode.complexity = value;
- celt_encoder_ctl(celt_enc, OPUS_SET_COMPLEXITY(value));
- }
- break;
- case OPUS_GET_COMPLEXITY_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->silk_mode.complexity;
- }
- break;
- case OPUS_SET_INBAND_FEC_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if(value<0 || value>1)
- {
- goto bad_arg;
- }
- st->silk_mode.useInBandFEC = value;
- }
- break;
- case OPUS_GET_INBAND_FEC_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->silk_mode.useInBandFEC;
- }
- break;
- case OPUS_SET_PACKET_LOSS_PERC_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value < 0 || value > 100)
- {
- goto bad_arg;
- }
- st->silk_mode.packetLossPercentage = value;
- celt_encoder_ctl(celt_enc, OPUS_SET_PACKET_LOSS_PERC(value));
- }
- break;
- case OPUS_GET_PACKET_LOSS_PERC_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->silk_mode.packetLossPercentage;
- }
- break;
- case OPUS_SET_VBR_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if(value<0 || value>1)
- {
- goto bad_arg;
- }
- st->use_vbr = value;
- st->silk_mode.useCBR = 1-value;
- }
- break;
- case OPUS_GET_VBR_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->use_vbr;
- }
- break;
- case OPUS_SET_VOICE_RATIO_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<-1 || value>100)
- {
- goto bad_arg;
- }
- st->voice_ratio = value;
- }
- break;
- case OPUS_GET_VOICE_RATIO_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->voice_ratio;
- }
- break;
- case OPUS_SET_VBR_CONSTRAINT_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if(value<0 || value>1)
- {
- goto bad_arg;
- }
- st->vbr_constraint = value;
- }
- break;
- case OPUS_GET_VBR_CONSTRAINT_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->vbr_constraint;
- }
- break;
- case OPUS_SET_SIGNAL_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if(value!=OPUS_AUTO && value!=OPUS_SIGNAL_VOICE && value!=OPUS_SIGNAL_MUSIC)
- {
- goto bad_arg;
- }
- st->signal_type = value;
- }
- break;
- case OPUS_GET_SIGNAL_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->signal_type;
- }
- break;
- case OPUS_GET_LOOKAHEAD_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->Fs/400;
- if (st->application != OPUS_APPLICATION_RESTRICTED_LOWDELAY)
- *value += st->delay_compensation;
- }
- break;
- case OPUS_GET_SAMPLE_RATE_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->Fs;
- }
- break;
- case OPUS_GET_FINAL_RANGE_REQUEST:
- {
- opus_uint32 *value = va_arg(ap, opus_uint32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->rangeFinal;
- }
- break;
- case OPUS_SET_LSB_DEPTH_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<8 || value>24)
- {
- goto bad_arg;
- }
- st->lsb_depth=value;
- }
- break;
- case OPUS_GET_LSB_DEPTH_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->lsb_depth;
- }
- break;
- case OPUS_SET_EXPERT_FRAME_DURATION_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value != OPUS_FRAMESIZE_ARG && value != OPUS_FRAMESIZE_2_5_MS &&
- value != OPUS_FRAMESIZE_5_MS && value != OPUS_FRAMESIZE_10_MS &&
- value != OPUS_FRAMESIZE_20_MS && value != OPUS_FRAMESIZE_40_MS &&
- value != OPUS_FRAMESIZE_60_MS && value != OPUS_FRAMESIZE_VARIABLE)
- {
- goto bad_arg;
- }
- st->variable_duration = value;
- celt_encoder_ctl(celt_enc, OPUS_SET_EXPERT_FRAME_DURATION(value));
- }
- break;
- case OPUS_GET_EXPERT_FRAME_DURATION_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->variable_duration;
- }
- break;
- case OPUS_SET_PREDICTION_DISABLED_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value > 1 || value < 0)
- goto bad_arg;
- st->silk_mode.reducedDependency = value;
- }
- break;
- case OPUS_GET_PREDICTION_DISABLED_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- goto bad_arg;
- *value = st->silk_mode.reducedDependency;
- }
- break;
- case OPUS_RESET_STATE:
- {
- void *silk_enc;
- silk_EncControlStruct dummy;
- char *start;
- silk_enc = (char*)st+st->silk_enc_offset;
-#ifndef DISABLE_FLOAT_API
- tonality_analysis_reset(&st->analysis);
-#endif
-
- start = (char*)&st->OPUS_ENCODER_RESET_START;
- OPUS_CLEAR(start, sizeof(OpusEncoder) - (start - (char*)st));
-
- celt_encoder_ctl(celt_enc, OPUS_RESET_STATE);
- silk_InitEncoder( silk_enc, st->arch, &dummy );
- st->stream_channels = st->channels;
- st->hybrid_stereo_width_Q14 = 1 << 14;
- st->prev_HB_gain = Q15ONE;
- st->first = 1;
- st->mode = MODE_HYBRID;
- st->bandwidth = OPUS_BANDWIDTH_FULLBAND;
- st->variable_HP_smth2_Q15 = silk_LSHIFT( silk_lin2log( VARIABLE_HP_MIN_CUTOFF_HZ ), 8 );
- }
- break;
- case OPUS_SET_FORCE_MODE_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if ((value < MODE_SILK_ONLY || value > MODE_CELT_ONLY) && value != OPUS_AUTO)
- {
- goto bad_arg;
- }
- st->user_forced_mode = value;
- }
- break;
- case OPUS_SET_LFE_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- st->lfe = value;
- ret = celt_encoder_ctl(celt_enc, OPUS_SET_LFE(value));
- }
- break;
- case OPUS_SET_ENERGY_MASK_REQUEST:
- {
- opus_val16 *value = va_arg(ap, opus_val16*);
- st->energy_masking = value;
- ret = celt_encoder_ctl(celt_enc, OPUS_SET_ENERGY_MASK(value));
- }
- break;
-
- case CELT_GET_MODE_REQUEST:
- {
- const CELTMode ** value = va_arg(ap, const CELTMode**);
- if (!value)
- {
- goto bad_arg;
- }
- ret = celt_encoder_ctl(celt_enc, CELT_GET_MODE(value));
- }
- break;
- default:
- /* fprintf(stderr, "unknown opus_encoder_ctl() request: %d", request);*/
- ret = OPUS_UNIMPLEMENTED;
- break;
- }
- va_end(ap);
- return ret;
-bad_arg:
- va_end(ap);
- return OPUS_BAD_ARG;
-}
-
-void opus_encoder_destroy(OpusEncoder *st)
-{
- opus_free(st);
-}
diff --git a/drivers/opus/opus_multistream.c b/drivers/opus/opus_multistream.c
deleted file mode 100644
index aa94803779..0000000000
--- a/drivers/opus/opus_multistream.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Copyright (c) 2011 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/opus_multistream.h"
-#include "opus/opus.h"
-#include "opus/opus_private.h"
-#include "opus/celt/stack_alloc.h"
-#include <stdarg.h>
-#include "opus/celt/float_cast.h"
-#include "opus/celt/os_support.h"
-
-
-int validate_layout(const ChannelLayout *layout)
-{
- int i, max_channel;
-
- max_channel = layout->nb_streams+layout->nb_coupled_streams;
- if (max_channel>255)
- return 0;
- for (i=0;i<layout->nb_channels;i++)
- {
- if (layout->mapping[i] >= max_channel && layout->mapping[i] != 255)
- return 0;
- }
- return 1;
-}
-
-
-int get_left_channel(const ChannelLayout *layout, int stream_id, int prev)
-{
- int i;
- i = (prev<0) ? 0 : prev+1;
- for (;i<layout->nb_channels;i++)
- {
- if (layout->mapping[i]==stream_id*2)
- return i;
- }
- return -1;
-}
-
-int get_right_channel(const ChannelLayout *layout, int stream_id, int prev)
-{
- int i;
- i = (prev<0) ? 0 : prev+1;
- for (;i<layout->nb_channels;i++)
- {
- if (layout->mapping[i]==stream_id*2+1)
- return i;
- }
- return -1;
-}
-
-int get_mono_channel(const ChannelLayout *layout, int stream_id, int prev)
-{
- int i;
- i = (prev<0) ? 0 : prev+1;
- for (;i<layout->nb_channels;i++)
- {
- if (layout->mapping[i]==stream_id+layout->nb_coupled_streams)
- return i;
- }
- return -1;
-}
-
diff --git a/drivers/opus/opus_multistream.h b/drivers/opus/opus_multistream.h
deleted file mode 100644
index 5519c46a9f..0000000000
--- a/drivers/opus/opus_multistream.h
+++ /dev/null
@@ -1,660 +0,0 @@
-/* Copyright (c) 2011 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 opus_multistream.h
- * @brief Opus reference implementation multistream API
- */
-
-#ifndef OPUS_MULTISTREAM_H
-#define OPUS_MULTISTREAM_H
-
-#include "opus/opus.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** @cond OPUS_INTERNAL_DOC */
-
-/** Macros to trigger compilation errors when the wrong types are provided to a
- * CTL. */
-/**@{*/
-#define __opus_check_encstate_ptr(ptr) ((ptr) + ((ptr) - (OpusEncoder**)(ptr)))
-#define __opus_check_decstate_ptr(ptr) ((ptr) + ((ptr) - (OpusDecoder**)(ptr)))
-/**@}*/
-
-/** These are the actual encoder and decoder CTL ID numbers.
- * They should not be used directly by applications.
- * In general, SETs should be even and GETs should be odd.*/
-/**@{*/
-#define OPUS_MULTISTREAM_GET_ENCODER_STATE_REQUEST 5120
-#define OPUS_MULTISTREAM_GET_DECODER_STATE_REQUEST 5122
-/**@}*/
-
-/** @endcond */
-
-/** @defgroup opus_multistream_ctls Multistream specific encoder and decoder CTLs
- *
- * These are convenience macros that are specific to the
- * opus_multistream_encoder_ctl() and opus_multistream_decoder_ctl()
- * interface.
- * The CTLs from @ref opus_genericctls, @ref opus_encoderctls, and
- * @ref opus_decoderctls may be applied to a multistream encoder or decoder as
- * well.
- * In addition, you may retrieve the encoder or decoder state for an specific
- * stream via #OPUS_MULTISTREAM_GET_ENCODER_STATE or
- * #OPUS_MULTISTREAM_GET_DECODER_STATE and apply CTLs to it individually.
- */
-/**@{*/
-
-/** Gets the encoder state for an individual stream of a multistream encoder.
- * @param[in] x <tt>opus_int32</tt>: The index of the stream whose encoder you
- * wish to retrieve.
- * This must be non-negative and less than
- * the <code>streams</code> parameter used
- * to initialize the encoder.
- * @param[out] y <tt>OpusEncoder**</tt>: Returns a pointer to the given
- * encoder state.
- * @retval OPUS_BAD_ARG The index of the requested stream was out of range.
- * @hideinitializer
- */
-#define OPUS_MULTISTREAM_GET_ENCODER_STATE(x,y) OPUS_MULTISTREAM_GET_ENCODER_STATE_REQUEST, __opus_check_int(x), __opus_check_encstate_ptr(y)
-
-/** Gets the decoder state for an individual stream of a multistream decoder.
- * @param[in] x <tt>opus_int32</tt>: The index of the stream whose decoder you
- * wish to retrieve.
- * This must be non-negative and less than
- * the <code>streams</code> parameter used
- * to initialize the decoder.
- * @param[out] y <tt>OpusDecoder**</tt>: Returns a pointer to the given
- * decoder state.
- * @retval OPUS_BAD_ARG The index of the requested stream was out of range.
- * @hideinitializer
- */
-#define OPUS_MULTISTREAM_GET_DECODER_STATE(x,y) OPUS_MULTISTREAM_GET_DECODER_STATE_REQUEST, __opus_check_int(x), __opus_check_decstate_ptr(y)
-
-/**@}*/
-
-/** @defgroup opus_multistream Opus Multistream API
- * @{
- *
- * The multistream API allows individual Opus streams to be combined into a
- * single packet, enabling support for up to 255 channels. Unlike an
- * elementary Opus stream, the encoder and decoder must negotiate the channel
- * configuration before the decoder can successfully interpret the data in the
- * packets produced by the encoder. Some basic information, such as packet
- * duration, can be computed without any special negotiation.
- *
- * The format for multistream Opus packets is defined in the
- * <a href="https://tools.ietf.org/html/draft-ietf-codec-oggopus">Ogg
- * encapsulation specification</a> and is based on the self-delimited Opus
- * framing described in Appendix B of <a href="https://tools.ietf.org/html/rfc6716">RFC 6716</a>.
- * Normal Opus packets are just a degenerate case of multistream Opus packets,
- * and can be encoded or decoded with the multistream API by setting
- * <code>streams</code> to <code>1</code> when initializing the encoder or
- * decoder.
- *
- * Multistream Opus streams can contain up to 255 elementary Opus streams.
- * These may be either "uncoupled" or "coupled", indicating that the decoder
- * is configured to decode them to either 1 or 2 channels, respectively.
- * The streams are ordered so that all coupled streams appear at the
- * beginning.
- *
- * A <code>mapping</code> table defines which decoded channel <code>i</code>
- * should be used for each input/output (I/O) channel <code>j</code>. This table is
- * typically provided as an unsigned char array.
- * Let <code>i = mapping[j]</code> be the index for I/O channel <code>j</code>.
- * If <code>i < 2*coupled_streams</code>, then I/O channel <code>j</code> is
- * encoded as the left channel of stream <code>(i/2)</code> if <code>i</code>
- * is even, or as the right channel of stream <code>(i/2)</code> if
- * <code>i</code> is odd. Otherwise, I/O channel <code>j</code> is encoded as
- * mono in stream <code>(i - coupled_streams)</code>, unless it has the special
- * value 255, in which case it is omitted from the encoding entirely (the
- * decoder will reproduce it as silence). Each value <code>i</code> must either
- * be the special value 255 or be less than <code>streams + coupled_streams</code>.
- *
- * The output channels specified by the encoder
- * should use the
- * <a href="https://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-810004.3.9">Vorbis
- * channel ordering</a>. A decoder may wish to apply an additional permutation
- * to the mapping the encoder used to achieve a different output channel
- * order (e.g. for outputing in WAV order).
- *
- * Each multistream packet contains an Opus packet for each stream, and all of
- * the Opus packets in a single multistream packet must have the same
- * duration. Therefore the duration of a multistream packet can be extracted
- * from the TOC sequence of the first stream, which is located at the
- * beginning of the packet, just like an elementary Opus stream:
- *
- * @code
- * int nb_samples;
- * int nb_frames;
- * nb_frames = opus_packet_get_nb_frames(data, len);
- * if (nb_frames < 1)
- * return nb_frames;
- * nb_samples = opus_packet_get_samples_per_frame(data, 48000) * nb_frames;
- * @endcode
- *
- * The general encoding and decoding process proceeds exactly the same as in
- * the normal @ref opus_encoder and @ref opus_decoder APIs.
- * See their documentation for an overview of how to use the corresponding
- * multistream functions.
- */
-
-/** Opus multistream encoder state.
- * This contains the complete state of a multistream Opus encoder.
- * It is position independent and can be freely copied.
- * @see opus_multistream_encoder_create
- * @see opus_multistream_encoder_init
- */
-typedef struct OpusMSEncoder OpusMSEncoder;
-
-/** Opus multistream decoder state.
- * This contains the complete state of a multistream Opus decoder.
- * It is position independent and can be freely copied.
- * @see opus_multistream_decoder_create
- * @see opus_multistream_decoder_init
- */
-typedef struct OpusMSDecoder OpusMSDecoder;
-
-/**\name Multistream encoder functions */
-/**@{*/
-
-/** Gets the size of an OpusMSEncoder structure.
- * @param streams <tt>int</tt>: The total number of streams to encode from the
- * input.
- * This must be no more than 255.
- * @param coupled_streams <tt>int</tt>: Number of coupled (2 channel) streams
- * to encode.
- * This must be no larger than the total
- * number of streams.
- * Additionally, The total number of
- * encoded channels (<code>streams +
- * coupled_streams</code>) must be no
- * more than 255.
- * @returns The size in bytes on success, or a negative error code
- * (see @ref opus_errorcodes) on error.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_multistream_encoder_get_size(
- int streams,
- int coupled_streams
-);
-
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_multistream_surround_encoder_get_size(
- int channels,
- int mapping_family
-);
-
-
-/** Allocates and initializes a multistream encoder state.
- * Call opus_multistream_encoder_destroy() to release
- * this object when finished.
- * @param Fs <tt>opus_int32</tt>: Sampling rate of the input signal (in Hz).
- * This must be one of 8000, 12000, 16000,
- * 24000, or 48000.
- * @param channels <tt>int</tt>: Number of channels in the input signal.
- * This must be at most 255.
- * It may be greater than the number of
- * coded channels (<code>streams +
- * coupled_streams</code>).
- * @param streams <tt>int</tt>: The total number of streams to encode from the
- * input.
- * This must be no more than the number of channels.
- * @param coupled_streams <tt>int</tt>: Number of coupled (2 channel) streams
- * to encode.
- * This must be no larger than the total
- * number of streams.
- * Additionally, The total number of
- * encoded channels (<code>streams +
- * coupled_streams</code>) must be no
- * more than the number of input channels.
- * @param[in] mapping <code>const unsigned char[channels]</code>: Mapping from
- * encoded channels to input channels, as described in
- * @ref opus_multistream. As an extra constraint, the
- * multistream encoder does not allow encoding coupled
- * streams for which one channel is unused since this
- * is never a good idea.
- * @param application <tt>int</tt>: The target encoder application.
- * This must be one of the following:
- * <dl>
- * <dt>#OPUS_APPLICATION_VOIP</dt>
- * <dd>Process signal for improved speech intelligibility.</dd>
- * <dt>#OPUS_APPLICATION_AUDIO</dt>
- * <dd>Favor faithfulness to the original input.</dd>
- * <dt>#OPUS_APPLICATION_RESTRICTED_LOWDELAY</dt>
- * <dd>Configure the minimum possible coding delay by disabling certain modes
- * of operation.</dd>
- * </dl>
- * @param[out] error <tt>int *</tt>: Returns #OPUS_OK on success, or an error
- * code (see @ref opus_errorcodes) on
- * failure.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusMSEncoder *opus_multistream_encoder_create(
- opus_int32 Fs,
- int channels,
- int streams,
- int coupled_streams,
- const unsigned char *mapping,
- int application,
- int *error
-) OPUS_ARG_NONNULL(5);
-
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusMSEncoder *opus_multistream_surround_encoder_create(
- opus_int32 Fs,
- int channels,
- int mapping_family,
- int *streams,
- int *coupled_streams,
- unsigned char *mapping,
- int application,
- int *error
-) OPUS_ARG_NONNULL(5);
-
-/** Initialize a previously allocated multistream encoder state.
- * The memory pointed to by \a st must be at least the size returned by
- * opus_multistream_encoder_get_size().
- * This is intended for applications which use their own allocator instead of
- * malloc.
- * To reset a previously initialized state, use the #OPUS_RESET_STATE CTL.
- * @see opus_multistream_encoder_create
- * @see opus_multistream_encoder_get_size
- * @param st <tt>OpusMSEncoder*</tt>: Multistream encoder state to initialize.
- * @param Fs <tt>opus_int32</tt>: Sampling rate of the input signal (in Hz).
- * This must be one of 8000, 12000, 16000,
- * 24000, or 48000.
- * @param channels <tt>int</tt>: Number of channels in the input signal.
- * This must be at most 255.
- * It may be greater than the number of
- * coded channels (<code>streams +
- * coupled_streams</code>).
- * @param streams <tt>int</tt>: The total number of streams to encode from the
- * input.
- * This must be no more than the number of channels.
- * @param coupled_streams <tt>int</tt>: Number of coupled (2 channel) streams
- * to encode.
- * This must be no larger than the total
- * number of streams.
- * Additionally, The total number of
- * encoded channels (<code>streams +
- * coupled_streams</code>) must be no
- * more than the number of input channels.
- * @param[in] mapping <code>const unsigned char[channels]</code>: Mapping from
- * encoded channels to input channels, as described in
- * @ref opus_multistream. As an extra constraint, the
- * multistream encoder does not allow encoding coupled
- * streams for which one channel is unused since this
- * is never a good idea.
- * @param application <tt>int</tt>: The target encoder application.
- * This must be one of the following:
- * <dl>
- * <dt>#OPUS_APPLICATION_VOIP</dt>
- * <dd>Process signal for improved speech intelligibility.</dd>
- * <dt>#OPUS_APPLICATION_AUDIO</dt>
- * <dd>Favor faithfulness to the original input.</dd>
- * <dt>#OPUS_APPLICATION_RESTRICTED_LOWDELAY</dt>
- * <dd>Configure the minimum possible coding delay by disabling certain modes
- * of operation.</dd>
- * </dl>
- * @returns #OPUS_OK on success, or an error code (see @ref opus_errorcodes)
- * on failure.
- */
-OPUS_EXPORT int opus_multistream_encoder_init(
- OpusMSEncoder *st,
- opus_int32 Fs,
- int channels,
- int streams,
- int coupled_streams,
- const unsigned char *mapping,
- int application
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(6);
-
-OPUS_EXPORT int opus_multistream_surround_encoder_init(
- OpusMSEncoder *st,
- opus_int32 Fs,
- int channels,
- int mapping_family,
- int *streams,
- int *coupled_streams,
- unsigned char *mapping,
- int application
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(6);
-
-/** Encodes a multistream Opus frame.
- * @param st <tt>OpusMSEncoder*</tt>: Multistream encoder state.
- * @param[in] pcm <tt>const opus_int16*</tt>: The input signal as interleaved
- * samples.
- * This must contain
- * <code>frame_size*channels</code>
- * samples.
- * @param frame_size <tt>int</tt>: Number of samples per channel in the input
- * signal.
- * This must be an Opus frame size for the
- * encoder's sampling rate.
- * For example, at 48 kHz the permitted values
- * are 120, 240, 480, 960, 1920, and 2880.
- * Passing in a duration of less than 10 ms
- * (480 samples at 48 kHz) will prevent the
- * encoder from using the LPC or hybrid modes.
- * @param[out] data <tt>unsigned char*</tt>: Output payload.
- * This must contain storage for at
- * least \a max_data_bytes.
- * @param [in] max_data_bytes <tt>opus_int32</tt>: Size of the allocated
- * memory for the output
- * payload. This may be
- * used to impose an upper limit on
- * the instant bitrate, but should
- * not be used as the only bitrate
- * control. Use #OPUS_SET_BITRATE to
- * control the bitrate.
- * @returns The length of the encoded packet (in bytes) on success or a
- * negative error code (see @ref opus_errorcodes) on failure.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_multistream_encode(
- OpusMSEncoder *st,
- const opus_int16 *pcm,
- int frame_size,
- unsigned char *data,
- opus_int32 max_data_bytes
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4);
-
-/** Encodes a multistream Opus frame from floating point input.
- * @param st <tt>OpusMSEncoder*</tt>: Multistream encoder state.
- * @param[in] pcm <tt>const float*</tt>: The input signal as interleaved
- * samples with a normal range of
- * +/-1.0.
- * Samples with a range beyond +/-1.0
- * are supported but will be clipped by
- * decoders using the integer API and
- * should only be used if it is known
- * that the far end supports extended
- * dynamic range.
- * This must contain
- * <code>frame_size*channels</code>
- * samples.
- * @param frame_size <tt>int</tt>: Number of samples per channel in the input
- * signal.
- * This must be an Opus frame size for the
- * encoder's sampling rate.
- * For example, at 48 kHz the permitted values
- * are 120, 240, 480, 960, 1920, and 2880.
- * Passing in a duration of less than 10 ms
- * (480 samples at 48 kHz) will prevent the
- * encoder from using the LPC or hybrid modes.
- * @param[out] data <tt>unsigned char*</tt>: Output payload.
- * This must contain storage for at
- * least \a max_data_bytes.
- * @param [in] max_data_bytes <tt>opus_int32</tt>: Size of the allocated
- * memory for the output
- * payload. This may be
- * used to impose an upper limit on
- * the instant bitrate, but should
- * not be used as the only bitrate
- * control. Use #OPUS_SET_BITRATE to
- * control the bitrate.
- * @returns The length of the encoded packet (in bytes) on success or a
- * negative error code (see @ref opus_errorcodes) on failure.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_multistream_encode_float(
- OpusMSEncoder *st,
- const float *pcm,
- int frame_size,
- unsigned char *data,
- opus_int32 max_data_bytes
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(2) OPUS_ARG_NONNULL(4);
-
-/** Frees an <code>OpusMSEncoder</code> allocated by
- * opus_multistream_encoder_create().
- * @param st <tt>OpusMSEncoder*</tt>: Multistream encoder state to be freed.
- */
-OPUS_EXPORT void opus_multistream_encoder_destroy(OpusMSEncoder *st);
-
-/** Perform a CTL function on a multistream Opus encoder.
- *
- * Generally the request and subsequent arguments are generated by a
- * convenience macro.
- * @param st <tt>OpusMSEncoder*</tt>: Multistream encoder state.
- * @param request This and all remaining parameters should be replaced by one
- * of the convenience macros in @ref opus_genericctls,
- * @ref opus_encoderctls, or @ref opus_multistream_ctls.
- * @see opus_genericctls
- * @see opus_encoderctls
- * @see opus_multistream_ctls
- */
-OPUS_EXPORT int opus_multistream_encoder_ctl(OpusMSEncoder *st, int request, ...) OPUS_ARG_NONNULL(1);
-
-/**@}*/
-
-/**\name Multistream decoder functions */
-/**@{*/
-
-/** Gets the size of an <code>OpusMSDecoder</code> structure.
- * @param streams <tt>int</tt>: The total number of streams coded in the
- * input.
- * This must be no more than 255.
- * @param coupled_streams <tt>int</tt>: Number streams to decode as coupled
- * (2 channel) streams.
- * This must be no larger than the total
- * number of streams.
- * Additionally, The total number of
- * coded channels (<code>streams +
- * coupled_streams</code>) must be no
- * more than 255.
- * @returns The size in bytes on success, or a negative error code
- * (see @ref opus_errorcodes) on error.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT opus_int32 opus_multistream_decoder_get_size(
- int streams,
- int coupled_streams
-);
-
-/** Allocates and initializes a multistream decoder state.
- * Call opus_multistream_decoder_destroy() to release
- * this object when finished.
- * @param Fs <tt>opus_int32</tt>: Sampling rate to decode at (in Hz).
- * This must be one of 8000, 12000, 16000,
- * 24000, or 48000.
- * @param channels <tt>int</tt>: Number of channels to output.
- * This must be at most 255.
- * It may be different from the number of coded
- * channels (<code>streams +
- * coupled_streams</code>).
- * @param streams <tt>int</tt>: The total number of streams coded in the
- * input.
- * This must be no more than 255.
- * @param coupled_streams <tt>int</tt>: Number of streams to decode as coupled
- * (2 channel) streams.
- * This must be no larger than the total
- * number of streams.
- * Additionally, The total number of
- * coded channels (<code>streams +
- * coupled_streams</code>) must be no
- * more than 255.
- * @param[in] mapping <code>const unsigned char[channels]</code>: Mapping from
- * coded channels to output channels, as described in
- * @ref opus_multistream.
- * @param[out] error <tt>int *</tt>: Returns #OPUS_OK on success, or an error
- * code (see @ref opus_errorcodes) on
- * failure.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT OpusMSDecoder *opus_multistream_decoder_create(
- opus_int32 Fs,
- int channels,
- int streams,
- int coupled_streams,
- const unsigned char *mapping,
- int *error
-) OPUS_ARG_NONNULL(5);
-
-/** Intialize a previously allocated decoder state object.
- * The memory pointed to by \a st must be at least the size returned by
- * opus_multistream_encoder_get_size().
- * This is intended for applications which use their own allocator instead of
- * malloc.
- * To reset a previously initialized state, use the #OPUS_RESET_STATE CTL.
- * @see opus_multistream_decoder_create
- * @see opus_multistream_deocder_get_size
- * @param st <tt>OpusMSEncoder*</tt>: Multistream encoder state to initialize.
- * @param Fs <tt>opus_int32</tt>: Sampling rate to decode at (in Hz).
- * This must be one of 8000, 12000, 16000,
- * 24000, or 48000.
- * @param channels <tt>int</tt>: Number of channels to output.
- * This must be at most 255.
- * It may be different from the number of coded
- * channels (<code>streams +
- * coupled_streams</code>).
- * @param streams <tt>int</tt>: The total number of streams coded in the
- * input.
- * This must be no more than 255.
- * @param coupled_streams <tt>int</tt>: Number of streams to decode as coupled
- * (2 channel) streams.
- * This must be no larger than the total
- * number of streams.
- * Additionally, The total number of
- * coded channels (<code>streams +
- * coupled_streams</code>) must be no
- * more than 255.
- * @param[in] mapping <code>const unsigned char[channels]</code>: Mapping from
- * coded channels to output channels, as described in
- * @ref opus_multistream.
- * @returns #OPUS_OK on success, or an error code (see @ref opus_errorcodes)
- * on failure.
- */
-OPUS_EXPORT int opus_multistream_decoder_init(
- OpusMSDecoder *st,
- opus_int32 Fs,
- int channels,
- int streams,
- int coupled_streams,
- const unsigned char *mapping
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(6);
-
-/** Decode a multistream Opus packet.
- * @param st <tt>OpusMSDecoder*</tt>: Multistream decoder state.
- * @param[in] data <tt>const unsigned char*</tt>: Input payload.
- * Use a <code>NULL</code>
- * pointer to indicate packet
- * loss.
- * @param len <tt>opus_int32</tt>: Number of bytes in payload.
- * @param[out] pcm <tt>opus_int16*</tt>: Output signal, with interleaved
- * samples.
- * This must contain room for
- * <code>frame_size*channels</code>
- * samples.
- * @param frame_size <tt>int</tt>: The number of samples per channel of
- * available space in \a pcm.
- * If this is less than the maximum packet duration
- * (120 ms; 5760 for 48kHz), this function will not be capable
- * of decoding some packets. In the case of PLC (data==NULL)
- * or FEC (decode_fec=1), then frame_size needs to be exactly
- * the duration of audio that is missing, otherwise the
- * decoder will not be in the optimal state to decode the
- * next incoming packet. For the PLC and FEC cases, frame_size
- * <b>must</b> be a multiple of 2.5 ms.
- * @param decode_fec <tt>int</tt>: Flag (0 or 1) to request that any in-band
- * forward error correction data be decoded.
- * If no such data is available, the frame is
- * decoded as if it were lost.
- * @returns Number of samples decoded on success or a negative error code
- * (see @ref opus_errorcodes) on failure.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_multistream_decode(
- OpusMSDecoder *st,
- const unsigned char *data,
- opus_int32 len,
- opus_int16 *pcm,
- int frame_size,
- int decode_fec
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4);
-
-/** Decode a multistream Opus packet with floating point output.
- * @param st <tt>OpusMSDecoder*</tt>: Multistream decoder state.
- * @param[in] data <tt>const unsigned char*</tt>: Input payload.
- * Use a <code>NULL</code>
- * pointer to indicate packet
- * loss.
- * @param len <tt>opus_int32</tt>: Number of bytes in payload.
- * @param[out] pcm <tt>opus_int16*</tt>: Output signal, with interleaved
- * samples.
- * This must contain room for
- * <code>frame_size*channels</code>
- * samples.
- * @param frame_size <tt>int</tt>: The number of samples per channel of
- * available space in \a pcm.
- * If this is less than the maximum packet duration
- * (120 ms; 5760 for 48kHz), this function will not be capable
- * of decoding some packets. In the case of PLC (data==NULL)
- * or FEC (decode_fec=1), then frame_size needs to be exactly
- * the duration of audio that is missing, otherwise the
- * decoder will not be in the optimal state to decode the
- * next incoming packet. For the PLC and FEC cases, frame_size
- * <b>must</b> be a multiple of 2.5 ms.
- * @param decode_fec <tt>int</tt>: Flag (0 or 1) to request that any in-band
- * forward error correction data be decoded.
- * If no such data is available, the frame is
- * decoded as if it were lost.
- * @returns Number of samples decoded on success or a negative error code
- * (see @ref opus_errorcodes) on failure.
- */
-OPUS_EXPORT OPUS_WARN_UNUSED_RESULT int opus_multistream_decode_float(
- OpusMSDecoder *st,
- const unsigned char *data,
- opus_int32 len,
- float *pcm,
- int frame_size,
- int decode_fec
-) OPUS_ARG_NONNULL(1) OPUS_ARG_NONNULL(4);
-
-/** Perform a CTL function on a multistream Opus decoder.
- *
- * Generally the request and subsequent arguments are generated by a
- * convenience macro.
- * @param st <tt>OpusMSDecoder*</tt>: Multistream decoder state.
- * @param request This and all remaining parameters should be replaced by one
- * of the convenience macros in @ref opus_genericctls,
- * @ref opus_decoderctls, or @ref opus_multistream_ctls.
- * @see opus_genericctls
- * @see opus_decoderctls
- * @see opus_multistream_ctls
- */
-OPUS_EXPORT int opus_multistream_decoder_ctl(OpusMSDecoder *st, int request, ...) OPUS_ARG_NONNULL(1);
-
-/** Frees an <code>OpusMSDecoder</code> allocated by
- * opus_multistream_decoder_create().
- * @param st <tt>OpusMSDecoder</tt>: Multistream decoder state to be freed.
- */
-OPUS_EXPORT void opus_multistream_decoder_destroy(OpusMSDecoder *st);
-
-/**@}*/
-
-/**@}*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* OPUS_MULTISTREAM_H */
diff --git a/drivers/opus/opus_multistream_decoder.c b/drivers/opus/opus_multistream_decoder.c
deleted file mode 100644
index 25100edba2..0000000000
--- a/drivers/opus/opus_multistream_decoder.c
+++ /dev/null
@@ -1,534 +0,0 @@
-/* Copyright (c) 2011 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/opus_multistream.h"
-#include "opus/opus.h"
-#include "opus/opus_private.h"
-#include "opus/celt/stack_alloc.h"
-#include <stdarg.h>
-#include "opus/celt/float_cast.h"
-#include "opus/celt/os_support.h"
-
-struct OpusMSDecoder {
- ChannelLayout layout;
- /* Decoder states go here */
-};
-
-
-
-
-/* DECODER */
-
-opus_int32 opus_multistream_decoder_get_size(int nb_streams, int nb_coupled_streams)
-{
- int coupled_size;
- int mono_size;
-
- if(nb_streams<1||nb_coupled_streams>nb_streams||nb_coupled_streams<0)return 0;
- coupled_size = opus_decoder_get_size(2);
- mono_size = opus_decoder_get_size(1);
- return align(sizeof(OpusMSDecoder))
- + nb_coupled_streams * align(coupled_size)
- + (nb_streams-nb_coupled_streams) * align(mono_size);
-}
-
-int opus_multistream_decoder_init(
- OpusMSDecoder *st,
- opus_int32 Fs,
- int channels,
- int streams,
- int coupled_streams,
- const unsigned char *mapping
-)
-{
- int coupled_size;
- int mono_size;
- int i, ret;
- char *ptr;
-
- if ((channels>255) || (channels<1) || (coupled_streams>streams) ||
- (streams<1) || (coupled_streams<0) || (streams>255-coupled_streams))
- return OPUS_BAD_ARG;
-
- st->layout.nb_channels = channels;
- st->layout.nb_streams = streams;
- st->layout.nb_coupled_streams = coupled_streams;
-
- for (i=0;i<st->layout.nb_channels;i++)
- st->layout.mapping[i] = mapping[i];
- if (!validate_layout(&st->layout))
- return OPUS_BAD_ARG;
-
- ptr = (char*)st + align(sizeof(OpusMSDecoder));
- coupled_size = opus_decoder_get_size(2);
- mono_size = opus_decoder_get_size(1);
-
- for (i=0;i<st->layout.nb_coupled_streams;i++)
- {
- ret=opus_decoder_init((OpusDecoder*)ptr, Fs, 2);
- if(ret!=OPUS_OK)return ret;
- ptr += align(coupled_size);
- }
- for (;i<st->layout.nb_streams;i++)
- {
- ret=opus_decoder_init((OpusDecoder*)ptr, Fs, 1);
- if(ret!=OPUS_OK)return ret;
- ptr += align(mono_size);
- }
- return OPUS_OK;
-}
-
-
-OpusMSDecoder *opus_multistream_decoder_create(
- opus_int32 Fs,
- int channels,
- int streams,
- int coupled_streams,
- const unsigned char *mapping,
- int *error
-)
-{
- int ret;
- OpusMSDecoder *st;
- if ((channels>255) || (channels<1) || (coupled_streams>streams) ||
- (streams<1) || (coupled_streams<0) || (streams>255-coupled_streams))
- {
- if (error)
- *error = OPUS_BAD_ARG;
- return NULL;
- }
- st = (OpusMSDecoder *)opus_alloc(opus_multistream_decoder_get_size(streams, coupled_streams));
- if (st==NULL)
- {
- if (error)
- *error = OPUS_ALLOC_FAIL;
- return NULL;
- }
- ret = opus_multistream_decoder_init(st, Fs, channels, streams, coupled_streams, mapping);
- if (error)
- *error = ret;
- if (ret != OPUS_OK)
- {
- opus_free(st);
- st = NULL;
- }
- return st;
-}
-
-typedef void (*opus_copy_channel_out_func)(
- void *dst,
- int dst_stride,
- int dst_channel,
- const opus_val16 *src,
- int src_stride,
- int frame_size
-);
-
-static int opus_multistream_packet_validate(const unsigned char *data,
- opus_int32 len, int nb_streams, opus_int32 Fs)
-{
- int s;
- int count;
- unsigned char toc;
- opus_int16 size[48];
- int samples=0;
- opus_int32 packet_offset;
-
- for (s=0;s<nb_streams;s++)
- {
- int tmp_samples;
- if (len<=0)
- return OPUS_INVALID_PACKET;
- count = opus_packet_parse_impl(data, len, s!=nb_streams-1, &toc, NULL,
- size, NULL, &packet_offset);
- if (count<0)
- return count;
- tmp_samples = opus_packet_get_nb_samples(data, packet_offset, Fs);
- if (s!=0 && samples != tmp_samples)
- return OPUS_INVALID_PACKET;
- samples = tmp_samples;
- data += packet_offset;
- len -= packet_offset;
- }
- return samples;
-}
-
-static int opus_multistream_decode_native(
- OpusMSDecoder *st,
- const unsigned char *data,
- opus_int32 len,
- void *pcm,
- opus_copy_channel_out_func copy_channel_out,
- int frame_size,
- int decode_fec,
- int soft_clip
-)
-{
- opus_int32 Fs;
- int coupled_size;
- int mono_size;
- int s, c;
- char *ptr;
- int do_plc=0;
- VARDECL(opus_val16, buf);
- ALLOC_STACK;
-
- /* Limit frame_size to avoid excessive stack allocations. */
- opus_multistream_decoder_ctl(st, OPUS_GET_SAMPLE_RATE(&Fs));
- frame_size = IMIN(frame_size, Fs/25*3);
- ALLOC(buf, 2*frame_size, opus_val16);
- ptr = (char*)st + align(sizeof(OpusMSDecoder));
- coupled_size = opus_decoder_get_size(2);
- mono_size = opus_decoder_get_size(1);
-
- if (len==0)
- do_plc = 1;
- if (len < 0)
- {
- RESTORE_STACK;
- return OPUS_BAD_ARG;
- }
- if (!do_plc && len < 2*st->layout.nb_streams-1)
- {
- RESTORE_STACK;
- return OPUS_INVALID_PACKET;
- }
- if (!do_plc)
- {
- int ret = opus_multistream_packet_validate(data, len, st->layout.nb_streams, Fs);
- if (ret < 0)
- {
- RESTORE_STACK;
- return ret;
- } else if (ret > frame_size)
- {
- RESTORE_STACK;
- return OPUS_BUFFER_TOO_SMALL;
- }
- }
- for (s=0;s<st->layout.nb_streams;s++)
- {
- OpusDecoder *dec;
- int packet_offset, ret;
-
- dec = (OpusDecoder*)ptr;
- ptr += (s < st->layout.nb_coupled_streams) ? align(coupled_size) : align(mono_size);
-
- if (!do_plc && len<=0)
- {
- RESTORE_STACK;
- return OPUS_INTERNAL_ERROR;
- }
- packet_offset = 0;
- ret = opus_decode_native(dec, data, len, buf, frame_size, decode_fec, s!=st->layout.nb_streams-1, &packet_offset, soft_clip);
- data += packet_offset;
- len -= packet_offset;
- if (ret <= 0)
- {
- RESTORE_STACK;
- return ret;
- }
- frame_size = ret;
- if (s < st->layout.nb_coupled_streams)
- {
- int chan, prev;
- prev = -1;
- /* Copy "left" audio to the channel(s) where it belongs */
- while ( (chan = get_left_channel(&st->layout, s, prev)) != -1)
- {
- (*copy_channel_out)(pcm, st->layout.nb_channels, chan,
- buf, 2, frame_size);
- prev = chan;
- }
- prev = -1;
- /* Copy "right" audio to the channel(s) where it belongs */
- while ( (chan = get_right_channel(&st->layout, s, prev)) != -1)
- {
- (*copy_channel_out)(pcm, st->layout.nb_channels, chan,
- buf+1, 2, frame_size);
- prev = chan;
- }
- } else {
- int chan, prev;
- prev = -1;
- /* Copy audio to the channel(s) where it belongs */
- while ( (chan = get_mono_channel(&st->layout, s, prev)) != -1)
- {
- (*copy_channel_out)(pcm, st->layout.nb_channels, chan,
- buf, 1, frame_size);
- prev = chan;
- }
- }
- }
- /* Handle muted channels */
- for (c=0;c<st->layout.nb_channels;c++)
- {
- if (st->layout.mapping[c] == 255)
- {
- (*copy_channel_out)(pcm, st->layout.nb_channels, c,
- NULL, 0, frame_size);
- }
- }
- RESTORE_STACK;
- return frame_size;
-}
-
-#if !defined(DISABLE_FLOAT_API)
-static void opus_copy_channel_out_float(
- void *dst,
- int dst_stride,
- int dst_channel,
- const opus_val16 *src,
- int src_stride,
- int frame_size
-)
-{
- float *float_dst;
- opus_int32 i;
- float_dst = (float*)dst;
- if (src != NULL)
- {
- for (i=0;i<frame_size;i++)
-#if defined(FIXED_POINT)
- float_dst[i*dst_stride+dst_channel] = (1/32768.f)*src[i*src_stride];
-#else
- float_dst[i*dst_stride+dst_channel] = src[i*src_stride];
-#endif
- }
- else
- {
- for (i=0;i<frame_size;i++)
- float_dst[i*dst_stride+dst_channel] = 0;
- }
-}
-#endif
-
-static void opus_copy_channel_out_short(
- void *dst,
- int dst_stride,
- int dst_channel,
- const opus_val16 *src,
- int src_stride,
- int frame_size
-)
-{
- opus_int16 *short_dst;
- opus_int32 i;
- short_dst = (opus_int16*)dst;
- if (src != NULL)
- {
- for (i=0;i<frame_size;i++)
-#if defined(FIXED_POINT)
- short_dst[i*dst_stride+dst_channel] = src[i*src_stride];
-#else
- short_dst[i*dst_stride+dst_channel] = FLOAT2INT16(src[i*src_stride]);
-#endif
- }
- else
- {
- for (i=0;i<frame_size;i++)
- short_dst[i*dst_stride+dst_channel] = 0;
- }
-}
-
-
-
-#ifdef OPUS_FIXED_POINT
-int opus_multistream_decode(
- OpusMSDecoder *st,
- const unsigned char *data,
- opus_int32 len,
- opus_int16 *pcm,
- int frame_size,
- int decode_fec
-)
-{
- return opus_multistream_decode_native(st, data, len,
- pcm, opus_copy_channel_out_short, frame_size, decode_fec, 0);
-}
-
-#ifndef DISABLE_FLOAT_API
-int opus_multistream_decode_float(OpusMSDecoder *st, const unsigned char *data,
- opus_int32 len, float *pcm, int frame_size, int decode_fec)
-{
- return opus_multistream_decode_native(st, data, len,
- pcm, opus_copy_channel_out_float, frame_size, decode_fec, 0);
-}
-#endif
-
-#else
-
-int opus_multistream_decode(OpusMSDecoder *st, const unsigned char *data,
- opus_int32 len, opus_int16 *pcm, int frame_size, int decode_fec)
-{
- return opus_multistream_decode_native(st, data, len,
- pcm, opus_copy_channel_out_short, frame_size, decode_fec, 1);
-}
-
-int opus_multistream_decode_float(
- OpusMSDecoder *st,
- const unsigned char *data,
- opus_int32 len,
- float *pcm,
- int frame_size,
- int decode_fec
-)
-{
- return opus_multistream_decode_native(st, data, len,
- pcm, opus_copy_channel_out_float, frame_size, decode_fec, 0);
-}
-#endif
-
-int opus_multistream_decoder_ctl(OpusMSDecoder *st, int request, ...)
-{
- va_list ap;
- int coupled_size, mono_size;
- char *ptr;
- int ret = OPUS_OK;
-
- va_start(ap, request);
-
- coupled_size = opus_decoder_get_size(2);
- mono_size = opus_decoder_get_size(1);
- ptr = (char*)st + align(sizeof(OpusMSDecoder));
- switch (request)
- {
- case OPUS_GET_BANDWIDTH_REQUEST:
- case OPUS_GET_SAMPLE_RATE_REQUEST:
- case OPUS_GET_GAIN_REQUEST:
- case OPUS_GET_LAST_PACKET_DURATION_REQUEST:
- {
- OpusDecoder *dec;
- /* For int32* GET params, just query the first stream */
- opus_int32 *value = va_arg(ap, opus_int32*);
- dec = (OpusDecoder*)ptr;
- ret = opus_decoder_ctl(dec, request, value);
- }
- break;
- case OPUS_GET_FINAL_RANGE_REQUEST:
- {
- int s;
- opus_uint32 *value = va_arg(ap, opus_uint32*);
- opus_uint32 tmp;
- if (!value)
- {
- goto bad_arg;
- }
- *value = 0;
- for (s=0;s<st->layout.nb_streams;s++)
- {
- OpusDecoder *dec;
- dec = (OpusDecoder*)ptr;
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- ret = opus_decoder_ctl(dec, request, &tmp);
- if (ret != OPUS_OK) break;
- *value ^= tmp;
- }
- }
- break;
- case OPUS_RESET_STATE:
- {
- int s;
- for (s=0;s<st->layout.nb_streams;s++)
- {
- OpusDecoder *dec;
-
- dec = (OpusDecoder*)ptr;
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- ret = opus_decoder_ctl(dec, OPUS_RESET_STATE);
- if (ret != OPUS_OK)
- break;
- }
- }
- break;
- case OPUS_MULTISTREAM_GET_DECODER_STATE_REQUEST:
- {
- int s;
- opus_int32 stream_id;
- OpusDecoder **value;
- stream_id = va_arg(ap, opus_int32);
- if (stream_id<0 || stream_id >= st->layout.nb_streams)
- ret = OPUS_BAD_ARG;
- value = va_arg(ap, OpusDecoder**);
- if (!value)
- {
- goto bad_arg;
- }
- for (s=0;s<stream_id;s++)
- {
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- }
- *value = (OpusDecoder*)ptr;
- }
- break;
- case OPUS_SET_GAIN_REQUEST:
- {
- int s;
- /* This works for int32 params */
- opus_int32 value = va_arg(ap, opus_int32);
- for (s=0;s<st->layout.nb_streams;s++)
- {
- OpusDecoder *dec;
-
- dec = (OpusDecoder*)ptr;
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- ret = opus_decoder_ctl(dec, request, value);
- if (ret != OPUS_OK)
- break;
- }
- }
- break;
- default:
- ret = OPUS_UNIMPLEMENTED;
- break;
- }
-
- va_end(ap);
- return ret;
-bad_arg:
- va_end(ap);
- return OPUS_BAD_ARG;
-}
-
-
-void opus_multistream_decoder_destroy(OpusMSDecoder *st)
-{
- opus_free(st);
-}
diff --git a/drivers/opus/opus_multistream_encoder.c b/drivers/opus/opus_multistream_encoder.c
deleted file mode 100644
index 426c72e997..0000000000
--- a/drivers/opus/opus_multistream_encoder.c
+++ /dev/null
@@ -1,1217 +0,0 @@
-/* Copyright (c) 2011 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/opus_multistream.h"
-#include "opus/opus.h"
-#include "opus/opus_private.h"
-#include "opus/celt/stack_alloc.h"
-#include <stdarg.h>
-#include "opus/celt/float_cast.h"
-#include "opus/celt/os_support.h"
-#include "opus/celt/mathops.h"
-#include "opus/celt/mdct.h"
-#include "opus/celt/modes.h"
-#include "opus/celt/bands.h"
-#include "opus/celt/quant_bands.h"
-#include "opus/celt/pitch.h"
-
-typedef struct {
- int nb_streams;
- int nb_coupled_streams;
- unsigned char mapping[8];
-} VorbisLayout;
-
-/* Index is nb_channel-1*/
-static const VorbisLayout vorbis_mappings[8] = {
- {1, 0, {0}}, /* 1: mono */
- {1, 1, {0, 1}}, /* 2: stereo */
- {2, 1, {0, 2, 1}}, /* 3: 1-d surround */
- {2, 2, {0, 1, 2, 3}}, /* 4: quadraphonic surround */
- {3, 2, {0, 4, 1, 2, 3}}, /* 5: 5-channel surround */
- {4, 2, {0, 4, 1, 2, 3, 5}}, /* 6: 5.1 surround */
- {4, 3, {0, 4, 1, 2, 3, 5, 6}}, /* 7: 6.1 surround */
- {5, 3, {0, 6, 1, 2, 3, 4, 5, 7}}, /* 8: 7.1 surround */
-};
-
-typedef void (*opus_copy_channel_in_func)(
- opus_val16 *dst,
- int dst_stride,
- const void *src,
- int src_stride,
- int src_channel,
- int frame_size
-);
-
-struct OpusMSEncoder {
- ChannelLayout layout;
- int arch;
- int lfe_stream;
- int application;
- int variable_duration;
- int surround;
- opus_int32 bitrate_bps;
- float subframe_mem[3];
- /* Encoder states go here */
- /* then opus_val32 window_mem[channels*120]; */
- /* then opus_val32 preemph_mem[channels]; */
-};
-
-static opus_val32 *ms_get_preemph_mem(OpusMSEncoder *st)
-{
- int s;
- char *ptr;
- int coupled_size, mono_size;
-
- coupled_size = opus_encoder_get_size(2);
- mono_size = opus_encoder_get_size(1);
- ptr = (char*)st + align(sizeof(OpusMSEncoder));
- for (s=0;s<st->layout.nb_streams;s++)
- {
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- }
- /* void* cast avoids clang -Wcast-align warning */
- return (opus_val32*)(void*)(ptr+st->layout.nb_channels*120*sizeof(opus_val32));
-}
-
-static opus_val32 *ms_get_window_mem(OpusMSEncoder *st)
-{
- int s;
- char *ptr;
- int coupled_size, mono_size;
-
- coupled_size = opus_encoder_get_size(2);
- mono_size = opus_encoder_get_size(1);
- ptr = (char*)st + align(sizeof(OpusMSEncoder));
- for (s=0;s<st->layout.nb_streams;s++)
- {
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- }
- /* void* cast avoids clang -Wcast-align warning */
- return (opus_val32*)(void*)ptr;
-}
-
-static int validate_encoder_layout(const ChannelLayout *layout)
-{
- int s;
- for (s=0;s<layout->nb_streams;s++)
- {
- if (s < layout->nb_coupled_streams)
- {
- if (get_left_channel(layout, s, -1)==-1)
- return 0;
- if (get_right_channel(layout, s, -1)==-1)
- return 0;
- } else {
- if (get_mono_channel(layout, s, -1)==-1)
- return 0;
- }
- }
- return 1;
-}
-
-static void channel_pos(int channels, int pos[8])
-{
- /* Position in the mix: 0 don't mix, 1: left, 2: center, 3:right */
- if (channels==4)
- {
- pos[0]=1;
- pos[1]=3;
- pos[2]=1;
- pos[3]=3;
- } else if (channels==3||channels==5||channels==6)
- {
- pos[0]=1;
- pos[1]=2;
- pos[2]=3;
- pos[3]=1;
- pos[4]=3;
- pos[5]=0;
- } else if (channels==7)
- {
- pos[0]=1;
- pos[1]=2;
- pos[2]=3;
- pos[3]=1;
- pos[4]=3;
- pos[5]=2;
- pos[6]=0;
- } else if (channels==8)
- {
- pos[0]=1;
- pos[1]=2;
- pos[2]=3;
- pos[3]=1;
- pos[4]=3;
- pos[5]=1;
- pos[6]=3;
- pos[7]=0;
- }
-}
-
-#if 1
-/* Computes a rough approximation of log2(2^a + 2^b) */
-static opus_val16 logSum(opus_val16 a, opus_val16 b)
-{
- opus_val16 max;
- opus_val32 diff;
- opus_val16 frac;
- static const opus_val16 diff_table[17] = {
- QCONST16(0.5000000f, DB_SHIFT), QCONST16(0.2924813f, DB_SHIFT), QCONST16(0.1609640f, DB_SHIFT), QCONST16(0.0849625f, DB_SHIFT),
- QCONST16(0.0437314f, DB_SHIFT), QCONST16(0.0221971f, DB_SHIFT), QCONST16(0.0111839f, DB_SHIFT), QCONST16(0.0056136f, DB_SHIFT),
- QCONST16(0.0028123f, DB_SHIFT)
- };
- int low;
- if (a>b)
- {
- max = a;
- diff = SUB32(EXTEND32(a),EXTEND32(b));
- } else {
- max = b;
- diff = SUB32(EXTEND32(b),EXTEND32(a));
- }
- if (!(diff < QCONST16(8.f, DB_SHIFT))) /* inverted to catch NaNs */
- return max;
-#ifdef OPUS_FIXED_POINT
- low = SHR32(diff, DB_SHIFT-1);
- frac = SHL16(diff - SHL16(low, DB_SHIFT-1), 16-DB_SHIFT);
-#else
- low = (int)floor(2*diff);
- frac = 2*diff - low;
-#endif
- return max + diff_table[low] + MULT16_16_Q15(frac, SUB16(diff_table[low+1], diff_table[low]));
-}
-#else
-opus_val16 logSum(opus_val16 a, opus_val16 b)
-{
- return log2(pow(4, a)+ pow(4, b))/2;
-}
-#endif
-
-void surround_analysis(const CELTMode *celt_mode, const void *pcm, opus_val16 *bandLogE, opus_val32 *mem, opus_val32 *preemph_mem,
- int len, int overlap, int channels, int rate, opus_copy_channel_in_func copy_channel_in, int arch
-)
-{
- int c;
- int i;
- int LM;
- int pos[8] = {0};
- int upsample;
- int frame_size;
- opus_val16 channel_offset;
- opus_val32 bandE[21];
- opus_val16 maskLogE[3][21];
- VARDECL(opus_val32, in);
- VARDECL(opus_val16, x);
- VARDECL(opus_val32, freq);
- SAVE_STACK;
-
- upsample = resampling_factor(rate);
- frame_size = len*upsample;
-
- for (LM=0;LM<celt_mode->maxLM;LM++)
- if (celt_mode->shortMdctSize<<LM==frame_size)
- break;
-
- ALLOC(in, frame_size+overlap, opus_val32);
- ALLOC(x, len, opus_val16);
- ALLOC(freq, frame_size, opus_val32);
-
- channel_pos(channels, pos);
-
- for (c=0;c<3;c++)
- for (i=0;i<21;i++)
- maskLogE[c][i] = -QCONST16(28.f, DB_SHIFT);
-
- for (c=0;c<channels;c++)
- {
- OPUS_COPY(in, mem+c*overlap, overlap);
- (*copy_channel_in)(x, 1, pcm, channels, c, len);
- celt_preemphasis(x, in+overlap, frame_size, 1, upsample, celt_mode->preemph, preemph_mem+c, 0);
-#ifndef OPUS_FIXED_POINT
- {
- opus_val32 sum;
- sum = celt_inner_prod(in, in, frame_size+overlap, 0);
- /* This should filter out both NaNs and ridiculous signals that could
- cause NaNs further down. */
- if (!(sum < 1e9f) || celt_isnan(sum))
- {
- OPUS_CLEAR(in, frame_size+overlap);
- preemph_mem[c] = 0;
- }
- }
-#endif
- clt_mdct_forward(&celt_mode->mdct, in, freq, celt_mode->window,
- overlap, celt_mode->maxLM-LM, 1, arch);
- if (upsample != 1)
- {
- int bound = len;
- for (i=0;i<bound;i++)
- freq[i] *= upsample;
- for (;i<frame_size;i++)
- freq[i] = 0;
- }
-
- compute_band_energies(celt_mode, freq, bandE, 21, 1, LM);
- amp2Log2(celt_mode, 21, 21, bandE, bandLogE+21*c, 1);
- /* Apply spreading function with -6 dB/band going up and -12 dB/band going down. */
- for (i=1;i<21;i++)
- bandLogE[21*c+i] = MAX16(bandLogE[21*c+i], bandLogE[21*c+i-1]-QCONST16(1.f, DB_SHIFT));
- for (i=19;i>=0;i--)
- bandLogE[21*c+i] = MAX16(bandLogE[21*c+i], bandLogE[21*c+i+1]-QCONST16(2.f, DB_SHIFT));
- if (pos[c]==1)
- {
- for (i=0;i<21;i++)
- maskLogE[0][i] = logSum(maskLogE[0][i], bandLogE[21*c+i]);
- } else if (pos[c]==3)
- {
- for (i=0;i<21;i++)
- maskLogE[2][i] = logSum(maskLogE[2][i], bandLogE[21*c+i]);
- } else if (pos[c]==2)
- {
- for (i=0;i<21;i++)
- {
- maskLogE[0][i] = logSum(maskLogE[0][i], bandLogE[21*c+i]-QCONST16(.5f, DB_SHIFT));
- maskLogE[2][i] = logSum(maskLogE[2][i], bandLogE[21*c+i]-QCONST16(.5f, DB_SHIFT));
- }
- }
-#if 0
- for (i=0;i<21;i++)
- printf("%f ", bandLogE[21*c+i]);
- float sum=0;
- for (i=0;i<21;i++)
- sum += bandLogE[21*c+i];
- printf("%f ", sum/21);
-#endif
- OPUS_COPY(mem+c*overlap, in+frame_size, overlap);
- }
- for (i=0;i<21;i++)
- maskLogE[1][i] = MIN32(maskLogE[0][i],maskLogE[2][i]);
- channel_offset = HALF16(celt_log2(QCONST32(2.f,14)/(channels-1)));
- for (c=0;c<3;c++)
- for (i=0;i<21;i++)
- maskLogE[c][i] += channel_offset;
-#if 0
- for (c=0;c<3;c++)
- {
- for (i=0;i<21;i++)
- printf("%f ", maskLogE[c][i]);
- }
-#endif
- for (c=0;c<channels;c++)
- {
- opus_val16 *mask;
- if (pos[c]!=0)
- {
- mask = &maskLogE[pos[c]-1][0];
- for (i=0;i<21;i++)
- bandLogE[21*c+i] = bandLogE[21*c+i] - mask[i];
- } else {
- for (i=0;i<21;i++)
- bandLogE[21*c+i] = 0;
- }
-#if 0
- for (i=0;i<21;i++)
- printf("%f ", bandLogE[21*c+i]);
- printf("\n");
-#endif
-#if 0
- float sum=0;
- for (i=0;i<21;i++)
- sum += bandLogE[21*c+i];
- printf("%f ", sum/(float)QCONST32(21.f, DB_SHIFT));
- printf("\n");
-#endif
- }
- RESTORE_STACK;
-}
-
-opus_int32 opus_multistream_encoder_get_size(int nb_streams, int nb_coupled_streams)
-{
- int coupled_size;
- int mono_size;
-
- if(nb_streams<1||nb_coupled_streams>nb_streams||nb_coupled_streams<0)return 0;
- coupled_size = opus_encoder_get_size(2);
- mono_size = opus_encoder_get_size(1);
- return align(sizeof(OpusMSEncoder))
- + nb_coupled_streams * align(coupled_size)
- + (nb_streams-nb_coupled_streams) * align(mono_size);
-}
-
-opus_int32 opus_multistream_surround_encoder_get_size(int channels, int mapping_family)
-{
- int nb_streams;
- int nb_coupled_streams;
- opus_int32 size;
-
- if (mapping_family==0)
- {
- if (channels==1)
- {
- nb_streams=1;
- nb_coupled_streams=0;
- } else if (channels==2)
- {
- nb_streams=1;
- nb_coupled_streams=1;
- } else
- return 0;
- } else if (mapping_family==1 && channels<=8 && channels>=1)
- {
- nb_streams=vorbis_mappings[channels-1].nb_streams;
- nb_coupled_streams=vorbis_mappings[channels-1].nb_coupled_streams;
- } else if (mapping_family==255)
- {
- nb_streams=channels;
- nb_coupled_streams=0;
- } else
- return 0;
- size = opus_multistream_encoder_get_size(nb_streams, nb_coupled_streams);
- if (channels>2)
- {
- size += channels*(120*sizeof(opus_val32) + sizeof(opus_val32));
- }
- return size;
-}
-
-
-static int opus_multistream_encoder_init_impl(
- OpusMSEncoder *st,
- opus_int32 Fs,
- int channels,
- int streams,
- int coupled_streams,
- const unsigned char *mapping,
- int application,
- int surround
-)
-{
- int coupled_size;
- int mono_size;
- int i, ret;
- char *ptr;
-
- if ((channels>255) || (channels<1) || (coupled_streams>streams) ||
- (streams<1) || (coupled_streams<0) || (streams>255-coupled_streams))
- return OPUS_BAD_ARG;
-
- st->arch = opus_select_arch();
- st->layout.nb_channels = channels;
- st->layout.nb_streams = streams;
- st->layout.nb_coupled_streams = coupled_streams;
- st->subframe_mem[0]=st->subframe_mem[1]=st->subframe_mem[2]=0;
- if (!surround)
- st->lfe_stream = -1;
- st->bitrate_bps = OPUS_AUTO;
- st->application = application;
- st->variable_duration = OPUS_FRAMESIZE_ARG;
- for (i=0;i<st->layout.nb_channels;i++)
- st->layout.mapping[i] = mapping[i];
- if (!validate_layout(&st->layout) || !validate_encoder_layout(&st->layout))
- return OPUS_BAD_ARG;
- ptr = (char*)st + align(sizeof(OpusMSEncoder));
- coupled_size = opus_encoder_get_size(2);
- mono_size = opus_encoder_get_size(1);
-
- for (i=0;i<st->layout.nb_coupled_streams;i++)
- {
- ret = opus_encoder_init((OpusEncoder*)ptr, Fs, 2, application);
- if(ret!=OPUS_OK)return ret;
- if (i==st->lfe_stream)
- opus_encoder_ctl((OpusEncoder*)ptr, OPUS_SET_LFE(1));
- ptr += align(coupled_size);
- }
- for (;i<st->layout.nb_streams;i++)
- {
- ret = opus_encoder_init((OpusEncoder*)ptr, Fs, 1, application);
- if (i==st->lfe_stream)
- opus_encoder_ctl((OpusEncoder*)ptr, OPUS_SET_LFE(1));
- if(ret!=OPUS_OK)return ret;
- ptr += align(mono_size);
- }
- if (surround)
- {
- OPUS_CLEAR(ms_get_preemph_mem(st), channels);
- OPUS_CLEAR(ms_get_window_mem(st), channels*120);
- }
- st->surround = surround;
- return OPUS_OK;
-}
-
-int opus_multistream_encoder_init(
- OpusMSEncoder *st,
- opus_int32 Fs,
- int channels,
- int streams,
- int coupled_streams,
- const unsigned char *mapping,
- int application
-)
-{
- return opus_multistream_encoder_init_impl(st, Fs, channels, streams, coupled_streams, mapping, application, 0);
-}
-
-int opus_multistream_surround_encoder_init(
- OpusMSEncoder *st,
- opus_int32 Fs,
- int channels,
- int mapping_family,
- int *streams,
- int *coupled_streams,
- unsigned char *mapping,
- int application
-)
-{
- if ((channels>255) || (channels<1))
- return OPUS_BAD_ARG;
- st->lfe_stream = -1;
- if (mapping_family==0)
- {
- if (channels==1)
- {
- *streams=1;
- *coupled_streams=0;
- mapping[0]=0;
- } else if (channels==2)
- {
- *streams=1;
- *coupled_streams=1;
- mapping[0]=0;
- mapping[1]=1;
- } else
- return OPUS_UNIMPLEMENTED;
- } else if (mapping_family==1 && channels<=8 && channels>=1)
- {
- int i;
- *streams=vorbis_mappings[channels-1].nb_streams;
- *coupled_streams=vorbis_mappings[channels-1].nb_coupled_streams;
- for (i=0;i<channels;i++)
- mapping[i] = vorbis_mappings[channels-1].mapping[i];
- if (channels>=6)
- st->lfe_stream = *streams-1;
- } else if (mapping_family==255)
- {
- int i;
- *streams=channels;
- *coupled_streams=0;
- for(i=0;i<channels;i++)
- mapping[i] = i;
- } else
- return OPUS_UNIMPLEMENTED;
- return opus_multistream_encoder_init_impl(st, Fs, channels, *streams, *coupled_streams,
- mapping, application, channels>2&&mapping_family==1);
-}
-
-OpusMSEncoder *opus_multistream_encoder_create(
- opus_int32 Fs,
- int channels,
- int streams,
- int coupled_streams,
- const unsigned char *mapping,
- int application,
- int *error
-)
-{
- int ret;
- OpusMSEncoder *st;
- if ((channels>255) || (channels<1) || (coupled_streams>streams) ||
- (streams<1) || (coupled_streams<0) || (streams>255-coupled_streams))
- {
- if (error)
- *error = OPUS_BAD_ARG;
- return NULL;
- }
- st = (OpusMSEncoder *)opus_alloc(opus_multistream_encoder_get_size(streams, coupled_streams));
- if (st==NULL)
- {
- if (error)
- *error = OPUS_ALLOC_FAIL;
- return NULL;
- }
- ret = opus_multistream_encoder_init(st, Fs, channels, streams, coupled_streams, mapping, application);
- if (ret != OPUS_OK)
- {
- opus_free(st);
- st = NULL;
- }
- if (error)
- *error = ret;
- return st;
-}
-
-OpusMSEncoder *opus_multistream_surround_encoder_create(
- opus_int32 Fs,
- int channels,
- int mapping_family,
- int *streams,
- int *coupled_streams,
- unsigned char *mapping,
- int application,
- int *error
-)
-{
- int ret;
- opus_int32 size;
- OpusMSEncoder *st;
- if ((channels>255) || (channels<1))
- {
- if (error)
- *error = OPUS_BAD_ARG;
- return NULL;
- }
- size = opus_multistream_surround_encoder_get_size(channels, mapping_family);
- if (!size)
- {
- if (error)
- *error = OPUS_UNIMPLEMENTED;
- return NULL;
- }
- st = (OpusMSEncoder *)opus_alloc(size);
- if (st==NULL)
- {
- if (error)
- *error = OPUS_ALLOC_FAIL;
- return NULL;
- }
- ret = opus_multistream_surround_encoder_init(st, Fs, channels, mapping_family, streams, coupled_streams, mapping, application);
- if (ret != OPUS_OK)
- {
- opus_free(st);
- st = NULL;
- }
- if (error)
- *error = ret;
- return st;
-}
-
-static opus_int32 surround_rate_allocation(
- OpusMSEncoder *st,
- opus_int32 *rate,
- int frame_size
- )
-{
- int i;
- opus_int32 channel_rate;
- opus_int32 Fs;
- char *ptr;
- int stream_offset;
- int lfe_offset;
- int coupled_ratio; /* Q8 */
- int lfe_ratio; /* Q8 */
- opus_int32 rate_sum=0;
-
- ptr = (char*)st + align(sizeof(OpusMSEncoder));
- opus_encoder_ctl((OpusEncoder*)ptr, OPUS_GET_SAMPLE_RATE(&Fs));
-
- if (st->bitrate_bps > st->layout.nb_channels*40000)
- stream_offset = 20000;
- else
- stream_offset = st->bitrate_bps/st->layout.nb_channels/2;
- stream_offset += 60*(Fs/frame_size-50);
- /* We start by giving each stream (coupled or uncoupled) the same bitrate.
- This models the main saving of coupled channels over uncoupled. */
- /* The LFE stream is an exception to the above and gets fewer bits. */
- lfe_offset = 3500 + 60*(Fs/frame_size-50);
- /* Coupled streams get twice the mono rate after the first 20 kb/s. */
- coupled_ratio = 512;
- /* Should depend on the bitrate, for now we assume LFE gets 1/8 the bits of mono */
- lfe_ratio = 32;
-
- /* Compute bitrate allocation between streams */
- if (st->bitrate_bps==OPUS_AUTO)
- {
- channel_rate = Fs+60*Fs/frame_size;
- } else if (st->bitrate_bps==OPUS_BITRATE_MAX)
- {
- channel_rate = 300000;
- } else {
- int nb_lfe;
- int nb_uncoupled;
- int nb_coupled;
- int total;
- nb_lfe = (st->lfe_stream!=-1);
- nb_coupled = st->layout.nb_coupled_streams;
- nb_uncoupled = st->layout.nb_streams-nb_coupled-nb_lfe;
- total = (nb_uncoupled<<8) /* mono */
- + coupled_ratio*nb_coupled /* stereo */
- + nb_lfe*lfe_ratio;
- channel_rate = 256*(st->bitrate_bps-lfe_offset*nb_lfe-stream_offset*(nb_coupled+nb_uncoupled))/total;
- }
-#ifndef OPUS_FIXED_POINT
- if (st->variable_duration==OPUS_FRAMESIZE_VARIABLE && frame_size != Fs/50)
- {
- opus_int32 bonus;
- bonus = 60*(Fs/frame_size-50);
- channel_rate += bonus;
- }
-#endif
-
- for (i=0;i<st->layout.nb_streams;i++)
- {
- if (i<st->layout.nb_coupled_streams)
- rate[i] = stream_offset+(channel_rate*coupled_ratio>>8);
- else if (i!=st->lfe_stream)
- rate[i] = stream_offset+channel_rate;
- else
- rate[i] = lfe_offset+(channel_rate*lfe_ratio>>8);
- rate[i] = IMAX(rate[i], 500);
- rate_sum += rate[i];
- }
- return rate_sum;
-}
-
-/* Max size in case the encoder decides to return three frames */
-#define MS_FRAME_TMP (3*1275+7)
-static int opus_multistream_encode_native
-(
- OpusMSEncoder *st,
- opus_copy_channel_in_func copy_channel_in,
- const void *pcm,
- int analysis_frame_size,
- unsigned char *data,
- opus_int32 max_data_bytes,
- int lsb_depth,
- downmix_func downmix,
- int float_api
-)
-{
- opus_int32 Fs;
- int coupled_size;
- int mono_size;
- int s;
- char *ptr;
- int tot_size;
- VARDECL(opus_val16, buf);
- VARDECL(opus_val16, bandSMR);
- unsigned char tmp_data[MS_FRAME_TMP];
- OpusRepacketizer rp;
- opus_int32 vbr;
- const CELTMode *celt_mode;
- opus_int32 bitrates[256];
- opus_val16 bandLogE[42];
- opus_val32 *mem = NULL;
- opus_val32 *preemph_mem=NULL;
- int frame_size;
- opus_int32 rate_sum;
- opus_int32 smallest_packet;
- ALLOC_STACK;
-
- if (st->surround)
- {
- preemph_mem = ms_get_preemph_mem(st);
- mem = ms_get_window_mem(st);
- }
-
- ptr = (char*)st + align(sizeof(OpusMSEncoder));
- opus_encoder_ctl((OpusEncoder*)ptr, OPUS_GET_SAMPLE_RATE(&Fs));
- opus_encoder_ctl((OpusEncoder*)ptr, OPUS_GET_VBR(&vbr));
- opus_encoder_ctl((OpusEncoder*)ptr, CELT_GET_MODE(&celt_mode));
-
- {
- opus_int32 delay_compensation;
- int channels;
-
- channels = st->layout.nb_streams + st->layout.nb_coupled_streams;
- opus_encoder_ctl((OpusEncoder*)ptr, OPUS_GET_LOOKAHEAD(&delay_compensation));
- delay_compensation -= Fs/400;
- frame_size = compute_frame_size(pcm, analysis_frame_size,
- st->variable_duration, channels, Fs, st->bitrate_bps,
- delay_compensation, downmix
-#ifndef DISABLE_FLOAT_API
- , st->subframe_mem
-#endif
- );
- }
-
- if (400*frame_size < Fs)
- {
- RESTORE_STACK;
- return OPUS_BAD_ARG;
- }
- /* Validate frame_size before using it to allocate stack space.
- This mirrors the checks in opus_encode[_float](). */
- if (400*frame_size != Fs && 200*frame_size != Fs &&
- 100*frame_size != Fs && 50*frame_size != Fs &&
- 25*frame_size != Fs && 50*frame_size != 3*Fs)
- {
- RESTORE_STACK;
- return OPUS_BAD_ARG;
- }
-
- /* Smallest packet the encoder can produce. */
- smallest_packet = st->layout.nb_streams*2-1;
- if (max_data_bytes < smallest_packet)
- {
- RESTORE_STACK;
- return OPUS_BUFFER_TOO_SMALL;
- }
- ALLOC(buf, 2*frame_size, opus_val16);
- coupled_size = opus_encoder_get_size(2);
- mono_size = opus_encoder_get_size(1);
-
- ALLOC(bandSMR, 21*st->layout.nb_channels, opus_val16);
- if (st->surround)
- {
- surround_analysis(celt_mode, pcm, bandSMR, mem, preemph_mem, frame_size, 120, st->layout.nb_channels, Fs, copy_channel_in, st->arch);
- }
-
- /* Compute bitrate allocation between streams (this could be a lot better) */
- rate_sum = surround_rate_allocation(st, bitrates, frame_size);
-
- if (!vbr)
- {
- if (st->bitrate_bps == OPUS_AUTO)
- {
- max_data_bytes = IMIN(max_data_bytes, 3*rate_sum/(3*8*Fs/frame_size));
- } else if (st->bitrate_bps != OPUS_BITRATE_MAX)
- {
- max_data_bytes = IMIN(max_data_bytes, IMAX(smallest_packet,
- 3*st->bitrate_bps/(3*8*Fs/frame_size)));
- }
- }
- ptr = (char*)st + align(sizeof(OpusMSEncoder));
- for (s=0;s<st->layout.nb_streams;s++)
- {
- OpusEncoder *enc;
- enc = (OpusEncoder*)ptr;
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrates[s]));
- if (st->surround)
- {
- opus_int32 equiv_rate;
- equiv_rate = st->bitrate_bps;
- if (frame_size*50 < Fs)
- equiv_rate -= 60*(Fs/frame_size - 50)*st->layout.nb_channels;
- if (equiv_rate > 10000*st->layout.nb_channels)
- opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_FULLBAND));
- else if (equiv_rate > 7000*st->layout.nb_channels)
- opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_SUPERWIDEBAND));
- else if (equiv_rate > 5000*st->layout.nb_channels)
- opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_WIDEBAND));
- else
- opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(OPUS_BANDWIDTH_NARROWBAND));
- if (s < st->layout.nb_coupled_streams)
- {
- /* To preserve the spatial image, force stereo CELT on coupled streams */
- opus_encoder_ctl(enc, OPUS_SET_FORCE_MODE(MODE_CELT_ONLY));
- opus_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS(2));
- }
- }
- }
-
- ptr = (char*)st + align(sizeof(OpusMSEncoder));
- /* Counting ToC */
- tot_size = 0;
- for (s=0;s<st->layout.nb_streams;s++)
- {
- OpusEncoder *enc;
- int len;
- int curr_max;
- int c1, c2;
-
- opus_repacketizer_init(&rp);
- enc = (OpusEncoder*)ptr;
- if (s < st->layout.nb_coupled_streams)
- {
- int i;
- int left, right;
- left = get_left_channel(&st->layout, s, -1);
- right = get_right_channel(&st->layout, s, -1);
- (*copy_channel_in)(buf, 2,
- pcm, st->layout.nb_channels, left, frame_size);
- (*copy_channel_in)(buf+1, 2,
- pcm, st->layout.nb_channels, right, frame_size);
- ptr += align(coupled_size);
- if (st->surround)
- {
- for (i=0;i<21;i++)
- {
- bandLogE[i] = bandSMR[21*left+i];
- bandLogE[21+i] = bandSMR[21*right+i];
- }
- }
- c1 = left;
- c2 = right;
- } else {
- int i;
- int chan = get_mono_channel(&st->layout, s, -1);
- (*copy_channel_in)(buf, 1,
- pcm, st->layout.nb_channels, chan, frame_size);
- ptr += align(mono_size);
- if (st->surround)
- {
- for (i=0;i<21;i++)
- bandLogE[i] = bandSMR[21*chan+i];
- }
- c1 = chan;
- c2 = -1;
- }
- if (st->surround)
- opus_encoder_ctl(enc, OPUS_SET_ENERGY_MASK(bandLogE));
- /* number of bytes left (+Toc) */
- curr_max = max_data_bytes - tot_size;
- /* Reserve one byte for the last stream and two for the others */
- curr_max -= IMAX(0,2*(st->layout.nb_streams-s-1)-1);
- curr_max = IMIN(curr_max,MS_FRAME_TMP);
- /* Repacketizer will add one or two bytes for self-delimited frames */
- if (s != st->layout.nb_streams-1) curr_max -= curr_max>253 ? 2 : 1;
- if (!vbr && s == st->layout.nb_streams-1)
- opus_encoder_ctl(enc, OPUS_SET_BITRATE(curr_max*(8*Fs/frame_size)));
- len = opus_encode_native(enc, buf, frame_size, tmp_data, curr_max, lsb_depth,
- pcm, analysis_frame_size, c1, c2, st->layout.nb_channels, downmix, float_api);
- if (len<0)
- {
- RESTORE_STACK;
- return len;
- }
- /* We need to use the repacketizer to add the self-delimiting lengths
- while taking into account the fact that the encoder can now return
- more than one frame at a time (e.g. 60 ms CELT-only) */
- opus_repacketizer_cat(&rp, tmp_data, len);
- len = opus_repacketizer_out_range_impl(&rp, 0, opus_repacketizer_get_nb_frames(&rp),
- data, max_data_bytes-tot_size, s != st->layout.nb_streams-1, !vbr && s == st->layout.nb_streams-1);
- data += len;
- tot_size += len;
- }
- /*printf("\n");*/
- RESTORE_STACK;
- return tot_size;
-}
-
-#if !defined(DISABLE_FLOAT_API)
-static void opus_copy_channel_in_float(
- opus_val16 *dst,
- int dst_stride,
- const void *src,
- int src_stride,
- int src_channel,
- int frame_size
-)
-{
- const float *float_src;
- opus_int32 i;
- float_src = (const float *)src;
- for (i=0;i<frame_size;i++)
-#if defined(FIXED_POINT)
- dst[i*dst_stride] = FLOAT2INT16(float_src[i*src_stride+src_channel]);
-#else
- dst[i*dst_stride] = float_src[i*src_stride+src_channel];
-#endif
-}
-#endif
-
-static void opus_copy_channel_in_short(
- opus_val16 *dst,
- int dst_stride,
- const void *src,
- int src_stride,
- int src_channel,
- int frame_size
-)
-{
- const opus_int16 *short_src;
- opus_int32 i;
- short_src = (const opus_int16 *)src;
- for (i=0;i<frame_size;i++)
-#if defined(FIXED_POINT)
- dst[i*dst_stride] = short_src[i*src_stride+src_channel];
-#else
- dst[i*dst_stride] = (1/32768.f)*short_src[i*src_stride+src_channel];
-#endif
-}
-
-
-#ifdef OPUS_FIXED_POINT
-int opus_multistream_encode(
- OpusMSEncoder *st,
- const opus_val16 *pcm,
- int frame_size,
- unsigned char *data,
- opus_int32 max_data_bytes
-)
-{
- return opus_multistream_encode_native(st, opus_copy_channel_in_short,
- pcm, frame_size, data, max_data_bytes, 16, downmix_int, 0);
-}
-
-#ifndef DISABLE_FLOAT_API
-int opus_multistream_encode_float(
- OpusMSEncoder *st,
- const float *pcm,
- int frame_size,
- unsigned char *data,
- opus_int32 max_data_bytes
-)
-{
- return opus_multistream_encode_native(st, opus_copy_channel_in_float,
- pcm, frame_size, data, max_data_bytes, 16, downmix_float, 1);
-}
-#endif
-
-#else
-
-int opus_multistream_encode_float
-(
- OpusMSEncoder *st,
- const opus_val16 *pcm,
- int frame_size,
- unsigned char *data,
- opus_int32 max_data_bytes
-)
-{
- return opus_multistream_encode_native(st, opus_copy_channel_in_float,
- pcm, frame_size, data, max_data_bytes, 24, downmix_float, 1);
-}
-
-int opus_multistream_encode(
- OpusMSEncoder *st,
- const opus_int16 *pcm,
- int frame_size,
- unsigned char *data,
- opus_int32 max_data_bytes
-)
-{
- return opus_multistream_encode_native(st, opus_copy_channel_in_short,
- pcm, frame_size, data, max_data_bytes, 16, downmix_int, 0);
-}
-#endif
-
-int opus_multistream_encoder_ctl(OpusMSEncoder *st, int request, ...)
-{
- va_list ap;
- int coupled_size, mono_size;
- char *ptr;
- int ret = OPUS_OK;
-
- va_start(ap, request);
-
- coupled_size = opus_encoder_get_size(2);
- mono_size = opus_encoder_get_size(1);
- ptr = (char*)st + align(sizeof(OpusMSEncoder));
- switch (request)
- {
- case OPUS_SET_BITRATE_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- if (value<0 && value!=OPUS_AUTO && value!=OPUS_BITRATE_MAX)
- {
- goto bad_arg;
- }
- st->bitrate_bps = value;
- }
- break;
- case OPUS_GET_BITRATE_REQUEST:
- {
- int s;
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = 0;
- for (s=0;s<st->layout.nb_streams;s++)
- {
- opus_int32 rate;
- OpusEncoder *enc;
- enc = (OpusEncoder*)ptr;
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- opus_encoder_ctl(enc, request, &rate);
- *value += rate;
- }
- }
- break;
- case OPUS_GET_LSB_DEPTH_REQUEST:
- case OPUS_GET_VBR_REQUEST:
- case OPUS_GET_APPLICATION_REQUEST:
- case OPUS_GET_BANDWIDTH_REQUEST:
- case OPUS_GET_COMPLEXITY_REQUEST:
- case OPUS_GET_PACKET_LOSS_PERC_REQUEST:
- case OPUS_GET_DTX_REQUEST:
- case OPUS_GET_VOICE_RATIO_REQUEST:
- case OPUS_GET_VBR_CONSTRAINT_REQUEST:
- case OPUS_GET_SIGNAL_REQUEST:
- case OPUS_GET_LOOKAHEAD_REQUEST:
- case OPUS_GET_SAMPLE_RATE_REQUEST:
- case OPUS_GET_INBAND_FEC_REQUEST:
- case OPUS_GET_FORCE_CHANNELS_REQUEST:
- case OPUS_GET_PREDICTION_DISABLED_REQUEST:
- {
- OpusEncoder *enc;
- /* For int32* GET params, just query the first stream */
- opus_int32 *value = va_arg(ap, opus_int32*);
- enc = (OpusEncoder*)ptr;
- ret = opus_encoder_ctl(enc, request, value);
- }
- break;
- case OPUS_GET_FINAL_RANGE_REQUEST:
- {
- int s;
- opus_uint32 *value = va_arg(ap, opus_uint32*);
- opus_uint32 tmp;
- if (!value)
- {
- goto bad_arg;
- }
- *value=0;
- for (s=0;s<st->layout.nb_streams;s++)
- {
- OpusEncoder *enc;
- enc = (OpusEncoder*)ptr;
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- ret = opus_encoder_ctl(enc, request, &tmp);
- if (ret != OPUS_OK) break;
- *value ^= tmp;
- }
- }
- break;
- case OPUS_SET_LSB_DEPTH_REQUEST:
- case OPUS_SET_COMPLEXITY_REQUEST:
- case OPUS_SET_VBR_REQUEST:
- case OPUS_SET_VBR_CONSTRAINT_REQUEST:
- case OPUS_SET_MAX_BANDWIDTH_REQUEST:
- case OPUS_SET_BANDWIDTH_REQUEST:
- case OPUS_SET_SIGNAL_REQUEST:
- case OPUS_SET_APPLICATION_REQUEST:
- case OPUS_SET_INBAND_FEC_REQUEST:
- case OPUS_SET_PACKET_LOSS_PERC_REQUEST:
- case OPUS_SET_DTX_REQUEST:
- case OPUS_SET_FORCE_MODE_REQUEST:
- case OPUS_SET_FORCE_CHANNELS_REQUEST:
- case OPUS_SET_PREDICTION_DISABLED_REQUEST:
- {
- int s;
- /* This works for int32 params */
- opus_int32 value = va_arg(ap, opus_int32);
- for (s=0;s<st->layout.nb_streams;s++)
- {
- OpusEncoder *enc;
-
- enc = (OpusEncoder*)ptr;
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- ret = opus_encoder_ctl(enc, request, value);
- if (ret != OPUS_OK)
- break;
- }
- }
- break;
- case OPUS_MULTISTREAM_GET_ENCODER_STATE_REQUEST:
- {
- int s;
- opus_int32 stream_id;
- OpusEncoder **value;
- stream_id = va_arg(ap, opus_int32);
- if (stream_id<0 || stream_id >= st->layout.nb_streams)
- ret = OPUS_BAD_ARG;
- value = va_arg(ap, OpusEncoder**);
- if (!value)
- {
- goto bad_arg;
- }
- for (s=0;s<stream_id;s++)
- {
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- }
- *value = (OpusEncoder*)ptr;
- }
- break;
- case OPUS_SET_EXPERT_FRAME_DURATION_REQUEST:
- {
- opus_int32 value = va_arg(ap, opus_int32);
- st->variable_duration = value;
- }
- break;
- case OPUS_GET_EXPERT_FRAME_DURATION_REQUEST:
- {
- opus_int32 *value = va_arg(ap, opus_int32*);
- if (!value)
- {
- goto bad_arg;
- }
- *value = st->variable_duration;
- }
- break;
- case OPUS_RESET_STATE:
- {
- int s;
- st->subframe_mem[0] = st->subframe_mem[1] = st->subframe_mem[2] = 0;
- if (st->surround)
- {
- OPUS_CLEAR(ms_get_preemph_mem(st), st->layout.nb_channels);
- OPUS_CLEAR(ms_get_window_mem(st), st->layout.nb_channels*120);
- }
- for (s=0;s<st->layout.nb_streams;s++)
- {
- OpusEncoder *enc;
- enc = (OpusEncoder*)ptr;
- if (s < st->layout.nb_coupled_streams)
- ptr += align(coupled_size);
- else
- ptr += align(mono_size);
- ret = opus_encoder_ctl(enc, OPUS_RESET_STATE);
- if (ret != OPUS_OK)
- break;
- }
- }
- break;
- default:
- ret = OPUS_UNIMPLEMENTED;
- break;
- }
-
- va_end(ap);
- return ret;
-bad_arg:
- va_end(ap);
- return OPUS_BAD_ARG;
-}
-
-void opus_multistream_encoder_destroy(OpusMSEncoder *st)
-{
- opus_free(st);
-}
diff --git a/drivers/opus/opus_private.h b/drivers/opus/opus_private.h
deleted file mode 100644
index 129977ed11..0000000000
--- a/drivers/opus/opus_private.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Copyright (c) 2012 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 OPUS_PRIVATE_H
-#define OPUS_PRIVATE_H
-
-#include "opus/celt/arch.h"
-#include "opus/opus.h"
-#include "opus/celt/celt.h"
-
-#include <stddef.h> /* offsetof */
-
-struct OpusRepacketizer {
- unsigned char toc;
- int nb_frames;
- const unsigned char *frames[48];
- opus_int16 len[48];
- int framesize;
-};
-
-typedef struct ChannelLayout {
- int nb_channels;
- int nb_streams;
- int nb_coupled_streams;
- unsigned char mapping[256];
-} ChannelLayout;
-
-int validate_layout(const ChannelLayout *layout);
-int get_left_channel(const ChannelLayout *layout, int stream_id, int prev);
-int get_right_channel(const ChannelLayout *layout, int stream_id, int prev);
-int get_mono_channel(const ChannelLayout *layout, int stream_id, int prev);
-
-
-
-#define MODE_SILK_ONLY 1000
-#define MODE_HYBRID 1001
-#define MODE_CELT_ONLY 1002
-
-#define OPUS_SET_VOICE_RATIO_REQUEST 11018
-#define OPUS_GET_VOICE_RATIO_REQUEST 11019
-
-/** Configures the encoder's expected percentage of voice
- * opposed to music or other signals.
- *
- * @note This interface is currently more aspiration than actuality. It's
- * ultimately expected to bias an automatic signal classifier, but it currently
- * just shifts the static bitrate to mode mapping around a little bit.
- *
- * @param[in] x <tt>int</tt>: Voice percentage in the range 0-100, inclusive.
- * @hideinitializer */
-#define OPUS_SET_VOICE_RATIO(x) OPUS_SET_VOICE_RATIO_REQUEST, __opus_check_int(x)
-/** Gets the encoder's configured voice ratio value, @see OPUS_SET_VOICE_RATIO
- *
- * @param[out] x <tt>int*</tt>: Voice percentage in the range 0-100, inclusive.
- * @hideinitializer */
-#define OPUS_GET_VOICE_RATIO(x) OPUS_GET_VOICE_RATIO_REQUEST, __opus_check_int_ptr(x)
-
-
-#define OPUS_SET_FORCE_MODE_REQUEST 11002
-#define OPUS_SET_FORCE_MODE(x) OPUS_SET_FORCE_MODE_REQUEST, __opus_check_int(x)
-
-typedef void (*downmix_func)(const void *, opus_val32 *, int, int, int, int, int);
-void downmix_float(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C);
-void downmix_int(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C);
-
-int encode_size(int size, unsigned char *data);
-
-opus_int32 frame_size_select(opus_int32 frame_size, int variable_duration, opus_int32 Fs);
-
-opus_int32 compute_frame_size(const void *analysis_pcm, int frame_size,
- int variable_duration, int C, opus_int32 Fs, int bitrate_bps,
- int delay_compensation, downmix_func downmix
-#ifndef DISABLE_FLOAT_API
- , float *subframe_mem
-#endif
- );
-
-opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_size,
- unsigned char *data, opus_int32 out_data_bytes, int lsb_depth,
- const void *analysis_pcm, opus_int32 analysis_size, int c1, int c2,
- int analysis_channels, downmix_func downmix, int float_api);
-
-int opus_decode_native(OpusDecoder *st, const unsigned char *data, opus_int32 len,
- opus_val16 *pcm, int frame_size, int decode_fec, int self_delimited,
- opus_int32 *packet_offset, int soft_clip);
-
-/* Make sure everything is properly aligned. */
-static OPUS_INLINE int align(int i)
-{
- struct foo {char c; union { void* p; opus_int32 i; opus_val32 v; } u;};
-
- unsigned int alignment = offsetof(struct foo, u);
-
- /* Optimizing compilers should optimize div and multiply into and
- for all sensible alignment values. */
- return ((i + alignment - 1) / alignment) * alignment;
-}
-
-int opus_packet_parse_impl(const unsigned char *data, opus_int32 len,
- int self_delimited, unsigned char *out_toc,
- const unsigned char *frames[48], opus_int16 size[48],
- int *payload_offset, opus_int32 *packet_offset);
-
-opus_int32 opus_repacketizer_out_range_impl(OpusRepacketizer *rp, int begin, int end,
- unsigned char *data, opus_int32 maxlen, int self_delimited, int pad);
-
-int pad_frame(unsigned char *data, opus_int32 len, opus_int32 new_len);
-
-#endif /* OPUS_PRIVATE_H */
diff --git a/drivers/opus/opus_types.h b/drivers/opus/opus_types.h
deleted file mode 100644
index b28e03aea2..0000000000
--- a/drivers/opus/opus_types.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/* (C) COPYRIGHT 1994-2002 Xiph.Org Foundation */
-/* Modified by Jean-Marc Valin */
-/*
- 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.
-
- 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.
-*/
-/* opus_types.h based on ogg_types.h from libogg */
-
-/**
- @file opus_types.h
- @brief Opus reference implementation types
-*/
-#ifndef OPUS_TYPES_H
-#define OPUS_TYPES_H
-
-/* Use the real stdint.h if it's there (taken from Paul Hsieh's pstdint.h) */
-#if (defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_)) || defined (HAVE_STDINT_H))
-#include <stdint.h>
-
- typedef int16_t opus_int16;
- typedef uint16_t opus_uint16;
- typedef int32_t opus_int32;
- typedef uint32_t opus_uint32;
-#elif defined(_WIN32)
-
-# if defined(__CYGWIN__)
-# include <_G_config.h>
- typedef _G_int32_t opus_int32;
- typedef _G_uint32_t opus_uint32;
- typedef _G_int16 opus_int16;
- typedef _G_uint16 opus_uint16;
-# elif defined(__MINGW32__)
- typedef short opus_int16;
- typedef unsigned short opus_uint16;
- typedef int opus_int32;
- typedef unsigned int opus_uint32;
-# elif defined(__MWERKS__)
- typedef int opus_int32;
- typedef unsigned int opus_uint32;
- typedef short opus_int16;
- typedef unsigned short opus_uint16;
-# else
- /* MSVC/Borland */
- typedef __int32 opus_int32;
- typedef unsigned __int32 opus_uint32;
- typedef __int16 opus_int16;
- typedef unsigned __int16 opus_uint16;
-# endif
-
-#elif defined(__MACOS__)
-
-# include <sys/types.h>
- typedef SInt16 opus_int16;
- typedef UInt16 opus_uint16;
- typedef SInt32 opus_int32;
- typedef UInt32 opus_uint32;
-
-#elif (defined(__APPLE__) && defined(__MACH__)) /* MacOS X Framework build */
-
-# include <sys/types.h>
- typedef int16_t opus_int16;
- typedef u_int16_t opus_uint16;
- typedef int32_t opus_int32;
- typedef u_int32_t opus_uint32;
-
-#elif defined(__BEOS__)
-
- /* Be */
-# include <inttypes.h>
- typedef int16 opus_int16;
- typedef u_int16 opus_uint16;
- typedef int32_t opus_int32;
- typedef u_int32_t opus_uint32;
-
-#elif defined (__EMX__)
-
- /* OS/2 GCC */
- typedef short opus_int16;
- typedef unsigned short opus_uint16;
- typedef int opus_int32;
- typedef unsigned int opus_uint32;
-
-#elif defined (DJGPP)
-
- /* DJGPP */
- typedef short opus_int16;
- typedef unsigned short opus_uint16;
- typedef int opus_int32;
- typedef unsigned int opus_uint32;
-
-#elif defined(R5900)
-
- /* PS2 EE */
- typedef int opus_int32;
- typedef unsigned opus_uint32;
- typedef short opus_int16;
- typedef unsigned short opus_uint16;
-
-#elif defined(__SYMBIAN32__)
-
- /* Symbian GCC */
- typedef signed short opus_int16;
- typedef unsigned short opus_uint16;
- typedef signed int opus_int32;
- typedef unsigned int opus_uint32;
-
-#elif defined(CONFIG_TI_C54X) || defined (CONFIG_TI_C55X)
-
- typedef short opus_int16;
- typedef unsigned short opus_uint16;
- typedef long opus_int32;
- typedef unsigned long opus_uint32;
-
-#elif defined(CONFIG_TI_C6X)
-
- typedef short opus_int16;
- typedef unsigned short opus_uint16;
- typedef int opus_int32;
- typedef unsigned int opus_uint32;
-
-#else
-
- /* Give up, take a reasonable guess */
- typedef short opus_int16;
- typedef unsigned short opus_uint16;
- typedef int opus_int32;
- typedef unsigned int opus_uint32;
-
-#endif
-
-#define opus_int int /* used for counters etc; at least 16 bits */
-#define opus_int64 long long
-#define opus_int8 signed char
-
-#define opus_uint unsigned int /* used for counters etc; at least 16 bits */
-#define opus_uint64 unsigned long long
-#define opus_uint8 unsigned char
-
-#endif /* OPUS_TYPES_H */
diff --git a/drivers/opus/opusfile.c b/drivers/opus/opusfile.c
deleted file mode 100644
index a9d6cc4d63..0000000000
--- a/drivers/opus/opusfile.c
+++ /dev/null
@@ -1,3275 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE libopusfile 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 libopusfile SOURCE CODE IS (C) COPYRIGHT 1994-2012 *
- * by the Xiph.Org Foundation and contributors http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: stdio-based convenience library for opening/seeking/decoding
- last mod: $Id: vorbisfile.c 17573 2010-10-27 14:53:59Z xiphmont $
-
- ********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/internal.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <limits.h>
-#include <string.h>
-#include <math.h>
-
-#include "opus/opusfile.h"
-
-/*This implementation is largely based off of libvorbisfile.
- All of the Ogg bits work roughly the same, though I have made some
- "improvements" that have not been folded back there, yet.*/
-
-/*A 'chained bitstream' is an Ogg Opus bitstream that contains more than one
- logical bitstream arranged end to end (the only form of Ogg multiplexing
- supported by this library.
- Grouping (parallel multiplexing) is not supported, except to the extent that
- if there are multiple logical Ogg streams in a single link of the chain, we
- will ignore all but the first Opus stream we find.*/
-
-/*An Ogg Opus file can be played beginning to end (streamed) without worrying
- ahead of time about chaining (see opusdec from the opus-tools package).
- If we have the whole file, however, and want random access
- (seeking/scrubbing) or desire to know the total length/time of a file, we
- need to account for the possibility of chaining.*/
-
-/*We can handle things a number of ways.
- We can determine the entire bitstream structure right off the bat, or find
- pieces on demand.
- This library determines and caches structure for the entire bitstream, but
- builds a virtual decoder on the fly when moving between links in the chain.*/
-
-/*There are also different ways to implement seeking.
- Enough information exists in an Ogg bitstream to seek to sample-granularity
- positions in the output.
- Or, one can seek by picking some portion of the stream roughly in the desired
- area if we only want coarse navigation through the stream.
- We implement and expose both strategies.*/
-
-/*The maximum number of bytes in a page (including the page headers).*/
-#define OP_PAGE_SIZE_MAX (65307)
-/*The default amount to seek backwards per step when trying to find the
- previous page.
- This must be at least as large as the maximum size of a page.*/
-#define OP_CHUNK_SIZE (65536)
-/*The maximum amount to seek backwards per step when trying to find the
- previous page.*/
-#define OP_CHUNK_SIZE_MAX (1024*(opus_int32)1024)
-/*A smaller read size is needed for low-rate streaming.*/
-#define OP_READ_SIZE (2048)
-
-int op_test(OpusHead *_head,
- const unsigned char *_initial_data,size_t _initial_bytes){
- ogg_sync_state oy;
- char *data;
- int err;
- /*The first page of a normal Opus file will be at most 57 bytes (27 Ogg
- page header bytes + 1 lacing value + 21 Opus header bytes + 8 channel
- mapping bytes).
- It will be at least 47 bytes (27 Ogg page header bytes + 1 lacing value +
- 19 Opus header bytes using channel mapping family 0).
- If we don't have at least that much data, give up now.*/
- if(_initial_bytes<47)return OP_FALSE;
- /*Only proceed if we start with the magic OggS string.
- This is to prevent us spending a lot of time allocating memory and looking
- for Ogg pages in non-Ogg files.*/
- if(memcmp(_initial_data,"OggS",4)!=0)return OP_ENOTFORMAT;
- ogg_sync_init(&oy);
- data=ogg_sync_buffer(&oy,_initial_bytes);
- if(data!=NULL){
- ogg_stream_state os;
- ogg_page og;
- int ret;
- memcpy(data,_initial_data,_initial_bytes);
- ogg_sync_wrote(&oy,_initial_bytes);
- ogg_stream_init(&os,-1);
- err=OP_FALSE;
- do{
- ogg_packet op;
- ret=ogg_sync_pageout(&oy,&og);
- /*Ignore holes.*/
- if(ret<0)continue;
- /*Stop if we run out of data.*/
- if(!ret)break;
- ogg_stream_reset_serialno(&os,ogg_page_serialno(&og));
- ogg_stream_pagein(&os,&og);
- /*Only process the first packet on this page (if it's a BOS packet,
- it's required to be the only one).*/
- if(ogg_stream_packetout(&os,&op)==1){
- if(op.b_o_s){
- ret=opus_head_parse(_head,op.packet,op.bytes);
- /*If this didn't look like Opus, keep going.*/
- if(ret==OP_ENOTFORMAT)continue;
- /*Otherwise we're done, one way or another.*/
- err=ret;
- }
- /*We finished parsing the headers.
- There is no Opus to be found.*/
- else err=OP_ENOTFORMAT;
- }
- }
- while(err==OP_FALSE);
- ogg_stream_clear(&os);
- }
- else err=OP_EFAULT;
- ogg_sync_clear(&oy);
- return err;
-}
-
-/*Many, many internal helpers.
- The intention is not to be confusing.
- Rampant duplication and monolithic function implementation (though we do have
- some large, omnibus functions still) would be harder to understand anyway.
- The high level functions are last.
- Begin grokking near the end of the file if you prefer to read things
- top-down.*/
-
-/*The read/seek functions track absolute position within the stream.*/
-
-/*Read a little more data from the file/pipe into the ogg_sync framer.
- _nbytes: The maximum number of bytes to read.
- Return: A positive number of bytes read on success, 0 on end-of-file, or a
- negative value on failure.*/
-static int op_get_data(OggOpusFile *_of,int _nbytes){
- unsigned char *buffer;
- int nbytes;
- OP_ASSERT(_nbytes>0);
- buffer=(unsigned char *)ogg_sync_buffer(&_of->oy,_nbytes);
- nbytes=(int)(*_of->callbacks.read)(_of->source,buffer,_nbytes);
- OP_ASSERT(nbytes<=_nbytes);
- if(OP_LIKELY(nbytes>0))ogg_sync_wrote(&_of->oy,nbytes);
- return nbytes;
-}
-
-/*Save a tiny smidge of verbosity to make the code more readable.*/
-static int op_seek_helper(OggOpusFile *_of,opus_int64 _offset){
- if(_offset==_of->offset)return 0;
- if(_of->callbacks.seek==NULL
- ||(*_of->callbacks.seek)(_of->source,_offset,SEEK_SET)){
- return OP_EREAD;
- }
- _of->offset=_offset;
- ogg_sync_reset(&_of->oy);
- return 0;
-}
-
-/*Get the current position indicator of the underlying source.
- This should be the same as the value reported by tell().*/
-static opus_int64 op_position(const OggOpusFile *_of){
- /*The current position indicator is _not_ simply offset.
- We may also have unprocessed, buffered data in the sync state.*/
- return _of->offset+_of->oy.fill-_of->oy.returned;
-}
-
-/*From the head of the stream, get the next page.
- _boundary specifies if the function is allowed to fetch more data from the
- stream (and how much) or only use internally buffered data.
- _boundary: -1: Unbounded search.
- 0: Read no additional data.
- Use only cached data.
- n: Search for the start of a new page up to file position n.
- Return: n>=0: Found a page at absolute offset n.
- OP_FALSE: Hit the _boundary limit.
- OP_EREAD: An underlying read operation failed.
- OP_BADLINK: We hit end-of-file before reaching _boundary.*/
-static opus_int64 op_get_next_page(OggOpusFile *_of,ogg_page *_og,
- opus_int64 _boundary){
- while(_boundary<=0||_of->offset<_boundary){
- int more;
- more=ogg_sync_pageseek(&_of->oy,_og);
- /*Skipped (-more) bytes.*/
- if(OP_UNLIKELY(more<0))_of->offset-=more;
- else if(more==0){
- int read_nbytes;
- int ret;
- /*Send more paramedics.*/
- if(!_boundary)return OP_FALSE;
- if(_boundary<0)read_nbytes=OP_READ_SIZE;
- else{
- opus_int64 position;
- position=op_position(_of);
- if(position>=_boundary)return OP_FALSE;
- read_nbytes=(int)OP_MIN(_boundary-position,OP_READ_SIZE);
- }
- ret=op_get_data(_of,read_nbytes);
- if(OP_UNLIKELY(ret<0))return OP_EREAD;
- if(OP_UNLIKELY(ret==0)){
- /*Only fail cleanly on EOF if we didn't have a known boundary.
- Otherwise, we should have been able to reach that boundary, and this
- is a fatal error.*/
- return OP_UNLIKELY(_boundary<0)?OP_FALSE:OP_EBADLINK;
- }
- }
- else{
- /*Got a page.
- Return the page start offset and advance the internal offset past the
- page end.*/
- opus_int64 page_offset;
- page_offset=_of->offset;
- _of->offset+=more;
- OP_ASSERT(page_offset>=0);
- return page_offset;
- }
- }
- return OP_FALSE;
-}
-
-static int op_add_serialno(const ogg_page *_og,
- ogg_uint32_t **_serialnos,int *_nserialnos,int *_cserialnos){
- ogg_uint32_t *serialnos;
- int nserialnos;
- int cserialnos;
- ogg_uint32_t s;
- s=ogg_page_serialno(_og);
- serialnos=*_serialnos;
- nserialnos=*_nserialnos;
- cserialnos=*_cserialnos;
- if(OP_UNLIKELY(nserialnos>=cserialnos)){
- if(OP_UNLIKELY(cserialnos>INT_MAX/(int)sizeof(*serialnos)-1>>1)){
- return OP_EFAULT;
- }
- cserialnos=2*cserialnos+1;
- OP_ASSERT(nserialnos<cserialnos);
- serialnos=(ogg_uint32_t *)_ogg_realloc(serialnos,
- sizeof(*serialnos)*cserialnos);
- if(OP_UNLIKELY(serialnos==NULL))return OP_EFAULT;
- }
- serialnos[nserialnos++]=s;
- *_serialnos=serialnos;
- *_nserialnos=nserialnos;
- *_cserialnos=cserialnos;
- return 0;
-}
-
-/*Returns nonzero if found.*/
-static int op_lookup_serialno(ogg_uint32_t _s,
- const ogg_uint32_t *_serialnos,int _nserialnos){
- int i;
- for(i=0;i<_nserialnos&&_serialnos[i]!=_s;i++);
- return i<_nserialnos;
-}
-
-static int op_lookup_page_serialno(const ogg_page *_og,
- const ogg_uint32_t *_serialnos,int _nserialnos){
- return op_lookup_serialno(ogg_page_serialno(_og),_serialnos,_nserialnos);
-}
-
-typedef struct OpusSeekRecord OpusSeekRecord;
-
-/*We use this to remember the pages we found while enumerating the links of a
- chained stream.
- We keep track of the starting and ending offsets, as well as the point we
- started searching from, so we know where to bisect.
- We also keep the serial number, so we can tell if the page belonged to the
- current link or not, as well as the granule position, to aid in estimating
- the start of the link.*/
-struct OpusSeekRecord{
- /*The earliest byte we know of such that reading forward from it causes
- capture to be regained at this page.*/
- opus_int64 search_start;
- /*The offset of this page.*/
- opus_int64 offset;
- /*The size of this page.*/
- opus_int32 size;
- /*The serial number of this page.*/
- ogg_uint32_t serialno;
- /*The granule position of this page.*/
- ogg_int64_t gp;
-};
-
-/*Find the last page beginning before _offset with a valid granule position.
- There is no '_boundary' parameter as it will always have to read more data.
- This is much dirtier than the above, as Ogg doesn't have any backward search
- linkage.
- This search prefers pages of the specified serial number.
- If a page of the specified serial number is spotted during the
- seek-back-and-read-forward, it will return the info of last page of the
- matching serial number, instead of the very last page, unless the very last
- page belongs to a different link than preferred serial number.
- If no page of the specified serial number is seen, it will return the info of
- the last page.
- [out] _sr: Returns information about the page that was found on success.
- _offset: The _offset before which to find a page.
- Any page returned will consist of data entirely before _offset.
- _serialno: The preferred serial number.
- If a page with this serial number is found, it will be returned
- even if another page in the same link is found closer to
- _offset.
- This is purely opportunistic: there is no guarantee such a page
- will be found if it exists.
- _serialnos: The list of serial numbers in the link that contains the
- preferred serial number.
- _nserialnos: The number of serial numbers in the current link.
- Return: 0 on success, or a negative value on failure.
- OP_EREAD: Failed to read more data (error or EOF).
- OP_EBADLINK: We couldn't find a page even after seeking back to the
- start of the stream.*/
-static int op_get_prev_page_serial(OggOpusFile *_of,OpusSeekRecord *_sr,
- opus_int64 _offset,ogg_uint32_t _serialno,
- const ogg_uint32_t *_serialnos,int _nserialnos){
- OpusSeekRecord preferred_sr;
- ogg_page og;
- opus_int64 begin;
- opus_int64 end;
- opus_int64 original_end;
- opus_int32 chunk_size;
- int preferred_found;
- original_end=end=begin=_offset;
- preferred_found=0;
- _offset=-1;
- chunk_size=OP_CHUNK_SIZE;
- do{
- opus_int64 search_start;
- int ret;
- OP_ASSERT(chunk_size>=OP_PAGE_SIZE_MAX);
- begin=OP_MAX(begin-chunk_size,0);
- ret=op_seek_helper(_of,begin);
- if(OP_UNLIKELY(ret<0))return ret;
- search_start=begin;
- while(_of->offset<end){
- opus_int64 llret;
- ogg_uint32_t serialno;
- llret=op_get_next_page(_of,&og,end);
- if(OP_UNLIKELY(llret<OP_FALSE))return (int)llret;
- else if(llret==OP_FALSE)break;
- serialno=ogg_page_serialno(&og);
- /*Save the information for this page.
- We're not interested in the page itself... just the serial number, byte
- offset, page size, and granule position.*/
- _sr->search_start=search_start;
- _sr->offset=_offset=llret;
- _sr->serialno=serialno;
- OP_ASSERT(_of->offset-_offset>=0);
- OP_ASSERT(_of->offset-_offset<=OP_PAGE_SIZE_MAX);
- _sr->size=(opus_int32)(_of->offset-_offset);
- _sr->gp=ogg_page_granulepos(&og);
- /*If this page is from the stream we're looking for, remember it.*/
- if(serialno==_serialno){
- preferred_found=1;
- *&preferred_sr=*_sr;
- }
- if(!op_lookup_serialno(serialno,_serialnos,_nserialnos)){
- /*We fell off the end of the link, which means we seeked back too far
- and shouldn't have been looking in that link to begin with.
- If we found the preferred serial number, forget that we saw it.*/
- preferred_found=0;
- }
- search_start=llret+1;
- }
- /*We started from the beginning of the stream and found nothing.
- This should be impossible unless the contents of the source changed out
- from under us after we read from it.*/
- if(OP_UNLIKELY(!begin)&&OP_UNLIKELY(_offset<0))return OP_EBADLINK;
- /*Bump up the chunk size.
- This is mildly helpful when seeks are very expensive (http).*/
- chunk_size=OP_MIN(2*chunk_size,OP_CHUNK_SIZE_MAX);
- /*Avoid quadratic complexity if we hit an invalid patch of the file.*/
- end=OP_MIN(begin+OP_PAGE_SIZE_MAX-1,original_end);
- }
- while(_offset<0);
- if(preferred_found)*_sr=*&preferred_sr;
- return 0;
-}
-
-/*Find the last page beginning before _offset with the given serial number and
- a valid granule position.
- Unlike the above search, this continues until it finds such a page, but does
- not stray outside the current link.
- We could implement it (inefficiently) by calling op_get_prev_page_serial()
- repeatedly until it returned a page that had both our preferred serial
- number and a valid granule position, but doing it with a separate function
- allows us to avoid repeatedly re-scanning valid pages from other streams as
- we seek-back-and-read-forward.
- [out] _gp: Returns the granule position of the page that was found on
- success.
- _offset: The _offset before which to find a page.
- Any page returned will consist of data entirely before _offset.
- _serialno: The target serial number.
- _serialnos: The list of serial numbers in the link that contains the
- preferred serial number.
- _nserialnos: The number of serial numbers in the current link.
- Return: The offset of the page on success, or a negative value on failure.
- OP_EREAD: Failed to read more data (error or EOF).
- OP_EBADLINK: We couldn't find a page even after seeking back past the
- beginning of the link.*/
-static opus_int64 op_get_last_page(OggOpusFile *_of,ogg_int64_t *_gp,
- opus_int64 _offset,ogg_uint32_t _serialno,
- const ogg_uint32_t *_serialnos,int _nserialnos){
- ogg_page og;
- ogg_int64_t gp;
- opus_int64 begin;
- opus_int64 end;
- opus_int64 original_end;
- opus_int32 chunk_size;
- /*The target serial number must belong to the current link.*/
- OP_ASSERT(op_lookup_serialno(_serialno,_serialnos,_nserialnos));
- original_end=end=begin=_offset;
- _offset=-1;
- /*We shouldn't have to initialize gp, but gcc is too dumb to figure out that
- ret>=0 implies we entered the if(page_gp!=-1) block at least once.*/
- gp=-1;
- chunk_size=OP_CHUNK_SIZE;
- do{
- int left_link;
- int ret;
- OP_ASSERT(chunk_size>=OP_PAGE_SIZE_MAX);
- begin=OP_MAX(begin-chunk_size,0);
- ret=op_seek_helper(_of,begin);
- if(OP_UNLIKELY(ret<0))return ret;
- left_link=0;
- while(_of->offset<end){
- opus_int64 llret;
- ogg_uint32_t serialno;
- llret=op_get_next_page(_of,&og,end);
- if(OP_UNLIKELY(llret<OP_FALSE))return llret;
- else if(llret==OP_FALSE)break;
- serialno=ogg_page_serialno(&og);
- if(serialno==_serialno){
- ogg_int64_t page_gp;
- /*The page is from the right stream...*/
- page_gp=ogg_page_granulepos(&og);
- if(page_gp!=-1){
- /*And has a valid granule position.
- Let's remember it.*/
- _offset=llret;
- gp=page_gp;
- }
- }
- else if(OP_UNLIKELY(!op_lookup_serialno(serialno,
- _serialnos,_nserialnos))){
- /*We fell off the start of the link, which means we don't need to keep
- seeking any farther back.*/
- left_link=1;
- }
- }
- /*We started from at or before the beginning of the link and found nothing.
- This should be impossible unless the contents of the source changed out
- from under us after we read from it.*/
- if((OP_UNLIKELY(left_link)||OP_UNLIKELY(!begin))&&OP_UNLIKELY(_offset<0)){
- return OP_EBADLINK;
- }
- /*Bump up the chunk size.
- This is mildly helpful when seeks are very expensive (http).*/
- chunk_size=OP_MIN(2*chunk_size,OP_CHUNK_SIZE_MAX);
- /*Avoid quadratic complexity if we hit an invalid patch of the file.*/
- end=OP_MIN(begin+OP_PAGE_SIZE_MAX-1,original_end);
- }
- while(_offset<0);
- *_gp=gp;
- return _offset;
-}
-
-/*Uses the local ogg_stream storage in _of.
- This is important for non-streaming input sources.*/
-static int op_fetch_headers_impl(OggOpusFile *_of,OpusHead *_head,
- OpusTags *_tags,ogg_uint32_t **_serialnos,int *_nserialnos,
- int *_cserialnos,ogg_page *_og){
- ogg_packet op;
- int ret;
- if(_serialnos!=NULL)*_nserialnos=0;
- /*Extract the serialnos of all BOS pages plus the first set of Opus headers
- we see in the link.*/
- while(ogg_page_bos(_og)){
- if(_serialnos!=NULL){
- if(OP_UNLIKELY(op_lookup_page_serialno(_og,*_serialnos,*_nserialnos))){
- /*A dupe serialnumber in an initial header packet set==invalid stream.*/
- return OP_EBADHEADER;
- }
- ret=op_add_serialno(_og,_serialnos,_nserialnos,_cserialnos);
- if(OP_UNLIKELY(ret<0))return ret;
- }
- if(_of->ready_state<OP_STREAMSET){
- /*We don't have an Opus stream in this link yet, so begin prospective
- stream setup.
- We need a stream to get packets.*/
- ogg_stream_reset_serialno(&_of->os,ogg_page_serialno(_og));
- ogg_stream_pagein(&_of->os,_og);
- if(OP_LIKELY(ogg_stream_packetout(&_of->os,&op)>0)){
- ret=opus_head_parse(_head,op.packet,op.bytes);
- /*Found a valid Opus header.
- Continue setup.*/
- if(OP_LIKELY(ret>=0))_of->ready_state=OP_STREAMSET;
- /*If it's just a stream type we don't recognize, ignore it.
- Everything else is fatal.*/
- else if(ret!=OP_ENOTFORMAT)return ret;
- }
- }
- /*Get the next page.
- No need to clamp the boundary offset against _of->end, as all errors
- become OP_ENOTFORMAT or OP_EBADHEADER.*/
- if(OP_UNLIKELY(op_get_next_page(_of,_og,
- OP_ADV_OFFSET(_of->offset,OP_CHUNK_SIZE))<0)){
- return _of->ready_state<OP_STREAMSET?OP_ENOTFORMAT:OP_EBADHEADER;
- }
- }
- if(OP_UNLIKELY(_of->ready_state!=OP_STREAMSET))return OP_ENOTFORMAT;
- /*If the first non-header page belonged to our Opus stream, submit it.*/
- if(_of->os.serialno==ogg_page_serialno(_og))ogg_stream_pagein(&_of->os,_og);
- /*Loop getting packets.*/
- for(;;){
- switch(ogg_stream_packetout(&_of->os,&op)){
- case 0:{
- /*Loop getting pages.*/
- for(;;){
- /*No need to clamp the boundary offset against _of->end, as all
- errors become OP_EBADHEADER.*/
- if(OP_UNLIKELY(op_get_next_page(_of,_og,
- OP_ADV_OFFSET(_of->offset,OP_CHUNK_SIZE))<0)){
- return OP_EBADHEADER;
- }
- /*If this page belongs to the correct stream, go parse it.*/
- if(_of->os.serialno==ogg_page_serialno(_og)){
- ogg_stream_pagein(&_of->os,_og);
- break;
- }
- /*If the link ends before we see the Opus comment header, abort.*/
- if(OP_UNLIKELY(ogg_page_bos(_og)))return OP_EBADHEADER;
- /*Otherwise, keep looking.*/
- }
- }break;
- /*We shouldn't get a hole in the headers!*/
- case -1:return OP_EBADHEADER;
- default:{
- /*Got a packet.
- It should be the comment header.*/
- ret=opus_tags_parse(_tags,op.packet,op.bytes);
- if(OP_UNLIKELY(ret<0))return ret;
- /*Make sure the page terminated at the end of the comment header.
- If there is another packet on the page, or part of a packet, then
- reject the stream.
- Otherwise seekable sources won't be able to seek back to the start
- properly.*/
- ret=ogg_stream_packetout(&_of->os,&op);
- if(OP_UNLIKELY(ret!=0)
- ||OP_UNLIKELY(_og->header[_og->header_len-1]==255)){
- /*If we fail, the caller assumes our tags are uninitialized.*/
- opus_tags_clear(_tags);
- return OP_EBADHEADER;
- }
- return 0;
- }
- }
- }
-}
-
-static int op_fetch_headers(OggOpusFile *_of,OpusHead *_head,
- OpusTags *_tags,ogg_uint32_t **_serialnos,int *_nserialnos,
- int *_cserialnos,ogg_page *_og){
- ogg_page og;
- int ret;
- if(!_og){
- /*No need to clamp the boundary offset against _of->end, as all errors
- become OP_ENOTFORMAT.*/
- if(OP_UNLIKELY(op_get_next_page(_of,&og,
- OP_ADV_OFFSET(_of->offset,OP_CHUNK_SIZE))<0)){
- return OP_ENOTFORMAT;
- }
- _og=&og;
- }
- _of->ready_state=OP_OPENED;
- ret=op_fetch_headers_impl(_of,_head,_tags,_serialnos,_nserialnos,
- _cserialnos,_og);
- /*Revert back from OP_STREAMSET to OP_OPENED on failure, to prevent
- double-free of the tags in an unseekable stream.*/
- if(OP_UNLIKELY(ret<0))_of->ready_state=OP_OPENED;
- return ret;
-}
-
-/*Granule position manipulation routines.
- A granule position is defined to be an unsigned 64-bit integer, with the
- special value -1 in two's complement indicating an unset or invalid granule
- position.
- We are not guaranteed to have an unsigned 64-bit type, so we construct the
- following routines that
- a) Properly order negative numbers as larger than positive numbers, and
- b) Check for underflow or overflow past the special -1 value.
- This lets us operate on the full, valid range of granule positions in a
- consistent and safe manner.
- This full range is organized into distinct regions:
- [ -1 (invalid) ][ 0 ... OP_INT64_MAX ][ OP_INT64_MIN ... -2 ][-1 (invalid) ]
-
- No one should actually use granule positions so large that they're negative,
- even if they are technically valid, as very little software handles them
- correctly (including most of Xiph.Org's).
- This library also refuses to support durations so large they won't fit in a
- signed 64-bit integer (to avoid exposing this mess to the application, and
- to simplify a good deal of internal arithmetic), so the only way to use them
- successfully is if pcm_start is very large.
- This means there isn't anything you can do with negative granule positions
- that you couldn't have done with purely non-negative ones.
- The main purpose of these routines is to allow us to think very explicitly
- about the possible failure cases of all granule position manipulations.*/
-
-/*Safely adds a small signed integer to a valid (not -1) granule position.
- The result can use the full 64-bit range of values (both positive and
- negative), but will fail on overflow (wrapping past -1; wrapping past
- OP_INT64_MAX is explicitly okay).
- [out] _dst_gp: The resulting granule position.
- Only modified on success.
- _src_gp: The granule position to add to.
- This must not be -1.
- _delta: The amount to add.
- This is allowed to be up to 32 bits to support the maximum
- duration of a single Ogg page (255 packets * 120 ms per
- packet == 1,468,800 samples at 48 kHz).
- Return: 0 on success, or OP_EINVAL if the result would wrap around past -1.*/
-static int op_granpos_add(ogg_int64_t *_dst_gp,ogg_int64_t _src_gp,
- opus_int32 _delta){
- /*The code below handles this case correctly, but there's no reason we
- should ever be called with these values, so make sure we aren't.*/
- OP_ASSERT(_src_gp!=-1);
- if(_delta>0){
- /*Adding this amount to the granule position would overflow its 64-bit
- range.*/
- if(OP_UNLIKELY(_src_gp<0)&&OP_UNLIKELY(_src_gp>=-1-_delta))return OP_EINVAL;
- if(OP_UNLIKELY(_src_gp>OP_INT64_MAX-_delta)){
- /*Adding this amount to the granule position would overflow the positive
- half of its 64-bit range.
- Since signed overflow is undefined in C, do it in a way the compiler
- isn't allowed to screw up.*/
- _delta-=(opus_int32)(OP_INT64_MAX-_src_gp)+1;
- _src_gp=OP_INT64_MIN;
- }
- }
- else if(_delta<0){
- /*Subtracting this amount from the granule position would underflow its
- 64-bit range.*/
- if(_src_gp>=0&&OP_UNLIKELY(_src_gp<-_delta))return OP_EINVAL;
- if(OP_UNLIKELY(_src_gp<OP_INT64_MIN-_delta)){
- /*Subtracting this amount from the granule position would underflow the
- negative half of its 64-bit range.
- Since signed underflow is undefined in C, do it in a way the compiler
- isn't allowed to screw up.*/
- _delta+=(opus_int32)(_src_gp-OP_INT64_MIN)+1;
- _src_gp=OP_INT64_MAX;
- }
- }
- *_dst_gp=_src_gp+_delta;
- return 0;
-}
-
-/*Safely computes the difference between two granule positions.
- The difference must fit in a signed 64-bit integer, or the function fails.
- It correctly handles the case where the granule position has wrapped around
- from positive values to negative ones.
- [out] _delta: The difference between the granule positions.
- Only modified on success.
- _gp_a: The granule position to subtract from.
- This must not be -1.
- _gp_b: The granule position to subtract.
- This must not be -1.
- Return: 0 on success, or OP_EINVAL if the result would not fit in a signed
- 64-bit integer.*/
-static int op_granpos_diff(ogg_int64_t *_delta,
- ogg_int64_t _gp_a,ogg_int64_t _gp_b){
- int gp_a_negative;
- int gp_b_negative;
- /*The code below handles these cases correctly, but there's no reason we
- should ever be called with these values, so make sure we aren't.*/
- OP_ASSERT(_gp_a!=-1);
- OP_ASSERT(_gp_b!=-1);
- gp_a_negative=OP_UNLIKELY(_gp_a<0);
- gp_b_negative=OP_UNLIKELY(_gp_b<0);
- if(OP_UNLIKELY(gp_a_negative^gp_b_negative)){
- ogg_int64_t da;
- ogg_int64_t db;
- if(gp_a_negative){
- /*_gp_a has wrapped to a negative value but _gp_b hasn't: the difference
- should be positive.*/
- /*Step 1: Handle wrapping.*/
- /*_gp_a < 0 => da < 0.*/
- da=(OP_INT64_MIN-_gp_a)-1;
- /*_gp_b >= 0 => db >= 0.*/
- db=OP_INT64_MAX-_gp_b;
- /*Step 2: Check for overflow.*/
- if(OP_UNLIKELY(OP_INT64_MAX+da<db))return OP_EINVAL;
- *_delta=db-da;
- }
- else{
- /*_gp_b has wrapped to a negative value but _gp_a hasn't: the difference
- should be negative.*/
- /*Step 1: Handle wrapping.*/
- /*_gp_a >= 0 => da <= 0*/
- da=_gp_a+OP_INT64_MIN;
- /*_gp_b < 0 => db <= 0*/
- db=OP_INT64_MIN-_gp_b;
- /*Step 2: Check for overflow.*/
- if(OP_UNLIKELY(da<OP_INT64_MIN-db))return OP_EINVAL;
- *_delta=da+db;
- }
- }
- else *_delta=_gp_a-_gp_b;
- return 0;
-}
-
-static int op_granpos_cmp(ogg_int64_t _gp_a,ogg_int64_t _gp_b){
- /*The invalid granule position -1 should behave like NaN: neither greater
- than nor less than any other granule position, nor equal to any other
- granule position, including itself.
- However, that means there isn't anything we could sensibly return from this
- function for it.*/
- OP_ASSERT(_gp_a!=-1);
- OP_ASSERT(_gp_b!=-1);
- /*Handle the wrapping cases.*/
- if(OP_UNLIKELY(_gp_a<0)){
- if(_gp_b>=0)return 1;
- /*Else fall through.*/
- }
- else if(OP_UNLIKELY(_gp_b<0))return -1;
- /*No wrapping case.*/
- return (_gp_a>_gp_b)-(_gp_b>_gp_a);
-}
-
-/*Returns the duration of the packet (in samples at 48 kHz), or a negative
- value on error.*/
-static int op_get_packet_duration(const unsigned char *_data,int _len){
- int nframes;
- int frame_size;
- int nsamples;
- nframes=opus_packet_get_nb_frames(_data,_len);
- if(OP_UNLIKELY(nframes<0))return OP_EBADPACKET;
- frame_size=opus_packet_get_samples_per_frame(_data,48000);
- nsamples=nframes*frame_size;
- if(OP_UNLIKELY(nsamples>120*48))return OP_EBADPACKET;
- return nsamples;
-}
-
-/*This function more properly belongs in info.c, but we define it here to allow
- the static granule position manipulation functions to remain static.*/
-ogg_int64_t opus_granule_sample(const OpusHead *_head,ogg_int64_t _gp){
- opus_int32 pre_skip;
- pre_skip=_head->pre_skip;
- if(_gp!=-1&&op_granpos_add(&_gp,_gp,-pre_skip))_gp=-1;
- return _gp;
-}
-
-/*Grab all the packets currently in the stream state, and compute their
- durations.
- _of->op_count is set to the number of packets collected.
- [out] _durations: Returns the durations of the individual packets.
- Return: The total duration of all packets, or OP_HOLE if there was a hole.*/
-static opus_int32 op_collect_audio_packets(OggOpusFile *_of,
- int _durations[255]){
- opus_int32 total_duration;
- int op_count;
- /*Count the durations of all packets in the page.*/
- op_count=0;
- total_duration=0;
- for(;;){
- int ret;
- /*This takes advantage of undocumented libogg behavior that returned
- ogg_packet buffers are valid at least until the next page is
- submitted.
- Relying on this is not too terrible, as _none_ of the Ogg memory
- ownership/lifetime rules are well-documented.
- But I can read its code and know this will work.*/
- ret=ogg_stream_packetout(&_of->os,_of->op+op_count);
- if(!ret)break;
- if(OP_UNLIKELY(ret<0)){
- /*We shouldn't get holes in the middle of pages.*/
- OP_ASSERT(op_count==0);
- /*Set the return value and break out of the loop.
- We want to make sure op_count gets set to 0, because we've ingested a
- page, so any previously loaded packets are now invalid.*/
- total_duration=OP_HOLE;
- break;
- }
- /*Unless libogg is broken, we can't get more than 255 packets from a
- single page.*/
- OP_ASSERT(op_count<255);
- _durations[op_count]=op_get_packet_duration(_of->op[op_count].packet,
- _of->op[op_count].bytes);
- if(OP_LIKELY(_durations[op_count]>0)){
- /*With at most 255 packets on a page, this can't overflow.*/
- total_duration+=_durations[op_count++];
- }
- /*Ignore packets with an invalid TOC sequence.*/
- else if(op_count>0){
- /*But save the granule position, if there was one.*/
- _of->op[op_count-1].granulepos=_of->op[op_count].granulepos;
- }
- }
- _of->op_pos=0;
- _of->op_count=op_count;
- return total_duration;
-}
-
-/*Starting from current cursor position, get the initial PCM offset of the next
- page.
- This also validates the granule position on the first page with a completed
- audio data packet, as required by the spec.
- If this link is completely empty (no pages with completed packets), then this
- function sets pcm_start=pcm_end=0 and returns the BOS page of the next link
- (if any).
- In the seekable case, we initialize pcm_end=-1 before calling this function,
- so that later we can detect that the link was empty before calling
- op_find_final_pcm_offset().
- [inout] _link: The link for which to find pcm_start.
- [out] _og: Returns the BOS page of the next link if this link was empty.
- In the unseekable case, we can then feed this to
- op_fetch_headers() to start the next link.
- The caller may pass NULL (e.g., for seekable streams), in
- which case this page will be discarded.
- Return: 0 on success, 1 if there is a buffered BOS page available, or a
- negative value on unrecoverable error.*/
-static int op_find_initial_pcm_offset(OggOpusFile *_of,
- OggOpusLink *_link,ogg_page *_og){
- ogg_page og;
- opus_int64 page_offset;
- ogg_int64_t pcm_start;
- ogg_int64_t prev_packet_gp;
- ogg_int64_t cur_page_gp;
- ogg_uint32_t serialno;
- opus_int32 total_duration;
- int durations[255];
- int cur_page_eos;
- int op_count;
- int pi;
- if(_og==NULL)_og=&og;
- serialno=_of->os.serialno;
- op_count=0;
- /*We shouldn't have to initialize total_duration, but gcc is too dumb to
- figure out that op_count>0 implies we've been through the whole loop at
- least once.*/
- total_duration=0;
- do{
- page_offset=op_get_next_page(_of,_og,_of->end);
- /*We should get a page unless the file is truncated or mangled.
- Otherwise there are no audio data packets in the whole logical stream.*/
- if(OP_UNLIKELY(page_offset<0)){
- /*Fail if there was a read error.*/
- if(page_offset<OP_FALSE)return (int)page_offset;
- /*Fail if the pre-skip is non-zero, since it's asking us to skip more
- samples than exist.*/
- if(_link->head.pre_skip>0)return OP_EBADTIMESTAMP;
- /*Set pcm_end and end_offset so we can skip the call to
- op_find_final_pcm_offset().*/
- _link->pcm_start=_link->pcm_end=0;
- _link->end_offset=_link->data_offset;
- return 0;
- }
- /*Similarly, if we hit the next link in the chain, we've gone too far.*/
- if(OP_UNLIKELY(ogg_page_bos(_og))){
- if(_link->head.pre_skip>0)return OP_EBADTIMESTAMP;
- /*Set pcm_end and end_offset so we can skip the call to
- op_find_final_pcm_offset().*/
- _link->pcm_end=_link->pcm_start=0;
- _link->end_offset=_link->data_offset;
- /*Tell the caller we've got a buffered page for them.*/
- return 1;
- }
- /*Ignore pages from other streams (not strictly necessary, because of the
- checks in ogg_stream_pagein(), but saves some work).*/
- if(serialno!=(ogg_uint32_t)ogg_page_serialno(_og))continue;
- ogg_stream_pagein(&_of->os,_og);
- /*Bitrate tracking: add the header's bytes here.
- The body bytes are counted when we consume the packets.*/
- _of->bytes_tracked+=_og->header_len;
- /*Count the durations of all packets in the page.*/
- do total_duration=op_collect_audio_packets(_of,durations);
- /*Ignore holes.*/
- while(OP_UNLIKELY(total_duration<0));
- op_count=_of->op_count;
- }
- while(op_count<=0);
- /*We found the first page with a completed audio data packet: actually look
- at the granule position.
- RFC 3533 says, "A special value of -1 (in two's complement) indicates that
- no packets finish on this page," which does not say that a granule
- position that is NOT -1 indicates that some packets DO finish on that page
- (even though this was the intention, libogg itself violated this intention
- for years before we fixed it).
- The Ogg Opus specification only imposes its start-time requirements
- on the granule position of the first page with completed packets,
- so we ignore any set granule positions until then.*/
- cur_page_gp=_of->op[op_count-1].granulepos;
- /*But getting a packet without a valid granule position on the page is not
- okay.*/
- if(cur_page_gp==-1)return OP_EBADTIMESTAMP;
- cur_page_eos=_of->op[op_count-1].e_o_s;
- if(OP_LIKELY(!cur_page_eos)){
- /*The EOS flag wasn't set.
- Work backwards from the provided granule position to get the starting PCM
- offset.*/
- if(OP_UNLIKELY(op_granpos_add(&pcm_start,cur_page_gp,-total_duration)<0)){
- /*The starting granule position MUST not be smaller than the amount of
- audio on the first page with completed packets.*/
- return OP_EBADTIMESTAMP;
- }
- }
- else{
- /*The first page with completed packets was also the last.*/
- if(OP_LIKELY(op_granpos_add(&pcm_start,cur_page_gp,-total_duration)<0)){
- /*If there's less audio on the page than indicated by the granule
- position, then we're doing end-trimming, and the starting PCM offset
- is zero by spec mandate.*/
- pcm_start=0;
- /*However, the end-trimming MUST not ask us to trim more samples than
- exist after applying the pre-skip.*/
- if(OP_UNLIKELY(op_granpos_cmp(cur_page_gp,_link->head.pre_skip)<0)){
- return OP_EBADTIMESTAMP;
- }
- }
- }
- /*Timestamp the individual packets.*/
- prev_packet_gp=pcm_start;
- for(pi=0;pi<op_count;pi++){
- if(cur_page_eos){
- ogg_int64_t diff;
- OP_ALWAYS_TRUE(!op_granpos_diff(&diff,cur_page_gp,prev_packet_gp));
- diff=durations[pi]-diff;
- /*If we have samples to trim...*/
- if(diff>0){
- /*If we trimmed the entire packet, stop (the spec says encoders
- shouldn't do this, but we support it anyway).*/
- if(OP_UNLIKELY(diff>durations[pi]))break;
- _of->op[pi].granulepos=prev_packet_gp=cur_page_gp;
- /*Move the EOS flag to this packet, if necessary, so we'll trim the
- samples.*/
- _of->op[pi].e_o_s=1;
- continue;
- }
- }
- /*Update the granule position as normal.*/
- OP_ALWAYS_TRUE(!op_granpos_add(&_of->op[pi].granulepos,
- prev_packet_gp,durations[pi]));
- prev_packet_gp=_of->op[pi].granulepos;
- }
- /*Update the packet count after end-trimming.*/
- _of->op_count=pi;
- _of->cur_discard_count=_link->head.pre_skip;
- _of->prev_packet_gp=_link->pcm_start=pcm_start;
- _of->prev_page_offset=page_offset;
- return 0;
-}
-
-/*Starting from current cursor position, get the final PCM offset of the
- previous page.
- This also validates the duration of the link, which, while not strictly
- required by the spec, we need to ensure duration calculations don't
- overflow.
- This is only done for seekable sources.
- We must validate that op_find_initial_pcm_offset() succeeded for this link
- before calling this function, otherwise it will scan the entire stream
- backwards until it reaches the start, and then fail.*/
-static int op_find_final_pcm_offset(OggOpusFile *_of,
- const ogg_uint32_t *_serialnos,int _nserialnos,OggOpusLink *_link,
- opus_int64 _offset,ogg_uint32_t _end_serialno,ogg_int64_t _end_gp,
- ogg_int64_t *_total_duration){
- ogg_int64_t total_duration;
- ogg_int64_t duration;
- ogg_uint32_t cur_serialno;
- /*For the time being, fetch end PCM offset the simple way.*/
- cur_serialno=_link->serialno;
- if(_end_serialno!=cur_serialno||_end_gp==-1){
- _offset=op_get_last_page(_of,&_end_gp,_offset,
- cur_serialno,_serialnos,_nserialnos);
- if(OP_UNLIKELY(_offset<0))return (int)_offset;
- }
- /*At worst we should have found the first page with completed packets.*/
- if(OP_UNLIKELY(_offset<_link->data_offset))return OP_EBADLINK;
- /*This implementation requires that the difference between the first and last
- granule positions in each link be representable in a signed, 64-bit
- number, and that each link also have at least as many samples as the
- pre-skip requires.*/
- if(OP_UNLIKELY(op_granpos_diff(&duration,_end_gp,_link->pcm_start)<0)
- ||OP_UNLIKELY(duration<_link->head.pre_skip)){
- return OP_EBADTIMESTAMP;
- }
- /*We also require that the total duration be representable in a signed,
- 64-bit number.*/
- duration-=_link->head.pre_skip;
- total_duration=*_total_duration;
- if(OP_UNLIKELY(OP_INT64_MAX-duration<total_duration))return OP_EBADTIMESTAMP;
- *_total_duration=total_duration+duration;
- _link->pcm_end=_end_gp;
- _link->end_offset=_offset;
- return 0;
-}
-
-/*Rescale the number _x from the range [0,_from] to [0,_to].
- _from and _to must be positive.*/
-static opus_int64 op_rescale64(opus_int64 _x,opus_int64 _from,opus_int64 _to){
- opus_int64 frac;
- opus_int64 ret;
- int i;
- if(_x>=_from)return _to;
- if(_x<=0)return 0;
- frac=0;
- for(i=0;i<63;i++){
- frac<<=1;
- OP_ASSERT(_x<=_from);
- if(_x>=_from>>1){
- _x-=_from-_x;
- frac|=1;
- }
- else _x<<=1;
- }
- ret=0;
- for(i=0;i<63;i++){
- if(frac&1)ret=(ret&_to&1)+(ret>>1)+(_to>>1);
- else ret>>=1;
- frac>>=1;
- }
- return ret;
-}
-
-/*The minimum granule position spacing allowed for making predictions.
- This corresponds to about 1 second of audio at 48 kHz for both Opus and
- Vorbis, or one keyframe interval in Theora with the default keyframe spacing
- of 256.*/
-#define OP_GP_SPACING_MIN (48000)
-
-/*Try to estimate the location of the next link using the current seek
- records, assuming the initial granule position of any streams we've found is
- 0.*/
-static opus_int64 op_predict_link_start(const OpusSeekRecord *_sr,int _nsr,
- opus_int64 _searched,opus_int64 _end_searched,opus_int32 _bias){
- opus_int64 bisect;
- int sri;
- int srj;
- /*Require that we be at least OP_CHUNK_SIZE from the end.
- We don't require that we be at least OP_CHUNK_SIZE from the beginning,
- because if we are we'll just scan forward without seeking.*/
- _end_searched-=OP_CHUNK_SIZE;
- if(_searched>=_end_searched)return -1;
- bisect=_end_searched;
- for(sri=0;sri<_nsr;sri++){
- ogg_int64_t gp1;
- ogg_int64_t gp2_min;
- ogg_uint32_t serialno1;
- opus_int64 offset1;
- /*If the granule position is negative, either it's invalid or we'd cause
- overflow.*/
- gp1=_sr[sri].gp;
- if(gp1<0)continue;
- /*We require some minimum distance between granule positions to make an
- estimate.
- We don't actually know what granule position scheme is being used,
- because we have no idea what kind of stream these came from.
- Therefore we require a minimum spacing between them, with the
- expectation that while bitrates and granule position increments might
- vary locally in quite complex ways, they are globally smooth.*/
- if(OP_UNLIKELY(op_granpos_add(&gp2_min,gp1,OP_GP_SPACING_MIN)<0)){
- /*No granule position would satisfy us.*/
- continue;
- }
- offset1=_sr[sri].offset;
- serialno1=_sr[sri].serialno;
- for(srj=sri;srj-->0;){
- ogg_int64_t gp2;
- opus_int64 offset2;
- opus_int64 num;
- ogg_int64_t den;
- ogg_int64_t ipart;
- gp2=_sr[srj].gp;
- if(gp2<gp2_min)continue;
- /*Oh, and also make sure these came from the same stream.*/
- if(_sr[srj].serialno!=serialno1)continue;
- offset2=_sr[srj].offset;
- /*For once, we can subtract with impunity.*/
- den=gp2-gp1;
- ipart=gp2/den;
- num=offset2-offset1;
- OP_ASSERT(num>0);
- if(ipart>0&&(offset2-_searched)/ipart<num)continue;
- offset2-=ipart*num;
- gp2-=ipart*den;
- offset2-=op_rescale64(gp2,den,num)-_bias;
- if(offset2<_searched)continue;
- bisect=OP_MIN(bisect,offset2);
- break;
- }
- }
- return bisect>=_end_searched?-1:bisect;
-}
-
-/*Finds each bitstream link, one at a time, using a bisection search.
- This has to begin by knowing the offset of the first link's initial page.*/
-static int op_bisect_forward_serialno(OggOpusFile *_of,
- opus_int64 _searched,OpusSeekRecord *_sr,int _csr,
- ogg_uint32_t **_serialnos,int *_nserialnos,int *_cserialnos){
- ogg_page og;
- OggOpusLink *links;
- int nlinks;
- int clinks;
- ogg_uint32_t *serialnos;
- int nserialnos;
- ogg_int64_t total_duration;
- int nsr;
- int ret;
- links=_of->links;
- nlinks=clinks=_of->nlinks;
- total_duration=0;
- /*We start with one seek record, for the last page in the file.
- We build up a list of records for places we seek to during link
- enumeration.
- This list is kept sorted in reverse order.
- We only care about seek locations that were _not_ in the current link,
- therefore we can add them one at a time to the end of the list as we
- improve the lower bound on the location where the next link starts.*/
- nsr=1;
- for(;;){
- opus_int64 end_searched;
- opus_int64 bisect;
- opus_int64 next;
- opus_int64 last;
- ogg_int64_t end_offset;
- ogg_int64_t end_gp;
- int sri;
- serialnos=*_serialnos;
- nserialnos=*_nserialnos;
- if(OP_UNLIKELY(nlinks>=clinks)){
- if(OP_UNLIKELY(clinks>INT_MAX-1>>1))return OP_EFAULT;
- clinks=2*clinks+1;
- OP_ASSERT(nlinks<clinks);
- links=(OggOpusLink *)_ogg_realloc(links,sizeof(*links)*clinks);
- if(OP_UNLIKELY(links==NULL))return OP_EFAULT;
- _of->links=links;
- }
- /*Invariants:
- We have the headers and serial numbers for the link beginning at 'begin'.
- We have the offset and granule position of the last page in the file
- (potentially not a page we care about).*/
- /*Scan the seek records we already have to save us some bisection.*/
- for(sri=0;sri<nsr;sri++){
- if(op_lookup_serialno(_sr[sri].serialno,serialnos,nserialnos))break;
- }
- /*Is the last page in our current list of serial numbers?*/
- if(sri<=0)break;
- /*Last page wasn't found.
- We have at least one more link.*/
- last=-1;
- end_searched=_sr[sri-1].search_start;
- next=_sr[sri-1].offset;
- end_gp=-1;
- if(sri<nsr){
- _searched=_sr[sri].offset+_sr[sri].size;
- if(_sr[sri].serialno==links[nlinks-1].serialno){
- end_gp=_sr[sri].gp;
- end_offset=_sr[sri].offset;
- }
- }
- nsr=sri;
- bisect=-1;
- /*If we've already found the end of at least one link, try to pick the
- first bisection point at twice the average link size.
- This is a good choice for files with lots of links that are all about the
- same size.*/
- if(nlinks>1){
- opus_int64 last_offset;
- opus_int64 avg_link_size;
- opus_int64 upper_limit;
- last_offset=links[nlinks-1].offset;
- avg_link_size=last_offset/(nlinks-1);
- upper_limit=end_searched-OP_CHUNK_SIZE-avg_link_size;
- if(OP_LIKELY(last_offset>_searched-avg_link_size)
- &&OP_LIKELY(last_offset<upper_limit)){
- bisect=last_offset+avg_link_size;
- if(OP_LIKELY(bisect<upper_limit))bisect+=avg_link_size;
- }
- }
- /*We guard against garbage separating the last and first pages of two
- links below.*/
- while(_searched<end_searched){
- opus_int32 next_bias;
- /*If we don't have a better estimate, use simple bisection.*/
- if(bisect==-1)bisect=_searched+(end_searched-_searched>>1);
- /*If we're within OP_CHUNK_SIZE of the start, scan forward.*/
- if(bisect-_searched<OP_CHUNK_SIZE)bisect=_searched;
- /*Otherwise we're skipping data.
- Forget the end page, if we saw one, as we might miss a later one.*/
- else end_gp=-1;
- ret=op_seek_helper(_of,bisect);
- if(OP_UNLIKELY(ret<0))return ret;
- last=op_get_next_page(_of,&og,_sr[nsr-1].offset);
- if(OP_UNLIKELY(last<OP_FALSE))return (int)last;
- next_bias=0;
- if(last==OP_FALSE)end_searched=bisect;
- else{
- ogg_uint32_t serialno;
- ogg_int64_t gp;
- serialno=ogg_page_serialno(&og);
- gp=ogg_page_granulepos(&og);
- if(!op_lookup_serialno(serialno,serialnos,nserialnos)){
- end_searched=bisect;
- next=last;
- /*In reality we should always have enough room, but be paranoid.*/
- if(OP_LIKELY(nsr<_csr)){
- _sr[nsr].search_start=bisect;
- _sr[nsr].offset=last;
- OP_ASSERT(_of->offset-last>=0);
- OP_ASSERT(_of->offset-last<=OP_PAGE_SIZE_MAX);
- _sr[nsr].size=(opus_int32)(_of->offset-last);
- _sr[nsr].serialno=serialno;
- _sr[nsr].gp=gp;
- nsr++;
- }
- }
- else{
- _searched=_of->offset;
- next_bias=OP_CHUNK_SIZE;
- if(serialno==links[nlinks-1].serialno){
- /*This page was from the stream we want, remember it.
- If it's the last such page in the link, we won't have to go back
- looking for it later.*/
- end_gp=gp;
- end_offset=last;
- }
- }
- }
- bisect=op_predict_link_start(_sr,nsr,_searched,end_searched,next_bias);
- }
- /*Bisection point found.
- Get the final granule position of the previous link, assuming
- op_find_initial_pcm_offset() didn't already determine the link was
- empty.*/
- if(OP_LIKELY(links[nlinks-1].pcm_end==-1)){
- if(end_gp==-1){
- /*If we don't know where the end page is, we'll have to seek back and
- look for it, starting from the end of the link.*/
- end_offset=next;
- /*Also forget the last page we read.
- It won't be available after the seek.*/
- last=-1;
- }
- ret=op_find_final_pcm_offset(_of,serialnos,nserialnos,
- links+nlinks-1,end_offset,links[nlinks-1].serialno,end_gp,
- &total_duration);
- if(OP_UNLIKELY(ret<0))return ret;
- }
- if(last!=next){
- /*The last page we read was not the first page the next link.
- Move the cursor position to the offset of that first page.
- This only performs an actual seek if the first page of the next link
- does not start at the end of the last page from the current Opus
- stream with a valid granule position.*/
- ret=op_seek_helper(_of,next);
- if(OP_UNLIKELY(ret<0))return ret;
- }
- ret=op_fetch_headers(_of,&links[nlinks].head,&links[nlinks].tags,
- _serialnos,_nserialnos,_cserialnos,last!=next?NULL:&og);
- if(OP_UNLIKELY(ret<0))return ret;
- links[nlinks].offset=next;
- links[nlinks].data_offset=_of->offset;
- links[nlinks].serialno=_of->os.serialno;
- links[nlinks].pcm_end=-1;
- /*This might consume a page from the next link, however the next bisection
- always starts with a seek.*/
- ret=op_find_initial_pcm_offset(_of,links+nlinks,NULL);
- if(OP_UNLIKELY(ret<0))return ret;
- _searched=_of->offset;
- /*Mark the current link count so it can be cleaned up on error.*/
- _of->nlinks=++nlinks;
- }
- /*Last page is in the starting serialno list, so we've reached the last link.
- Now find the last granule position for it (if we didn't the first time we
- looked at the end of the stream, and if op_find_initial_pcm_offset()
- didn't already determine the link was empty).*/
- if(OP_LIKELY(links[nlinks-1].pcm_end==-1)){
- ret=op_find_final_pcm_offset(_of,serialnos,nserialnos,
- links+nlinks-1,_sr[0].offset,_sr[0].serialno,_sr[0].gp,&total_duration);
- if(OP_UNLIKELY(ret<0))return ret;
- }
- /*Trim back the links array if necessary.*/
- links=(OggOpusLink *)_ogg_realloc(links,sizeof(*links)*nlinks);
- if(OP_LIKELY(links!=NULL))_of->links=links;
- /*We also don't need these anymore.*/
- _ogg_free(*_serialnos);
- *_serialnos=NULL;
- *_cserialnos=*_nserialnos=0;
- return 0;
-}
-
-static void op_update_gain(OggOpusFile *_of){
- OpusHead *head;
- opus_int32 gain_q8;
- int li;
- /*If decode isn't ready, then we'll apply the gain when we initialize the
- decoder.*/
- if(_of->ready_state<OP_INITSET)return;
- gain_q8=_of->gain_offset_q8;
- li=_of->seekable?_of->cur_link:0;
- head=&_of->links[li].head;
- /*We don't have to worry about overflow here because the header gain and
- track gain must lie in the range [-32768,32767], and the user-supplied
- offset has been pre-clamped to [-98302,98303].*/
- switch(_of->gain_type){
- case OP_ALBUM_GAIN:{
- int album_gain_q8;
- album_gain_q8=0;
- opus_tags_get_album_gain(&_of->links[li].tags,&album_gain_q8);
- gain_q8+=album_gain_q8;
- gain_q8+=head->output_gain;
- }break;
- case OP_TRACK_GAIN:{
- int track_gain_q8;
- track_gain_q8=0;
- opus_tags_get_track_gain(&_of->links[li].tags,&track_gain_q8);
- gain_q8+=track_gain_q8;
- gain_q8+=head->output_gain;
- }break;
- case OP_HEADER_GAIN:gain_q8+=head->output_gain;break;
- case OP_ABSOLUTE_GAIN:break;
- default:OP_ASSERT(0);
- }
- gain_q8=OP_CLAMP(-32768,gain_q8,32767);
- OP_ASSERT(_of->od!=NULL);
-#if defined(OPUS_SET_GAIN)
- opus_multistream_decoder_ctl(_of->od,OPUS_SET_GAIN(gain_q8));
-#else
-/*A fallback that works with both float and fixed-point is a bunch of work,
- so just force people to use a sufficiently new version.
- This is deployed well enough at this point that this shouldn't be a burden.*/
-# error "libopus 1.0.1 or later required"
-#endif
-}
-
-static int op_make_decode_ready(OggOpusFile *_of){
- const OpusHead *head;
- int li;
- int stream_count;
- int coupled_count;
- int channel_count;
- if(_of->ready_state>OP_STREAMSET)return 0;
- if(OP_UNLIKELY(_of->ready_state<OP_STREAMSET))return OP_EFAULT;
- li=_of->seekable?_of->cur_link:0;
- head=&_of->links[li].head;
- stream_count=head->stream_count;
- coupled_count=head->coupled_count;
- channel_count=head->channel_count;
- /*Check to see if the current decoder is compatible with the current link.*/
- if(_of->od!=NULL&&_of->od_stream_count==stream_count
- &&_of->od_coupled_count==coupled_count&&_of->od_channel_count==channel_count
- &&memcmp(_of->od_mapping,head->mapping,
- sizeof(*head->mapping)*channel_count)==0){
- opus_multistream_decoder_ctl(_of->od,OPUS_RESET_STATE);
- }
- else{
- int err;
- opus_multistream_decoder_destroy(_of->od);
- _of->od=opus_multistream_decoder_create(48000,channel_count,
- stream_count,coupled_count,head->mapping,&err);
- if(_of->od==NULL)return OP_EFAULT;
- _of->od_stream_count=stream_count;
- _of->od_coupled_count=coupled_count;
- _of->od_channel_count=channel_count;
- memcpy(_of->od_mapping,head->mapping,sizeof(*head->mapping)*channel_count);
- }
- _of->ready_state=OP_INITSET;
- _of->bytes_tracked=0;
- _of->samples_tracked=0;
-#if !defined(OP_FIXED_POINT)
- _of->state_channel_count=0;
- /*Use the serial number for the PRNG seed to get repeatable output for
- straight play-throughs.*/
- _of->dither_seed=_of->links[li].serialno;
-#endif
- op_update_gain(_of);
- return 0;
-}
-
-static int op_open_seekable2_impl(OggOpusFile *_of){
- /*64 seek records should be enough for anybody.
- Actually, with a bisection search in a 63-bit range down to OP_CHUNK_SIZE
- granularity, much more than enough.*/
- OpusSeekRecord sr[64];
- opus_int64 data_offset;
- int ret;
- /*We can seek, so set out learning all about this file.*/
- (*_of->callbacks.seek)(_of->source,0,SEEK_END);
- _of->offset=_of->end=(*_of->callbacks.tell)(_of->source);
- if(OP_UNLIKELY(_of->end<0))return OP_EREAD;
- data_offset=_of->links[0].data_offset;
- if(OP_UNLIKELY(_of->end<data_offset))return OP_EBADLINK;
- /*Get the offset of the last page of the physical bitstream, or, if we're
- lucky, the last Opus page of the first link, as most Ogg Opus files will
- contain a single logical bitstream.*/
- ret=op_get_prev_page_serial(_of,sr,_of->end,
- _of->links[0].serialno,_of->serialnos,_of->nserialnos);
- if(OP_UNLIKELY(ret<0))return ret;
- /*If there's any trailing junk, forget about it.*/
- _of->end=sr[0].offset+sr[0].size;
- if(OP_UNLIKELY(_of->end<data_offset))return OP_EBADLINK;
- /*Now enumerate the bitstream structure.*/
- return op_bisect_forward_serialno(_of,data_offset,sr,sizeof(sr)/sizeof(*sr),
- &_of->serialnos,&_of->nserialnos,&_of->cserialnos);
-}
-
-static int op_open_seekable2(OggOpusFile *_of){
- ogg_sync_state oy_start;
- ogg_stream_state os_start;
- ogg_packet *op_start;
- opus_int64 prev_page_offset;
- opus_int64 start_offset;
- int start_op_count;
- int ret;
- /*We're partially open and have a first link header state in storage in _of.
- Save off that stream state so we can come back to it.
- It would be simpler to just dump all this state and seek back to
- links[0].data_offset when we're done.
- But we do the extra work to allow us to seek back to _exactly_ the same
- stream position we're at now.
- This allows, e.g., the HTTP backend to continue reading from the original
- connection (if it's still available), instead of opening a new one.
- This means we can open and start playing a normal Opus file with a single
- link and reasonable packet sizes using only two HTTP requests.*/
- start_op_count=_of->op_count;
- /*This is a bit too large to put on the stack unconditionally.*/
- op_start=(ogg_packet *)_ogg_malloc(sizeof(*op_start)*start_op_count);
- if(op_start==NULL)return OP_EFAULT;
- *&oy_start=_of->oy;
- *&os_start=_of->os;
- prev_page_offset=_of->prev_page_offset;
- start_offset=_of->offset;
- memcpy(op_start,_of->op,sizeof(*op_start)*start_op_count);
- OP_ASSERT((*_of->callbacks.tell)(_of->source)==op_position(_of));
- ogg_sync_init(&_of->oy);
- ogg_stream_init(&_of->os,-1);
- ret=op_open_seekable2_impl(_of);
- /*Restore the old stream state.*/
- ogg_stream_clear(&_of->os);
- ogg_sync_clear(&_of->oy);
- *&_of->oy=*&oy_start;
- *&_of->os=*&os_start;
- _of->offset=start_offset;
- _of->op_count=start_op_count;
- memcpy(_of->op,op_start,sizeof(*_of->op)*start_op_count);
- _ogg_free(op_start);
- _of->prev_packet_gp=_of->links[0].pcm_start;
- _of->prev_page_offset=prev_page_offset;
- _of->cur_discard_count=_of->links[0].head.pre_skip;
- if(OP_UNLIKELY(ret<0))return ret;
- /*And restore the position indicator.*/
- ret=(*_of->callbacks.seek)(_of->source,op_position(_of),SEEK_SET);
- return OP_UNLIKELY(ret<0)?OP_EREAD:0;
-}
-
-/*Clear out the current logical bitstream decoder.*/
-static void op_decode_clear(OggOpusFile *_of){
- /*We don't actually free the decoder.
- We might be able to re-use it for the next link.*/
- _of->op_count=0;
- _of->od_buffer_size=0;
- _of->prev_packet_gp=-1;
- _of->prev_page_offset=-1;
- if(!_of->seekable){
- OP_ASSERT(_of->ready_state>=OP_INITSET);
- opus_tags_clear(&_of->links[0].tags);
- }
- _of->ready_state=OP_OPENED;
-}
-
-static void op_clear(OggOpusFile *_of){
- OggOpusLink *links;
- _ogg_free(_of->od_buffer);
- if(_of->od!=NULL)opus_multistream_decoder_destroy(_of->od);
- links=_of->links;
- if(!_of->seekable){
- if(_of->ready_state>OP_OPENED||_of->ready_state==OP_PARTOPEN){
- opus_tags_clear(&links[0].tags);
- }
- }
- else if(OP_LIKELY(links!=NULL)){
- int nlinks;
- int link;
- nlinks=_of->nlinks;
- for(link=0;link<nlinks;link++)opus_tags_clear(&links[link].tags);
- }
- _ogg_free(links);
- _ogg_free(_of->serialnos);
- ogg_stream_clear(&_of->os);
- ogg_sync_clear(&_of->oy);
- if(_of->callbacks.close!=NULL)(*_of->callbacks.close)(_of->source);
-}
-
-static int op_open1(OggOpusFile *_of,
- void *_source,const OpusFileCallbacks *_cb,
- const unsigned char *_initial_data,size_t _initial_bytes){
- ogg_page og;
- ogg_page *pog;
- int seekable;
- int ret;
- memset(_of,0,sizeof(*_of));
- _of->end=-1;
- _of->source=_source;
- *&_of->callbacks=*_cb;
- /*At a minimum, we need to be able to read data.*/
- if(OP_UNLIKELY(_of->callbacks.read==NULL))return OP_EREAD;
- /*Initialize the framing state.*/
- ogg_sync_init(&_of->oy);
- /*Perhaps some data was previously read into a buffer for testing against
- other stream types.
- Allow initialization from this previously read data (especially as we may
- be reading from a non-seekable stream).
- This requires copying it into a buffer allocated by ogg_sync_buffer() and
- doesn't support seeking, so this is not a good mechanism to use for
- decoding entire files from RAM.*/
- if(_initial_bytes>0){
- char *buffer;
- buffer=ogg_sync_buffer(&_of->oy,_initial_bytes);
- memcpy(buffer,_initial_data,_initial_bytes*sizeof(*buffer));
- ogg_sync_wrote(&_of->oy,_initial_bytes);
- }
- /*Can we seek?
- Stevens suggests the seek test is portable.*/
- seekable=_cb->seek!=NULL&&(*_cb->seek)(_source,0,SEEK_CUR)!=-1;
- /*If seek is implemented, tell must also be implemented.*/
- if(seekable){
- opus_int64 pos;
- if(OP_UNLIKELY(_of->callbacks.tell==NULL))return OP_EINVAL;
- pos=(*_of->callbacks.tell)(_of->source);
- /*If the current position is not equal to the initial bytes consumed,
- absolute seeking will not work.*/
- if(OP_UNLIKELY(pos!=(opus_int64)_initial_bytes))return OP_EINVAL;
- }
- _of->seekable=seekable;
- /*Don't seek yet.
- Set up a 'single' (current) logical bitstream entry for partial open.*/
- _of->links=(OggOpusLink *)_ogg_malloc(sizeof(*_of->links));
- /*The serialno gets filled in later by op_fetch_headers().*/
- ogg_stream_init(&_of->os,-1);
- pog=NULL;
- for(;;){
- /*Fetch all BOS pages, store the Opus header and all seen serial numbers,
- and load subsequent Opus setup headers.*/
- ret=op_fetch_headers(_of,&_of->links[0].head,&_of->links[0].tags,
- &_of->serialnos,&_of->nserialnos,&_of->cserialnos,pog);
- if(OP_UNLIKELY(ret<0))break;
- _of->nlinks=1;
- _of->links[0].offset=0;
- _of->links[0].data_offset=_of->offset;
- _of->links[0].pcm_end=-1;
- _of->links[0].serialno=_of->os.serialno;
- /*Fetch the initial PCM offset.*/
- ret=op_find_initial_pcm_offset(_of,_of->links,&og);
- if(seekable||OP_LIKELY(ret<=0))break;
- /*This link was empty, but we already have the BOS page for the next one in
- og.
- We can't seek, so start processing the next link right now.*/
- opus_tags_clear(&_of->links[0].tags);
- _of->nlinks=0;
- if(!seekable)_of->cur_link++;
- pog=&og;
- }
- if(OP_LIKELY(ret>=0))_of->ready_state=OP_PARTOPEN;
- return ret;
-}
-
-static int op_open2(OggOpusFile *_of){
- int ret;
- OP_ASSERT(_of->ready_state==OP_PARTOPEN);
- if(_of->seekable){
- _of->ready_state=OP_OPENED;
- ret=op_open_seekable2(_of);
- }
- else ret=0;
- if(OP_LIKELY(ret>=0)){
- /*We have buffered packets from op_find_initial_pcm_offset().
- Move to OP_INITSET so we can use them.*/
- _of->ready_state=OP_STREAMSET;
- ret=op_make_decode_ready(_of);
- if(OP_LIKELY(ret>=0))return 0;
- }
- /*Don't auto-close the stream on failure.*/
- _of->callbacks.close=NULL;
- op_clear(_of);
- return ret;
-}
-
-OggOpusFile *op_test_callbacks(void *_source,const OpusFileCallbacks *_cb,
- const unsigned char *_initial_data,size_t _initial_bytes,int *_error){
- OggOpusFile *of;
- int ret;
- of=(OggOpusFile *)_ogg_malloc(sizeof(*of));
- ret=OP_EFAULT;
- if(OP_LIKELY(of!=NULL)){
- ret=op_open1(of,_source,_cb,_initial_data,_initial_bytes);
- if(OP_LIKELY(ret>=0)){
- if(_error!=NULL)*_error=0;
- return of;
- }
- /*Don't auto-close the stream on failure.*/
- of->callbacks.close=NULL;
- op_clear(of);
- _ogg_free(of);
- }
- if(_error!=NULL)*_error=ret;
- return NULL;
-}
-
-OggOpusFile *op_open_callbacks(void *_source,const OpusFileCallbacks *_cb,
- const unsigned char *_initial_data,size_t _initial_bytes,int *_error){
- OggOpusFile *of;
- of=op_test_callbacks(_source,_cb,_initial_data,_initial_bytes,_error);
- if(OP_LIKELY(of!=NULL)){
- int ret;
- ret=op_open2(of);
- if(OP_LIKELY(ret>=0))return of;
- if(_error!=NULL)*_error=ret;
- _ogg_free(of);
- }
- return NULL;
-}
-
-/*Convenience routine to clean up from failure for the open functions that
- create their own streams.*/
-static OggOpusFile *op_open_close_on_failure(void *_source,
- const OpusFileCallbacks *_cb,int *_error){
- OggOpusFile *of;
- if(OP_UNLIKELY(_source==NULL)){
- if(_error!=NULL)*_error=OP_EFAULT;
- return NULL;
- }
- of=op_open_callbacks(_source,_cb,NULL,0,_error);
- if(OP_UNLIKELY(of==NULL))(*_cb->close)(_source);
- return of;
-}
-
-OggOpusFile *op_open_file(const char *_path,int *_error){
- OpusFileCallbacks cb;
- return op_open_close_on_failure(op_fopen(&cb,_path,"rb"),&cb,_error);
-}
-
-OggOpusFile *op_open_memory(const unsigned char *_data,size_t _size,
- int *_error){
- OpusFileCallbacks cb;
- return op_open_close_on_failure(op_mem_stream_create(&cb,_data,_size),&cb,
- _error);
-}
-
-/*Convenience routine to clean up from failure for the open functions that
- create their own streams.*/
-static OggOpusFile *op_test_close_on_failure(void *_source,
- const OpusFileCallbacks *_cb,int *_error){
- OggOpusFile *of;
- if(OP_UNLIKELY(_source==NULL)){
- if(_error!=NULL)*_error=OP_EFAULT;
- return NULL;
- }
- of=op_test_callbacks(_source,_cb,NULL,0,_error);
- if(OP_UNLIKELY(of==NULL))(*_cb->close)(_source);
- return of;
-}
-
-OggOpusFile *op_test_file(const char *_path,int *_error){
- OpusFileCallbacks cb;
- return op_test_close_on_failure(op_fopen(&cb,_path,"rb"),&cb,_error);
-}
-
-OggOpusFile *op_test_memory(const unsigned char *_data,size_t _size,
- int *_error){
- OpusFileCallbacks cb;
- return op_test_close_on_failure(op_mem_stream_create(&cb,_data,_size),&cb,
- _error);
-}
-
-int op_test_open(OggOpusFile *_of){
- int ret;
- if(OP_UNLIKELY(_of->ready_state!=OP_PARTOPEN))return OP_EINVAL;
- ret=op_open2(_of);
- /*op_open2() will clear this structure on failure.
- Reset its contents to prevent double-frees in op_free().*/
- if(OP_UNLIKELY(ret<0))memset(_of,0,sizeof(*_of));
- return ret;
-}
-
-void op_free(OggOpusFile *_of){
- if(OP_LIKELY(_of!=NULL)){
- op_clear(_of);
- _ogg_free(_of);
- }
-}
-
-int op_seekable(const OggOpusFile *_of){
- return _of->seekable;
-}
-
-int op_link_count(const OggOpusFile *_of){
- return _of->nlinks;
-}
-
-ogg_uint32_t op_serialno(const OggOpusFile *_of,int _li){
- if(OP_UNLIKELY(_li>=_of->nlinks))_li=_of->nlinks-1;
- if(!_of->seekable)_li=0;
- return _of->links[_li<0?_of->cur_link:_li].serialno;
-}
-
-int op_channel_count(const OggOpusFile *_of,int _li){
- return op_head(_of,_li)->channel_count;
-}
-
-opus_int64 op_raw_total(const OggOpusFile *_of,int _li){
- if(OP_UNLIKELY(_of->ready_state<OP_OPENED)
- ||OP_UNLIKELY(!_of->seekable)
- ||OP_UNLIKELY(_li>=_of->nlinks)){
- return OP_EINVAL;
- }
- if(_li<0)return _of->end-_of->links[0].offset;
- return (_li+1>=_of->nlinks?_of->end:_of->links[_li+1].offset)
- -_of->links[_li].offset;
-}
-
-ogg_int64_t op_pcm_total(const OggOpusFile *_of,int _li){
- OggOpusLink *links;
- ogg_int64_t diff;
- int nlinks;
- nlinks=_of->nlinks;
- if(OP_UNLIKELY(_of->ready_state<OP_OPENED)
- ||OP_UNLIKELY(!_of->seekable)
- ||OP_UNLIKELY(_li>=nlinks)){
- return OP_EINVAL;
- }
- links=_of->links;
- /*We verify that the granule position differences are larger than the
- pre-skip and that the total duration does not overflow during link
- enumeration, so we don't have to check here.*/
- if(_li<0){
- ogg_int64_t pcm_total;
- int li;
- pcm_total=0;
- for(li=0;li<nlinks;li++){
- OP_ALWAYS_TRUE(!op_granpos_diff(&diff,
- links[li].pcm_end,links[li].pcm_start));
- pcm_total+=diff-links[li].head.pre_skip;
- }
- return pcm_total;
- }
- OP_ALWAYS_TRUE(!op_granpos_diff(&diff,
- links[_li].pcm_end,links[_li].pcm_start));
- return diff-links[_li].head.pre_skip;
-}
-
-const OpusHead *op_head(const OggOpusFile *_of,int _li){
- if(OP_UNLIKELY(_li>=_of->nlinks))_li=_of->nlinks-1;
- if(!_of->seekable)_li=0;
- return &_of->links[_li<0?_of->cur_link:_li].head;
-}
-
-const OpusTags *op_tags(const OggOpusFile *_of,int _li){
- if(OP_UNLIKELY(_li>=_of->nlinks))_li=_of->nlinks-1;
- if(!_of->seekable){
- if(_of->ready_state<OP_STREAMSET&&_of->ready_state!=OP_PARTOPEN){
- return NULL;
- }
- _li=0;
- }
- else if(_li<0)_li=_of->ready_state>=OP_STREAMSET?_of->cur_link:0;
- return &_of->links[_li].tags;
-}
-
-int op_current_link(const OggOpusFile *_of){
- if(OP_UNLIKELY(_of->ready_state<OP_OPENED))return OP_EINVAL;
- return _of->cur_link;
-}
-
-/*Compute an average bitrate given a byte and sample count.
- Return: The bitrate in bits per second.*/
-static opus_int32 op_calc_bitrate(opus_int64 _bytes,ogg_int64_t _samples){
- /*These rates are absurd, but let's handle them anyway.*/
- if(OP_UNLIKELY(_bytes>(OP_INT64_MAX-(_samples>>1))/(48000*8))){
- ogg_int64_t den;
- if(OP_UNLIKELY(_bytes/(OP_INT32_MAX/(48000*8))>=_samples)){
- return OP_INT32_MAX;
- }
- den=_samples/(48000*8);
- return (opus_int32)((_bytes+(den>>1))/den);
- }
- if(OP_UNLIKELY(_samples<=0))return OP_INT32_MAX;
- /*This can't actually overflow in normal operation: even with a pre-skip of
- 545 2.5 ms frames with 8 streams running at 1282*8+1 bytes per packet
- (1275 byte frames + Opus framing overhead + Ogg lacing values), that all
- produce a single sample of decoded output, we still don't top 45 Mbps.
- The only way to get bitrates larger than that is with excessive Opus
- padding, more encoded streams than output channels, or lots and lots of
- Ogg pages with no packets on them.*/
- return (opus_int32)OP_MIN((_bytes*48000*8+(_samples>>1))/_samples,
- OP_INT32_MAX);
-}
-
-opus_int32 op_bitrate(const OggOpusFile *_of,int _li){
- if(OP_UNLIKELY(_of->ready_state<OP_OPENED)||OP_UNLIKELY(!_of->seekable)
- ||OP_UNLIKELY(_li>=_of->nlinks)){
- return OP_EINVAL;
- }
- return op_calc_bitrate(op_raw_total(_of,_li),op_pcm_total(_of,_li));
-}
-
-opus_int32 op_bitrate_instant(OggOpusFile *_of){
- ogg_int64_t samples_tracked;
- opus_int32 ret;
- if(OP_UNLIKELY(_of->ready_state<OP_OPENED))return OP_EINVAL;
- samples_tracked=_of->samples_tracked;
- if(OP_UNLIKELY(samples_tracked==0))return OP_FALSE;
- ret=op_calc_bitrate(_of->bytes_tracked,samples_tracked);
- _of->bytes_tracked=0;
- _of->samples_tracked=0;
- return ret;
-}
-
-/*Fetch and process a page.
- This handles the case where we're at a bitstream boundary and dumps the
- decoding machine.
- If the decoding machine is unloaded, it loads it.
- It also keeps prev_packet_gp up to date (seek and read both use this; seek
- uses a special hack with _readp).
- Return: <0) Error, OP_HOLE (lost packet), or OP_EOF.
- 0) Need more data (only if _readp==0).
- 1) Got at least one audio data packet.*/
-static int op_fetch_and_process_page(OggOpusFile *_of,
- ogg_page *_og,opus_int64 _page_offset,
- int _readp,int _spanp,int _ignore_holes){
- OggOpusLink *links;
- ogg_uint32_t cur_serialno;
- int seekable;
- int cur_link;
- int ret;
- /*We shouldn't get here if we have unprocessed packets.*/
- OP_ASSERT(_of->ready_state<OP_INITSET||_of->op_pos>=_of->op_count);
- if(!_readp)return 0;
- seekable=_of->seekable;
- links=_of->links;
- cur_link=seekable?_of->cur_link:0;
- cur_serialno=links[cur_link].serialno;
- /*Handle one page.*/
- for(;;){
- ogg_page og;
- OP_ASSERT(_of->ready_state>=OP_OPENED);
- /*This loop is not strictly necessary, but there's no sense in doing the
- extra checks of the larger loop for the common case in a multiplexed
- bistream where the page is simply part of a different logical
- bitstream.*/
- do{
- /*If we were given a page to use, use it.*/
- if(_og!=NULL){
- *&og=*_og;
- _og=NULL;
- }
- /*Keep reading until we get a page with the correct serialno.*/
- else _page_offset=op_get_next_page(_of,&og,_of->end);
- /*EOF: Leave uninitialized.*/
- if(_page_offset<0)return _page_offset<OP_FALSE?(int)_page_offset:OP_EOF;
- if(OP_LIKELY(_of->ready_state>=OP_STREAMSET)){
- if(cur_serialno!=(ogg_uint32_t)ogg_page_serialno(&og)){
- /*Two possibilities:
- 1) Another stream is multiplexed into this logical section, or*/
- if(OP_LIKELY(!ogg_page_bos(&og)))continue;
- /* 2) Our decoding just traversed a bitstream boundary.*/
- if(!_spanp)return OP_EOF;
- if(OP_LIKELY(_of->ready_state>=OP_INITSET))op_decode_clear(_of);
- break;
- }
- }
- /*Bitrate tracking: add the header's bytes here.
- The body bytes are counted when we consume the packets.*/
- _of->bytes_tracked+=og.header_len;
- }
- while(0);
- /*Do we need to load a new machine before submitting the page?
- This is different in the seekable and non-seekable cases.
- In the seekable case, we already have all the header information loaded
- and cached.
- We just initialize the machine with it and continue on our merry way.
- In the non-seekable (streaming) case, we'll only be at a boundary if we
- just left the previous logical bitstream, and we're now nominally at the
- header of the next bitstream.*/
- if(OP_UNLIKELY(_of->ready_state<OP_STREAMSET)){
- if(seekable){
- ogg_uint32_t serialno;
- int nlinks;
- int li;
- serialno=ogg_page_serialno(&og);
- /*Match the serialno to bitstream section.
- We use this rather than offset positions to avoid problems near
- logical bitstream boundaries.*/
- nlinks=_of->nlinks;
- for(li=0;li<nlinks&&links[li].serialno!=serialno;li++);
- /*Not a desired Opus bitstream section.
- Keep trying.*/
- if(li>=nlinks)continue;
- cur_serialno=serialno;
- _of->cur_link=cur_link=li;
- ogg_stream_reset_serialno(&_of->os,serialno);
- _of->ready_state=OP_STREAMSET;
- /*If we're at the start of this link, initialize the granule position
- and pre-skip tracking.*/
- if(_page_offset<=links[cur_link].data_offset){
- _of->prev_packet_gp=links[cur_link].pcm_start;
- _of->prev_page_offset=-1;
- _of->cur_discard_count=links[cur_link].head.pre_skip;
- /*Ignore a hole at the start of a new link (this is common for
- streams joined in the middle) or after seeking.*/
- _ignore_holes=1;
- }
- }
- else{
- do{
- /*We're streaming.
- Fetch the two header packets, build the info struct.*/
- ret=op_fetch_headers(_of,&links[0].head,&links[0].tags,
- NULL,NULL,NULL,&og);
- if(OP_UNLIKELY(ret<0))return ret;
- /*op_find_initial_pcm_offset() will suppress any initial hole for us,
- so no need to set _ignore_holes.*/
- ret=op_find_initial_pcm_offset(_of,links,&og);
- if(OP_UNLIKELY(ret<0))return ret;
- _of->links[0].serialno=cur_serialno=_of->os.serialno;
- _of->cur_link++;
- }
- /*If the link was empty, keep going, because we already have the
- BOS page of the next one in og.*/
- while(OP_UNLIKELY(ret>0));
- /*If we didn't get any packets out of op_find_initial_pcm_offset(),
- keep going (this is possible if end-trimming trimmed them all).*/
- if(_of->op_count<=0)continue;
- /*Otherwise, we're done.*/
- ret=op_make_decode_ready(_of);
- if(OP_UNLIKELY(ret<0))return ret;
- return 1;
- }
- }
- /*The buffered page is the data we want, and we're ready for it.
- Add it to the stream state.*/
- if(OP_UNLIKELY(_of->ready_state==OP_STREAMSET)){
- ret=op_make_decode_ready(_of);
- if(OP_UNLIKELY(ret<0))return ret;
- }
- /*Extract all the packets from the current page.*/
- ogg_stream_pagein(&_of->os,&og);
- if(OP_LIKELY(_of->ready_state>=OP_INITSET)){
- opus_int32 total_duration;
- int durations[255];
- int op_count;
- total_duration=op_collect_audio_packets(_of,durations);
- if(OP_UNLIKELY(total_duration<0)){
- /*Drain the packets from the page anyway.*/
- total_duration=op_collect_audio_packets(_of,durations);
- OP_ASSERT(total_duration>=0);
- /*Report holes to the caller.*/
- if(!_ignore_holes)return OP_HOLE;
- }
- op_count=_of->op_count;
- /*If we found at least one audio data packet, compute per-packet granule
- positions for them.*/
- if(op_count>0){
- ogg_int64_t diff;
- ogg_int64_t prev_packet_gp;
- ogg_int64_t cur_packet_gp;
- ogg_int64_t cur_page_gp;
- int cur_page_eos;
- int pi;
- cur_page_gp=_of->op[op_count-1].granulepos;
- cur_page_eos=_of->op[op_count-1].e_o_s;
- prev_packet_gp=_of->prev_packet_gp;
- if(OP_UNLIKELY(prev_packet_gp==-1)){
- opus_int32 cur_discard_count;
- /*This is the first call after a raw seek.
- Try to reconstruct prev_packet_gp from scratch.*/
- OP_ASSERT(seekable);
- if(OP_UNLIKELY(cur_page_eos)){
- /*If the first page we hit after our seek was the EOS page, and
- we didn't start from data_offset or before, we don't have
- enough information to do end-trimming.
- Proceed to the next link, rather than risk playing back some
- samples that shouldn't have been played.*/
- _of->op_count=0;
- continue;
- }
- /*By default discard 80 ms of data after a seek, unless we seek
- into the pre-skip region.*/
- cur_discard_count=80*48;
- cur_page_gp=_of->op[op_count-1].granulepos;
- /*Try to initialize prev_packet_gp.
- If the current page had packets but didn't have a granule
- position, or the granule position it had was too small (both
- illegal), just use the starting granule position for the link.*/
- prev_packet_gp=links[cur_link].pcm_start;
- if(OP_LIKELY(cur_page_gp!=-1)){
- op_granpos_add(&prev_packet_gp,cur_page_gp,-total_duration);
- }
- if(OP_LIKELY(!op_granpos_diff(&diff,
- prev_packet_gp,links[cur_link].pcm_start))){
- opus_int32 pre_skip;
- /*If we start at the beginning of the pre-skip region, or we're
- at least 80 ms from the end of the pre-skip region, we discard
- to the end of the pre-skip region.
- Otherwise, we still use the 80 ms default, which will discard
- past the end of the pre-skip region.*/
- pre_skip=links[cur_link].head.pre_skip;
- if(diff>=0&&diff<=OP_MAX(0,pre_skip-80*48)){
- cur_discard_count=pre_skip-(int)diff;
- }
- }
- _of->cur_discard_count=cur_discard_count;
- }
- if(OP_UNLIKELY(cur_page_gp==-1)){
- /*This page had completed packets but didn't have a valid granule
- position.
- This is illegal, but we'll try to handle it by continuing to count
- forwards from the previous page.*/
- if(op_granpos_add(&cur_page_gp,prev_packet_gp,total_duration)<0){
- /*The timestamp for this page overflowed.*/
- cur_page_gp=links[cur_link].pcm_end;
- }
- }
- /*If we hit the last page, handle end-trimming.*/
- if(OP_UNLIKELY(cur_page_eos)
- &&OP_LIKELY(!op_granpos_diff(&diff,cur_page_gp,prev_packet_gp))
- &&OP_LIKELY(diff<total_duration)){
- cur_packet_gp=prev_packet_gp;
- for(pi=0;pi<op_count;pi++){
- diff=durations[pi]-diff;
- /*If we have samples to trim...*/
- if(diff>0){
- /*If we trimmed the entire packet, stop (the spec says encoders
- shouldn't do this, but we support it anyway).*/
- if(OP_UNLIKELY(diff>durations[pi]))break;
- cur_packet_gp=cur_page_gp;
- /*Move the EOS flag to this packet, if necessary, so we'll trim
- the samples during decode.*/
- _of->op[pi].e_o_s=1;
- }
- else{
- /*Update the granule position as normal.*/
- OP_ALWAYS_TRUE(!op_granpos_add(&cur_packet_gp,
- cur_packet_gp,durations[pi]));
- }
- _of->op[pi].granulepos=cur_packet_gp;
- OP_ALWAYS_TRUE(!op_granpos_diff(&diff,cur_page_gp,cur_packet_gp));
- }
- }
- else{
- /*Propagate timestamps to earlier packets.
- op_granpos_add(&prev_packet_gp,prev_packet_gp,total_duration)
- should succeed and give prev_packet_gp==cur_page_gp.
- But we don't bother to check that, as there isn't much we can do
- if it's not true, and it actually will not be true on the first
- page after a seek, if there was a continued packet.
- The only thing we guarantee is that the start and end granule
- positions of the packets are valid, and that they are monotonic
- within a page.
- They might be completely out of range for this link (we'll check
- that elsewhere), or non-monotonic between pages.*/
- if(OP_UNLIKELY(op_granpos_add(&prev_packet_gp,
- cur_page_gp,-total_duration)<0)){
- /*The starting timestamp for the first packet on this page
- underflowed.
- This is illegal, but we ignore it.*/
- prev_packet_gp=0;
- }
- for(pi=0;pi<op_count;pi++){
- if(OP_UNLIKELY(op_granpos_add(&cur_packet_gp,
- cur_page_gp,-total_duration)<0)){
- /*The start timestamp for this packet underflowed.
- This is illegal, but we ignore it.*/
- cur_packet_gp=0;
- }
- total_duration-=durations[pi];
- OP_ASSERT(total_duration>=0);
- OP_ALWAYS_TRUE(!op_granpos_add(&cur_packet_gp,
- cur_packet_gp,durations[pi]));
- _of->op[pi].granulepos=cur_packet_gp;
- }
- OP_ASSERT(total_duration==0);
- }
- _of->prev_packet_gp=prev_packet_gp;
- _of->prev_page_offset=_page_offset;
- _of->op_count=pi;
- /*If end-trimming didn't trim all the packets, we're done.*/
- if(OP_LIKELY(pi>0))return 1;
- }
- }
- }
-}
-
-int op_raw_seek(OggOpusFile *_of,opus_int64 _pos){
- int ret;
- if(OP_UNLIKELY(_of->ready_state<OP_OPENED))return OP_EINVAL;
- /*Don't dump the decoder state if we can't seek.*/
- if(OP_UNLIKELY(!_of->seekable))return OP_ENOSEEK;
- if(OP_UNLIKELY(_pos<0)||OP_UNLIKELY(_pos>_of->end))return OP_EINVAL;
- /*Clear out any buffered, decoded data.*/
- op_decode_clear(_of);
- _of->bytes_tracked=0;
- _of->samples_tracked=0;
- ret=op_seek_helper(_of,_pos);
- if(OP_UNLIKELY(ret<0))return OP_EREAD;
- ret=op_fetch_and_process_page(_of,NULL,-1,1,1,1);
- /*If we hit EOF, op_fetch_and_process_page() leaves us uninitialized.
- Instead, jump to the end.*/
- if(ret==OP_EOF){
- int cur_link;
- op_decode_clear(_of);
- cur_link=_of->nlinks-1;
- _of->cur_link=cur_link;
- _of->prev_packet_gp=_of->links[cur_link].pcm_end;
- _of->cur_discard_count=0;
- ret=0;
- }
- else if(ret>0)ret=0;
- return ret;
-}
-
-/*Convert a PCM offset relative to the start of the whole stream to a granule
- position in an individual link.*/
-static ogg_int64_t op_get_granulepos(const OggOpusFile *_of,
- ogg_int64_t _pcm_offset,int *_li){
- const OggOpusLink *links;
- ogg_int64_t duration;
- int nlinks;
- int li;
- OP_ASSERT(_pcm_offset>=0);
- nlinks=_of->nlinks;
- links=_of->links;
- for(li=0;OP_LIKELY(li<nlinks);li++){
- ogg_int64_t pcm_start;
- opus_int32 pre_skip;
- pcm_start=links[li].pcm_start;
- pre_skip=links[li].head.pre_skip;
- OP_ALWAYS_TRUE(!op_granpos_diff(&duration,links[li].pcm_end,pcm_start));
- duration-=pre_skip;
- if(_pcm_offset<duration){
- _pcm_offset+=pre_skip;
- if(OP_UNLIKELY(pcm_start>OP_INT64_MAX-_pcm_offset)){
- /*Adding this amount to the granule position would overflow the positive
- half of its 64-bit range.
- Since signed overflow is undefined in C, do it in a way the compiler
- isn't allowed to screw up.*/
- _pcm_offset-=OP_INT64_MAX-pcm_start+1;
- pcm_start=OP_INT64_MIN;
- }
- pcm_start+=_pcm_offset;
- *_li=li;
- return pcm_start;
- }
- _pcm_offset-=duration;
- }
- return -1;
-}
-
-/*A small helper to determine if an Ogg page contains data that continues onto
- a subsequent page.*/
-static int op_page_continues(const ogg_page *_og){
- int nlacing;
- OP_ASSERT(_og->header_len>=27);
- nlacing=_og->header[26];
- OP_ASSERT(_og->header_len>=27+nlacing);
- /*This also correctly handles the (unlikely) case of nlacing==0, because
- 0!=255.*/
- return _og->header[27+nlacing-1]==255;
-}
-
-/*A small helper to buffer the continued packet data from a page.*/
-static void op_buffer_continued_data(OggOpusFile *_of,ogg_page *_og){
- ogg_packet op;
- ogg_stream_pagein(&_of->os,_og);
- /*Drain any packets that did end on this page (and ignore holes).
- We only care about the continued packet data.*/
- while(ogg_stream_packetout(&_of->os,&op));
-}
-
-/*This controls how close the target has to be to use the current stream
- position to subdivide the initial range.
- Two minutes seems to be a good default.*/
-#define OP_CUR_TIME_THRESH (120*48*(opus_int32)1000)
-
-/*Note: The OP_SMALL_FOOTPRINT #define doesn't (currently) save much code size,
- but it's meant to serve as documentation for portions of the seeking
- algorithm that are purely optional, to aid others learning from/porting this
- code to other contexts.*/
-/*#define OP_SMALL_FOOTPRINT (1)*/
-
-/*Search within link _li for the page with the highest granule position
- preceding (or equal to) _target_gp.
- There is a danger here: missing pages or incorrect frame number information
- in the bitstream could make our task impossible.
- Account for that (and report it as an error condition).*/
-static int op_pcm_seek_page(OggOpusFile *_of,
- ogg_int64_t _target_gp,int _li){
- const OggOpusLink *link;
- ogg_page og;
- ogg_int64_t pcm_pre_skip;
- ogg_int64_t pcm_start;
- ogg_int64_t pcm_end;
- ogg_int64_t best_gp;
- ogg_int64_t diff;
- ogg_uint32_t serialno;
- opus_int32 pre_skip;
- opus_int64 begin;
- opus_int64 end;
- opus_int64 boundary;
- opus_int64 best;
- opus_int64 best_start;
- opus_int64 page_offset;
- opus_int64 d0;
- opus_int64 d1;
- opus_int64 d2;
- int force_bisect;
- int buffering;
- int ret;
- _of->bytes_tracked=0;
- _of->samples_tracked=0;
- link=_of->links+_li;
- best_gp=pcm_start=link->pcm_start;
- pcm_end=link->pcm_end;
- serialno=link->serialno;
- best=best_start=begin=link->data_offset;
- page_offset=-1;
- buffering=0;
- /*We discard the first 80 ms of data after a seek, so seek back that much
- farther.
- If we can't, simply seek to the beginning of the link.*/
- if(OP_UNLIKELY(op_granpos_add(&_target_gp,_target_gp,-80*48)<0)
- ||OP_UNLIKELY(op_granpos_cmp(_target_gp,pcm_start)<0)){
- _target_gp=pcm_start;
- }
- /*Special case seeking to the start of the link.*/
- pre_skip=link->head.pre_skip;
- OP_ALWAYS_TRUE(!op_granpos_add(&pcm_pre_skip,pcm_start,pre_skip));
- if(op_granpos_cmp(_target_gp,pcm_pre_skip)<0)end=boundary=begin;
- else{
- end=boundary=link->end_offset;
-#if !defined(OP_SMALL_FOOTPRINT)
- /*If we were decoding from this link, we can narrow the range a bit.*/
- if(_li==_of->cur_link&&_of->ready_state>=OP_INITSET){
- opus_int64 offset;
- int op_count;
- op_count=_of->op_count;
- /*The only way the offset can be invalid _and_ we can fail the granule
- position checks below is if someone changed the contents of the last
- page since we read it.
- We'd be within our rights to just return OP_EBADLINK in that case, but
- we'll simply ignore the current position instead.*/
- offset=_of->offset;
- if(op_count>0&&OP_LIKELY(offset<=end)){
- ogg_int64_t gp;
- /*Make sure the timestamp is valid.
- The granule position might be -1 if we collected the packets from a
- page without a granule position after reporting a hole.*/
- gp=_of->op[op_count-1].granulepos;
- if(OP_LIKELY(gp!=-1)&&OP_LIKELY(op_granpos_cmp(pcm_start,gp)<0)
- &&OP_LIKELY(op_granpos_cmp(pcm_end,gp)>0)){
- OP_ALWAYS_TRUE(!op_granpos_diff(&diff,gp,_target_gp));
- /*We only actually use the current time if either
- a) We can cut off at least half the range, or
- b) We're seeking sufficiently close to the current position that
- it's likely to be informative.
- Otherwise it appears using the whole link range to estimate the
- first seek location gives better results, on average.*/
- if(diff<0){
- OP_ASSERT(offset>=begin);
- if(offset-begin>=end-begin>>1||diff>-OP_CUR_TIME_THRESH){
- best=begin=offset;
- best_gp=pcm_start=gp;
- /*If we have buffered data from a continued packet, remember the
- offset of the previous page's start, so that if we do wind up
- having to seek back here later, we can prime the stream with
- the continued packet data.
- With no continued packet, we remember the end of the page.*/
- best_start=_of->os.body_returned<_of->os.body_fill?
- _of->prev_page_offset:best;
- /*If there's completed packets and data in the stream state,
- prev_page_offset should always be set.*/
- OP_ASSERT(best_start>=0);
- /*Buffer any continued packet data starting from here.*/
- buffering=1;
- }
- }
- else{
- ogg_int64_t prev_page_gp;
- /*We might get lucky and already have the packet with the target
- buffered.
- Worth checking.
- For very small files (with all of the data in a single page,
- generally 1 second or less), we can loop them continuously
- without seeking at all.*/
- OP_ALWAYS_TRUE(!op_granpos_add(&prev_page_gp,_of->op[0].granulepos,
- -op_get_packet_duration(_of->op[0].packet,_of->op[0].bytes)));
- if(op_granpos_cmp(prev_page_gp,_target_gp)<=0){
- /*Don't call op_decode_clear(), because it will dump our
- packets.*/
- _of->op_pos=0;
- _of->od_buffer_size=0;
- _of->prev_packet_gp=prev_page_gp;
- /*_of->prev_page_offset already points to the right place.*/
- _of->ready_state=OP_STREAMSET;
- return op_make_decode_ready(_of);
- }
- /*No such luck.
- Check if we can cut off at least half the range, though.*/
- if(offset-begin<=end-begin>>1||diff<OP_CUR_TIME_THRESH){
- /*We really want the page start here, but this will do.*/
- end=boundary=offset;
- pcm_end=gp;
- }
- }
- }
- }
- }
-#endif
- }
- /*This code was originally based on the "new search algorithm by HB (Nicholas
- Vinen)" from libvorbisfile.
- It has been modified substantially since.*/
- op_decode_clear(_of);
- if(!buffering)ogg_stream_reset_serialno(&_of->os,serialno);
- _of->cur_link=_li;
- _of->ready_state=OP_STREAMSET;
- /*Initialize the interval size history.*/
- d2=d1=d0=end-begin;
- force_bisect=0;
- while(begin<end){
- opus_int64 bisect;
- opus_int64 next_boundary;
- opus_int32 chunk_size;
- if(end-begin<OP_CHUNK_SIZE)bisect=begin;
- else{
- /*Update the interval size history.*/
- d0=d1>>1;
- d1=d2>>1;
- d2=end-begin>>1;
- if(force_bisect)bisect=begin+(end-begin>>1);
- else{
- ogg_int64_t diff2;
- OP_ALWAYS_TRUE(!op_granpos_diff(&diff,_target_gp,pcm_start));
- OP_ALWAYS_TRUE(!op_granpos_diff(&diff2,pcm_end,pcm_start));
- /*Take a (pretty decent) guess.*/
- bisect=begin+op_rescale64(diff,diff2,end-begin)-OP_CHUNK_SIZE;
- }
- if(bisect-OP_CHUNK_SIZE<begin)bisect=begin;
- force_bisect=0;
- }
- if(bisect!=_of->offset){
- /*Discard any buffered continued packet data.*/
- if(buffering)ogg_stream_reset(&_of->os);
- buffering=0;
- page_offset=-1;
- ret=op_seek_helper(_of,bisect);
- if(OP_UNLIKELY(ret<0))return ret;
- }
- chunk_size=OP_CHUNK_SIZE;
- next_boundary=boundary;
- /*Now scan forward and figure out where we landed.
- In the ideal case, we will see a page with a granule position at or
- before our target, followed by a page with a granule position after our
- target (or the end of the search interval).
- Then we can just drop out and will have all of the data we need with no
- additional seeking.
- If we landed too far before, or after, we'll break out and do another
- bisection.*/
- while(begin<end){
- page_offset=op_get_next_page(_of,&og,boundary);
- if(page_offset<0){
- if(page_offset<OP_FALSE)return (int)page_offset;
- /*There are no more pages in our interval from our stream with a valid
- timestamp that start at position bisect or later.*/
- /*If we scanned the whole interval, we're done.*/
- if(bisect<=begin+1)end=begin;
- else{
- /*Otherwise, back up one chunk.
- First, discard any data from a continued packet.*/
- if(buffering)ogg_stream_reset(&_of->os);
- buffering=0;
- bisect=OP_MAX(bisect-chunk_size,begin);
- ret=op_seek_helper(_of,bisect);
- if(OP_UNLIKELY(ret<0))return ret;
- /*Bump up the chunk size.*/
- chunk_size=OP_MIN(2*chunk_size,OP_CHUNK_SIZE_MAX);
- /*If we did find a page from another stream or without a timestamp,
- don't read past it.*/
- boundary=next_boundary;
- }
- }
- else{
- ogg_int64_t gp;
- int has_packets;
- /*Save the offset of the first page we found after the seek, regardless
- of the stream it came from or whether or not it has a timestamp.*/
- next_boundary=OP_MIN(page_offset,next_boundary);
- if(serialno!=(ogg_uint32_t)ogg_page_serialno(&og))continue;
- has_packets=ogg_page_packets(&og)>0;
- /*Force the gp to -1 (as it should be per spec) if no packets end on
- this page.
- Otherwise we might get confused when we try to pull out a packet
- with that timestamp and can't find it.*/
- gp=has_packets?ogg_page_granulepos(&og):-1;
- if(gp==-1){
- if(buffering){
- if(OP_LIKELY(!has_packets))ogg_stream_pagein(&_of->os,&og);
- else{
- /*If packets did end on this page, but we still didn't have a
- valid granule position (in violation of the spec!), stop
- buffering continued packet data.
- Otherwise we might continue past the packet we actually
- wanted.*/
- ogg_stream_reset(&_of->os);
- buffering=0;
- }
- }
- continue;
- }
- if(op_granpos_cmp(gp,_target_gp)<0){
- /*We found a page that ends before our target.
- Advance to the raw offset of the next page.*/
- begin=_of->offset;
- if(OP_UNLIKELY(op_granpos_cmp(pcm_start,gp)>0)
- ||OP_UNLIKELY(op_granpos_cmp(pcm_end,gp)<0)){
- /*Don't let pcm_start get out of range!
- That could happen with an invalid timestamp.*/
- break;
- }
- /*Save the byte offset of the end of the page with this granule
- position.*/
- best=best_start=begin;
- /*Buffer any data from a continued packet, if necessary.
- This avoids the need to seek back here if the next timestamp we
- encounter while scanning forward lies after our target.*/
- if(buffering)ogg_stream_reset(&_of->os);
- if(op_page_continues(&og)){
- op_buffer_continued_data(_of,&og);
- /*If we have a continued packet, remember the offset of this
- page's start, so that if we do wind up having to seek back here
- later, we can prime the stream with the continued packet data.
- With no continued packet, we remember the end of the page.*/
- best_start=page_offset;
- }
- /*Then force buffering on, so that if a packet starts (but does not
- end) on the next page, we still avoid the extra seek back.*/
- buffering=1;
- best_gp=pcm_start=gp;
- OP_ALWAYS_TRUE(!op_granpos_diff(&diff,_target_gp,pcm_start));
- /*If we're more than a second away from our target, break out and
- do another bisection.*/
- if(diff>48000)break;
- /*Otherwise, keep scanning forward (do NOT use begin+1).*/
- bisect=begin;
- }
- else{
- /*We found a page that ends after our target.*/
- /*If we scanned the whole interval before we found it, we're done.*/
- if(bisect<=begin+1)end=begin;
- else{
- end=bisect;
- /*In later iterations, don't read past the first page we found.*/
- boundary=next_boundary;
- /*If we're not making much progress shrinking the interval size,
- start forcing straight bisection to limit the worst case.*/
- force_bisect=end-begin>d0*2;
- /*Don't let pcm_end get out of range!
- That could happen with an invalid timestamp.*/
- if(OP_LIKELY(op_granpos_cmp(pcm_end,gp)>0)
- &&OP_LIKELY(op_granpos_cmp(pcm_start,gp)<=0)){
- pcm_end=gp;
- }
- break;
- }
- }
- }
- }
- }
- /*Found our page.*/
- OP_ASSERT(op_granpos_cmp(best_gp,pcm_start)>=0);
- /*Seek, if necessary.
- If we were buffering data from a continued packet, we should be able to
- continue to scan forward to get the rest of the data (even if
- page_offset==-1).
- Otherwise, we need to seek back to best_start.*/
- if(!buffering){
- if(best_start!=page_offset){
- page_offset=-1;
- ret=op_seek_helper(_of,best_start);
- if(OP_UNLIKELY(ret<0))return ret;
- }
- if(best_start<best){
- /*Retrieve the page at best_start, if we do not already have it.*/
- if(page_offset<0){
- page_offset=op_get_next_page(_of,&og,link->end_offset);
- if(OP_UNLIKELY(page_offset<OP_FALSE))return (int)page_offset;
- if(OP_UNLIKELY(page_offset!=best_start))return OP_EBADLINK;
- }
- op_buffer_continued_data(_of,&og);
- page_offset=-1;
- }
- }
- /*Update prev_packet_gp to allow per-packet granule position assignment.*/
- _of->prev_packet_gp=best_gp;
- _of->prev_page_offset=best_start;
- ret=op_fetch_and_process_page(_of,page_offset<0?NULL:&og,page_offset,1,0,1);
- if(OP_UNLIKELY(ret<=0))return OP_EBADLINK;
- /*Verify result.*/
- if(OP_UNLIKELY(op_granpos_cmp(_of->prev_packet_gp,_target_gp)>0)){
- return OP_EBADLINK;
- }
- /*Our caller will set cur_discard_count to handle pre-roll.*/
- return 0;
-}
-
-int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset){
- const OggOpusLink *link;
- ogg_int64_t pcm_start;
- ogg_int64_t target_gp;
- ogg_int64_t prev_packet_gp;
- ogg_int64_t skip;
- ogg_int64_t diff;
- int op_count;
- int op_pos;
- int ret;
- int li;
- if(OP_UNLIKELY(_of->ready_state<OP_OPENED))return OP_EINVAL;
- if(OP_UNLIKELY(!_of->seekable))return OP_ENOSEEK;
- if(OP_UNLIKELY(_pcm_offset<0))return OP_EINVAL;
- target_gp=op_get_granulepos(_of,_pcm_offset,&li);
- if(OP_UNLIKELY(target_gp==-1))return OP_EINVAL;
- link=_of->links+li;
- pcm_start=link->pcm_start;
- OP_ALWAYS_TRUE(!op_granpos_diff(&_pcm_offset,target_gp,pcm_start));
-#if !defined(OP_SMALL_FOOTPRINT)
- /*For small (90 ms or less) forward seeks within the same link, just decode
- forward.
- This also optimizes the case of seeking to the current position.*/
- if(li==_of->cur_link&&_of->ready_state>=OP_INITSET){
- ogg_int64_t gp;
- gp=_of->prev_packet_gp;
- if(OP_LIKELY(gp!=-1)){
- int nbuffered;
- nbuffered=OP_MAX(_of->od_buffer_size-_of->od_buffer_pos,0);
- OP_ALWAYS_TRUE(!op_granpos_add(&gp,gp,-nbuffered));
- /*We do _not_ add cur_discard_count to gp.
- Otherwise the total amount to discard could grow without bound, and it
- would be better just to do a full seek.*/
- if(OP_LIKELY(!op_granpos_diff(&diff,gp,pcm_start))){
- ogg_int64_t discard_count;
- discard_count=_pcm_offset-diff;
- /*We use a threshold of 90 ms instead of 80, since 80 ms is the
- _minimum_ we would have discarded after a full seek.
- Assuming 20 ms frames (the default), we'd discard 90 ms on average.*/
- if(discard_count>=0&&OP_UNLIKELY(discard_count<90*48)){
- _of->cur_discard_count=(opus_int32)discard_count;
- return 0;
- }
- }
- }
- }
-#endif
- ret=op_pcm_seek_page(_of,target_gp,li);
- if(OP_UNLIKELY(ret<0))return ret;
- /*Now skip samples until we actually get to our target.*/
- /*Figure out where we should skip to.*/
- if(_pcm_offset<=link->head.pre_skip)skip=0;
- else skip=OP_MAX(_pcm_offset-80*48,0);
- OP_ASSERT(_pcm_offset-skip>=0);
- OP_ASSERT(_pcm_offset-skip<OP_INT32_MAX-120*48);
- /*Skip packets until we find one with samples past our skip target.*/
- for(;;){
- op_count=_of->op_count;
- prev_packet_gp=_of->prev_packet_gp;
- for(op_pos=_of->op_pos;op_pos<op_count;op_pos++){
- ogg_int64_t cur_packet_gp;
- cur_packet_gp=_of->op[op_pos].granulepos;
- if(OP_LIKELY(!op_granpos_diff(&diff,cur_packet_gp,pcm_start))
- &&diff>skip){
- break;
- }
- prev_packet_gp=cur_packet_gp;
- }
- _of->prev_packet_gp=prev_packet_gp;
- _of->op_pos=op_pos;
- if(op_pos<op_count)break;
- /*We skipped all the packets on this page.
- Fetch another.*/
- ret=op_fetch_and_process_page(_of,NULL,-1,1,0,1);
- if(OP_UNLIKELY(ret<=0))return OP_EBADLINK;
- }
- OP_ALWAYS_TRUE(!op_granpos_diff(&diff,prev_packet_gp,pcm_start));
- /*We skipped too far.
- Either the timestamps were illegal or there was a hole in the data.*/
- if(diff>skip)return OP_EBADLINK;
- OP_ASSERT(_pcm_offset-diff<OP_INT32_MAX);
- /*TODO: If there are further holes/illegal timestamps, we still won't decode
- to the correct sample.
- However, at least op_pcm_tell() will report the correct value immediately
- after returning.*/
- _of->cur_discard_count=(opus_int32)(_pcm_offset-diff);
- return 0;
-}
-
-opus_int64 op_raw_tell(const OggOpusFile *_of){
- if(OP_UNLIKELY(_of->ready_state<OP_OPENED))return OP_EINVAL;
- return _of->offset;
-}
-
-/*Convert a granule position from a given link to a PCM offset relative to the
- start of the whole stream.
- For unseekable sources, this gets reset to 0 at the beginning of each link.*/
-static ogg_int64_t op_get_pcm_offset(const OggOpusFile *_of,
- ogg_int64_t _gp,int _li){
- const OggOpusLink *links;
- ogg_int64_t pcm_offset;
- ogg_int64_t delta;
- int li;
- links=_of->links;
- pcm_offset=0;
- OP_ASSERT(_li<_of->nlinks);
- for(li=0;li<_li;li++){
- OP_ALWAYS_TRUE(!op_granpos_diff(&delta,
- links[li].pcm_end,links[li].pcm_start));
- delta-=links[li].head.pre_skip;
- pcm_offset+=delta;
- }
- OP_ASSERT(_li>=0);
- if(_of->seekable&&OP_UNLIKELY(op_granpos_cmp(_gp,links[_li].pcm_end)>0)){
- _gp=links[_li].pcm_end;
- }
- if(OP_LIKELY(op_granpos_cmp(_gp,links[_li].pcm_start)>0)){
- if(OP_UNLIKELY(op_granpos_diff(&delta,_gp,links[_li].pcm_start)<0)){
- /*This means an unseekable stream claimed to have a page from more than
- 2 billion days after we joined.*/
- OP_ASSERT(!_of->seekable);
- return OP_INT64_MAX;
- }
- if(delta<links[_li].head.pre_skip)delta=0;
- else delta-=links[_li].head.pre_skip;
- /*In the seekable case, _gp was limited by pcm_end.
- In the unseekable case, pcm_offset should be 0.*/
- OP_ASSERT(pcm_offset<=OP_INT64_MAX-delta);
- pcm_offset+=delta;
- }
- return pcm_offset;
-}
-
-ogg_int64_t op_pcm_tell(const OggOpusFile *_of){
- ogg_int64_t gp;
- int nbuffered;
- int li;
- if(OP_UNLIKELY(_of->ready_state<OP_OPENED))return OP_EINVAL;
- gp=_of->prev_packet_gp;
- if(gp==-1)return 0;
- nbuffered=OP_MAX(_of->od_buffer_size-_of->od_buffer_pos,0);
- OP_ALWAYS_TRUE(!op_granpos_add(&gp,gp,-nbuffered));
- li=_of->seekable?_of->cur_link:0;
- if(op_granpos_add(&gp,gp,_of->cur_discard_count)<0){
- gp=_of->links[li].pcm_end;
- }
- return op_get_pcm_offset(_of,gp,li);
-}
-
-void op_set_decode_callback(OggOpusFile *_of,
- op_decode_cb_func _decode_cb,void *_ctx){
- _of->decode_cb=_decode_cb;
- _of->decode_cb_ctx=_ctx;
-}
-
-int op_set_gain_offset(OggOpusFile *_of,
- int _gain_type,opus_int32 _gain_offset_q8){
- if(_gain_type!=OP_HEADER_GAIN&&_gain_type!=OP_ALBUM_GAIN
- &&_gain_type!=OP_TRACK_GAIN&&_gain_type!=OP_ABSOLUTE_GAIN){
- return OP_EINVAL;
- }
- _of->gain_type=_gain_type;
- /*The sum of header gain and track gain lies in the range [-65536,65534].
- These bounds allow the offset to set the final value to anywhere in the
- range [-32768,32767], which is what we'll clamp it to before applying.*/
- _of->gain_offset_q8=OP_CLAMP(-98302,_gain_offset_q8,98303);
- op_update_gain(_of);
- return 0;
-}
-
-void op_set_dither_enabled(OggOpusFile *_of,int _enabled){
-#if !defined(OP_FIXED_POINT)
- _of->dither_disabled=!_enabled;
- if(!_enabled)_of->dither_mute=65;
-#endif
-}
-
-/*Allocate the decoder scratch buffer.
- This is done lazily, since if the user provides large enough buffers, we'll
- never need it.*/
-static int op_init_buffer(OggOpusFile *_of){
- int nchannels_max;
- if(_of->seekable){
- const OggOpusLink *links;
- int nlinks;
- int li;
- links=_of->links;
- nlinks=_of->nlinks;
- nchannels_max=1;
- for(li=0;li<nlinks;li++){
- nchannels_max=OP_MAX(nchannels_max,links[li].head.channel_count);
- }
- }
- else nchannels_max=OP_NCHANNELS_MAX;
- _of->od_buffer=(op_sample *)_ogg_malloc(
- sizeof(*_of->od_buffer)*nchannels_max*120*48);
- if(_of->od_buffer==NULL)return OP_EFAULT;
- return 0;
-}
-
-/*Decode a single packet into the target buffer.*/
-static int op_decode(OggOpusFile *_of,op_sample *_pcm,
- const ogg_packet *_op,int _nsamples,int _nchannels){
- int ret;
- /*First we try using the application-provided decode callback.*/
- if(_of->decode_cb!=NULL){
-#if defined(OP_FIXED_POINT)
- ret=(*_of->decode_cb)(_of->decode_cb_ctx,_of->od,_pcm,_op,
- _nsamples,_nchannels,OP_DEC_FORMAT_SHORT,_of->cur_link);
-#else
- ret=(*_of->decode_cb)(_of->decode_cb_ctx,_of->od,_pcm,_op,
- _nsamples,_nchannels,OP_DEC_FORMAT_FLOAT,_of->cur_link);
-#endif
- }
- else ret=OP_DEC_USE_DEFAULT;
- /*If the application didn't want to handle decoding, do it ourselves.*/
- if(ret==OP_DEC_USE_DEFAULT){
-#if defined(OP_FIXED_POINT)
- ret=opus_multistream_decode(_of->od,
- _op->packet,_op->bytes,_pcm,_nsamples,0);
-#else
- ret=opus_multistream_decode_float(_of->od,
- _op->packet,_op->bytes,_pcm,_nsamples,0);
-#endif
- OP_ASSERT(ret<0||ret==_nsamples);
- }
- /*If the application returned a positive value other than 0 or
- OP_DEC_USE_DEFAULT, fail.*/
- else if(OP_UNLIKELY(ret>0))return OP_EBADPACKET;
- if(OP_UNLIKELY(ret<0))return OP_EBADPACKET;
- return ret;
-}
-
-/*Read more samples from the stream, using the same API as op_read() or
- op_read_float().*/
-static int op_read_native(OggOpusFile *_of,
- op_sample *_pcm,int _buf_size,int *_li){
- if(OP_UNLIKELY(_of->ready_state<OP_OPENED))return OP_EINVAL;
- for(;;){
- int ret;
- if(OP_LIKELY(_of->ready_state>=OP_INITSET)){
- int nchannels;
- int od_buffer_pos;
- int nsamples;
- int op_pos;
- nchannels=_of->links[_of->seekable?_of->cur_link:0].head.channel_count;
- od_buffer_pos=_of->od_buffer_pos;
- nsamples=_of->od_buffer_size-od_buffer_pos;
- /*If we have buffered samples, return them.*/
- if(nsamples>0){
- if(nsamples*nchannels>_buf_size)nsamples=_buf_size/nchannels;
- memcpy(_pcm,_of->od_buffer+nchannels*od_buffer_pos,
- sizeof(*_pcm)*nchannels*nsamples);
- od_buffer_pos+=nsamples;
- _of->od_buffer_pos=od_buffer_pos;
- if(_li!=NULL)*_li=_of->cur_link;
- return nsamples;
- }
- /*If we have buffered packets, decode one.*/
- op_pos=_of->op_pos;
- if(OP_LIKELY(op_pos<_of->op_count)){
- const ogg_packet *pop;
- ogg_int64_t diff;
- opus_int32 cur_discard_count;
- int duration;
- int trimmed_duration;
- pop=_of->op+op_pos++;
- _of->op_pos=op_pos;
- cur_discard_count=_of->cur_discard_count;
- duration=op_get_packet_duration(pop->packet,pop->bytes);
- /*We don't buffer packets with an invalid TOC sequence.*/
- OP_ASSERT(duration>0);
- trimmed_duration=duration;
- /*Perform end-trimming.*/
- if(OP_UNLIKELY(pop->e_o_s)){
- if(OP_UNLIKELY(op_granpos_cmp(pop->granulepos,
- _of->prev_packet_gp)<=0)){
- trimmed_duration=0;
- }
- else if(OP_LIKELY(!op_granpos_diff(&diff,
- pop->granulepos,_of->prev_packet_gp))){
- trimmed_duration=(int)OP_MIN(diff,trimmed_duration);
- }
- }
- _of->prev_packet_gp=pop->granulepos;
- if(OP_UNLIKELY(duration*nchannels>_buf_size)){
- op_sample *buf;
- /*If the user's buffer is too small, decode into a scratch buffer.*/
- buf=_of->od_buffer;
- if(OP_UNLIKELY(buf==NULL)){
- ret=op_init_buffer(_of);
- if(OP_UNLIKELY(ret<0))return ret;
- buf=_of->od_buffer;
- }
- ret=op_decode(_of,buf,pop,duration,nchannels);
- if(OP_UNLIKELY(ret<0))return ret;
- /*Perform pre-skip/pre-roll.*/
- od_buffer_pos=(int)OP_MIN(trimmed_duration,cur_discard_count);
- cur_discard_count-=od_buffer_pos;
- _of->cur_discard_count=cur_discard_count;
- _of->od_buffer_pos=od_buffer_pos;
- _of->od_buffer_size=trimmed_duration;
- /*Update bitrate tracking based on the actual samples we used from
- what was decoded.*/
- _of->bytes_tracked+=pop->bytes;
- _of->samples_tracked+=trimmed_duration-od_buffer_pos;
- }
- else{
- /*Otherwise decode directly into the user's buffer.*/
- ret=op_decode(_of,_pcm,pop,duration,nchannels);
- if(OP_UNLIKELY(ret<0))return ret;
- if(OP_LIKELY(trimmed_duration>0)){
- /*Perform pre-skip/pre-roll.*/
- od_buffer_pos=(int)OP_MIN(trimmed_duration,cur_discard_count);
- cur_discard_count-=od_buffer_pos;
- _of->cur_discard_count=cur_discard_count;
- trimmed_duration-=od_buffer_pos;
- if(OP_LIKELY(trimmed_duration>0)
- &&OP_UNLIKELY(od_buffer_pos>0)){
- memmove(_pcm,_pcm+od_buffer_pos*nchannels,
- sizeof(*_pcm)*trimmed_duration*nchannels);
- }
- /*Update bitrate tracking based on the actual samples we used from
- what was decoded.*/
- _of->bytes_tracked+=pop->bytes;
- _of->samples_tracked+=trimmed_duration;
- if(OP_LIKELY(trimmed_duration>0)){
- if(_li!=NULL)*_li=_of->cur_link;
- return trimmed_duration;
- }
- }
- }
- /*Don't grab another page yet.
- This one might have more packets, or might have buffered data now.*/
- continue;
- }
- }
- /*Suck in another page.*/
- ret=op_fetch_and_process_page(_of,NULL,-1,1,1,0);
- if(OP_UNLIKELY(ret==OP_EOF)){
- if(_li!=NULL)*_li=_of->cur_link;
- return 0;
- }
- if(OP_UNLIKELY(ret<0))return ret;
- }
-}
-
-/*A generic filter to apply to the decoded audio data.
- _src is non-const because we will destructively modify the contents of the
- source buffer that we consume in some cases.*/
-typedef int (*op_read_filter_func)(OggOpusFile *_of,void *_dst,int _dst_sz,
- op_sample *_src,int _nsamples,int _nchannels);
-
-/*Decode some samples and then apply a custom filter to them.
- This is used to convert to different output formats.*/
-static int op_filter_read_native(OggOpusFile *_of,void *_dst,int _dst_sz,
- op_read_filter_func _filter,int *_li){
- int ret;
- /*Ensure we have some decoded samples in our buffer.*/
- ret=op_read_native(_of,NULL,0,_li);
- /*Now apply the filter to them.*/
- if(OP_LIKELY(ret>=0)&&OP_LIKELY(_of->ready_state>=OP_INITSET)){
- int od_buffer_pos;
- od_buffer_pos=_of->od_buffer_pos;
- ret=_of->od_buffer_size-od_buffer_pos;
- if(OP_LIKELY(ret>0)){
- int nchannels;
- nchannels=_of->links[_of->seekable?_of->cur_link:0].head.channel_count;
- ret=(*_filter)(_of,_dst,_dst_sz,
- _of->od_buffer+nchannels*od_buffer_pos,ret,nchannels);
- OP_ASSERT(ret>=0);
- OP_ASSERT(ret<=_of->od_buffer_size-od_buffer_pos);
- od_buffer_pos+=ret;
- _of->od_buffer_pos=od_buffer_pos;
- }
- }
- return ret;
-}
-
-#if !defined(OP_FIXED_POINT)||!defined(OP_DISABLE_FLOAT_API)
-
-/*Matrices for downmixing from the supported channel counts to stereo.
- The matrices with 5 or more channels are normalized to a total volume of 2.0,
- since most mixes sound too quiet if normalized to 1.0 (as there is generally
- little volume in the side/rear channels).*/
-static const float OP_STEREO_DOWNMIX[OP_NCHANNELS_MAX-2][OP_NCHANNELS_MAX][2]={
- /*3.0*/
- {
- {0.5858F,0.0F},{0.4142F,0.4142F},{0.0F,0.5858F}
- },
- /*quadrophonic*/
- {
- {0.4226F,0.0F},{0.0F,0.4226F},{0.366F,0.2114F},{0.2114F,0.336F}
- },
- /*5.0*/
- {
- {0.651F,0.0F},{0.46F,0.46F},{0.0F,0.651F},{0.5636F,0.3254F},
- {0.3254F,0.5636F}
- },
- /*5.1*/
- {
- {0.529F,0.0F},{0.3741F,0.3741F},{0.0F,0.529F},{0.4582F,0.2645F},
- {0.2645F,0.4582F},{0.3741F,0.3741F}
- },
- /*6.1*/
- {
- {0.4553F,0.0F},{0.322F,0.322F},{0.0F,0.4553F},{0.3943F,0.2277F},
- {0.2277F,0.3943F},{0.2788F,0.2788F},{0.322F,0.322F}
- },
- /*7.1*/
- {
- {0.3886F,0.0F},{0.2748F,0.2748F},{0.0F,0.3886F},{0.3366F,0.1943F},
- {0.1943F,0.3366F},{0.3366F,0.1943F},{0.1943F,0.3366F},{0.2748F,0.2748F}
- }
-};
-
-#endif
-
-#if defined(OP_FIXED_POINT)
-
-/*Matrices for downmixing from the supported channel counts to stereo.
- The matrices with 5 or more channels are normalized to a total volume of 2.0,
- since most mixes sound too quiet if normalized to 1.0 (as there is generally
- little volume in the side/rear channels).
- Hence we keep the coefficients in Q14, so the downmix values won't overflow a
- 32-bit number.*/
-static const opus_int16 OP_STEREO_DOWNMIX_Q14
- [OP_NCHANNELS_MAX-2][OP_NCHANNELS_MAX][2]={
- /*3.0*/
- {
- {9598,0},{6786,6786},{0,9598}
- },
- /*quadrophonic*/
- {
- {6924,0},{0,6924},{5996,3464},{3464,5996}
- },
- /*5.0*/
- {
- {10666,0},{7537,7537},{0,10666},{9234,5331},{5331,9234}
- },
- /*5.1*/
- {
- {8668,0},{6129,6129},{0,8668},{7507,4335},{4335,7507},{6129,6129}
- },
- /*6.1*/
- {
- {7459,0},{5275,5275},{0,7459},{6460,3731},{3731,6460},{4568,4568},
- {5275,5275}
- },
- /*7.1*/
- {
- {6368,0},{4502,4502},{0,6368},{5515,3183},{3183,5515},{5515,3183},
- {3183,5515},{4502,4502}
- }
-};
-
-int op_read(OggOpusFile *_of,opus_int16 *_pcm,int _buf_size,int *_li){
- return op_read_native(_of,_pcm,_buf_size,_li);
-}
-
-static int op_stereo_filter(OggOpusFile *_of,void *_dst,int _dst_sz,
- op_sample *_src,int _nsamples,int _nchannels){
- (void)_of;
- _nsamples=OP_MIN(_nsamples,_dst_sz>>1);
- if(_nchannels==2)memcpy(_dst,_src,_nsamples*2*sizeof(*_src));
- else{
- opus_int16 *dst;
- int i;
- dst=(opus_int16 *)_dst;
- if(_nchannels==1){
- for(i=0;i<_nsamples;i++)dst[2*i+0]=dst[2*i+1]=_src[i];
- }
- else{
- for(i=0;i<_nsamples;i++){
- opus_int32 l;
- opus_int32 r;
- int ci;
- l=r=0;
- for(ci=0;ci<_nchannels;ci++){
- opus_int32 s;
- s=_src[_nchannels*i+ci];
- l+=OP_STEREO_DOWNMIX_Q14[_nchannels-3][ci][0]*s;
- r+=OP_STEREO_DOWNMIX_Q14[_nchannels-3][ci][1]*s;
- }
- /*TODO: For 5 or more channels, we should do soft clipping here.*/
- dst[2*i+0]=(opus_int16)OP_CLAMP(-32768,l+8192>>14,32767);
- dst[2*i+1]=(opus_int16)OP_CLAMP(-32768,r+8192>>14,32767);
- }
- }
- }
- return _nsamples;
-}
-
-int op_read_stereo(OggOpusFile *_of,opus_int16 *_pcm,int _buf_size){
- return op_filter_read_native(_of,_pcm,_buf_size,op_stereo_filter,NULL);
-}
-
-# if !defined(OP_DISABLE_FLOAT_API)
-
-static int op_short2float_filter(OggOpusFile *_of,void *_dst,int _dst_sz,
- op_sample *_src,int _nsamples,int _nchannels){
- float *dst;
- int i;
- (void)_of;
- dst=(float *)_dst;
- if(OP_UNLIKELY(_nsamples*_nchannels>_dst_sz))_nsamples=_dst_sz/_nchannels;
- _dst_sz=_nsamples*_nchannels;
- for(i=0;i<_dst_sz;i++)dst[i]=(1.0F/32768)*_src[i];
- return _nsamples;
-}
-
-int op_read_float(OggOpusFile *_of,float *_pcm,int _buf_size,int *_li){
- return op_filter_read_native(_of,_pcm,_buf_size,op_short2float_filter,_li);
-}
-
-static int op_short2float_stereo_filter(OggOpusFile *_of,
- void *_dst,int _dst_sz,op_sample *_src,int _nsamples,int _nchannels){
- float *dst;
- int i;
- dst=(float *)_dst;
- _nsamples=OP_MIN(_nsamples,_dst_sz>>1);
- if(_nchannels==1){
- _nsamples=op_short2float_filter(_of,dst,_nsamples,_src,_nsamples,1);
- for(i=_nsamples;i-->0;)dst[2*i+0]=dst[2*i+1]=dst[i];
- }
- else if(_nchannels<5){
- /*For 3 or 4 channels, we can downmix in fixed point without risk of
- clipping.*/
- if(_nchannels>2){
- _nsamples=op_stereo_filter(_of,_src,_nsamples*2,
- _src,_nsamples,_nchannels);
- }
- return op_short2float_filter(_of,dst,_dst_sz,_src,_nsamples,2);
- }
- else{
- /*For 5 or more channels, we convert to floats and then downmix (so that we
- don't risk clipping).*/
- for(i=0;i<_nsamples;i++){
- float l;
- float r;
- int ci;
- l=r=0;
- for(ci=0;ci<_nchannels;ci++){
- float s;
- s=(1.0F/32768)*_src[_nchannels*i+ci];
- l+=OP_STEREO_DOWNMIX[_nchannels-3][ci][0]*s;
- r+=OP_STEREO_DOWNMIX[_nchannels-3][ci][1]*s;
- }
- dst[2*i+0]=l;
- dst[2*i+1]=r;
- }
- }
- return _nsamples;
-}
-
-int op_read_float_stereo(OggOpusFile *_of,float *_pcm,int _buf_size){
- return op_filter_read_native(_of,_pcm,_buf_size,
- op_short2float_stereo_filter,NULL);
-}
-
-# endif
-
-#else
-
-# if defined(OP_HAVE_LRINTF)
-# include <math.h>
-# define op_float2int(_x) (lrintf(_x))
-# else
-# define op_float2int(_x) ((int)((_x)+((_x)<0?-0.5F:0.5F)))
-# endif
-
-/*The dithering code here is adapted from opusdec, part of opus-tools.
- It was originally written by Greg Maxwell.*/
-
-static opus_uint32 op_rand(opus_uint32 _seed){
- return _seed*96314165+907633515&0xFFFFFFFFU;
-}
-
-/*This implements 16-bit quantization with full triangular dither and IIR noise
- shaping.
- The noise shaping filters were designed by Sebastian Gesemann, and are based
- on the LAME ATH curves with flattening to limit their peak gain to 20 dB.
- Everyone else's noise shaping filters are mildly crazy.
- The 48 kHz version of this filter is just a warped version of the 44.1 kHz
- filter and probably could be improved by shifting the HF shelf up in
- frequency a little bit, since 48 kHz has a bit more room and being more
- conservative against bat-ears is probably more important than more noise
- suppression.
- This process can increase the peak level of the signal (in theory by the peak
- error of 1.5 +20 dB, though that is unobservably rare).
- To avoid clipping, the signal is attenuated by a couple thousandths of a dB.
- Initially, the approach taken here was to only attenuate by the 99.9th
- percentile, making clipping rare but not impossible (like SoX), but the
- limited gain of the filter means that the worst case was only two
- thousandths of a dB more, so this just uses the worst case.
- The attenuation is probably also helpful to prevent clipping in the DAC
- reconstruction filters or downstream resampling, in any case.*/
-
-# define OP_GAIN (32753.0F)
-
-# define OP_PRNG_GAIN (1.0F/0xFFFFFFFF)
-
-/*48 kHz noise shaping filter, sd=2.34.*/
-
-static const float OP_FCOEF_B[4]={
- 2.2374F,-0.7339F,-0.1251F,-0.6033F
-};
-
-static const float OP_FCOEF_A[4]={
- 0.9030F,0.0116F,-0.5853F,-0.2571F
-};
-
-static int op_float2short_filter(OggOpusFile *_of,void *_dst,int _dst_sz,
- float *_src,int _nsamples,int _nchannels){
- opus_int16 *dst;
- int ci;
- int i;
- dst=(opus_int16 *)_dst;
- if(OP_UNLIKELY(_nsamples*_nchannels>_dst_sz))_nsamples=_dst_sz/_nchannels;
-# if defined(OP_SOFT_CLIP)
- if(_of->state_channel_count!=_nchannels){
- for(ci=0;ci<_nchannels;ci++)_of->clip_state[ci]=0;
- }
- opus_pcm_soft_clip(_src,_nsamples,_nchannels,_of->clip_state);
-# endif
- if(_of->dither_disabled){
- for(i=0;i<_nchannels*_nsamples;i++){
- dst[i]=op_float2int(OP_CLAMP(-32768,32768.0F*_src[i],32767));
- }
- }
- else{
- opus_uint32 seed;
- int mute;
- seed=_of->dither_seed;
- mute=_of->dither_mute;
- if(_of->state_channel_count!=_nchannels)mute=65;
- /*In order to avoid replacing digital silence with quiet dither noise, we
- mute if the output has been silent for a while.*/
- if(mute>64)memset(_of->dither_a,0,sizeof(*_of->dither_a)*4*_nchannels);
- for(i=0;i<_nsamples;i++){
- int silent;
- silent=1;
- for(ci=0;ci<_nchannels;ci++){
- float r;
- float s;
- float err;
- int si;
- int j;
- s=_src[_nchannels*i+ci];
- silent&=s==0;
- s*=OP_GAIN;
- err=0;
- for(j=0;j<4;j++){
- err+=OP_FCOEF_B[j]*_of->dither_b[ci*4+j]
- -OP_FCOEF_A[j]*_of->dither_a[ci*4+j];
- }
- for(j=3;j-->0;)_of->dither_a[ci*4+j+1]=_of->dither_a[ci*4+j];
- for(j=3;j-->0;)_of->dither_b[ci*4+j+1]=_of->dither_b[ci*4+j];
- _of->dither_a[ci*4]=err;
- s-=err;
- if(mute>16)r=0;
- else{
- seed=op_rand(seed);
- r=seed*OP_PRNG_GAIN;
- seed=op_rand(seed);
- r-=seed*OP_PRNG_GAIN;
- }
- /*Clamp in float out of paranoia that the input will be > 96 dBFS and
- wrap if the integer is clamped.*/
- si=op_float2int(OP_CLAMP(-32768,s+r,32767));
- dst[_nchannels*i+ci]=(opus_int16)si;
- /*Including clipping in the noise shaping is generally disastrous: the
- futile effort to restore the clipped energy results in more clipping.
- However, small amounts---at the level which could normally be created
- by dither and rounding---are harmless and can even reduce clipping
- somewhat due to the clipping sometimes reducing the dither + rounding
- error.*/
- _of->dither_b[ci*4]=mute>16?0:OP_CLAMP(-1.5F,si-s,1.5F);
- }
- mute++;
- if(!silent)mute=0;
- }
- _of->dither_mute=OP_MIN(mute,65);
- _of->dither_seed=seed;
- }
- _of->state_channel_count=_nchannels;
- return _nsamples;
-}
-
-int op_read(OggOpusFile *_of,opus_int16 *_pcm,int _buf_size,int *_li){
- return op_filter_read_native(_of,_pcm,_buf_size,op_float2short_filter,_li);
-}
-
-int op_read_float(OggOpusFile *_of,float *_pcm,int _buf_size,int *_li){
- _of->state_channel_count=0;
- return op_read_native(_of,_pcm,_buf_size,_li);
-}
-
-static int op_stereo_filter(OggOpusFile *_of,void *_dst,int _dst_sz,
- op_sample *_src,int _nsamples,int _nchannels){
- (void)_of;
- _nsamples=OP_MIN(_nsamples,_dst_sz>>1);
- if(_nchannels==2)memcpy(_dst,_src,_nsamples*2*sizeof(*_src));
- else{
- float *dst;
- int i;
- dst=(float *)_dst;
- if(_nchannels==1){
- for(i=0;i<_nsamples;i++)dst[2*i+0]=dst[2*i+1]=_src[i];
- }
- else{
- for(i=0;i<_nsamples;i++){
- float l;
- float r;
- int ci;
- l=r=0;
- for(ci=0;ci<_nchannels;ci++){
- l+=OP_STEREO_DOWNMIX[_nchannels-3][ci][0]*_src[_nchannels*i+ci];
- r+=OP_STEREO_DOWNMIX[_nchannels-3][ci][1]*_src[_nchannels*i+ci];
- }
- dst[2*i+0]=l;
- dst[2*i+1]=r;
- }
- }
- }
- return _nsamples;
-}
-
-static int op_float2short_stereo_filter(OggOpusFile *_of,
- void *_dst,int _dst_sz,op_sample *_src,int _nsamples,int _nchannels){
- opus_int16 *dst;
- dst=(opus_int16 *)_dst;
- if(_nchannels==1){
- int i;
- _nsamples=op_float2short_filter(_of,dst,_dst_sz>>1,_src,_nsamples,1);
- for(i=_nsamples;i-->0;)dst[2*i+0]=dst[2*i+1]=dst[i];
- }
- else{
- if(_nchannels>2){
- _nsamples=OP_MIN(_nsamples,_dst_sz>>1);
- _nsamples=op_stereo_filter(_of,_src,_nsamples*2,
- _src,_nsamples,_nchannels);
- }
- _nsamples=op_float2short_filter(_of,dst,_dst_sz,_src,_nsamples,2);
- }
- return _nsamples;
-}
-
-int op_read_stereo(OggOpusFile *_of,opus_int16 *_pcm,int _buf_size){
- return op_filter_read_native(_of,_pcm,_buf_size,
- op_float2short_stereo_filter,NULL);
-}
-
-int op_read_float_stereo(OggOpusFile *_of,float *_pcm,int _buf_size){
- _of->state_channel_count=0;
- return op_filter_read_native(_of,_pcm,_buf_size,op_stereo_filter,NULL);
-}
-
-#endif
diff --git a/drivers/opus/opusfile.h b/drivers/opus/opusfile.h
deleted file mode 100644
index da31a29769..0000000000
--- a/drivers/opus/opusfile.h
+++ /dev/null
@@ -1,2148 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE libopusfile 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 libopusfile SOURCE CODE IS (C) COPYRIGHT 1994-2012 *
- * by the Xiph.Org Foundation and contributors http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: stdio-based convenience library for opening/seeking/decoding
- last mod: $Id: vorbisfile.h 17182 2010-04-29 03:48:32Z xiphmont $
-
- ********************************************************************/
-#if !defined(_opusfile_h)
-# define _opusfile_h (1)
-
-/**\mainpage
- \section Introduction
-
- This is the documentation for the <tt>libopusfile</tt> C API.
-
- The <tt>libopusfile</tt> package provides a convenient high-level API for
- decoding and basic manipulation of all Ogg Opus audio streams.
- <tt>libopusfile</tt> is implemented as a layer on top of Xiph.Org's
- reference
- <tt><a href="https://www.xiph.org/ogg/doc/libogg/reference.html">libogg</a></tt>
- and
- <tt><a href="https://mf4.xiph.org/jenkins/view/opus/job/opus/ws/doc/html/index.html">libopus</a></tt>
- libraries.
-
- <tt>libopusfile</tt> provides several sets of built-in routines for
- file/stream access, and may also use custom stream I/O routines provided by
- the embedded environment.
- There are built-in I/O routines provided for ANSI-compliant
- <code>stdio</code> (<code>FILE *</code>), memory buffers, and URLs
- (including <file:> URLs, plus optionally <http:> and <https:> URLs).
-
- \section Organization
-
- The main API is divided into several sections:
- - \ref stream_open_close
- - \ref stream_info
- - \ref stream_decoding
- - \ref stream_seeking
-
- Several additional sections are not tied to the main API.
- - \ref stream_callbacks
- - \ref header_info
- - \ref error_codes
-
- \section Overview
-
- The <tt>libopusfile</tt> API always decodes files to 48&nbsp;kHz.
- The original sample rate is not preserved by the lossy compression, though
- it is stored in the header to allow you to resample to it after decoding
- (the <tt>libopusfile</tt> API does not currently provide a resampler,
- but the
- <a href="http://www.speex.org/docs/manual/speex-manual/node7.html#SECTION00760000000000000000">the
- Speex resampler</a> is a good choice if you need one).
- In general, if you are playing back the audio, you should leave it at
- 48&nbsp;kHz, provided your audio hardware supports it.
- When decoding to a file, it may be worth resampling back to the original
- sample rate, so as not to surprise users who might not expect the sample
- rate to change after encoding to Opus and decoding.
-
- Opus files can contain anywhere from 1 to 255 channels of audio.
- The channel mappings for up to 8 channels are the same as the
- <a href="http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-800004.3.9">Vorbis
- mappings</a>.
- A special stereo API can convert everything to 2 channels, making it simple
- to support multichannel files in an application which only has stereo
- output.
- Although the <tt>libopusfile</tt> ABI provides support for the theoretical
- maximum number of channels, the current implementation does not support
- files with more than 8 channels, as they do not have well-defined channel
- mappings.
-
- Like all Ogg files, Opus files may be "chained".
- That is, multiple Opus files may be combined into a single, longer file just
- by concatenating the original files.
- This is commonly done in internet radio streaming, as it allows the title
- and artist to be updated each time the song changes, since each link in the
- chain includes its own set of metadata.
-
- <tt>libopusfile</tt> fully supports chained files.
- It will decode the first Opus stream found in each link of a chained file
- (ignoring any other streams that might be concurrently multiplexed with it,
- such as a video stream).
-
- The channel count can also change between links.
- If your application is not prepared to deal with this, it can use the stereo
- API to ensure the audio from all links will always get decoded into a
- common format.
- Since <tt>libopusfile</tt> always decodes to 48&nbsp;kHz, you do not have to
- worry about the sample rate changing between links (as was possible with
- Vorbis).
- This makes application support for chained files with <tt>libopusfile</tt>
- very easy.*/
-
-# if defined(__cplusplus)
-extern "C" {
-# endif
-
-# include <stdarg.h>
-# include <stdio.h>
-# include <ogg/ogg.h>
-# include "opus/opus_multistream.h"
-
-/**@cond PRIVATE*/
-
-/*Enable special features for gcc and gcc-compatible compilers.*/
-# if !defined(OP_GNUC_PREREQ)
-# if defined(__GNUC__)&&defined(__GNUC_MINOR__)
-# define OP_GNUC_PREREQ(_maj,_min) \
- ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min))
-# else
-# define OP_GNUC_PREREQ(_maj,_min) 0
-# endif
-# endif
-
-# if OP_GNUC_PREREQ(4,0)
-# pragma GCC visibility push(default)
-# endif
-
-typedef struct OpusHead OpusHead;
-typedef struct OpusTags OpusTags;
-typedef struct OpusPictureTag OpusPictureTag;
-typedef struct OpusServerInfo OpusServerInfo;
-typedef struct OpusFileCallbacks OpusFileCallbacks;
-typedef struct OggOpusFile OggOpusFile;
-
-/*Warning attributes for libopusfile functions.*/
-# if OP_GNUC_PREREQ(3,4)
-# define OP_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
-# else
-# define OP_WARN_UNUSED_RESULT
-# endif
-# if OP_GNUC_PREREQ(3,4)
-# define OP_ARG_NONNULL(_x) __attribute__((__nonnull__(_x)))
-# else
-# define OP_ARG_NONNULL(_x)
-# endif
-
-/**@endcond*/
-
-/**\defgroup error_codes Error Codes*/
-/*@{*/
-/**\name List of possible error codes
- Many of the functions in this library return a negative error code when a
- function fails.
- This list provides a brief explanation of the common errors.
- See each individual function for more details on what a specific error code
- means in that context.*/
-/*@{*/
-
-/**A request did not succeed.*/
-#define OP_FALSE (-1)
-/*Currently not used externally.*/
-#define OP_EOF (-2)
-/**There was a hole in the page sequence numbers (e.g., a page was corrupt or
- missing).*/
-#define OP_HOLE (-3)
-/**An underlying read, seek, or tell operation failed when it should have
- succeeded.*/
-#define OP_EREAD (-128)
-/**A <code>NULL</code> pointer was passed where one was unexpected, or an
- internal memory allocation failed, or an internal library error was
- encountered.*/
-#define OP_EFAULT (-129)
-/**The stream used a feature that is not implemented, such as an unsupported
- channel family.*/
-#define OP_EIMPL (-130)
-/**One or more parameters to a function were invalid.*/
-#define OP_EINVAL (-131)
-/**A purported Ogg Opus stream did not begin with an Ogg page, a purported
- header packet did not start with one of the required strings, "OpusHead" or
- "OpusTags", or a link in a chained file was encountered that did not
- contain any logical Opus streams.*/
-#define OP_ENOTFORMAT (-132)
-/**A required header packet was not properly formatted, contained illegal
- values, or was missing altogether.*/
-#define OP_EBADHEADER (-133)
-/**The ID header contained an unrecognized version number.*/
-#define OP_EVERSION (-134)
-/*Currently not used at all.*/
-#define OP_ENOTAUDIO (-135)
-/**An audio packet failed to decode properly.
- This is usually caused by a multistream Ogg packet where the durations of
- the individual Opus packets contained in it are not all the same.*/
-#define OP_EBADPACKET (-136)
-/**We failed to find data we had seen before, or the bitstream structure was
- sufficiently malformed that seeking to the target destination was
- impossible.*/
-#define OP_EBADLINK (-137)
-/**An operation that requires seeking was requested on an unseekable stream.*/
-#define OP_ENOSEEK (-138)
-/**The first or last granule position of a link failed basic validity checks.*/
-#define OP_EBADTIMESTAMP (-139)
-
-/*@}*/
-/*@}*/
-
-/**\defgroup header_info Header Information*/
-/*@{*/
-
-/**The maximum number of channels in an Ogg Opus stream.*/
-#define OPUS_CHANNEL_COUNT_MAX (255)
-
-/**Ogg Opus bitstream information.
- This contains the basic playback parameters for a stream, and corresponds to
- the initial ID header packet of an Ogg Opus stream.*/
-struct OpusHead{
- /**The Ogg Opus format version, in the range 0...255.
- The top 4 bits represent a "major" version, and the bottom four bits
- represent backwards-compatible "minor" revisions.
- The current specification describes version 1.
- This library will recognize versions up through 15 as backwards compatible
- with the current specification.
- An earlier draft of the specification described a version 0, but the only
- difference between version 1 and version 0 is that version 0 did
- not specify the semantics for handling the version field.*/
- int version;
- /**The number of channels, in the range 1...255.*/
- int channel_count;
- /**The number of samples that should be discarded from the beginning of the
- stream.*/
- unsigned pre_skip;
- /**The sampling rate of the original input.
- All Opus audio is coded at 48 kHz, and should also be decoded at 48 kHz
- for playback (unless the target hardware does not support this sampling
- rate).
- However, this field may be used to resample the audio back to the original
- sampling rate, for example, when saving the output to a file.*/
- opus_uint32 input_sample_rate;
- /**The gain to apply to the decoded output, in dB, as a Q8 value in the range
- -32768...32767.
- The <tt>libopusfile</tt> API will automatically apply this gain to the
- decoded output before returning it, scaling it by
- <code>pow(10,output_gain/(20.0*256))</code>.*/
- int output_gain;
- /**The channel mapping family, in the range 0...255.
- Channel mapping family 0 covers mono or stereo in a single stream.
- Channel mapping family 1 covers 1 to 8 channels in one or more streams,
- using the Vorbis speaker assignments.
- Channel mapping family 255 covers 1 to 255 channels in one or more
- streams, but without any defined speaker assignment.*/
- int mapping_family;
- /**The number of Opus streams in each Ogg packet, in the range 1...255.*/
- int stream_count;
- /**The number of coupled Opus streams in each Ogg packet, in the range
- 0...127.
- This must satisfy <code>0 <= coupled_count <= stream_count</code> and
- <code>coupled_count + stream_count <= 255</code>.
- The coupled streams appear first, before all uncoupled streams, in an Ogg
- Opus packet.*/
- int coupled_count;
- /**The mapping from coded stream channels to output channels.
- Let <code>index=mapping[k]</code> be the value for channel <code>k</code>.
- If <code>index<2*coupled_count</code>, then it refers to the left channel
- from stream <code>(index/2)</code> if even, and the right channel from
- stream <code>(index/2)</code> if odd.
- Otherwise, it refers to the output of the uncoupled stream
- <code>(index-coupled_count)</code>.*/
- unsigned char mapping[OPUS_CHANNEL_COUNT_MAX];
-};
-
-/**The metadata from an Ogg Opus stream.
-
- This structure holds the in-stream metadata corresponding to the 'comment'
- header packet of an Ogg Opus stream.
- The comment header is meant to be used much like someone jotting a quick
- note on the label of a CD.
- It should be a short, to the point text note that can be more than a couple
- words, but not more than a short paragraph.
-
- The metadata is stored as a series of (tag, value) pairs, in length-encoded
- string vectors, using the same format as Vorbis (without the final "framing
- bit"), Theora, and Speex, except for the packet header.
- The first occurrence of the '=' character delimits the tag and value.
- A particular tag may occur more than once, and order is significant.
- The character set encoding for the strings is always UTF-8, but the tag
- names are limited to ASCII, and treated as case-insensitive.
- See <a href="http://www.xiph.org/vorbis/doc/v-comment.html">the Vorbis
- comment header specification</a> for details.
-
- In filling in this structure, <tt>libopusfile</tt> will null-terminate the
- #user_comments strings for safety.
- However, the bitstream format itself treats them as 8-bit clean vectors,
- possibly containing NUL characters, so the #comment_lengths array should be
- treated as their authoritative length.
-
- This structure is binary and source-compatible with a
- <code>vorbis_comment</code>, and pointers to it may be freely cast to
- <code>vorbis_comment</code> pointers, and vice versa.
- It is provided as a separate type to avoid introducing a compile-time
- dependency on the libvorbis headers.*/
-struct OpusTags{
- /**The array of comment string vectors.*/
- char **user_comments;
- /**An array of the corresponding length of each vector, in bytes.*/
- int *comment_lengths;
- /**The total number of comment streams.*/
- int comments;
- /**The null-terminated vendor string.
- This identifies the software used to encode the stream.*/
- char *vendor;
-};
-
-/**\name Picture tag image formats*/
-/*@{*/
-
-/**The MIME type was not recognized, or the image data did not match the
- declared MIME type.*/
-#define OP_PIC_FORMAT_UNKNOWN (-1)
-/**The MIME type indicates the image data is really a URL.*/
-#define OP_PIC_FORMAT_URL (0)
-/**The image is a JPEG.*/
-#define OP_PIC_FORMAT_JPEG (1)
-/**The image is a PNG.*/
-#define OP_PIC_FORMAT_PNG (2)
-/**The image is a GIF.*/
-#define OP_PIC_FORMAT_GIF (3)
-
-/*@}*/
-
-/**The contents of a METADATA_BLOCK_PICTURE tag.*/
-struct OpusPictureTag{
- /**The picture type according to the ID3v2 APIC frame:
- <ol start="0">
- <li>Other</li>
- <li>32x32 pixels 'file icon' (PNG only)</li>
- <li>Other file icon</li>
- <li>Cover (front)</li>
- <li>Cover (back)</li>
- <li>Leaflet page</li>
- <li>Media (e.g. label side of CD)</li>
- <li>Lead artist/lead performer/soloist</li>
- <li>Artist/performer</li>
- <li>Conductor</li>
- <li>Band/Orchestra</li>
- <li>Composer</li>
- <li>Lyricist/text writer</li>
- <li>Recording Location</li>
- <li>During recording</li>
- <li>During performance</li>
- <li>Movie/video screen capture</li>
- <li>A bright colored fish</li>
- <li>Illustration</li>
- <li>Band/artist logotype</li>
- <li>Publisher/Studio logotype</li>
- </ol>
- Others are reserved and should not be used.
- There may only be one each of picture type 1 and 2 in a file.*/
- opus_int32 type;
- /**The MIME type of the picture, in printable ASCII characters 0x20-0x7E.
- The MIME type may also be <code>"-->"</code> to signify that the data part
- is a URL pointing to the picture instead of the picture data itself.
- In this case, a terminating NUL is appended to the URL string in #data,
- but #data_length is set to the length of the string excluding that
- terminating NUL.*/
- char *mime_type;
- /**The description of the picture, in UTF-8.*/
- char *description;
- /**The width of the picture in pixels.*/
- opus_uint32 width;
- /**The height of the picture in pixels.*/
- opus_uint32 height;
- /**The color depth of the picture in bits-per-pixel (<em>not</em>
- bits-per-channel).*/
- opus_uint32 depth;
- /**For indexed-color pictures (e.g., GIF), the number of colors used, or 0
- for non-indexed pictures.*/
- opus_uint32 colors;
- /**The length of the picture data in bytes.*/
- opus_uint32 data_length;
- /**The binary picture data.*/
- unsigned char *data;
- /**The format of the picture data, if known.
- One of
- <ul>
- <li>#OP_PIC_FORMAT_UNKNOWN,</li>
- <li>#OP_PIC_FORMAT_URL,</li>
- <li>#OP_PIC_FORMAT_JPEG,</li>
- <li>#OP_PIC_FORMAT_PNG, or</li>
- <li>#OP_PIC_FORMAT_GIF.</li>
- </ul>*/
- int format;
-};
-
-/**\name Functions for manipulating header data
-
- These functions manipulate the #OpusHead and #OpusTags structures,
- which describe the audio parameters and tag-value metadata, respectively.
- These can be used to query the headers returned by <tt>libopusfile</tt>, or
- to parse Opus headers from sources other than an Ogg Opus stream, provided
- they use the same format.*/
-/*@{*/
-
-/**Parses the contents of the ID header packet of an Ogg Opus stream.
- \param[out] _head Returns the contents of the parsed packet.
- The contents of this structure are untouched on error.
- This may be <code>NULL</code> to merely test the header
- for validity.
- \param[in] _data The contents of the ID header packet.
- \param _len The number of bytes of data in the ID header packet.
- \return 0 on success or a negative value on error.
- \retval #OP_ENOTFORMAT If the data does not start with the "OpusHead"
- string.
- \retval #OP_EVERSION If the version field signaled a version this library
- does not know how to parse.
- \retval #OP_EIMPL If the channel mapping family was 255, which general
- purpose players should not attempt to play.
- \retval #OP_EBADHEADER If the contents of the packet otherwise violate the
- Ogg Opus specification:
- <ul>
- <li>Insufficient data,</li>
- <li>Too much data for the known minor versions,</li>
- <li>An unrecognized channel mapping family,</li>
- <li>Zero channels or too many channels,</li>
- <li>Zero coded streams,</li>
- <li>Too many coupled streams, or</li>
- <li>An invalid channel mapping index.</li>
- </ul>*/
-OP_WARN_UNUSED_RESULT int opus_head_parse(OpusHead *_head,
- const unsigned char *_data,size_t _len) OP_ARG_NONNULL(2);
-
-/**Converts a granule position to a sample offset for a given Ogg Opus stream.
- The sample offset is simply <code>_gp-_head->pre_skip</code>.
- Granule position values smaller than OpusHead#pre_skip correspond to audio
- that should never be played, and thus have no associated sample offset.
- This function returns -1 for such values.
- This function also correctly handles extremely large granule positions,
- which may have wrapped around to a negative number when stored in a signed
- ogg_int64_t value.
- \param _head The #OpusHead information from the ID header of the stream.
- \param _gp The granule position to convert.
- \return The sample offset associated with the given granule position
- (counting at a 48 kHz sampling rate), or the special value -1 on
- error (i.e., the granule position was smaller than the pre-skip
- amount).*/
-ogg_int64_t opus_granule_sample(const OpusHead *_head,ogg_int64_t _gp)
- OP_ARG_NONNULL(1);
-
-/**Parses the contents of the 'comment' header packet of an Ogg Opus stream.
- \param[out] _tags An uninitialized #OpusTags structure.
- This returns the contents of the parsed packet.
- The contents of this structure are untouched on error.
- This may be <code>NULL</code> to merely test the header
- for validity.
- \param[in] _data The contents of the 'comment' header packet.
- \param _len The number of bytes of data in the 'info' header packet.
- \retval 0 Success.
- \retval #OP_ENOTFORMAT If the data does not start with the "OpusTags"
- string.
- \retval #OP_EBADHEADER If the contents of the packet otherwise violate the
- Ogg Opus specification.
- \retval #OP_EFAULT If there wasn't enough memory to store the tags.*/
-OP_WARN_UNUSED_RESULT int opus_tags_parse(OpusTags *_tags,
- const unsigned char *_data,size_t _len) OP_ARG_NONNULL(2);
-
-/**Performs a deep copy of an #OpusTags structure.
- \param _dst The #OpusTags structure to copy into.
- If this function fails, the contents of this structure remain
- untouched.
- \param _src The #OpusTags structure to copy from.
- \retval 0 Success.
- \retval #OP_EFAULT If there wasn't enough memory to copy the tags.*/
-int opus_tags_copy(OpusTags *_dst,const OpusTags *_src) OP_ARG_NONNULL(1);
-
-/**Initializes an #OpusTags structure.
- This should be called on a freshly allocated #OpusTags structure before
- attempting to use it.
- \param _tags The #OpusTags structure to initialize.*/
-void opus_tags_init(OpusTags *_tags) OP_ARG_NONNULL(1);
-
-/**Add a (tag, value) pair to an initialized #OpusTags structure.
- \note Neither opus_tags_add() nor opus_tags_add_comment() support values
- containing embedded NULs, although the bitstream format does support them.
- To add such tags, you will need to manipulate the #OpusTags structure
- directly.
- \param _tags The #OpusTags structure to add the (tag, value) pair to.
- \param _tag A NUL-terminated, case-insensitive, ASCII string containing
- the tag to add (without an '=' character).
- \param _value A NUL-terminated UTF-8 containing the corresponding value.
- \return 0 on success, or a negative value on failure.
- \retval #OP_EFAULT An internal memory allocation failed.*/
-int opus_tags_add(OpusTags *_tags,const char *_tag,const char *_value)
- OP_ARG_NONNULL(1) OP_ARG_NONNULL(2) OP_ARG_NONNULL(3);
-
-/**Add a comment to an initialized #OpusTags structure.
- \note Neither opus_tags_add_comment() nor opus_tags_add() support comments
- containing embedded NULs, although the bitstream format does support them.
- To add such tags, you will need to manipulate the #OpusTags structure
- directly.
- \param _tags The #OpusTags structure to add the comment to.
- \param _comment A NUL-terminated UTF-8 string containing the comment in
- "TAG=value" form.
- \return 0 on success, or a negative value on failure.
- \retval #OP_EFAULT An internal memory allocation failed.*/
-int opus_tags_add_comment(OpusTags *_tags,const char *_comment)
- OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
-
-/**Replace the binary suffix data at the end of the packet (if any).
- \param _tags An initialized #OpusTags structure.
- \param _data A buffer of binary data to append after the encoded user
- comments.
- The least significant bit of the first byte of this data must
- be set (to ensure the data is preserved by other editors).
- \param _len The number of bytes of binary data to append.
- This may be zero to remove any existing binary suffix data.
- \return 0 on success, or a negative value on error.
- \retval #OP_EINVAL \a _len was negative, or \a _len was positive but
- \a _data was <code>NULL</code> or the least significant
- bit of the first byte was not set.
- \retval #OP_EFAULT An internal memory allocation failed.*/
-int opus_tags_set_binary_suffix(OpusTags *_tags,
- const unsigned char *_data,int _len) OP_ARG_NONNULL(1);
-
-/**Look up a comment value by its tag.
- \param _tags An initialized #OpusTags structure.
- \param _tag The tag to look up.
- \param _count The instance of the tag.
- The same tag can appear multiple times, each with a distinct
- value, so an index is required to retrieve them all.
- The order in which these values appear is significant and
- should be preserved.
- Use opus_tags_query_count() to get the legal range for the
- \a _count parameter.
- \return A pointer to the queried tag's value.
- This points directly to data in the #OpusTags structure.
- It should not be modified or freed by the application, and
- modifications to the structure may invalidate the pointer.
- \retval NULL If no matching tag is found.*/
-const char *opus_tags_query(const OpusTags *_tags,const char *_tag,int _count)
- OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
-
-/**Look up the number of instances of a tag.
- Call this first when querying for a specific tag and then iterate over the
- number of instances with separate calls to opus_tags_query() to retrieve
- all the values for that tag in order.
- \param _tags An initialized #OpusTags structure.
- \param _tag The tag to look up.
- \return The number of instances of this particular tag.*/
-int opus_tags_query_count(const OpusTags *_tags,const char *_tag)
- OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
-
-/**Retrieve the binary suffix data at the end of the packet (if any).
- \param _tags An initialized #OpusTags structure.
- \param[out] _len Returns the number of bytes of binary suffix data returned.
- \return A pointer to the binary suffix data, or <code>NULL</code> if none
- was present.*/
-const unsigned char *opus_tags_get_binary_suffix(const OpusTags *_tags,
- int *_len) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
-
-/**Get the album gain from an R128_ALBUM_GAIN tag, if one was specified.
- This searches for the first R128_ALBUM_GAIN tag with a valid signed,
- 16-bit decimal integer value and returns the value.
- This routine is exposed merely for convenience for applications which wish
- to do something special with the album gain (i.e., display it).
- If you simply wish to apply the album gain instead of the header gain, you
- can use op_set_gain_offset() with an #OP_ALBUM_GAIN type and no offset.
- \param _tags An initialized #OpusTags structure.
- \param[out] _gain_q8 The album gain, in 1/256ths of a dB.
- This will lie in the range [-32768,32767], and should
- be applied in <em>addition</em> to the header gain.
- On error, no value is returned, and the previous
- contents remain unchanged.
- \return 0 on success, or a negative value on error.
- \retval #OP_FALSE There was no album gain available in the given tags.*/
-int opus_tags_get_album_gain(const OpusTags *_tags,int *_gain_q8)
- OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
-
-/**Get the track gain from an R128_TRACK_GAIN tag, if one was specified.
- This searches for the first R128_TRACK_GAIN tag with a valid signed,
- 16-bit decimal integer value and returns the value.
- This routine is exposed merely for convenience for applications which wish
- to do something special with the track gain (i.e., display it).
- If you simply wish to apply the track gain instead of the header gain, you
- can use op_set_gain_offset() with an #OP_TRACK_GAIN type and no offset.
- \param _tags An initialized #OpusTags structure.
- \param[out] _gain_q8 The track gain, in 1/256ths of a dB.
- This will lie in the range [-32768,32767], and should
- be applied in <em>addition</em> to the header gain.
- On error, no value is returned, and the previous
- contents remain unchanged.
- \return 0 on success, or a negative value on error.
- \retval #OP_FALSE There was no track gain available in the given tags.*/
-int opus_tags_get_track_gain(const OpusTags *_tags,int *_gain_q8)
- OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
-
-/**Clears the #OpusTags structure.
- This should be called on an #OpusTags structure after it is no longer
- needed.
- It will free all memory used by the structure members.
- \param _tags The #OpusTags structure to clear.*/
-void opus_tags_clear(OpusTags *_tags) OP_ARG_NONNULL(1);
-
-/**Check if \a _comment is an instance of a \a _tag_name tag.
- \see opus_tagncompare
- \param _tag_name A NUL-terminated, case-insensitive, ASCII string containing
- the name of the tag to check for (without the terminating
- '=' character).
- \param _comment The comment string to check.
- \return An integer less than, equal to, or greater than zero if \a _comment
- is found respectively, to be less than, to match, or be greater
- than a "tag=value" string whose tag matches \a _tag_name.*/
-int opus_tagcompare(const char *_tag_name,const char *_comment);
-
-/**Check if \a _comment is an instance of a \a _tag_name tag.
- This version is slightly more efficient than opus_tagcompare() if the length
- of the tag name is already known (e.g., because it is a constant).
- \see opus_tagcompare
- \param _tag_name A case-insensitive ASCII string containing the name of the
- tag to check for (without the terminating '=' character).
- \param _tag_len The number of characters in the tag name.
- This must be non-negative.
- \param _comment The comment string to check.
- \return An integer less than, equal to, or greater than zero if \a _comment
- is found respectively, to be less than, to match, or be greater
- than a "tag=value" string whose tag matches the first \a _tag_len
- characters of \a _tag_name.*/
-int opus_tagncompare(const char *_tag_name,int _tag_len,const char *_comment);
-
-/**Parse a single METADATA_BLOCK_PICTURE tag.
- This decodes the BASE64-encoded content of the tag and returns a structure
- with the MIME type, description, image parameters (if known), and the
- compressed image data.
- If the MIME type indicates the presence of an image format we recognize
- (JPEG, PNG, or GIF) and the actual image data contains the magic signature
- associated with that format, then the OpusPictureTag::format field will be
- set to the corresponding format.
- This is provided as a convenience to avoid requiring applications to parse
- the MIME type and/or do their own format detection for the commonly used
- formats.
- In this case, we also attempt to extract the image parameters directly from
- the image data (overriding any that were present in the tag, which the
- specification says applications are not meant to rely on).
- The application must still provide its own support for actually decoding the
- image data and, if applicable, retrieving that data from URLs.
- \param[out] _pic Returns the parsed picture data.
- No sanitation is done on the type, MIME type, or
- description fields, so these might return invalid values.
- The contents of this structure are left unmodified on
- failure.
- \param _tag The METADATA_BLOCK_PICTURE tag contents.
- The leading "METADATA_BLOCK_PICTURE=" portion is optional,
- to allow the function to be used on either directly on the
- values in OpusTags::user_comments or on the return value
- of opus_tags_query().
- \return 0 on success or a negative value on error.
- \retval #OP_ENOTFORMAT The METADATA_BLOCK_PICTURE contents were not valid.
- \retval #OP_EFAULT There was not enough memory to store the picture tag
- contents.*/
-OP_WARN_UNUSED_RESULT int opus_picture_tag_parse(OpusPictureTag *_pic,
- const char *_tag) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
-
-/**Initializes an #OpusPictureTag structure.
- This should be called on a freshly allocated #OpusPictureTag structure
- before attempting to use it.
- \param _pic The #OpusPictureTag structure to initialize.*/
-void opus_picture_tag_init(OpusPictureTag *_pic) OP_ARG_NONNULL(1);
-
-/**Clears the #OpusPictureTag structure.
- This should be called on an #OpusPictureTag structure after it is no longer
- needed.
- It will free all memory used by the structure members.
- \param _pic The #OpusPictureTag structure to clear.*/
-void opus_picture_tag_clear(OpusPictureTag *_pic) OP_ARG_NONNULL(1);
-
-/*@}*/
-
-/*@}*/
-
-/**\defgroup url_options URL Reading Options*/
-/*@{*/
-/**\name URL reading options
- Options for op_url_stream_create() and associated functions.
- These allow you to provide proxy configuration parameters, skip SSL
- certificate checks, etc.
- Options are processed in order, and if the same option is passed multiple
- times, only the value specified by the last occurrence has an effect
- (unless otherwise specified).
- They may be expanded in the future.*/
-/*@{*/
-
-/**@cond PRIVATE*/
-
-/*These are the raw numbers used to define the request codes.
- They should not be used directly.*/
-#define OP_SSL_SKIP_CERTIFICATE_CHECK_REQUEST (6464)
-#define OP_HTTP_PROXY_HOST_REQUEST (6528)
-#define OP_HTTP_PROXY_PORT_REQUEST (6592)
-#define OP_HTTP_PROXY_USER_REQUEST (6656)
-#define OP_HTTP_PROXY_PASS_REQUEST (6720)
-#define OP_GET_SERVER_INFO_REQUEST (6784)
-
-#define OP_URL_OPT(_request) ((_request)+(char *)0)
-
-/*These macros trigger compilation errors or warnings if the wrong types are
- provided to one of the URL options.*/
-#define OP_CHECK_INT(_x) ((void)((_x)==(opus_int32)0),(opus_int32)(_x))
-#define OP_CHECK_CONST_CHAR_PTR(_x) ((_x)+((_x)-(const char *)(_x)))
-#define OP_CHECK_SERVER_INFO_PTR(_x) ((_x)+((_x)-(OpusServerInfo *)(_x)))
-
-/**@endcond*/
-
-/**HTTP/Shoutcast/Icecast server information associated with a URL.*/
-struct OpusServerInfo{
- /**The name of the server (icy-name/ice-name).
- This is <code>NULL</code> if there was no <code>icy-name</code> or
- <code>ice-name</code> header.*/
- char *name;
- /**A short description of the server (icy-description/ice-description).
- This is <code>NULL</code> if there was no <code>icy-description</code> or
- <code>ice-description</code> header.*/
- char *description;
- /**The genre the server falls under (icy-genre/ice-genre).
- This is <code>NULL</code> if there was no <code>icy-genre</code> or
- <code>ice-genre</code> header.*/
- char *genre;
- /**The homepage for the server (icy-url/ice-url).
- This is <code>NULL</code> if there was no <code>icy-url</code> or
- <code>ice-url</code> header.*/
- char *url;
- /**The software used by the origin server (Server).
- This is <code>NULL</code> if there was no <code>Server</code> header.*/
- char *server;
- /**The media type of the entity sent to the recepient (Content-Type).
- This is <code>NULL</code> if there was no <code>Content-Type</code>
- header.*/
- char *content_type;
- /**The nominal stream bitrate in kbps (icy-br/ice-bitrate).
- This is <code>-1</code> if there was no <code>icy-br</code> or
- <code>ice-bitrate</code> header.*/
- opus_int32 bitrate_kbps;
- /**Flag indicating whether the server is public (<code>1</code>) or not
- (<code>0</code>) (icy-pub/ice-public).
- This is <code>-1</code> if there was no <code>icy-pub</code> or
- <code>ice-public</code> header.*/
- int is_public;
- /**Flag indicating whether the server is using HTTPS instead of HTTP.
- This is <code>0</code> unless HTTPS is being used.
- This may not match the protocol used in the original URL if there were
- redirections.*/
- int is_ssl;
-};
-
-/**Initializes an #OpusServerInfo structure.
- All fields are set as if the corresponding header was not available.
- \param _info The #OpusServerInfo structure to initialize.
- \note If you use this function, you must link against <tt>libopusurl</tt>.*/
-void opus_server_info_init(OpusServerInfo *_info) OP_ARG_NONNULL(1);
-
-/**Clears the #OpusServerInfo structure.
- This should be called on an #OpusServerInfo structure after it is no longer
- needed.
- It will free all memory used by the structure members.
- \param _info The #OpusServerInfo structure to clear.
- \note If you use this function, you must link against <tt>libopusurl</tt>.*/
-void opus_server_info_clear(OpusServerInfo *_info) OP_ARG_NONNULL(1);
-
-/**Skip the certificate check when connecting via TLS/SSL (https).
- \param _b <code>opus_int32</code>: Whether or not to skip the certificate
- check.
- The check will be skipped if \a _b is non-zero, and will not be
- skipped if \a _b is zero.
- \hideinitializer*/
-#define OP_SSL_SKIP_CERTIFICATE_CHECK(_b) \
- OP_URL_OPT(OP_SSL_SKIP_CERTIFICATE_CHECK_REQUEST),OP_CHECK_INT(_b)
-
-/**Proxy connections through the given host.
- If no port is specified via #OP_HTTP_PROXY_PORT, the port number defaults
- to 8080 (http-alt).
- All proxy parameters are ignored for non-http and non-https URLs.
- \param _host <code>const char *</code>: The proxy server hostname.
- This may be <code>NULL</code> to disable the use of a proxy
- server.
- \hideinitializer*/
-#define OP_HTTP_PROXY_HOST(_host) \
- OP_URL_OPT(OP_HTTP_PROXY_HOST_REQUEST),OP_CHECK_CONST_CHAR_PTR(_host)
-
-/**Use the given port when proxying connections.
- This option only has an effect if #OP_HTTP_PROXY_HOST is specified with a
- non-<code>NULL</code> \a _host.
- If this option is not provided, the proxy port number defaults to 8080
- (http-alt).
- All proxy parameters are ignored for non-http and non-https URLs.
- \param _port <code>opus_int32</code>: The proxy server port.
- This must be in the range 0...65535 (inclusive), or the
- URL function this is passed to will fail.
- \hideinitializer*/
-#define OP_HTTP_PROXY_PORT(_port) \
- OP_URL_OPT(OP_HTTP_PROXY_PORT_REQUEST),OP_CHECK_INT(_port)
-
-/**Use the given user name for authentication when proxying connections.
- All proxy parameters are ignored for non-http and non-https URLs.
- \param _user const char *: The proxy server user name.
- This may be <code>NULL</code> to disable proxy
- authentication.
- A non-<code>NULL</code> value only has an effect
- if #OP_HTTP_PROXY_HOST and #OP_HTTP_PROXY_PASS
- are also specified with non-<code>NULL</code>
- arguments.
- \hideinitializer*/
-#define OP_HTTP_PROXY_USER(_user) \
- OP_URL_OPT(OP_HTTP_PROXY_USER_REQUEST),OP_CHECK_CONST_CHAR_PTR(_user)
-
-/**Use the given password for authentication when proxying connections.
- All proxy parameters are ignored for non-http and non-https URLs.
- \param _pass const char *: The proxy server password.
- This may be <code>NULL</code> to disable proxy
- authentication.
- A non-<code>NULL</code> value only has an effect
- if #OP_HTTP_PROXY_HOST and #OP_HTTP_PROXY_USER
- are also specified with non-<code>NULL</code>
- arguments.
- \hideinitializer*/
-#define OP_HTTP_PROXY_PASS(_pass) \
- OP_URL_OPT(OP_HTTP_PROXY_PASS_REQUEST),OP_CHECK_CONST_CHAR_PTR(_pass)
-
-/**Parse information about the streaming server (if any) and return it.
- Very little validation is done.
- In particular, OpusServerInfo::url may not be a valid URL,
- OpusServerInfo::bitrate_kbps may not really be in kbps, and
- OpusServerInfo::content_type may not be a valid MIME type.
- The character set of the string fields is not specified anywhere, and should
- not be assumed to be valid UTF-8.
- \param _info OpusServerInfo *: Returns information about the server.
- If there is any error opening the stream, the
- contents of this structure remain
- unmodified.
- On success, fills in the structure with the
- server information that was available, if
- any.
- After a successful return, the contents of
- this structure should be freed by calling
- opus_server_info_clear().
- \hideinitializer*/
-#define OP_GET_SERVER_INFO(_info) \
- OP_URL_OPT(OP_GET_SERVER_INFO_REQUEST),OP_CHECK_SERVER_INFO_PTR(_info)
-
-/*@}*/
-/*@}*/
-
-/**\defgroup stream_callbacks Abstract Stream Reading Interface*/
-/*@{*/
-/**\name Functions for reading from streams
- These functions define the interface used to read from and seek in a stream
- of data.
- A stream does not need to implement seeking, but the decoder will not be
- able to seek if it does not do so.
- These functions also include some convenience routines for working with
- standard <code>FILE</code> pointers, complete streams stored in a single
- block of memory, or URLs.*/
-/*@{*/
-
-/**Reads up to \a _nbytes bytes of data from \a _stream.
- \param _stream The stream to read from.
- \param[out] _ptr The buffer to store the data in.
- \param _nbytes The maximum number of bytes to read.
- This function may return fewer, though it will not
- return zero unless it reaches end-of-file.
- \return The number of bytes successfully read, or a negative value on
- error.*/
-typedef int (*op_read_func)(void *_stream,unsigned char *_ptr,int _nbytes);
-
-/**Sets the position indicator for \a _stream.
- The new position, measured in bytes, is obtained by adding \a _offset
- bytes to the position specified by \a _whence.
- If \a _whence is set to <code>SEEK_SET</code>, <code>SEEK_CUR</code>, or
- <code>SEEK_END</code>, the offset is relative to the start of the stream,
- the current position indicator, or end-of-file, respectively.
- \retval 0 Success.
- \retval -1 Seeking is not supported or an error occurred.
- <code>errno</code> need not be set.*/
-typedef int (*op_seek_func)(void *_stream,opus_int64 _offset,int _whence);
-
-/**Obtains the current value of the position indicator for \a _stream.
- \return The current position indicator.*/
-typedef opus_int64 (*op_tell_func)(void *_stream);
-
-/**Closes the underlying stream.
- \retval 0 Success.
- \retval EOF An error occurred.
- <code>errno</code> need not be set.*/
-typedef int (*op_close_func)(void *_stream);
-
-/**The callbacks used to access non-<code>FILE</code> stream resources.
- The function prototypes are basically the same as for the stdio functions
- <code>fread()</code>, <code>fseek()</code>, <code>ftell()</code>, and
- <code>fclose()</code>.
- The differences are that the <code>FILE *</code> arguments have been
- replaced with a <code>void *</code>, which is to be used as a pointer to
- whatever internal data these functions might need, that #seek and #tell
- take and return 64-bit offsets, and that #seek <em>must</em> return -1 if
- the stream is unseekable.*/
-struct OpusFileCallbacks{
- /**Used to read data from the stream.
- This must not be <code>NULL</code>.*/
- op_read_func read;
- /**Used to seek in the stream.
- This may be <code>NULL</code> if seeking is not implemented.*/
- op_seek_func seek;
- /**Used to return the current read position in the stream.
- This may be <code>NULL</code> if seeking is not implemented.*/
- op_tell_func tell;
- /**Used to close the stream when the decoder is freed.
- This may be <code>NULL</code> to leave the stream open.*/
- op_close_func close;
-};
-
-/**Opens a stream with <code>fopen()</code> and fills in a set of callbacks
- that can be used to access it.
- This is useful to avoid writing your own portable 64-bit seeking wrappers,
- and also avoids cross-module linking issues on Windows, where a
- <code>FILE *</code> must be accessed by routines defined in the same module
- that opened it.
- \param[out] _cb The callbacks to use for this file.
- If there is an error opening the file, nothing will be
- filled in here.
- \param _path The path to the file to open.
- On Windows, this string must be UTF-8 (to allow access to
- files whose names cannot be represented in the current
- MBCS code page).
- All other systems use the native character encoding.
- \param _mode The mode to open the file in.
- \return A stream handle to use with the callbacks, or <code>NULL</code> on
- error.*/
-OP_WARN_UNUSED_RESULT void *op_fopen(OpusFileCallbacks *_cb,
- const char *_path,const char *_mode) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2)
- OP_ARG_NONNULL(3);
-
-/**Opens a stream with <code>fdopen()</code> and fills in a set of callbacks
- that can be used to access it.
- This is useful to avoid writing your own portable 64-bit seeking wrappers,
- and also avoids cross-module linking issues on Windows, where a
- <code>FILE *</code> must be accessed by routines defined in the same module
- that opened it.
- \param[out] _cb The callbacks to use for this file.
- If there is an error opening the file, nothing will be
- filled in here.
- \param _fd The file descriptor to open.
- \param _mode The mode to open the file in.
- \return A stream handle to use with the callbacks, or <code>NULL</code> on
- error.*/
-OP_WARN_UNUSED_RESULT void *op_fdopen(OpusFileCallbacks *_cb,
- int _fd,const char *_mode) OP_ARG_NONNULL(1) OP_ARG_NONNULL(3);
-
-/**Opens a stream with <code>freopen()</code> and fills in a set of callbacks
- that can be used to access it.
- This is useful to avoid writing your own portable 64-bit seeking wrappers,
- and also avoids cross-module linking issues on Windows, where a
- <code>FILE *</code> must be accessed by routines defined in the same module
- that opened it.
- \param[out] _cb The callbacks to use for this file.
- If there is an error opening the file, nothing will be
- filled in here.
- \param _path The path to the file to open.
- On Windows, this string must be UTF-8 (to allow access
- to files whose names cannot be represented in the
- current MBCS code page).
- All other systems use the native character encoding.
- \param _mode The mode to open the file in.
- \param _stream A stream previously returned by op_fopen(), op_fdopen(),
- or op_freopen().
- \return A stream handle to use with the callbacks, or <code>NULL</code> on
- error.*/
-OP_WARN_UNUSED_RESULT void *op_freopen(OpusFileCallbacks *_cb,
- const char *_path,const char *_mode,void *_stream) OP_ARG_NONNULL(1)
- OP_ARG_NONNULL(2) OP_ARG_NONNULL(3) OP_ARG_NONNULL(4);
-
-/**Creates a stream that reads from the given block of memory.
- This block of memory must contain the complete stream to decode.
- This is useful for caching small streams (e.g., sound effects) in RAM.
- \param[out] _cb The callbacks to use for this stream.
- If there is an error creating the stream, nothing will be
- filled in here.
- \param _data The block of memory to read from.
- \param _size The size of the block of memory.
- \return A stream handle to use with the callbacks, or <code>NULL</code> on
- error.*/
-OP_WARN_UNUSED_RESULT void *op_mem_stream_create(OpusFileCallbacks *_cb,
- const unsigned char *_data,size_t _size) OP_ARG_NONNULL(1);
-
-/**Creates a stream that reads from the given URL.
- This function behaves identically to op_url_stream_create(), except that it
- takes a va_list instead of a variable number of arguments.
- It does not call the <code>va_end</code> macro, and because it invokes the
- <code>va_arg</code> macro, the value of \a _ap is undefined after the call.
- \note If you use this function, you must link against <tt>libopusurl</tt>.
- \param[out] _cb The callbacks to use for this stream.
- If there is an error creating the stream, nothing will
- be filled in here.
- \param _url The URL to read from.
- Currently only the <file:>, <http:>, and <https:>
- schemes are supported.
- Both <http:> and <https:> may be disabled at compile
- time, in which case opening such URLs will always fail.
- Currently this only supports URIs.
- IRIs should be converted to UTF-8 and URL-escaped, with
- internationalized domain names encoded in punycode,
- before passing them to this function.
- \param[in,out] _ap A list of the \ref url_options "optional flags" to use.
- This is a variable-length list of options terminated
- with <code>NULL</code>.
- \return A stream handle to use with the callbacks, or <code>NULL</code> on
- error.*/
-OP_WARN_UNUSED_RESULT void *op_url_stream_vcreate(OpusFileCallbacks *_cb,
- const char *_url,va_list _ap) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
-
-/**Creates a stream that reads from the given URL.
- \note If you use this function, you must link against <tt>libopusurl</tt>.
- \param[out] _cb The callbacks to use for this stream.
- If there is an error creating the stream, nothing will be
- filled in here.
- \param _url The URL to read from.
- Currently only the <file:>, <http:>, and <https:> schemes
- are supported.
- Both <http:> and <https:> may be disabled at compile time,
- in which case opening such URLs will always fail.
- Currently this only supports URIs.
- IRIs should be converted to UTF-8 and URL-escaped, with
- internationalized domain names encoded in punycode, before
- passing them to this function.
- \param ... The \ref url_options "optional flags" to use.
- This is a variable-length list of options terminated with
- <code>NULL</code>.
- \return A stream handle to use with the callbacks, or <code>NULL</code> on
- error.*/
-OP_WARN_UNUSED_RESULT void *op_url_stream_create(OpusFileCallbacks *_cb,
- const char *_url,...) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
-
-/*@}*/
-/*@}*/
-
-/**\defgroup stream_open_close Opening and Closing*/
-/*@{*/
-/**\name Functions for opening and closing streams
-
- These functions allow you to test a stream to see if it is Opus, open it,
- and close it.
- Several flavors are provided for each of the built-in stream types, plus a
- more general version which takes a set of application-provided callbacks.*/
-/*@{*/
-
-/**Test to see if this is an Opus stream.
- For good results, you will need at least 57 bytes (for a pure Opus-only
- stream).
- Something like 512 bytes will give more reliable results for multiplexed
- streams.
- This function is meant to be a quick-rejection filter.
- Its purpose is not to guarantee that a stream is a valid Opus stream, but to
- ensure that it looks enough like Opus that it isn't going to be recognized
- as some other format (except possibly an Opus stream that is also
- multiplexed with other codecs, such as video).
- \param[out] _head The parsed ID header contents.
- You may pass <code>NULL</code> if you do not need
- this information.
- If the function fails, the contents of this structure
- remain untouched.
- \param _initial_data An initial buffer of data from the start of the
- stream.
- \param _initial_bytes The number of bytes in \a _initial_data.
- \return 0 if the data appears to be Opus, or a negative value on error.
- \retval #OP_FALSE There was not enough data to tell if this was an Opus
- stream or not.
- \retval #OP_EFAULT An internal memory allocation failed.
- \retval #OP_EIMPL The stream used a feature that is not implemented,
- such as an unsupported channel family.
- \retval #OP_ENOTFORMAT If the data did not contain a recognizable ID
- header for an Opus stream.
- \retval #OP_EVERSION If the version field signaled a version this library
- does not know how to parse.
- \retval #OP_EBADHEADER The ID header was not properly formatted or contained
- illegal values.*/
-int op_test(OpusHead *_head,
- const unsigned char *_initial_data,size_t _initial_bytes);
-
-/**Open a stream from the given file path.
- \param _path The path to the file to open.
- \param[out] _error Returns 0 on success, or a failure code on error.
- You may pass in <code>NULL</code> if you don't want the
- failure code.
- The failure code will be #OP_EFAULT if the file could not
- be opened, or one of the other failure codes from
- op_open_callbacks() otherwise.
- \return A freshly opened \c OggOpusFile, or <code>NULL</code> on error.*/
-OP_WARN_UNUSED_RESULT OggOpusFile *op_open_file(const char *_path,int *_error)
- OP_ARG_NONNULL(1);
-
-/**Open a stream from a memory buffer.
- \param _data The memory buffer to open.
- \param _size The number of bytes in the buffer.
- \param[out] _error Returns 0 on success, or a failure code on error.
- You may pass in <code>NULL</code> if you don't want the
- failure code.
- See op_open_callbacks() for a full list of failure codes.
- \return A freshly opened \c OggOpusFile, or <code>NULL</code> on error.*/
-OP_WARN_UNUSED_RESULT OggOpusFile *op_open_memory(const unsigned char *_data,
- size_t _size,int *_error);
-
-/**Open a stream from a URL.
- This function behaves identically to op_open_url(), except that it
- takes a va_list instead of a variable number of arguments.
- It does not call the <code>va_end</code> macro, and because it invokes the
- <code>va_arg</code> macro, the value of \a _ap is undefined after the call.
- \note If you use this function, you must link against <tt>libopusurl</tt>.
- \param _url The URL to open.
- Currently only the <file:>, <http:>, and <https:>
- schemes are supported.
- Both <http:> and <https:> may be disabled at compile
- time, in which case opening such URLs will always
- fail.
- Currently this only supports URIs.
- IRIs should be converted to UTF-8 and URL-escaped,
- with internationalized domain names encoded in
- punycode, before passing them to this function.
- \param[out] _error Returns 0 on success, or a failure code on error.
- You may pass in <code>NULL</code> if you don't want
- the failure code.
- See op_open_callbacks() for a full list of failure
- codes.
- \param[in,out] _ap A list of the \ref url_options "optional flags" to
- use.
- This is a variable-length list of options terminated
- with <code>NULL</code>.
- \return A freshly opened \c OggOpusFile, or <code>NULL</code> on error.*/
-OP_WARN_UNUSED_RESULT OggOpusFile *op_vopen_url(const char *_url,
- int *_error,va_list _ap) OP_ARG_NONNULL(1);
-
-/**Open a stream from a URL.
- \note If you use this function, you must link against <tt>libopusurl</tt>.
- \param _url The URL to open.
- Currently only the <file:>, <http:>, and <https:> schemes
- are supported.
- Both <http:> and <https:> may be disabled at compile
- time, in which case opening such URLs will always fail.
- Currently this only supports URIs.
- IRIs should be converted to UTF-8 and URL-escaped, with
- internationalized domain names encoded in punycode,
- before passing them to this function.
- \param[out] _error Returns 0 on success, or a failure code on error.
- You may pass in <code>NULL</code> if you don't want the
- failure code.
- See op_open_callbacks() for a full list of failure codes.
- \param ... The \ref url_options "optional flags" to use.
- This is a variable-length list of options terminated with
- <code>NULL</code>.
- \return A freshly opened \c OggOpusFile, or <code>NULL</code> on error.*/
-OP_WARN_UNUSED_RESULT OggOpusFile *op_open_url(const char *_url,
- int *_error,...) OP_ARG_NONNULL(1);
-
-/**Open a stream using the given set of callbacks to access it.
- \param _source The stream to read from (e.g., a <code>FILE *</code>).
- \param _cb The callbacks with which to access the stream.
- <code><a href="#op_read_func">read()</a></code> must
- be implemented.
- <code><a href="#op_seek_func">seek()</a></code> and
- <code><a href="#op_tell_func">tell()</a></code> may
- be <code>NULL</code>, or may always return -1 to
- indicate a source is unseekable, but if
- <code><a href="#op_seek_func">seek()</a></code> is
- implemented and succeeds on a particular source, then
- <code><a href="#op_tell_func">tell()</a></code> must
- also.
- <code><a href="#op_close_func">close()</a></code> may
- be <code>NULL</code>, but if it is not, it will be
- called when the \c OggOpusFile is destroyed by
- op_free().
- It will not be called if op_open_callbacks() fails
- with an error.
- \param _initial_data An initial buffer of data from the start of the
- stream.
- Applications can read some number of bytes from the
- start of the stream to help identify this as an Opus
- stream, and then provide them here to allow the
- stream to be opened, even if it is unseekable.
- \param _initial_bytes The number of bytes in \a _initial_data.
- If the stream is seekable, its current position (as
- reported by
- <code><a href="#opus_tell_func">tell()</a></code>
- at the start of this function) must be equal to
- \a _initial_bytes.
- Otherwise, seeking to absolute positions will
- generate inconsistent results.
- \param[out] _error Returns 0 on success, or a failure code on error.
- You may pass in <code>NULL</code> if you don't want
- the failure code.
- The failure code will be one of
- <dl>
- <dt>#OP_EREAD</dt>
- <dd>An underlying read, seek, or tell operation
- failed when it should have succeeded, or we failed
- to find data in the stream we had seen before.</dd>
- <dt>#OP_EFAULT</dt>
- <dd>There was a memory allocation failure, or an
- internal library error.</dd>
- <dt>#OP_EIMPL</dt>
- <dd>The stream used a feature that is not
- implemented, such as an unsupported channel
- family.</dd>
- <dt>#OP_EINVAL</dt>
- <dd><code><a href="#op_seek_func">seek()</a></code>
- was implemented and succeeded on this source, but
- <code><a href="#op_tell_func">tell()</a></code>
- did not, or the starting position indicator was
- not equal to \a _initial_bytes.</dd>
- <dt>#OP_ENOTFORMAT</dt>
- <dd>The stream contained a link that did not have
- any logical Opus streams in it.</dd>
- <dt>#OP_EBADHEADER</dt>
- <dd>A required header packet was not properly
- formatted, contained illegal values, or was missing
- altogether.</dd>
- <dt>#OP_EVERSION</dt>
- <dd>An ID header contained an unrecognized version
- number.</dd>
- <dt>#OP_EBADLINK</dt>
- <dd>We failed to find data we had seen before after
- seeking.</dd>
- <dt>#OP_EBADTIMESTAMP</dt>
- <dd>The first or last timestamp in a link failed
- basic validity checks.</dd>
- </dl>
- \return A freshly opened \c OggOpusFile, or <code>NULL</code> on error.
- <tt>libopusfile</tt> does <em>not</em> take ownership of the source
- if the call fails.
- The calling application is responsible for closing the source if
- this call returns an error.*/
-OP_WARN_UNUSED_RESULT OggOpusFile *op_open_callbacks(void *_source,
- const OpusFileCallbacks *_cb,const unsigned char *_initial_data,
- size_t _initial_bytes,int *_error) OP_ARG_NONNULL(2);
-
-/**Partially open a stream from the given file path.
- \see op_test_callbacks
- \param _path The path to the file to open.
- \param[out] _error Returns 0 on success, or a failure code on error.
- You may pass in <code>NULL</code> if you don't want the
- failure code.
- The failure code will be #OP_EFAULT if the file could not
- be opened, or one of the other failure codes from
- op_open_callbacks() otherwise.
- \return A partially opened \c OggOpusFile, or <code>NULL</code> on error.*/
-OP_WARN_UNUSED_RESULT OggOpusFile *op_test_file(const char *_path,int *_error)
- OP_ARG_NONNULL(1);
-
-/**Partially open a stream from a memory buffer.
- \see op_test_callbacks
- \param _data The memory buffer to open.
- \param _size The number of bytes in the buffer.
- \param[out] _error Returns 0 on success, or a failure code on error.
- You may pass in <code>NULL</code> if you don't want the
- failure code.
- See op_open_callbacks() for a full list of failure codes.
- \return A partially opened \c OggOpusFile, or <code>NULL</code> on error.*/
-OP_WARN_UNUSED_RESULT OggOpusFile *op_test_memory(const unsigned char *_data,
- size_t _size,int *_error);
-
-/**Partially open a stream from a URL.
- This function behaves identically to op_test_url(), except that it
- takes a va_list instead of a variable number of arguments.
- It does not call the <code>va_end</code> macro, and because it invokes the
- <code>va_arg</code> macro, the value of \a _ap is undefined after the call.
- \note If you use this function, you must link against <tt>libopusurl</tt>.
- \see op_test_url
- \see op_test_callbacks
- \param _url The URL to open.
- Currently only the <file:>, <http:>, and <https:>
- schemes are supported.
- Both <http:> and <https:> may be disabled at compile
- time, in which case opening such URLs will always
- fail.
- Currently this only supports URIs.
- IRIs should be converted to UTF-8 and URL-escaped,
- with internationalized domain names encoded in
- punycode, before passing them to this function.
- \param[out] _error Returns 0 on success, or a failure code on error.
- You may pass in <code>NULL</code> if you don't want
- the failure code.
- See op_open_callbacks() for a full list of failure
- codes.
- \param[in,out] _ap A list of the \ref url_options "optional flags" to
- use.
- This is a variable-length list of options terminated
- with <code>NULL</code>.
- \return A partially opened \c OggOpusFile, or <code>NULL</code> on error.*/
-OP_WARN_UNUSED_RESULT OggOpusFile *op_vtest_url(const char *_url,
- int *_error,va_list _ap) OP_ARG_NONNULL(1);
-
-/**Partially open a stream from a URL.
- \note If you use this function, you must link against <tt>libopusurl</tt>.
- \see op_test_callbacks
- \param _url The URL to open.
- Currently only the <file:>, <http:>, and <https:>
- schemes are supported.
- Both <http:> and <https:> may be disabled at compile
- time, in which case opening such URLs will always fail.
- Currently this only supports URIs.
- IRIs should be converted to UTF-8 and URL-escaped, with
- internationalized domain names encoded in punycode,
- before passing them to this function.
- \param[out] _error Returns 0 on success, or a failure code on error.
- You may pass in <code>NULL</code> if you don't want the
- failure code.
- See op_open_callbacks() for a full list of failure
- codes.
- \param ... The \ref url_options "optional flags" to use.
- This is a variable-length list of options terminated
- with <code>NULL</code>.
- \return A partially opened \c OggOpusFile, or <code>NULL</code> on error.*/
-OP_WARN_UNUSED_RESULT OggOpusFile *op_test_url(const char *_url,
- int *_error,...) OP_ARG_NONNULL(1);
-
-/**Partially open a stream using the given set of callbacks to access it.
- This tests for Opusness and loads the headers for the first link.
- It does not seek (although it tests for seekability).
- You can query a partially open stream for the few pieces of basic
- information returned by op_serialno(), op_channel_count(), op_head(), and
- op_tags() (but only for the first link).
- You may also determine if it is seekable via a call to op_seekable().
- You cannot read audio from the stream, seek, get the size or duration,
- get information from links other than the first one, or even get the total
- number of links until you finish opening the stream with op_test_open().
- If you do not need to do any of these things, you can dispose of it with
- op_free() instead.
-
- This function is provided mostly to simplify porting existing code that used
- <tt>libvorbisfile</tt>.
- For new code, you are likely better off using op_test() instead, which
- is less resource-intensive, requires less data to succeed, and imposes a
- hard limit on the amount of data it examines (important for unseekable
- sources, where all such data must be buffered until you are sure of the
- stream type).
- \param _source The stream to read from (e.g., a <code>FILE *</code>).
- \param _cb The callbacks with which to access the stream.
- <code><a href="#op_read_func">read()</a></code> must
- be implemented.
- <code><a href="#op_seek_func">seek()</a></code> and
- <code><a href="#op_tell_func">tell()</a></code> may
- be <code>NULL</code>, or may always return -1 to
- indicate a source is unseekable, but if
- <code><a href="#op_seek_func">seek()</a></code> is
- implemented and succeeds on a particular source, then
- <code><a href="#op_tell_func">tell()</a></code> must
- also.
- <code><a href="#op_close_func">close()</a></code> may
- be <code>NULL</code>, but if it is not, it will be
- called when the \c OggOpusFile is destroyed by
- op_free().
- It will not be called if op_open_callbacks() fails
- with an error.
- \param _initial_data An initial buffer of data from the start of the
- stream.
- Applications can read some number of bytes from the
- start of the stream to help identify this as an Opus
- stream, and then provide them here to allow the
- stream to be tested more thoroughly, even if it is
- unseekable.
- \param _initial_bytes The number of bytes in \a _initial_data.
- If the stream is seekable, its current position (as
- reported by
- <code><a href="#opus_tell_func">tell()</a></code>
- at the start of this function) must be equal to
- \a _initial_bytes.
- Otherwise, seeking to absolute positions will
- generate inconsistent results.
- \param[out] _error Returns 0 on success, or a failure code on error.
- You may pass in <code>NULL</code> if you don't want
- the failure code.
- See op_open_callbacks() for a full list of failure
- codes.
- \return A partially opened \c OggOpusFile, or <code>NULL</code> on error.
- <tt>libopusfile</tt> does <em>not</em> take ownership of the source
- if the call fails.
- The calling application is responsible for closing the source if
- this call returns an error.*/
-OP_WARN_UNUSED_RESULT OggOpusFile *op_test_callbacks(void *_source,
- const OpusFileCallbacks *_cb,const unsigned char *_initial_data,
- size_t _initial_bytes,int *_error) OP_ARG_NONNULL(2);
-
-/**Finish opening a stream partially opened with op_test_callbacks() or one of
- the associated convenience functions.
- If this function fails, you are still responsible for freeing the
- \c OggOpusFile with op_free().
- \param _of The \c OggOpusFile to finish opening.
- \return 0 on success, or a negative value on error.
- \retval #OP_EREAD An underlying read, seek, or tell operation failed
- when it should have succeeded.
- \retval #OP_EFAULT There was a memory allocation failure, or an
- internal library error.
- \retval #OP_EIMPL The stream used a feature that is not implemented,
- such as an unsupported channel family.
- \retval #OP_EINVAL The stream was not partially opened with
- op_test_callbacks() or one of the associated
- convenience functions.
- \retval #OP_ENOTFORMAT The stream contained a link that did not have any
- logical Opus streams in it.
- \retval #OP_EBADHEADER A required header packet was not properly
- formatted, contained illegal values, or was
- missing altogether.
- \retval #OP_EVERSION An ID header contained an unrecognized version
- number.
- \retval #OP_EBADLINK We failed to find data we had seen before after
- seeking.
- \retval #OP_EBADTIMESTAMP The first or last timestamp in a link failed basic
- validity checks.*/
-int op_test_open(OggOpusFile *_of) OP_ARG_NONNULL(1);
-
-/**Release all memory used by an \c OggOpusFile.
- \param _of The \c OggOpusFile to free.*/
-void op_free(OggOpusFile *_of);
-
-/*@}*/
-/*@}*/
-
-/**\defgroup stream_info Stream Information*/
-/*@{*/
-/**\name Functions for obtaining information about streams
-
- These functions allow you to get basic information about a stream, including
- seekability, the number of links (for chained streams), plus the size,
- duration, bitrate, header parameters, and meta information for each link
- (or, where available, the stream as a whole).
- Some of these (size, duration) are only available for seekable streams.
- You can also query the current stream position, link, and playback time,
- and instantaneous bitrate during playback.
-
- Some of these functions may be used successfully on the partially open
- streams returned by op_test_callbacks() or one of the associated
- convenience functions.
- Their documention will indicate so explicitly.*/
-/*@{*/
-
-/**Returns whether or not the data source being read is seekable.
- This is true if
- <ol>
- <li>The <code><a href="#op_seek_func">seek()</a></code> and
- <code><a href="#op_tell_func">tell()</a></code> callbacks are both
- non-<code>NULL</code>,</li>
- <li>The <code><a href="#op_seek_func">seek()</a></code> callback was
- successfully executed at least once, and</li>
- <li>The <code><a href="#op_tell_func">tell()</a></code> callback was
- successfully able to report the position indicator afterwards.</li>
- </ol>
- This function may be called on partially-opened streams.
- \param _of The \c OggOpusFile whose seekable status is to be returned.
- \return A non-zero value if seekable, and 0 if unseekable.*/
-int op_seekable(const OggOpusFile *_of) OP_ARG_NONNULL(1);
-
-/**Returns the number of links in this chained stream.
- This function may be called on partially-opened streams, but it will always
- return 1.
- The actual number of links is not known until the stream is fully opened.
- \param _of The \c OggOpusFile from which to retrieve the link count.
- \return For fully-open seekable sources, this returns the total number of
- links in the whole stream, which will be at least 1.
- For partially-open or unseekable sources, this always returns 1.*/
-int op_link_count(const OggOpusFile *_of) OP_ARG_NONNULL(1);
-
-/**Get the serial number of the given link in a (possibly-chained) Ogg Opus
- stream.
- This function may be called on partially-opened streams, but it will always
- return the serial number of the Opus stream in the first link.
- \param _of The \c OggOpusFile from which to retrieve the serial number.
- \param _li The index of the link whose serial number should be retrieved.
- Use a negative number to get the serial number of the current
- link.
- \return The serial number of the given link.
- If \a _li is greater than the total number of links, this returns
- the serial number of the last link.
- If the source is not seekable, this always returns the serial number
- of the current link.*/
-opus_uint32 op_serialno(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1);
-
-/**Get the channel count of the given link in a (possibly-chained) Ogg Opus
- stream.
- This is equivalent to <code>op_head(_of,_li)->channel_count</code>, but
- is provided for convenience.
- This function may be called on partially-opened streams, but it will always
- return the channel count of the Opus stream in the first link.
- \param _of The \c OggOpusFile from which to retrieve the channel count.
- \param _li The index of the link whose channel count should be retrieved.
- Use a negative number to get the channel count of the current
- link.
- \return The channel count of the given link.
- If \a _li is greater than the total number of links, this returns
- the channel count of the last link.
- If the source is not seekable, this always returns the channel count
- of the current link.*/
-int op_channel_count(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1);
-
-/**Get the total (compressed) size of the stream, or of an individual link in
- a (possibly-chained) Ogg Opus stream, including all headers and Ogg muxing
- overhead.
- \warning If the Opus stream (or link) is concurrently multiplexed with other
- logical streams (e.g., video), this returns the size of the entire stream
- (or link), not just the number of bytes in the first logical Opus stream.
- Returning the latter would require scanning the entire file.
- \param _of The \c OggOpusFile from which to retrieve the compressed size.
- \param _li The index of the link whose compressed size should be computed.
- Use a negative number to get the compressed size of the entire
- stream.
- \return The compressed size of the entire stream if \a _li is negative, the
- compressed size of link \a _li if it is non-negative, or a negative
- value on error.
- The compressed size of the entire stream may be smaller than that
- of the underlying source if trailing garbage was detected in the
- file.
- \retval #OP_EINVAL The source is not seekable (so we can't know the length),
- \a _li wasn't less than the total number of links in
- the stream, or the stream was only partially open.*/
-opus_int64 op_raw_total(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1);
-
-/**Get the total PCM length (number of samples at 48 kHz) of the stream, or of
- an individual link in a (possibly-chained) Ogg Opus stream.
- Users looking for <code>op_time_total()</code> should use op_pcm_total()
- instead.
- Because timestamps in Opus are fixed at 48 kHz, there is no need for a
- separate function to convert this to seconds (and leaving it out avoids
- introducing floating point to the API, for those that wish to avoid it).
- \param _of The \c OggOpusFile from which to retrieve the PCM offset.
- \param _li The index of the link whose PCM length should be computed.
- Use a negative number to get the PCM length of the entire stream.
- \return The PCM length of the entire stream if \a _li is negative, the PCM
- length of link \a _li if it is non-negative, or a negative value on
- error.
- \retval #OP_EINVAL The source is not seekable (so we can't know the length),
- \a _li wasn't less than the total number of links in
- the stream, or the stream was only partially open.*/
-ogg_int64_t op_pcm_total(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1);
-
-/**Get the ID header information for the given link in a (possibly chained) Ogg
- Opus stream.
- This function may be called on partially-opened streams, but it will always
- return the ID header information of the Opus stream in the first link.
- \param _of The \c OggOpusFile from which to retrieve the ID header
- information.
- \param _li The index of the link whose ID header information should be
- retrieved.
- Use a negative number to get the ID header information of the
- current link.
- For an unseekable stream, \a _li is ignored, and the ID header
- information for the current link is always returned, if
- available.
- \return The contents of the ID header for the given link.*/
-const OpusHead *op_head(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1);
-
-/**Get the comment header information for the given link in a (possibly
- chained) Ogg Opus stream.
- This function may be called on partially-opened streams, but it will always
- return the tags from the Opus stream in the first link.
- \param _of The \c OggOpusFile from which to retrieve the comment header
- information.
- \param _li The index of the link whose comment header information should be
- retrieved.
- Use a negative number to get the comment header information of
- the current link.
- For an unseekable stream, \a _li is ignored, and the comment
- header information for the current link is always returned, if
- available.
- \return The contents of the comment header for the given link, or
- <code>NULL</code> if this is an unseekable stream that encountered
- an invalid link.*/
-const OpusTags *op_tags(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1);
-
-/**Retrieve the index of the current link.
- This is the link that produced the data most recently read by
- op_read_float() or its associated functions, or, after a seek, the link
- that the seek target landed in.
- Reading more data may advance the link index (even on the first read after a
- seek).
- \param _of The \c OggOpusFile from which to retrieve the current link index.
- \return The index of the current link on success, or a negative value on
- failure.
- For seekable streams, this is a number between 0 and the value
- returned by op_link_count().
- For unseekable streams, this value starts at 0 and increments by one
- each time a new link is encountered (even though op_link_count()
- always returns 1).
- \retval #OP_EINVAL The stream was only partially open.*/
-int op_current_link(const OggOpusFile *_of) OP_ARG_NONNULL(1);
-
-/**Computes the bitrate of the stream, or of an individual link in a
- (possibly-chained) Ogg Opus stream.
- The stream must be seekable to compute the bitrate.
- For unseekable streams, use op_bitrate_instant() to get periodic estimates.
- \warning If the Opus stream (or link) is concurrently multiplexed with other
- logical streams (e.g., video), this uses the size of the entire stream (or
- link) to compute the bitrate, not just the number of bytes in the first
- logical Opus stream.
- Returning the latter requires scanning the entire file, but this may be done
- by decoding the whole file and calling op_bitrate_instant() once at the
- end.
- Install a trivial decoding callback with op_set_decode_callback() if you
- wish to skip actual decoding during this process.
- \param _of The \c OggOpusFile from which to retrieve the bitrate.
- \param _li The index of the link whose bitrate should be computed.
- Use a negative number to get the bitrate of the whole stream.
- \return The bitrate on success, or a negative value on error.
- \retval #OP_EINVAL The stream was only partially open, the stream was not
- seekable, or \a _li was larger than the number of
- links.*/
-opus_int32 op_bitrate(const OggOpusFile *_of,int _li) OP_ARG_NONNULL(1);
-
-/**Compute the instantaneous bitrate, measured as the ratio of bits to playable
- samples decoded since a) the last call to op_bitrate_instant(), b) the last
- seek, or c) the start of playback, whichever was most recent.
- This will spike somewhat after a seek or at the start/end of a chain
- boundary, as pre-skip, pre-roll, and end-trimming causes samples to be
- decoded but not played.
- \param _of The \c OggOpusFile from which to retrieve the bitrate.
- \return The bitrate, in bits per second, or a negative value on error.
- \retval #OP_FALSE No data has been decoded since any of the events
- described above.
- \retval #OP_EINVAL The stream was only partially open.*/
-opus_int32 op_bitrate_instant(OggOpusFile *_of) OP_ARG_NONNULL(1);
-
-/**Obtain the current value of the position indicator for \a _of.
- \param _of The \c OggOpusFile from which to retrieve the position indicator.
- \return The byte position that is currently being read from.
- \retval #OP_EINVAL The stream was only partially open.*/
-opus_int64 op_raw_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1);
-
-/**Obtain the PCM offset of the next sample to be read.
- If the stream is not properly timestamped, this might not increment by the
- proper amount between reads, or even return monotonically increasing
- values.
- \param _of The \c OggOpusFile from which to retrieve the PCM offset.
- \return The PCM offset of the next sample to be read.
- \retval #OP_EINVAL The stream was only partially open.*/
-ogg_int64_t op_pcm_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1);
-
-/*@}*/
-/*@}*/
-
-/**\defgroup stream_seeking Seeking*/
-/*@{*/
-/**\name Functions for seeking in Opus streams
-
- These functions let you seek in Opus streams, if the underlying source
- support it.
- Seeking is implemented for all built-in stream I/O routines, though some
- individual sources may not be seekable (pipes, live HTTP streams, or HTTP
- streams from a server that does not support <code>Range</code> requests).
-
- op_raw_seek() is the fastest: it is guaranteed to perform at most one
- physical seek, but, since the target is a byte position, makes no guarantee
- how close to a given time it will come.
- op_pcm_seek() provides sample-accurate seeking.
- The number of physical seeks it requires is still quite small (often 1 or
- 2, even in highly variable bitrate streams).
-
- Seeking in Opus requires decoding some pre-roll amount before playback to
- allow the internal state to converge (as if recovering from packet loss).
- This is handled internally by <tt>libopusfile</tt>, but means there is
- little extra overhead for decoding up to the exact position requested
- (since it must decode some amount of audio anyway).
- It also means that decoding after seeking may not return exactly the same
- values as would be obtained by decoding the stream straight through.
- However, such differences are expected to be smaller than the loss
- introduced by Opus's lossy compression.*/
-/*@{*/
-
-/**Seek to a byte offset relative to the <b>compressed</b> data.
- This also scans packets to update the PCM cursor.
- It will cross a logical bitstream boundary, but only if it can't get any
- packets out of the tail of the link to which it seeks.
- \param _of The \c OggOpusFile in which to seek.
- \param _byte_offset The byte position to seek to.
- \return 0 on success, or a negative error code on failure.
- \retval #OP_EREAD The underlying seek operation failed.
- \retval #OP_EINVAL The stream was only partially open, or the target was
- outside the valid range for the stream.
- \retval #OP_ENOSEEK This stream is not seekable.
- \retval #OP_EBADLINK Failed to initialize a decoder for a stream for an
- unknown reason.*/
-int op_raw_seek(OggOpusFile *_of,opus_int64 _byte_offset) OP_ARG_NONNULL(1);
-
-/**Seek to the specified PCM offset, such that decoding will begin at exactly
- the requested position.
- \param _of The \c OggOpusFile in which to seek.
- \param _pcm_offset The PCM offset to seek to.
- This is in samples at 48 kHz relative to the start of the
- stream.
- \return 0 on success, or a negative value on error.
- \retval #OP_EREAD An underlying read or seek operation failed.
- \retval #OP_EINVAL The stream was only partially open, or the target was
- outside the valid range for the stream.
- \retval #OP_ENOSEEK This stream is not seekable.
- \retval #OP_EBADLINK We failed to find data we had seen before, or the
- bitstream structure was sufficiently malformed that
- seeking to the target destination was impossible.*/
-int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1);
-
-/*@}*/
-/*@}*/
-
-/**\defgroup stream_decoding Decoding*/
-/*@{*/
-/**\name Functions for decoding audio data
-
- These functions retrieve actual decoded audio data from the stream.
- The general functions, op_read() and op_read_float() return 16-bit or
- floating-point output, both using native endian ordering.
- The number of channels returned can change from link to link in a chained
- stream.
- There are special functions, op_read_stereo() and op_read_float_stereo(),
- which always output two channels, to simplify applications which do not
- wish to handle multichannel audio.
- These downmix multichannel files to two channels, so they can always return
- samples in the same format for every link in a chained file.
-
- If the rest of your audio processing chain can handle floating point, those
- routines should be preferred, as floating point output avoids introducing
- clipping and other issues which might be avoided entirely if, e.g., you
- scale down the volume at some other stage.
- However, if you intend to direct consume 16-bit samples, the conversion in
- <tt>libopusfile</tt> provides noise-shaping dithering and, if compiled
- against <tt>libopus</tt>&nbsp;1.1 or later, soft-clipping prevention.
-
- <tt>libopusfile</tt> can also be configured at compile time to use the
- fixed-point <tt>libopus</tt> API.
- If so, <tt>libopusfile</tt>'s floating-point API may also be disabled.
- In that configuration, nothing in <tt>libopusfile</tt> will use any
- floating-point operations, to simplify support on devices without an
- adequate FPU.
-
- \warning HTTPS streams may be be vulnerable to truncation attacks if you do
- not check the error return code from op_read_float() or its associated
- functions.
- If the remote peer does not close the connection gracefully (with a TLS
- "close notify" message), these functions will return #OP_EREAD instead of 0
- when they reach the end of the file.
- If you are reading from an <https:> URL (particularly if seeking is not
- supported), you should make sure to check for this error and warn the user
- appropriately.*/
-/*@{*/
-
-/**Indicates that the decoding callback should produce signed 16-bit
- native-endian output samples.*/
-#define OP_DEC_FORMAT_SHORT (7008)
-/**Indicates that the decoding callback should produce 32-bit native-endian
- float samples.*/
-#define OP_DEC_FORMAT_FLOAT (7040)
-
-/**Indicates that the decoding callback did not decode anything, and that
- <tt>libopusfile</tt> should decode normally instead.*/
-#define OP_DEC_USE_DEFAULT (6720)
-
-/**Called to decode an Opus packet.
- This should invoke the functional equivalent of opus_multistream_decode() or
- opus_multistream_decode_float(), except that it returns 0 on success
- instead of the number of decoded samples (which is known a priori).
- \param _ctx The application-provided callback context.
- \param _decoder The decoder to use to decode the packet.
- \param[out] _pcm The buffer to decode into.
- This will always have enough room for \a _nchannels of
- \a _nsamples samples, which should be placed into this
- buffer interleaved.
- \param _op The packet to decode.
- This will always have its granule position set to a valid
- value.
- \param _nsamples The number of samples expected from the packet.
- \param _nchannels The number of channels expected from the packet.
- \param _format The desired sample output format.
- This is either #OP_DEC_FORMAT_SHORT or
- #OP_DEC_FORMAT_FLOAT.
- \param _li The index of the link from which this packet was decoded.
- \return A non-negative value on success, or a negative value on error.
- The error codes should be the same as those returned by
- opus_multistream_decode() or opus_multistream_decode_float().
- \retval 0 Decoding was successful.
- The application has filled the buffer with
- exactly <code>\a _nsamples*\a
- _nchannels</code> samples in the requested
- format.
- \retval #OP_DEC_USE_DEFAULT No decoding was done.
- <tt>libopusfile</tt> should decode normally
- instead.*/
-typedef int (*op_decode_cb_func)(void *_ctx,OpusMSDecoder *_decoder,void *_pcm,
- const ogg_packet *_op,int _nsamples,int _nchannels,int _format,int _li);
-
-/**Sets the packet decode callback function.
- This is called once for each packet that needs to be decoded.
- A call to this function is no guarantee that the audio will eventually be
- delivered to the application.
- Some or all of the data from the packet may be discarded (i.e., at the
- beginning or end of a link, or after a seek), however the callback is
- required to provide all of it.
- \param _of The \c OggOpusFile on which to set the decode callback.
- \param _decode_cb The callback function to call.
- This may be <code>NULL</code> to disable calling the
- callback.
- \param _ctx The application-provided context pointer to pass to the
- callback on each call.*/
-void op_set_decode_callback(OggOpusFile *_of,
- op_decode_cb_func _decode_cb,void *_ctx) OP_ARG_NONNULL(1);
-
-/**Gain offset type that indicates that the provided offset is relative to the
- header gain.
- This is the default.*/
-#define OP_HEADER_GAIN (0)
-
-/**Gain offset type that indicates that the provided offset is relative to the
- R128_ALBUM_GAIN value (if any), in addition to the header gain.*/
-#define OP_ALBUM_GAIN (3007)
-
-/**Gain offset type that indicates that the provided offset is relative to the
- R128_TRACK_GAIN value (if any), in addition to the header gain.*/
-#define OP_TRACK_GAIN (3008)
-
-/**Gain offset type that indicates that the provided offset should be used as
- the gain directly, without applying any the header or track gains.*/
-#define OP_ABSOLUTE_GAIN (3009)
-
-/**Sets the gain to be used for decoded output.
- By default, the gain in the header is applied with no additional offset.
- The total gain (including header gain and/or track gain, if applicable, and
- this offset), will be clamped to [-32768,32767]/256 dB.
- This is more than enough to saturate or underflow 16-bit PCM.
- \note The new gain will not be applied to any already buffered, decoded
- output.
- This means you cannot change it sample-by-sample, as at best it will be
- updated packet-by-packet.
- It is meant for setting a target volume level, rather than applying smooth
- fades, etc.
- \param _of The \c OggOpusFile on which to set the gain offset.
- \param _gain_type One of #OP_HEADER_GAIN, #OP_ALBUM_GAIN,
- #OP_TRACK_GAIN, or #OP_ABSOLUTE_GAIN.
- \param _gain_offset_q8 The gain offset to apply, in 1/256ths of a dB.
- \return 0 on success or a negative value on error.
- \retval #OP_EINVAL The \a _gain_type was unrecognized.*/
-int op_set_gain_offset(OggOpusFile *_of,
- int _gain_type,opus_int32 _gain_offset_q8) OP_ARG_NONNULL(1);
-
-/**Sets whether or not dithering is enabled for 16-bit decoding.
- By default, when <tt>libopusfile</tt> is compiled to use floating-point
- internally, calling op_read() or op_read_stereo() will first decode to
- float, and then convert to fixed-point using noise-shaping dithering.
- This flag can be used to disable that dithering.
- When the application uses op_read_float() or op_read_float_stereo(), or when
- the library has been compiled to decode directly to fixed point, this flag
- has no effect.
- \param _of The \c OggOpusFile on which to enable or disable dithering.
- \param _enabled A non-zero value to enable dithering, or 0 to disable it.*/
-void op_set_dither_enabled(OggOpusFile *_of,int _enabled) OP_ARG_NONNULL(1);
-
-/**Reads more samples from the stream.
- \note Although \a _buf_size must indicate the total number of values that
- can be stored in \a _pcm, the return value is the number of samples
- <em>per channel</em>.
- This is done because
- <ol>
- <li>The channel count cannot be known a priori (reading more samples might
- advance us into the next link, with a different channel count), so
- \a _buf_size cannot also be in units of samples per channel,</li>
- <li>Returning the samples per channel matches the <code>libopus</code> API
- as closely as we're able,</li>
- <li>Returning the total number of values instead of samples per channel
- would mean the caller would need a division to compute the samples per
- channel, and might worry about the possibility of getting back samples
- for some channels and not others, and</li>
- <li>This approach is relatively fool-proof: if an application passes too
- small a value to \a _buf_size, they will simply get fewer samples back,
- and if they assume the return value is the total number of values, then
- they will simply read too few (rather than reading too many and going
- off the end of the buffer).</li>
- </ol>
- \param _of The \c OggOpusFile from which to read.
- \param[out] _pcm A buffer in which to store the output PCM samples, as
- signed native-endian 16-bit values at 48&nbsp;kHz
- with a nominal range of <code>[-32768,32767)</code>.
- Multiple channels are interleaved using the
- <a href="http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-800004.3.9">Vorbis
- channel ordering</a>.
- This must have room for at least \a _buf_size values.
- \param _buf_size The number of values that can be stored in \a _pcm.
- It is recommended that this be large enough for at
- least 120 ms of data at 48 kHz per channel (5760
- values per channel).
- Smaller buffers will simply return less data, possibly
- consuming more memory to buffer the data internally.
- <tt>libopusfile</tt> may return less data than
- requested.
- If so, there is no guarantee that the remaining data
- in \a _pcm will be unmodified.
- \param[out] _li The index of the link this data was decoded from.
- You may pass <code>NULL</code> if you do not need this
- information.
- If this function fails (returning a negative value),
- this parameter is left unset.
- \return The number of samples read per channel on success, or a negative
- value on failure.
- The channel count can be retrieved on success by calling
- <code>op_head(_of,*_li)</code>.
- The number of samples returned may be 0 if the buffer was too small
- to store even a single sample for all channels, or if end-of-file
- was reached.
- The list of possible failure codes follows.
- Most of them can only be returned by unseekable, chained streams
- that encounter a new link.
- \retval #OP_HOLE There was a hole in the data, and some samples
- may have been skipped.
- Call this function again to continue decoding
- past the hole.
- \retval #OP_EREAD An underlying read operation failed.
- This may signal a truncation attack from an
- <https:> source.
- \retval #OP_EFAULT An internal memory allocation failed.
- \retval #OP_EIMPL An unseekable stream encountered a new link that
- used a feature that is not implemented, such as
- an unsupported channel family.
- \retval #OP_EINVAL The stream was only partially open.
- \retval #OP_ENOTFORMAT An unseekable stream encountered a new link that
- did not have any logical Opus streams in it.
- \retval #OP_EBADHEADER An unseekable stream encountered a new link with a
- required header packet that was not properly
- formatted, contained illegal values, or was
- missing altogether.
- \retval #OP_EVERSION An unseekable stream encountered a new link with
- an ID header that contained an unrecognized
- version number.
- \retval #OP_EBADPACKET Failed to properly decode the next packet.
- \retval #OP_EBADLINK We failed to find data we had seen before.
- \retval #OP_EBADTIMESTAMP An unseekable stream encountered a new link with
- a starting timestamp that failed basic validity
- checks.*/
-OP_WARN_UNUSED_RESULT int op_read(OggOpusFile *_of,
- opus_int16 *_pcm,int _buf_size,int *_li) OP_ARG_NONNULL(1);
-
-/**Reads more samples from the stream.
- \note Although \a _buf_size must indicate the total number of values that
- can be stored in \a _pcm, the return value is the number of samples
- <em>per channel</em>.
- <ol>
- <li>The channel count cannot be known a priori (reading more samples might
- advance us into the next link, with a different channel count), so
- \a _buf_size cannot also be in units of samples per channel,</li>
- <li>Returning the samples per channel matches the <code>libopus</code> API
- as closely as we're able,</li>
- <li>Returning the total number of values instead of samples per channel
- would mean the caller would need a division to compute the samples per
- channel, and might worry about the possibility of getting back samples
- for some channels and not others, and</li>
- <li>This approach is relatively fool-proof: if an application passes too
- small a value to \a _buf_size, they will simply get fewer samples back,
- and if they assume the return value is the total number of values, then
- they will simply read too few (rather than reading too many and going
- off the end of the buffer).</li>
- </ol>
- \param _of The \c OggOpusFile from which to read.
- \param[out] _pcm A buffer in which to store the output PCM samples as
- signed floats at 48&nbsp;kHz with a nominal range of
- <code>[-1.0,1.0]</code>.
- Multiple channels are interleaved using the
- <a href="http://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-800004.3.9">Vorbis
- channel ordering</a>.
- This must have room for at least \a _buf_size floats.
- \param _buf_size The number of floats that can be stored in \a _pcm.
- It is recommended that this be large enough for at
- least 120 ms of data at 48 kHz per channel (5760
- samples per channel).
- Smaller buffers will simply return less data, possibly
- consuming more memory to buffer the data internally.
- If less than \a _buf_size values are returned,
- <tt>libopusfile</tt> makes no guarantee that the
- remaining data in \a _pcm will be unmodified.
- \param[out] _li The index of the link this data was decoded from.
- You may pass <code>NULL</code> if you do not need this
- information.
- If this function fails (returning a negative value),
- this parameter is left unset.
- \return The number of samples read per channel on success, or a negative
- value on failure.
- The channel count can be retrieved on success by calling
- <code>op_head(_of,*_li)</code>.
- The number of samples returned may be 0 if the buffer was too small
- to store even a single sample for all channels, or if end-of-file
- was reached.
- The list of possible failure codes follows.
- Most of them can only be returned by unseekable, chained streams
- that encounter a new link.
- \retval #OP_HOLE There was a hole in the data, and some samples
- may have been skipped.
- Call this function again to continue decoding
- past the hole.
- \retval #OP_EREAD An underlying read operation failed.
- This may signal a truncation attack from an
- <https:> source.
- \retval #OP_EFAULT An internal memory allocation failed.
- \retval #OP_EIMPL An unseekable stream encountered a new link that
- used a feature that is not implemented, such as
- an unsupported channel family.
- \retval #OP_EINVAL The stream was only partially open.
- \retval #OP_ENOTFORMAT An unseekable stream encountered a new link that
- did not have any logical Opus streams in it.
- \retval #OP_EBADHEADER An unseekable stream encountered a new link with a
- required header packet that was not properly
- formatted, contained illegal values, or was
- missing altogether.
- \retval #OP_EVERSION An unseekable stream encountered a new link with
- an ID header that contained an unrecognized
- version number.
- \retval #OP_EBADPACKET Failed to properly decode the next packet.
- \retval #OP_EBADLINK We failed to find data we had seen before.
- \retval #OP_EBADTIMESTAMP An unseekable stream encountered a new link with
- a starting timestamp that failed basic validity
- checks.*/
-OP_WARN_UNUSED_RESULT int op_read_float(OggOpusFile *_of,
- float *_pcm,int _buf_size,int *_li) OP_ARG_NONNULL(1);
-
-/**Reads more samples from the stream and downmixes to stereo, if necessary.
- This function is intended for simple players that want a uniform output
- format, even if the channel count changes between links in a chained
- stream.
- \note \a _buf_size indicates the total number of values that can be stored
- in \a _pcm, while the return value is the number of samples <em>per
- channel</em>, even though the channel count is known, for consistency with
- op_read().
- \param _of The \c OggOpusFile from which to read.
- \param[out] _pcm A buffer in which to store the output PCM samples, as
- signed native-endian 16-bit values at 48&nbsp;kHz
- with a nominal range of <code>[-32768,32767)</code>.
- The left and right channels are interleaved in the
- buffer.
- This must have room for at least \a _buf_size values.
- \param _buf_size The number of values that can be stored in \a _pcm.
- It is recommended that this be large enough for at
- least 120 ms of data at 48 kHz per channel (11520
- values total).
- Smaller buffers will simply return less data, possibly
- consuming more memory to buffer the data internally.
- If less than \a _buf_size values are returned,
- <tt>libopusfile</tt> makes no guarantee that the
- remaining data in \a _pcm will be unmodified.
- \return The number of samples read per channel on success, or a negative
- value on failure.
- The number of samples returned may be 0 if the buffer was too small
- to store even a single sample for both channels, or if end-of-file
- was reached.
- The list of possible failure codes follows.
- Most of them can only be returned by unseekable, chained streams
- that encounter a new link.
- \retval #OP_HOLE There was a hole in the data, and some samples
- may have been skipped.
- Call this function again to continue decoding
- past the hole.
- \retval #OP_EREAD An underlying read operation failed.
- This may signal a truncation attack from an
- <https:> source.
- \retval #OP_EFAULT An internal memory allocation failed.
- \retval #OP_EIMPL An unseekable stream encountered a new link that
- used a feature that is not implemented, such as
- an unsupported channel family.
- \retval #OP_EINVAL The stream was only partially open.
- \retval #OP_ENOTFORMAT An unseekable stream encountered a new link that
- did not have any logical Opus streams in it.
- \retval #OP_EBADHEADER An unseekable stream encountered a new link with a
- required header packet that was not properly
- formatted, contained illegal values, or was
- missing altogether.
- \retval #OP_EVERSION An unseekable stream encountered a new link with
- an ID header that contained an unrecognized
- version number.
- \retval #OP_EBADPACKET Failed to properly decode the next packet.
- \retval #OP_EBADLINK We failed to find data we had seen before.
- \retval #OP_EBADTIMESTAMP An unseekable stream encountered a new link with
- a starting timestamp that failed basic validity
- checks.*/
-OP_WARN_UNUSED_RESULT int op_read_stereo(OggOpusFile *_of,
- opus_int16 *_pcm,int _buf_size) OP_ARG_NONNULL(1);
-
-/**Reads more samples from the stream and downmixes to stereo, if necessary.
- This function is intended for simple players that want a uniform output
- format, even if the channel count changes between links in a chained
- stream.
- \note \a _buf_size indicates the total number of values that can be stored
- in \a _pcm, while the return value is the number of samples <em>per
- channel</em>, even though the channel count is known, for consistency with
- op_read_float().
- \param _of The \c OggOpusFile from which to read.
- \param[out] _pcm A buffer in which to store the output PCM samples, as
- signed floats at 48&nbsp;kHz with a nominal range of
- <code>[-1.0,1.0]</code>.
- The left and right channels are interleaved in the
- buffer.
- This must have room for at least \a _buf_size values.
- \param _buf_size The number of values that can be stored in \a _pcm.
- It is recommended that this be large enough for at
- least 120 ms of data at 48 kHz per channel (11520
- values total).
- Smaller buffers will simply return less data, possibly
- consuming more memory to buffer the data internally.
- If less than \a _buf_size values are returned,
- <tt>libopusfile</tt> makes no guarantee that the
- remaining data in \a _pcm will be unmodified.
- \return The number of samples read per channel on success, or a negative
- value on failure.
- The number of samples returned may be 0 if the buffer was too small
- to store even a single sample for both channels, or if end-of-file
- was reached.
- The list of possible failure codes follows.
- Most of them can only be returned by unseekable, chained streams
- that encounter a new link.
- \retval #OP_HOLE There was a hole in the data, and some samples
- may have been skipped.
- Call this function again to continue decoding
- past the hole.
- \retval #OP_EREAD An underlying read operation failed.
- This may signal a truncation attack from an
- <https:> source.
- \retval #OP_EFAULT An internal memory allocation failed.
- \retval #OP_EIMPL An unseekable stream encountered a new link that
- used a feature that is not implemented, such as
- an unsupported channel family.
- \retval #OP_EINVAL The stream was only partially open.
- \retval #OP_ENOTFORMAT An unseekable stream encountered a new link that
- that did not have any logical Opus streams in it.
- \retval #OP_EBADHEADER An unseekable stream encountered a new link with a
- required header packet that was not properly
- formatted, contained illegal values, or was
- missing altogether.
- \retval #OP_EVERSION An unseekable stream encountered a new link with
- an ID header that contained an unrecognized
- version number.
- \retval #OP_EBADPACKET Failed to properly decode the next packet.
- \retval #OP_EBADLINK We failed to find data we had seen before.
- \retval #OP_EBADTIMESTAMP An unseekable stream encountered a new link with
- a starting timestamp that failed basic validity
- checks.*/
-OP_WARN_UNUSED_RESULT int op_read_float_stereo(OggOpusFile *_of,
- float *_pcm,int _buf_size) OP_ARG_NONNULL(1);
-
-/*@}*/
-/*@}*/
-
-# if OP_GNUC_PREREQ(4,0)
-# pragma GCC visibility pop
-# endif
-
-# if defined(__cplusplus)
-}
-# endif
-
-#endif
diff --git a/drivers/opus/repacketizer.c b/drivers/opus/repacketizer.c
deleted file mode 100644
index 3822f9c86f..0000000000
--- a/drivers/opus/repacketizer.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/* Copyright (c) 2011 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/opus.h"
-#include "opus/opus_private.h"
-#include "opus/celt/os_support.h"
-
-
-int opus_repacketizer_get_size(void)
-{
- return sizeof(OpusRepacketizer);
-}
-
-OpusRepacketizer *opus_repacketizer_init(OpusRepacketizer *rp)
-{
- rp->nb_frames = 0;
- return rp;
-}
-
-OpusRepacketizer *opus_repacketizer_create(void)
-{
- OpusRepacketizer *rp;
- rp=(OpusRepacketizer *)opus_alloc(opus_repacketizer_get_size());
- if(rp==NULL)return NULL;
- return opus_repacketizer_init(rp);
-}
-
-void opus_repacketizer_destroy(OpusRepacketizer *rp)
-{
- opus_free(rp);
-}
-
-static int opus_repacketizer_cat_impl(OpusRepacketizer *rp, const unsigned char *data, opus_int32 len, int self_delimited)
-{
- unsigned char tmp_toc;
- int curr_nb_frames,ret;
- /* Set of check ToC */
- if (len<1) return OPUS_INVALID_PACKET;
- if (rp->nb_frames == 0)
- {
- rp->toc = data[0];
- rp->framesize = opus_packet_get_samples_per_frame(data, 8000);
- } else if ((rp->toc&0xFC) != (data[0]&0xFC))
- {
- /*fprintf(stderr, "toc mismatch: 0x%x vs 0x%x\n", rp->toc, data[0]);*/
- return OPUS_INVALID_PACKET;
- }
- curr_nb_frames = opus_packet_get_nb_frames(data, len);
- if(curr_nb_frames<1) return OPUS_INVALID_PACKET;
-
- /* Check the 120 ms maximum packet size */
- if ((curr_nb_frames+rp->nb_frames)*rp->framesize > 960)
- {
- return OPUS_INVALID_PACKET;
- }
-
- ret=opus_packet_parse_impl(data, len, self_delimited, &tmp_toc, &rp->frames[rp->nb_frames], &rp->len[rp->nb_frames], NULL, NULL);
- if(ret<1)return ret;
-
- rp->nb_frames += curr_nb_frames;
- return OPUS_OK;
-}
-
-int opus_repacketizer_cat(OpusRepacketizer *rp, const unsigned char *data, opus_int32 len)
-{
- return opus_repacketizer_cat_impl(rp, data, len, 0);
-}
-
-int opus_repacketizer_get_nb_frames(OpusRepacketizer *rp)
-{
- return rp->nb_frames;
-}
-
-opus_int32 opus_repacketizer_out_range_impl(OpusRepacketizer *rp, int begin, int end,
- unsigned char *data, opus_int32 maxlen, int self_delimited, int pad)
-{
- int i, count;
- opus_int32 tot_size;
- opus_int16 *len;
- const unsigned char **frames;
- unsigned char * ptr;
-
- if (begin<0 || begin>=end || end>rp->nb_frames)
- {
- /*fprintf(stderr, "%d %d %d\n", begin, end, rp->nb_frames);*/
- return OPUS_BAD_ARG;
- }
- count = end-begin;
-
- len = rp->len+begin;
- frames = rp->frames+begin;
- if (self_delimited)
- tot_size = 1 + (len[count-1]>=252);
- else
- tot_size = 0;
-
- ptr = data;
- if (count==1)
- {
- /* Code 0 */
- tot_size += len[0]+1;
- if (tot_size > maxlen)
- return OPUS_BUFFER_TOO_SMALL;
- *ptr++ = rp->toc&0xFC;
- } else if (count==2)
- {
- if (len[1] == len[0])
- {
- /* Code 1 */
- tot_size += 2*len[0]+1;
- if (tot_size > maxlen)
- return OPUS_BUFFER_TOO_SMALL;
- *ptr++ = (rp->toc&0xFC) | 0x1;
- } else {
- /* Code 2 */
- tot_size += len[0]+len[1]+2+(len[0]>=252);
- if (tot_size > maxlen)
- return OPUS_BUFFER_TOO_SMALL;
- *ptr++ = (rp->toc&0xFC) | 0x2;
- ptr += encode_size(len[0], ptr);
- }
- }
- if (count > 2 || (pad && tot_size < maxlen))
- {
- /* Code 3 */
- int vbr;
- int pad_amount=0;
-
- /* Restart the process for the padding case */
- ptr = data;
- if (self_delimited)
- tot_size = 1 + (len[count-1]>=252);
- else
- tot_size = 0;
- vbr = 0;
- for (i=1;i<count;i++)
- {
- if (len[i] != len[0])
- {
- vbr=1;
- break;
- }
- }
- if (vbr)
- {
- tot_size += 2;
- for (i=0;i<count-1;i++)
- tot_size += 1 + (len[i]>=252) + len[i];
- tot_size += len[count-1];
-
- if (tot_size > maxlen)
- return OPUS_BUFFER_TOO_SMALL;
- *ptr++ = (rp->toc&0xFC) | 0x3;
- *ptr++ = count | 0x80;
- } else {
- tot_size += count*len[0]+2;
- if (tot_size > maxlen)
- return OPUS_BUFFER_TOO_SMALL;
- *ptr++ = (rp->toc&0xFC) | 0x3;
- *ptr++ = count;
- }
- pad_amount = pad ? (maxlen-tot_size) : 0;
- if (pad_amount != 0)
- {
- int nb_255s;
- data[1] |= 0x40;
- nb_255s = (pad_amount-1)/255;
- for (i=0;i<nb_255s;i++)
- *ptr++ = 255;
- *ptr++ = pad_amount-255*nb_255s-1;
- tot_size += pad_amount;
- }
- if (vbr)
- {
- for (i=0;i<count-1;i++)
- ptr += encode_size(len[i], ptr);
- }
- }
- if (self_delimited) {
- int sdlen = encode_size(len[count-1], ptr);
- ptr += sdlen;
- }
- /* Copy the actual data */
- for (i=0;i<count;i++)
- {
- /* Using OPUS_MOVE() instead of OPUS_COPY() in case we're doing in-place
- padding from opus_packet_pad or opus_packet_unpad(). */
- celt_assert(frames[i] + len[i] <= data || ptr <= frames[i]);
- OPUS_MOVE(ptr, frames[i], len[i]);
- ptr += len[i];
- }
- if (pad)
- {
- /* Fill padding with zeros. */
- while (ptr<data+maxlen)
- *ptr++=0;
- }
- return tot_size;
-}
-
-opus_int32 opus_repacketizer_out_range(OpusRepacketizer *rp, int begin, int end, unsigned char *data, opus_int32 maxlen)
-{
- return opus_repacketizer_out_range_impl(rp, begin, end, data, maxlen, 0, 0);
-}
-
-opus_int32 opus_repacketizer_out(OpusRepacketizer *rp, unsigned char *data, opus_int32 maxlen)
-{
- return opus_repacketizer_out_range_impl(rp, 0, rp->nb_frames, data, maxlen, 0, 0);
-}
-
-int opus_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len)
-{
- OpusRepacketizer rp;
- opus_int32 ret;
- if (len < 1)
- return OPUS_BAD_ARG;
- if (len==new_len)
- return OPUS_OK;
- else if (len > new_len)
- return OPUS_BAD_ARG;
- opus_repacketizer_init(&rp);
- /* Moving payload to the end of the packet so we can do in-place padding */
- OPUS_MOVE(data+new_len-len, data, len);
- opus_repacketizer_cat(&rp, data+new_len-len, len);
- ret = opus_repacketizer_out_range_impl(&rp, 0, rp.nb_frames, data, new_len, 0, 1);
- if (ret > 0)
- return OPUS_OK;
- else
- return ret;
-}
-
-opus_int32 opus_packet_unpad(unsigned char *data, opus_int32 len)
-{
- OpusRepacketizer rp;
- opus_int32 ret;
- if (len < 1)
- return OPUS_BAD_ARG;
- opus_repacketizer_init(&rp);
- ret = opus_repacketizer_cat(&rp, data, len);
- if (ret < 0)
- return ret;
- ret = opus_repacketizer_out_range_impl(&rp, 0, rp.nb_frames, data, len, 0, 0);
- celt_assert(ret > 0 && ret <= len);
- return ret;
-}
-
-int opus_multistream_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len, int nb_streams)
-{
- int s;
- int count;
- unsigned char toc;
- opus_int16 size[48];
- opus_int32 packet_offset;
- opus_int32 amount;
-
- if (len < 1)
- return OPUS_BAD_ARG;
- if (len==new_len)
- return OPUS_OK;
- else if (len > new_len)
- return OPUS_BAD_ARG;
- amount = new_len - len;
- /* Seek to last stream */
- for (s=0;s<nb_streams-1;s++)
- {
- if (len<=0)
- return OPUS_INVALID_PACKET;
- count = opus_packet_parse_impl(data, len, 1, &toc, NULL,
- size, NULL, &packet_offset);
- if (count<0)
- return count;
- data += packet_offset;
- len -= packet_offset;
- }
- return opus_packet_pad(data, len, len+amount);
-}
-
-opus_int32 opus_multistream_packet_unpad(unsigned char *data, opus_int32 len, int nb_streams)
-{
- int s;
- unsigned char toc;
- opus_int16 size[48];
- opus_int32 packet_offset;
- OpusRepacketizer rp;
- unsigned char *dst;
- opus_int32 dst_len;
-
- if (len < 1)
- return OPUS_BAD_ARG;
- dst = data;
- dst_len = 0;
- /* Unpad all frames */
- for (s=0;s<nb_streams;s++)
- {
- opus_int32 ret;
- int self_delimited = s!=nb_streams-1;
- if (len<=0)
- return OPUS_INVALID_PACKET;
- opus_repacketizer_init(&rp);
- ret = opus_packet_parse_impl(data, len, self_delimited, &toc, NULL,
- size, NULL, &packet_offset);
- if (ret<0)
- return ret;
- ret = opus_repacketizer_cat_impl(&rp, data, packet_offset, self_delimited);
- if (ret < 0)
- return ret;
- ret = opus_repacketizer_out_range_impl(&rp, 0, rp.nb_frames, dst, len, self_delimited, 0);
- if (ret < 0)
- return ret;
- else
- dst_len += ret;
- dst += ret;
- data += packet_offset;
- len -= packet_offset;
- }
- return dst_len;
-}
-
diff --git a/drivers/opus/repacketizer_demo.c b/drivers/opus/repacketizer_demo.c
deleted file mode 100644
index 57acf6a53f..0000000000
--- a/drivers/opus/repacketizer_demo.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/* Copyright (c) 2011 Xiph.Org Foundation
- Written by Jean-Marc Valin */
-/*
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/opus.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define MAX_PACKETOUT 32000
-
-void usage(char *argv0)
-{
- fprintf(stderr, "usage: %s [options] input_file output_file\n", argv0);
-}
-
-static void int_to_char(opus_uint32 i, unsigned char ch[4])
-{
- ch[0] = i>>24;
- ch[1] = (i>>16)&0xFF;
- ch[2] = (i>>8)&0xFF;
- ch[3] = i&0xFF;
-}
-
-static opus_uint32 char_to_int(unsigned char ch[4])
-{
- return ((opus_uint32)ch[0]<<24) | ((opus_uint32)ch[1]<<16)
- | ((opus_uint32)ch[2]<< 8) | (opus_uint32)ch[3];
-}
-
-int main(int argc, char *argv[])
-{
- int i, eof=0;
- FILE *fin, *fout;
- unsigned char packets[48][1500];
- int len[48];
- int rng[48];
- OpusRepacketizer *rp;
- unsigned char output_packet[MAX_PACKETOUT];
- int merge = 1, split=0;
-
- if (argc < 3)
- {
- usage(argv[0]);
- return EXIT_FAILURE;
- }
- for (i=1;i<argc-2;i++)
- {
- if (strcmp(argv[i], "-merge")==0)
- {
- merge = atoi(argv[i+1]);
- if(merge<1)
- {
- fprintf(stderr, "-merge parameter must be at least 1.\n");
- return EXIT_FAILURE;
- }
- if(merge>48)
- {
- fprintf(stderr, "-merge parameter must be less than 48.\n");
- return EXIT_FAILURE;
- }
- i++;
- } else if (strcmp(argv[i], "-split")==0)
- split = 1;
- else
- {
- fprintf(stderr, "Unknown option: %s\n", argv[i]);
- usage(argv[0]);
- return EXIT_FAILURE;
- }
- }
- fin = fopen(argv[argc-2], "r");
- if(fin==NULL)
- {
- fprintf(stderr, "Error opening input file: %s\n", argv[argc-2]);
- return EXIT_FAILURE;
- }
- fout = fopen(argv[argc-1], "w");
- if(fout==NULL)
- {
- fprintf(stderr, "Error opening output file: %s\n", argv[argc-1]);
- fclose(fin);
- return EXIT_FAILURE;
- }
-
- rp = opus_repacketizer_create();
- while (!eof)
- {
- int err;
- int nb_packets=merge;
- opus_repacketizer_init(rp);
- for (i=0;i<nb_packets;i++)
- {
- unsigned char ch[4];
- err = fread(ch, 1, 4, fin);
- len[i] = char_to_int(ch);
- /*fprintf(stderr, "in len = %d\n", len[i]);*/
- if (len[i]>1500 || len[i]<0)
- {
- if (feof(fin))
- {
- eof = 1;
- } else {
- fprintf(stderr, "Invalid payload length\n");
- fclose(fin);
- fclose(fout);
- return EXIT_FAILURE;
- }
- break;
- }
- err = fread(ch, 1, 4, fin);
- rng[i] = char_to_int(ch);
- err = fread(packets[i], 1, len[i], fin);
- if (feof(fin))
- {
- eof = 1;
- break;
- }
- err = opus_repacketizer_cat(rp, packets[i], len[i]);
- if (err!=OPUS_OK)
- {
- fprintf(stderr, "opus_repacketizer_cat() failed: %s\n", opus_strerror(err));
- break;
- }
- }
- nb_packets = i;
-
- if (eof)
- break;
-
- if (!split)
- {
- err = opus_repacketizer_out(rp, output_packet, MAX_PACKETOUT);
- if (err>0) {
- unsigned char int_field[4];
- int_to_char(err, int_field);
- if(fwrite(int_field, 1, 4, fout)!=4){
- fprintf(stderr, "Error writing.\n");
- return EXIT_FAILURE;
- }
- int_to_char(rng[nb_packets-1], int_field);
- if (fwrite(int_field, 1, 4, fout)!=4) {
- fprintf(stderr, "Error writing.\n");
- return EXIT_FAILURE;
- }
- if (fwrite(output_packet, 1, err, fout)!=(unsigned)err) {
- fprintf(stderr, "Error writing.\n");
- return EXIT_FAILURE;
- }
- /*fprintf(stderr, "out len = %d\n", err);*/
- } else {
- fprintf(stderr, "opus_repacketizer_out() failed: %s\n", opus_strerror(err));
- }
- } else {
- int nb_frames = opus_repacketizer_get_nb_frames(rp);
- for (i=0;i<nb_frames;i++)
- {
- err = opus_repacketizer_out_range(rp, i, i+1, output_packet, MAX_PACKETOUT);
- if (err>0) {
- unsigned char int_field[4];
- int_to_char(err, int_field);
- if (fwrite(int_field, 1, 4, fout)!=4) {
- fprintf(stderr, "Error writing.\n");
- return EXIT_FAILURE;
- }
- if (i==nb_frames-1)
- int_to_char(rng[nb_packets-1], int_field);
- else
- int_to_char(0, int_field);
- if (fwrite(int_field, 1, 4, fout)!=4) {
- fprintf(stderr, "Error writing.\n");
- return EXIT_FAILURE;
- }
- if (fwrite(output_packet, 1, err, fout)!=(unsigned)err) {
- fprintf(stderr, "Error writing.\n");
- return EXIT_FAILURE;
- }
- /*fprintf(stderr, "out len = %d\n", err);*/
- } else {
- fprintf(stderr, "opus_repacketizer_out() failed: %s\n", opus_strerror(err));
- }
-
- }
- }
- }
-
- fclose(fin);
- fclose(fout);
- return EXIT_SUCCESS;
-}
diff --git a/drivers/opus/silk/A2NLSF.c b/drivers/opus/silk/A2NLSF.c
deleted file mode 100644
index 38dbefc3bf..0000000000
--- a/drivers/opus/silk/A2NLSF.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-/* 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 */
-/* functions are accurate inverses of each other */
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/tables.h"
-
-/* Number of binary divisions, when not in low complexity mode */
-#define BIN_DIV_STEPS_A2NLSF_FIX 3 /* must be no higher than 16 - log2( LSF_COS_TAB_SZ_FIX ) */
-#define MAX_ITERATIONS_A2NLSF_FIX 30
-
-/* Helper function for A2NLSF(..) */
-/* Transforms polynomials from cos(n*f) to cos(f)^n */
-static OPUS_INLINE void silk_A2NLSF_trans_poly(
- opus_int32 *p, /* I/O Polynomial */
- const opus_int dd /* I Polynomial order (= filter order / 2 ) */
-)
-{
- opus_int k, n;
-
- for( k = 2; k <= dd; k++ ) {
- for( n = dd; n > k; n-- ) {
- p[ n - 2 ] -= p[ n ];
- }
- p[ k - 2 ] -= silk_LSHIFT( p[ k ], 1 );
- }
-}
-/* Helper function for A2NLSF(..) */
-/* Polynomial evaluation */
-static OPUS_INLINE opus_int32 silk_A2NLSF_eval_poly( /* return the polynomial evaluation, in Q16 */
- opus_int32 *p, /* I Polynomial, Q16 */
- const opus_int32 x, /* I Evaluation point, Q12 */
- const opus_int dd /* I Order */
-)
-{
- opus_int n;
- opus_int32 x_Q16, y32;
-
- y32 = p[ dd ]; /* Q16 */
- x_Q16 = silk_LSHIFT( x, 4 );
-
- if ( opus_likely( 8 == dd ) )
- {
- y32 = silk_SMLAWW( p[ 7 ], y32, x_Q16 );
- y32 = silk_SMLAWW( p[ 6 ], y32, x_Q16 );
- y32 = silk_SMLAWW( p[ 5 ], y32, x_Q16 );
- y32 = silk_SMLAWW( p[ 4 ], y32, x_Q16 );
- y32 = silk_SMLAWW( p[ 3 ], y32, x_Q16 );
- y32 = silk_SMLAWW( p[ 2 ], y32, x_Q16 );
- y32 = silk_SMLAWW( p[ 1 ], y32, x_Q16 );
- y32 = silk_SMLAWW( p[ 0 ], y32, x_Q16 );
- }
- else
- {
- for( n = dd - 1; n >= 0; n-- ) {
- y32 = silk_SMLAWW( p[ n ], y32, x_Q16 ); /* Q16 */
- }
- }
- return y32;
-}
-
-static OPUS_INLINE void silk_A2NLSF_init(
- const opus_int32 *a_Q16,
- opus_int32 *P,
- opus_int32 *Q,
- const opus_int dd
-)
-{
- opus_int k;
-
- /* Convert filter coefs to even and odd polynomials */
- P[dd] = silk_LSHIFT( 1, 16 );
- Q[dd] = silk_LSHIFT( 1, 16 );
- for( k = 0; k < dd; k++ ) {
- P[ k ] = -a_Q16[ dd - k - 1 ] - a_Q16[ dd + k ]; /* Q16 */
- Q[ k ] = -a_Q16[ dd - k - 1 ] + a_Q16[ dd + k ]; /* Q16 */
- }
-
- /* 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 */
- silk_A2NLSF_trans_poly( P, dd );
- 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 silk_A2NLSF(
- opus_int16 *NLSF, /* O Normalized Line Spectral Frequencies in Q15 (0..2^15-1) [d] */
- opus_int32 *a_Q16, /* I/O Monic whitening filter coefficients in Q16 [d] */
- const opus_int d /* I Filter order (must be even) */
-)
-{
- opus_int i, k, m, dd, root_ix, ffrac;
- opus_int32 xlo, xhi, xmid;
- opus_int32 ylo, yhi, ymid, thr;
- opus_int32 nom, den;
- opus_int32 P[ SILK_MAX_ORDER_LPC / 2 + 1 ];
- opus_int32 Q[ SILK_MAX_ORDER_LPC / 2 + 1 ];
- opus_int32 *PQ[ 2 ];
- opus_int32 *p;
-
- /* Store pointers to array */
- PQ[ 0 ] = P;
- PQ[ 1 ] = Q;
-
- dd = silk_RSHIFT( d, 1 );
-
- silk_A2NLSF_init( a_Q16, P, Q, dd );
-
- /* Find roots, alternating between P and Q */
- p = P; /* Pointer to polynomial */
-
- xlo = silk_LSFCosTab_FIX_Q12[ 0 ]; /* Q12*/
- ylo = 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 = 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 */
- thr = 0;
- while( 1 ) {
- /* Evaluate polynomial */
- xhi = silk_LSFCosTab_FIX_Q12[ k ]; /* Q12 */
- yhi = silk_A2NLSF_eval_poly( p, xhi, dd );
-
- /* Detect zero crossing */
- if( ( ylo <= 0 && yhi >= thr ) || ( ylo >= 0 && yhi <= -thr ) ) {
- if( yhi == 0 ) {
- /* If the root lies exactly at the end of the current */
- /* interval, look for the next root in the next interval */
- thr = 1;
- } else {
- thr = 0;
- }
- /* Binary division */
- ffrac = -256;
- for( m = 0; m < BIN_DIV_STEPS_A2NLSF_FIX; m++ ) {
- /* Evaluate polynomial */
- xmid = silk_RSHIFT_ROUND( xlo + xhi, 1 );
- ymid = 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;
- ffrac = silk_ADD_RSHIFT( ffrac, 128, m );
- }
- }
-
- /* Interpolate */
- if( silk_abs( ylo ) < 65536 ) {
- /* Avoid dividing by zero */
- den = ylo - yhi;
- nom = silk_LSHIFT( ylo, 8 - BIN_DIV_STEPS_A2NLSF_FIX ) + silk_RSHIFT( den, 1 );
- if( den != 0 ) {
- ffrac += silk_DIV32( nom, den );
- }
- } else {
- /* No risk of dividing by zero because abs(ylo - yhi) >= abs(ylo) >= 65536 */
- ffrac += silk_DIV32( ylo, silk_RSHIFT( ylo - yhi, 8 - BIN_DIV_STEPS_A2NLSF_FIX ) );
- }
- NLSF[ root_ix ] = (opus_int16)silk_min_32( silk_LSHIFT( (opus_int32)k, 8 ) + ffrac, silk_int16_MAX );
-
- silk_assert( NLSF[ root_ix ] >= 0 );
-
- root_ix++; /* Next root */
- if( root_ix >= d ) {
- /* Found all roots */
- break;
- }
- /* Alternate pointer to polynomial */
- p = PQ[ root_ix & 1 ];
-
- /* Evaluate polynomial */
- xlo = silk_LSFCosTab_FIX_Q12[ k - 1 ]; /* Q12*/
- ylo = silk_LSHIFT( 1 - ( root_ix & 2 ), 12 );
- } else {
- /* Increment loop counter */
- k++;
- xlo = xhi;
- ylo = yhi;
- thr = 0;
-
- if( k > LSF_COS_TAB_SZ_FIX ) {
- i++;
- if( i > MAX_ITERATIONS_A2NLSF_FIX ) {
- /* Set NLSFs to white spectrum and exit */
- NLSF[ 0 ] = (opus_int16)silk_DIV32_16( 1 << 15, d + 1 );
- for( k = 1; k < d; k++ ) {
- NLSF[ k ] = (opus_int16)silk_SMULBB( k + 1, NLSF[ 0 ] );
- }
- return;
- }
-
- /* Error: Apply progressively more bandwidth expansion and run again */
- silk_bwexpander_32( a_Q16, d, 65536 - silk_SMULBB( 10 + i, i ) ); /* 10_Q16 = 0.00015*/
-
- silk_A2NLSF_init( a_Q16, P, Q, dd );
- p = P; /* Pointer to polynomial */
- xlo = silk_LSFCosTab_FIX_Q12[ 0 ]; /* Q12*/
- ylo = 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 = 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 */
- }
- }
- }
-}
diff --git a/drivers/opus/silk/API.h b/drivers/opus/silk/API.h
deleted file mode 100644
index ce868c0c99..0000000000
--- a/drivers/opus/silk/API.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_API_H
-#define SILK_API_H
-
-#include "opus/silk/control.h"
-#include "opus/silk/typedef.h"
-#include "opus/silk/errors.h"
-#include "opus/celt/entenc.h"
-#include "opus/celt/entdec.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define SILK_MAX_FRAMES_PER_PACKET 3
-
-/* Struct for TOC (Table of Contents) */
-typedef struct {
- opus_int VADFlag; /* Voice activity for packet */
- opus_int VADFlags[ SILK_MAX_FRAMES_PER_PACKET ]; /* Voice activity for each frame in packet */
- opus_int inbandFECFlag; /* Flag indicating if packet contains in-band FEC */
-} silk_TOC_struct;
-
-/****************************************/
-/* Encoder functions */
-/****************************************/
-
-/***********************************************/
-/* Get size in bytes of the Silk encoder state */
-/***********************************************/
-opus_int silk_Get_Encoder_Size( /* O Returns error code */
- opus_int *encSizeBytes /* O Number of bytes in SILK encoder state */
-);
-
-/*************************/
-/* Init or reset encoder */
-/*************************/
-opus_int silk_InitEncoder( /* O Returns error code */
- void *encState, /* I/O State */
- int arch, /* I Run-time architecture */
- silk_EncControlStruct *encStatus /* O Encoder Status */
-);
-
-/**************************/
-/* Encode frame with Silk */
-/**************************/
-/* Note: if prefillFlag is set, the input must contain 10 ms of audio, irrespective of what */
-/* encControl->payloadSize_ms is set to */
-opus_int silk_Encode( /* O Returns error code */
- void *encState, /* I/O State */
- silk_EncControlStruct *encControl, /* I Control status */
- const opus_int16 *samplesIn, /* I Speech sample input vector */
- opus_int nSamplesIn, /* I Number of samples in input vector */
- ec_enc *psRangeEnc, /* I/O Compressor data structure */
- opus_int32 *nBytesOut, /* I/O Number of bytes in payload (input: Max bytes) */
- const opus_int prefillFlag /* I Flag to indicate prefilling buffers no coding */
-);
-
-/****************************************/
-/* Decoder functions */
-/****************************************/
-
-/***********************************************/
-/* Get size in bytes of the Silk decoder state */
-/***********************************************/
-opus_int silk_Get_Decoder_Size( /* O Returns error code */
- opus_int *decSizeBytes /* O Number of bytes in SILK decoder state */
-);
-
-/*************************/
-/* Init or Reset decoder */
-/*************************/
-opus_int silk_InitDecoder( /* O Returns error code */
- void *decState /* I/O State */
-);
-
-/******************/
-/* Decode a frame */
-/******************/
-opus_int silk_Decode( /* O Returns error code */
- void* decState, /* I/O State */
- silk_DecControlStruct* decControl, /* I/O Control Structure */
- opus_int lostFlag, /* I 0: no loss, 1 loss, 2 decode fec */
- opus_int newPacketFlag, /* I Indicates first decoder call for this packet */
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int16 *samplesOut, /* O Decoded output speech vector */
- opus_int32 *nSamplesOut, /* O Number of samples decoded */
- int arch /* I Run-time architecture */
-);
-
-#if 0
-/**************************************/
-/* Get table of contents for a packet */
-/**************************************/
-opus_int silk_get_TOC(
- const opus_uint8 *payload, /* I Payload data */
- const opus_int nBytesIn, /* I Number of input bytes */
- const opus_int nFramesPerPayload, /* I Number of SILK frames per payload */
- silk_TOC_struct *Silk_TOC /* O Type of content */
-);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/drivers/opus/silk/CNG.c b/drivers/opus/silk/CNG.c
deleted file mode 100644
index 595a288865..0000000000
--- a/drivers/opus/silk/CNG.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-
-/* Generates excitation for CNG LPC synthesis */
-static OPUS_INLINE void silk_CNG_exc(
- opus_int32 exc_Q10[], /* O CNG excitation signal Q10 */
- opus_int32 exc_buf_Q14[], /* I Random samples buffer Q10 */
- opus_int32 Gain_Q16, /* I Gain to apply */
- opus_int length, /* I Length */
- opus_int32 *rand_seed /* I/O Seed to random index generator */
-)
-{
- opus_int32 seed;
- opus_int i, idx, exc_mask;
-
- exc_mask = CNG_BUF_MASK_MAX;
- while( exc_mask > length ) {
- exc_mask = silk_RSHIFT( exc_mask, 1 );
- }
-
- seed = *rand_seed;
- for( i = 0; i < length; i++ ) {
- seed = silk_RAND( seed );
- idx = (opus_int)( silk_RSHIFT( seed, 24 ) & exc_mask );
- silk_assert( idx >= 0 );
- silk_assert( idx <= CNG_BUF_MASK_MAX );
- exc_Q10[ i ] = (opus_int16)silk_SAT16( silk_SMULWW( exc_buf_Q14[ idx ], Gain_Q16 >> 4 ) );
- }
- *rand_seed = seed;
-}
-
-void silk_CNG_Reset(
- silk_decoder_state *psDec /* I/O Decoder state */
-)
-{
- opus_int i, NLSF_step_Q15, NLSF_acc_Q15;
-
- NLSF_step_Q15 = silk_DIV32_16( silk_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 silk_CNG(
- silk_decoder_state *psDec, /* I/O Decoder state */
- silk_decoder_control *psDecCtrl, /* I/O Decoder control */
- opus_int16 frame[], /* I/O Signal */
- opus_int length /* I Length of residual */
-)
-{
- opus_int i, subfr;
- opus_int32 sum_Q6, max_Gain_Q16, gain_Q16;
- opus_int16 A_Q12[ MAX_LPC_ORDER ];
- silk_CNG_struct *psCNG = &psDec->sCNG;
- SAVE_STACK;
-
- if( psDec->fs_kHz != psCNG->fs_kHz ) {
- /* Reset state */
- silk_CNG_Reset( psDec );
-
- psCNG->fs_kHz = psDec->fs_kHz;
- }
- if( psDec->lossCnt == 0 && psDec->prevSignalType == TYPE_NO_VOICE_ACTIVITY ) {
- /* Update CNG parameters */
-
- /* Smoothing of LSF's */
- for( i = 0; i < psDec->LPC_order; i++ ) {
- psCNG->CNG_smth_NLSF_Q15[ i ] += silk_SMULWB( (opus_int32)psDec->prevNLSF_Q15[ i ] - (opus_int32)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 < psDec->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 */
- silk_memmove( &psCNG->CNG_exc_buf_Q14[ psDec->subfr_length ], psCNG->CNG_exc_buf_Q14, ( psDec->nb_subfr - 1 ) * psDec->subfr_length * sizeof( opus_int32 ) );
- silk_memcpy( psCNG->CNG_exc_buf_Q14, &psDec->exc_Q14[ subfr * psDec->subfr_length ], psDec->subfr_length * sizeof( opus_int32 ) );
-
- /* Smooth gains */
- for( i = 0; i < psDec->nb_subfr; i++ ) {
- psCNG->CNG_smth_Gain_Q16 += silk_SMULWB( psDecCtrl->Gains_Q16[ i ] - psCNG->CNG_smth_Gain_Q16, CNG_GAIN_SMTH_Q16 );
- }
- }
-
- /* Add CNG when packet is lost or during DTX */
- if( psDec->lossCnt ) {
- VARDECL( opus_int32, CNG_sig_Q10 );
- ALLOC( CNG_sig_Q10, length + MAX_LPC_ORDER, opus_int32 );
-
- /* Generate CNG excitation */
- gain_Q16 = silk_SMULWW( psDec->sPLC.randScale_Q14, psDec->sPLC.prevGain_Q16[1] );
- if( gain_Q16 >= (1 << 21) || psCNG->CNG_smth_Gain_Q16 > (1 << 23) ) {
- gain_Q16 = silk_SMULTT( gain_Q16, gain_Q16 );
- gain_Q16 = silk_SUB_LSHIFT32(silk_SMULTT( psCNG->CNG_smth_Gain_Q16, psCNG->CNG_smth_Gain_Q16 ), gain_Q16, 5 );
- gain_Q16 = silk_LSHIFT32( silk_SQRT_APPROX( gain_Q16 ), 16 );
- } else {
- gain_Q16 = silk_SMULWW( gain_Q16, gain_Q16 );
- gain_Q16 = silk_SUB_LSHIFT32(silk_SMULWW( psCNG->CNG_smth_Gain_Q16, psCNG->CNG_smth_Gain_Q16 ), gain_Q16, 5 );
- gain_Q16 = silk_LSHIFT32( silk_SQRT_APPROX( gain_Q16 ), 8 );
- }
- silk_CNG_exc( CNG_sig_Q10 + MAX_LPC_ORDER, psCNG->CNG_exc_buf_Q14, gain_Q16, length, &psCNG->rand_seed );
-
- /* Convert CNG NLSF to filter representation */
- silk_NLSF2A( A_Q12, psCNG->CNG_smth_NLSF_Q15, psDec->LPC_order );
-
- /* Generate CNG signal, by synthesis filtering */
- silk_memcpy( CNG_sig_Q10, psCNG->CNG_synth_state, MAX_LPC_ORDER * sizeof( opus_int32 ) );
- for( i = 0; i < length; i++ ) {
- silk_assert( psDec->LPC_order == 10 || psDec->LPC_order == 16 );
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- sum_Q6 = silk_RSHIFT( psDec->LPC_order, 1 );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 1 ], A_Q12[ 0 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 2 ], A_Q12[ 1 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 3 ], A_Q12[ 2 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 4 ], A_Q12[ 3 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 5 ], A_Q12[ 4 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 6 ], A_Q12[ 5 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 7 ], A_Q12[ 6 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 8 ], A_Q12[ 7 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 9 ], A_Q12[ 8 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 10 ], A_Q12[ 9 ] );
- if( psDec->LPC_order == 16 ) {
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 11 ], A_Q12[ 10 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 12 ], A_Q12[ 11 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 13 ], A_Q12[ 12 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 14 ], A_Q12[ 13 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 15 ], A_Q12[ 14 ] );
- sum_Q6 = silk_SMLAWB( sum_Q6, CNG_sig_Q10[ MAX_LPC_ORDER + i - 16 ], A_Q12[ 15 ] );
- }
-
- /* Update states */
- CNG_sig_Q10[ MAX_LPC_ORDER + i ] = silk_ADD_LSHIFT( CNG_sig_Q10[ MAX_LPC_ORDER + i ], sum_Q6, 4 );
-
- frame[ i ] = silk_ADD_SAT16( frame[ i ], silk_RSHIFT_ROUND( CNG_sig_Q10[ MAX_LPC_ORDER + i ], 10 ) );
- }
- silk_memcpy( psCNG->CNG_synth_state, &CNG_sig_Q10[ length ], MAX_LPC_ORDER * sizeof( opus_int32 ) );
- } else {
- silk_memset( psCNG->CNG_synth_state, 0, psDec->LPC_order * sizeof( opus_int32 ) );
- }
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/HP_variable_cutoff.c b/drivers/opus/silk/HP_variable_cutoff.c
deleted file mode 100644
index 6b93fdb5a3..0000000000
--- a/drivers/opus/silk/HP_variable_cutoff.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-#ifdef OPUS_FIXED_POINT
-#include "opus/silk/fixed/main_FIX.h"
-#else
-#include "opus/silk/float/main_FLP.h"
-#endif
-#include "opus/silk/tuning_parameters.h"
-
-/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
-void silk_HP_variable_cutoff(
- silk_encoder_state_Fxx state_Fxx[] /* I/O Encoder states */
-)
-{
- opus_int quality_Q15;
- opus_int32 pitch_freq_Hz_Q16, pitch_freq_log_Q7, delta_freq_Q7;
- silk_encoder_state *psEncC1 = &state_Fxx[ 0 ].sCmn;
-
- /* Adaptive cutoff frequency: estimate low end of pitch frequency range */
- if( psEncC1->prevSignalType == TYPE_VOICED ) {
- /* difference, in log domain */
- pitch_freq_Hz_Q16 = silk_DIV32_16( silk_LSHIFT( silk_MUL( psEncC1->fs_kHz, 1000 ), 16 ), psEncC1->prevLag );
- pitch_freq_log_Q7 = silk_lin2log( pitch_freq_Hz_Q16 ) - ( 16 << 7 );
-
- /* adjustment based on quality */
- quality_Q15 = psEncC1->input_quality_bands_Q15[ 0 ];
- pitch_freq_log_Q7 = silk_SMLAWB( pitch_freq_log_Q7, silk_SMULWB( silk_LSHIFT( -quality_Q15, 2 ), quality_Q15 ),
- pitch_freq_log_Q7 - ( silk_lin2log( SILK_FIX_CONST( VARIABLE_HP_MIN_CUTOFF_HZ, 16 ) ) - ( 16 << 7 ) ) );
-
- /* delta_freq = pitch_freq_log - psEnc->variable_HP_smth1; */
- delta_freq_Q7 = pitch_freq_log_Q7 - silk_RSHIFT( psEncC1->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 = silk_MUL( delta_freq_Q7, 3 );
- }
-
- /* limit delta, to reduce impact of outliers in pitch estimation */
- delta_freq_Q7 = silk_LIMIT_32( delta_freq_Q7, -SILK_FIX_CONST( VARIABLE_HP_MAX_DELTA_FREQ, 7 ), SILK_FIX_CONST( VARIABLE_HP_MAX_DELTA_FREQ, 7 ) );
-
- /* update smoother */
- psEncC1->variable_HP_smth1_Q15 = silk_SMLAWB( psEncC1->variable_HP_smth1_Q15,
- silk_SMULBB( psEncC1->speech_activity_Q8, delta_freq_Q7 ), SILK_FIX_CONST( VARIABLE_HP_SMTH_COEF1, 16 ) );
-
- /* limit frequency range */
- psEncC1->variable_HP_smth1_Q15 = silk_LIMIT_32( psEncC1->variable_HP_smth1_Q15,
- silk_LSHIFT( silk_lin2log( VARIABLE_HP_MIN_CUTOFF_HZ ), 8 ),
- silk_LSHIFT( silk_lin2log( VARIABLE_HP_MAX_CUTOFF_HZ ), 8 ) );
- }
-}
diff --git a/drivers/opus/silk/Inlines.h b/drivers/opus/silk/Inlines.h
deleted file mode 100644
index ec986cdfdd..0000000000
--- a/drivers/opus/silk/Inlines.h
+++ /dev/null
@@ -1,188 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-/*! \file silk_Inlines.h
- * \brief silk_Inlines.h defines OPUS_INLINE signal processing functions.
- */
-
-#ifndef SILK_FIX_INLINES_H
-#define SILK_FIX_INLINES_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* count leading zeros of opus_int64 */
-static OPUS_INLINE opus_int32 silk_CLZ64( opus_int64 in )
-{
- opus_int32 in_upper;
-
- in_upper = (opus_int32)silk_RSHIFT64(in, 32);
- if (in_upper == 0) {
- /* Search in the lower 32 bits */
- return 32 + silk_CLZ32( (opus_int32) in );
- } else {
- /* Search in the upper 32 bits */
- return silk_CLZ32( in_upper );
- }
-}
-
-/* get number of leading zeros and fractional part (the bits right after the leading one */
-static OPUS_INLINE void silk_CLZ_FRAC(
- opus_int32 in, /* I input */
- opus_int32 *lz, /* O number of leading zeros */
- opus_int32 *frac_Q7 /* O the 7 bits right after the leading one */
-)
-{
- opus_int32 lzeros = silk_CLZ32(in);
-
- * lz = lzeros;
- * frac_Q7 = silk_ROR32(in, 24 - lzeros) & 0x7f;
-}
-
-/* Approximation of square root */
-/* Accuracy: < +/- 10% for output values > 15 */
-/* < +/- 2.5% for output values > 120 */
-static OPUS_INLINE opus_int32 silk_SQRT_APPROX( opus_int32 x )
-{
- opus_int32 y, lz, frac_Q7;
-
- if( x <= 0 ) {
- return 0;
- }
-
- silk_CLZ_FRAC(x, &lz, &frac_Q7);
-
- if( lz & 1 ) {
- y = 32768;
- } else {
- y = 46214; /* 46214 = sqrt(2) * 32768 */
- }
-
- /* get scaling right */
- y >>= silk_RSHIFT(lz, 1);
-
- /* increment using fractional part of input */
- y = silk_SMLAWB(y, y, silk_SMULBB(213, frac_Q7));
-
- return y;
-}
-
-/* Divide two int32 values and return result as int32 in a given Q-domain */
-static OPUS_INLINE opus_int32 silk_DIV32_varQ( /* O returns a good approximation of "(a32 << Qres) / b32" */
- const opus_int32 a32, /* I numerator (Q0) */
- const opus_int32 b32, /* I denominator (Q0) */
- const opus_int Qres /* I Q-domain of result (>= 0) */
-)
-{
- opus_int a_headrm, b_headrm, lshift;
- opus_int32 b32_inv, a32_nrm, b32_nrm, result;
-
- silk_assert( b32 != 0 );
- silk_assert( Qres >= 0 );
-
- /* Compute number of bits head room and normalize inputs */
- a_headrm = silk_CLZ32( silk_abs(a32) ) - 1;
- a32_nrm = silk_LSHIFT(a32, a_headrm); /* Q: a_headrm */
- b_headrm = silk_CLZ32( silk_abs(b32) ) - 1;
- b32_nrm = silk_LSHIFT(b32, b_headrm); /* Q: b_headrm */
-
- /* Inverse of b32, with 14 bits of precision */
- b32_inv = silk_DIV32_16( silk_int32_MAX >> 2, silk_RSHIFT(b32_nrm, 16) ); /* Q: 29 + 16 - b_headrm */
-
- /* First approximation */
- result = silk_SMULWB(a32_nrm, b32_inv); /* Q: 29 + a_headrm - b_headrm */
-
- /* Compute residual by subtracting product of denominator and first approximation */
- /* It's OK to overflow because the final value of a32_nrm should always be small */
- a32_nrm = silk_SUB32_ovflw(a32_nrm, silk_LSHIFT_ovflw( silk_SMMUL(b32_nrm, result), 3 )); /* Q: a_headrm */
-
- /* Refinement */
- result = silk_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 silk_LSHIFT_SAT32(result, -lshift);
- } else {
- if( lshift < 32){
- return silk_RSHIFT(result, lshift);
- } else {
- /* Avoid undefined result */
- return 0;
- }
- }
-}
-
-/* Invert int32 value and return result as int32 in a given Q-domain */
-static OPUS_INLINE opus_int32 silk_INVERSE32_varQ( /* O returns a good approximation of "(1 << Qres) / b32" */
- const opus_int32 b32, /* I denominator (Q0) */
- const opus_int Qres /* I Q-domain of result (> 0) */
-)
-{
- opus_int b_headrm, lshift;
- opus_int32 b32_inv, b32_nrm, err_Q32, result;
-
- silk_assert( b32 != 0 );
- silk_assert( Qres > 0 );
-
- /* Compute number of bits head room and normalize input */
- b_headrm = silk_CLZ32( silk_abs(b32) ) - 1;
- b32_nrm = silk_LSHIFT(b32, b_headrm); /* Q: b_headrm */
-
- /* Inverse of b32, with 14 bits of precision */
- b32_inv = silk_DIV32_16( silk_int32_MAX >> 2, silk_RSHIFT(b32_nrm, 16) ); /* Q: 29 + 16 - b_headrm */
-
- /* First approximation */
- result = silk_LSHIFT(b32_inv, 16); /* Q: 61 - b_headrm */
-
- /* Compute residual by subtracting product of denominator and first approximation from one */
- err_Q32 = silk_LSHIFT( ((opus_int32)1<<29) - silk_SMULWB(b32_nrm, b32_inv), 3 ); /* Q32 */
-
- /* Refinement */
- result = silk_SMLAWW(result, err_Q32, b32_inv); /* Q: 61 - b_headrm */
-
- /* Convert to Qres domain */
- lshift = 61 - b_headrm - Qres;
- if( lshift <= 0 ) {
- return silk_LSHIFT_SAT32(result, -lshift);
- } else {
- if( lshift < 32){
- return silk_RSHIFT(result, lshift);
- }else{
- /* Avoid undefined result */
- return 0;
- }
- }
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SILK_FIX_INLINES_H */
diff --git a/drivers/opus/silk/LPC_analysis_filter.c b/drivers/opus/silk/LPC_analysis_filter.c
deleted file mode 100644
index f3c34b5482..0000000000
--- a/drivers/opus/silk/LPC_analysis_filter.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/celt/celt_lpc.h"
-
-/*******************************************/
-/* LPC analysis filter */
-/* NB! State is kept internally and the */
-/* filter always starts with zero state */
-/* first d output samples are set to zero */
-/*******************************************/
-
-void silk_LPC_analysis_filter(
- opus_int16 *out, /* O Output signal */
- const opus_int16 *in, /* I Input signal */
- const opus_int16 *B, /* I MA prediction coefficients, Q12 [order] */
- const opus_int32 len, /* I Signal length */
- const opus_int32 d, /* I Filter order */
- int arch /* I Run-time architecture */
-)
-{
- opus_int j;
-#ifdef OPUS_FIXED_POINT
- opus_int16 mem[SILK_MAX_ORDER_LPC];
- opus_int16 num[SILK_MAX_ORDER_LPC];
-#else
- int ix;
- opus_int32 out32_Q12, out32;
- const opus_int16 *in_ptr;
-#endif
-
- silk_assert( d >= 6 );
- silk_assert( (d & 1) == 0 );
- silk_assert( d <= len );
-
-#ifdef OPUS_FIXED_POINT
- silk_assert( d <= SILK_MAX_ORDER_LPC );
- for ( j = 0; j < d; j++ ) {
- num[ j ] = -B[ j ];
- }
- for (j=0;j<d;j++) {
- mem[ j ] = in[ d - j - 1 ];
- }
- celt_fir( in + d, num, out + d, len - d, d, mem, arch );
- for ( j = 0; j < d; j++ ) {
- out[ j ] = 0;
- }
-#else
- (void)arch;
- for( ix = d; ix < len; ix++ ) {
- in_ptr = &in[ ix - 1 ];
-
- out32_Q12 = silk_SMULBB( in_ptr[ 0 ], B[ 0 ] );
- /* Allowing wrap around so that two wraps can cancel each other. The rare
- cases where the result wraps around can only be triggered by invalid streams*/
- out32_Q12 = silk_SMLABB_ovflw( out32_Q12, in_ptr[ -1 ], B[ 1 ] );
- out32_Q12 = silk_SMLABB_ovflw( out32_Q12, in_ptr[ -2 ], B[ 2 ] );
- out32_Q12 = silk_SMLABB_ovflw( out32_Q12, in_ptr[ -3 ], B[ 3 ] );
- out32_Q12 = silk_SMLABB_ovflw( out32_Q12, in_ptr[ -4 ], B[ 4 ] );
- out32_Q12 = silk_SMLABB_ovflw( out32_Q12, in_ptr[ -5 ], B[ 5 ] );
- for( j = 6; j < d; j += 2 ) {
- out32_Q12 = silk_SMLABB_ovflw( out32_Q12, in_ptr[ -j ], B[ j ] );
- out32_Q12 = silk_SMLABB_ovflw( out32_Q12, in_ptr[ -j - 1 ], B[ j + 1 ] );
- }
-
- /* Subtract prediction */
- out32_Q12 = silk_SUB32_ovflw( silk_LSHIFT( (opus_int32)in_ptr[ 1 ], 12 ), out32_Q12 );
-
- /* Scale to Q0 */
- out32 = silk_RSHIFT_ROUND( out32_Q12, 12 );
-
- /* Saturate output */
- out[ ix ] = (opus_int16)silk_SAT16( out32 );
- }
-
- /* Set first d output samples to zero */
- silk_memset( out, 0, d * sizeof( opus_int16 ) );
-#endif
-}
diff --git a/drivers/opus/silk/LPC_inv_pred_gain.c b/drivers/opus/silk/LPC_inv_pred_gain.c
deleted file mode 100644
index 8ace51500c..0000000000
--- a/drivers/opus/silk/LPC_inv_pred_gain.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-#define QA 24
-#define A_LIMIT SILK_FIX_CONST( 0.99975, QA )
-
-#define MUL32_FRAC_Q(a32, b32, Q) ((opus_int32)(silk_RSHIFT_ROUND64(silk_SMULL(a32, b32), Q)))
-
-/* Compute inverse of LPC prediction gain, and */
-/* test if LPC coefficients are stable (all poles within unit circle) */
-static opus_int32 LPC_inverse_pred_gain_QA( /* O Returns inverse prediction gain in energy domain, Q30 */
- opus_int32 A_QA[ 2 ][ SILK_MAX_ORDER_LPC ], /* I Prediction coefficients */
- const opus_int order /* I Prediction order */
-)
-{
- opus_int k, n, mult2Q;
- opus_int32 invGain_Q30, rc_Q31, rc_mult1_Q30, rc_mult2, tmp_QA;
- opus_int32 *Aold_QA, *Anew_QA;
-
- Anew_QA = A_QA[ order & 1 ];
-
- invGain_Q30 = (opus_int32)1 << 30;
- for( k = order - 1; k > 0; k-- ) {
- /* Check for stability */
- if( ( Anew_QA[ k ] > A_LIMIT ) || ( Anew_QA[ k ] < -A_LIMIT ) ) {
- return 0;
- }
-
- /* Set RC equal to negated AR coef */
- rc_Q31 = -silk_LSHIFT( Anew_QA[ k ], 31 - QA );
-
- /* rc_mult1_Q30 range: [ 1 : 2^30 ] */
- rc_mult1_Q30 = ( (opus_int32)1 << 30 ) - silk_SMMUL( rc_Q31, rc_Q31 );
- silk_assert( rc_mult1_Q30 > ( 1 << 15 ) ); /* reduce A_LIMIT if fails */
- silk_assert( rc_mult1_Q30 <= ( 1 << 30 ) );
-
- /* rc_mult2 range: [ 2^30 : silk_int32_MAX ] */
- mult2Q = 32 - silk_CLZ32( silk_abs( rc_mult1_Q30 ) );
- rc_mult2 = silk_INVERSE32_varQ( rc_mult1_Q30, mult2Q + 30 );
-
- /* Update inverse gain */
- /* invGain_Q30 range: [ 0 : 2^30 ] */
- invGain_Q30 = silk_LSHIFT( silk_SMMUL( invGain_Q30, rc_mult1_Q30 ), 2 );
- silk_assert( invGain_Q30 >= 0 );
- silk_assert( invGain_Q30 <= ( 1 << 30 ) );
-
- /* Swap pointers */
- Aold_QA = Anew_QA;
- Anew_QA = A_QA[ k & 1 ];
-
- /* Update AR coefficient */
- for( n = 0; n < k; n++ ) {
- tmp_QA = Aold_QA[ n ] - MUL32_FRAC_Q( Aold_QA[ k - n - 1 ], rc_Q31, 31 );
- Anew_QA[ n ] = MUL32_FRAC_Q( tmp_QA, rc_mult2 , mult2Q );
- }
- }
-
- /* Check for stability */
- if( ( Anew_QA[ 0 ] > A_LIMIT ) || ( Anew_QA[ 0 ] < -A_LIMIT ) ) {
- return 0;
- }
-
- /* Set RC equal to negated AR coef */
- rc_Q31 = -silk_LSHIFT( Anew_QA[ 0 ], 31 - QA );
-
- /* Range: [ 1 : 2^30 ] */
- rc_mult1_Q30 = ( (opus_int32)1 << 30 ) - silk_SMMUL( rc_Q31, rc_Q31 );
-
- /* Update inverse gain */
- /* Range: [ 0 : 2^30 ] */
- invGain_Q30 = silk_LSHIFT( silk_SMMUL( invGain_Q30, rc_mult1_Q30 ), 2 );
- silk_assert( invGain_Q30 >= 0 );
- silk_assert( invGain_Q30 <= 1<<30 );
-
- return invGain_Q30;
-}
-
-/* For input in Q12 domain */
-opus_int32 silk_LPC_inverse_pred_gain( /* O Returns inverse prediction gain in energy domain, Q30 */
- const opus_int16 *A_Q12, /* I Prediction coefficients, Q12 [order] */
- const opus_int order /* I Prediction order */
-)
-{
- opus_int k;
- opus_int32 Atmp_QA[ 2 ][ SILK_MAX_ORDER_LPC ];
- opus_int32 *Anew_QA;
- opus_int32 DC_resp = 0;
-
- Anew_QA = Atmp_QA[ order & 1 ];
-
- /* Increase Q domain of the AR coefficients */
- for( k = 0; k < order; k++ ) {
- DC_resp += (opus_int32)A_Q12[ k ];
- Anew_QA[ k ] = silk_LSHIFT32( (opus_int32)A_Q12[ k ], QA - 12 );
- }
- /* If the DC is unstable, we don't even need to do the full calculations */
- if( DC_resp >= 4096 ) {
- return 0;
- }
- return LPC_inverse_pred_gain_QA( Atmp_QA, order );
-}
-
-#ifdef OPUS_FIXED_POINT
-
-/* For input in Q24 domain */
-opus_int32 silk_LPC_inverse_pred_gain_Q24( /* O Returns inverse prediction gain in energy domain, Q30 */
- const opus_int32 *A_Q24, /* I Prediction coefficients [order] */
- const opus_int order /* I Prediction order */
-)
-{
- opus_int k;
- opus_int32 Atmp_QA[ 2 ][ SILK_MAX_ORDER_LPC ];
- opus_int32 *Anew_QA;
-
- Anew_QA = Atmp_QA[ order & 1 ];
-
- /* Increase Q domain of the AR coefficients */
- for( k = 0; k < order; k++ ) {
- Anew_QA[ k ] = silk_RSHIFT32( A_Q24[ k ], 24 - QA );
- }
-
- return LPC_inverse_pred_gain_QA( Atmp_QA, order );
-}
-#endif
diff --git a/drivers/opus/silk/LP_variable_cutoff.c b/drivers/opus/silk/LP_variable_cutoff.c
deleted file mode 100644
index b39497c4d9..0000000000
--- a/drivers/opus/silk/LP_variable_cutoff.c
+++ /dev/null
@@ -1,132 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/*
- 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 "opus/silk/main.h"
-
-/* Helper function, interpolates the filter taps */
-static OPUS_INLINE void silk_LP_interpolate_filter_taps(
- opus_int32 B_Q28[ TRANSITION_NB ],
- opus_int32 A_Q28[ TRANSITION_NA ],
- const opus_int ind,
- const opus_int32 fac_Q16
-)
-{
- opus_int nb, na;
-
- if( ind < TRANSITION_INT_NUM - 1 ) {
- if( fac_Q16 > 0 ) {
- if( fac_Q16 < 32768 ) { /* 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 ] = silk_SMLAWB(
- silk_Transition_LP_B_Q28[ ind ][ nb ],
- silk_Transition_LP_B_Q28[ ind + 1 ][ nb ] -
- silk_Transition_LP_B_Q28[ ind ][ nb ],
- fac_Q16 );
- }
- for( na = 0; na < TRANSITION_NA; na++ ) {
- A_Q28[ na ] = silk_SMLAWB(
- silk_Transition_LP_A_Q28[ ind ][ na ],
- silk_Transition_LP_A_Q28[ ind + 1 ][ na ] -
- silk_Transition_LP_A_Q28[ ind ][ na ],
- fac_Q16 );
- }
- } else { /* ( fac_Q16 - ( 1 << 16 ) ) is in range of a 16-bit int */
- silk_assert( fac_Q16 - ( 1 << 16 ) == silk_SAT16( fac_Q16 - ( 1 << 16 ) ) );
- /* Piece-wise linear interpolation of B and A */
- for( nb = 0; nb < TRANSITION_NB; nb++ ) {
- B_Q28[ nb ] = silk_SMLAWB(
- silk_Transition_LP_B_Q28[ ind + 1 ][ nb ],
- silk_Transition_LP_B_Q28[ ind + 1 ][ nb ] -
- silk_Transition_LP_B_Q28[ ind ][ nb ],
- fac_Q16 - ( (opus_int32)1 << 16 ) );
- }
- for( na = 0; na < TRANSITION_NA; na++ ) {
- A_Q28[ na ] = silk_SMLAWB(
- silk_Transition_LP_A_Q28[ ind + 1 ][ na ],
- silk_Transition_LP_A_Q28[ ind + 1 ][ na ] -
- silk_Transition_LP_A_Q28[ ind ][ na ],
- fac_Q16 - ( (opus_int32)1 << 16 ) );
- }
- }
- } else {
- silk_memcpy( B_Q28, silk_Transition_LP_B_Q28[ ind ], TRANSITION_NB * sizeof( opus_int32 ) );
- silk_memcpy( A_Q28, silk_Transition_LP_A_Q28[ ind ], TRANSITION_NA * sizeof( opus_int32 ) );
- }
- } else {
- silk_memcpy( B_Q28, silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM - 1 ], TRANSITION_NB * sizeof( opus_int32 ) );
- silk_memcpy( A_Q28, silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM - 1 ], TRANSITION_NA * sizeof( opus_int32 ) );
- }
-}
-
-/* Low-pass filter with variable cutoff frequency based on */
-/* piece-wise linear interpolation between elliptic filters */
-/* Start by setting psEncC->mode <> 0; */
-/* Deactivate by setting psEncC->mode = 0; */
-void silk_LP_variable_cutoff(
- silk_LP_state *psLP, /* I/O LP filter state */
- opus_int16 *frame, /* I/O Low-pass filtered output signal */
- const opus_int frame_length /* I Frame length */
-)
-{
- opus_int32 B_Q28[ TRANSITION_NB ], A_Q28[ TRANSITION_NA ], fac_Q16 = 0;
- opus_int ind = 0;
-
- silk_assert( psLP->transition_frame_no >= 0 && psLP->transition_frame_no <= TRANSITION_FRAMES );
-
- /* Run filter if needed */
- if( psLP->mode != 0 ) {
- /* Calculate index and interpolation factor for interpolation */
-#if( TRANSITION_INT_STEPS == 64 )
- fac_Q16 = silk_LSHIFT( TRANSITION_FRAMES - psLP->transition_frame_no, 16 - 6 );
-#else
- fac_Q16 = silk_DIV32_16( silk_LSHIFT( TRANSITION_FRAMES - psLP->transition_frame_no, 16 ), TRANSITION_FRAMES );
-#endif
- ind = silk_RSHIFT( fac_Q16, 16 );
- fac_Q16 -= silk_LSHIFT( ind, 16 );
-
- silk_assert( ind >= 0 );
- silk_assert( ind < TRANSITION_INT_NUM );
-
- /* Interpolate filter coefficients */
- silk_LP_interpolate_filter_taps( B_Q28, A_Q28, ind, fac_Q16 );
-
- /* Update transition frame number for next frame */
- psLP->transition_frame_no = silk_LIMIT( psLP->transition_frame_no + psLP->mode, 0, TRANSITION_FRAMES );
-
- /* ARMA low-pass filtering */
- silk_assert( TRANSITION_NB == 3 && TRANSITION_NA == 2 );
- silk_biquad_alt( frame, B_Q28, A_Q28, psLP->In_LP_State, frame, frame_length, 1);
- }
-}
diff --git a/drivers/opus/silk/MacroCount.h b/drivers/opus/silk/MacroCount.h
deleted file mode 100644
index 834817d058..0000000000
--- a/drivers/opus/silk/MacroCount.h
+++ /dev/null
@@ -1,718 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SIGPROCFIX_API_MACROCOUNT_H
-#define SIGPROCFIX_API_MACROCOUNT_H
-#include <stdio.h>
-
-#ifdef silk_MACRO_COUNT
-#define varDefine opus_int64 ops_count = 0;
-
-extern opus_int64 ops_count;
-
-static OPUS_INLINE opus_int64 silk_SaveCount(){
- return(ops_count);
-}
-
-static OPUS_INLINE opus_int64 silk_SaveResetCount(){
- opus_int64 ret;
-
- ret = ops_count;
- ops_count = 0;
- return(ret);
-}
-
-static OPUS_INLINE silk_PrintCount(){
- printf("ops_count = %d \n ", (opus_int32)ops_count);
-}
-
-#undef silk_MUL
-static OPUS_INLINE opus_int32 silk_MUL(opus_int32 a32, opus_int32 b32){
- opus_int32 ret;
- ops_count += 4;
- ret = a32 * b32;
- return ret;
-}
-
-#undef silk_MUL_uint
-static OPUS_INLINE opus_uint32 silk_MUL_uint(opus_uint32 a32, opus_uint32 b32){
- opus_uint32 ret;
- ops_count += 4;
- ret = a32 * b32;
- return ret;
-}
-#undef silk_MLA
-static OPUS_INLINE opus_int32 silk_MLA(opus_int32 a32, opus_int32 b32, opus_int32 c32){
- opus_int32 ret;
- ops_count += 4;
- ret = a32 + b32 * c32;
- return ret;
-}
-
-#undef silk_MLA_uint
-static OPUS_INLINE opus_int32 silk_MLA_uint(opus_uint32 a32, opus_uint32 b32, opus_uint32 c32){
- opus_uint32 ret;
- ops_count += 4;
- ret = a32 + b32 * c32;
- return ret;
-}
-
-#undef silk_SMULWB
-static OPUS_INLINE opus_int32 silk_SMULWB(opus_int32 a32, opus_int32 b32){
- opus_int32 ret;
- ops_count += 5;
- ret = (a32 >> 16) * (opus_int32)((opus_int16)b32) + (((a32 & 0x0000FFFF) * (opus_int32)((opus_int16)b32)) >> 16);
- return ret;
-}
-#undef silk_SMLAWB
-static OPUS_INLINE opus_int32 silk_SMLAWB(opus_int32 a32, opus_int32 b32, opus_int32 c32){
- opus_int32 ret;
- ops_count += 5;
- ret = ((a32) + ((((b32) >> 16) * (opus_int32)((opus_int16)(c32))) + ((((b32) & 0x0000FFFF) * (opus_int32)((opus_int16)(c32))) >> 16)));
- return ret;
-}
-
-#undef silk_SMULWT
-static OPUS_INLINE opus_int32 silk_SMULWT(opus_int32 a32, opus_int32 b32){
- opus_int32 ret;
- ops_count += 4;
- ret = (a32 >> 16) * (b32 >> 16) + (((a32 & 0x0000FFFF) * (b32 >> 16)) >> 16);
- return ret;
-}
-#undef silk_SMLAWT
-static OPUS_INLINE opus_int32 silk_SMLAWT(opus_int32 a32, opus_int32 b32, opus_int32 c32){
- opus_int32 ret;
- ops_count += 4;
- ret = a32 + ((b32 >> 16) * (c32 >> 16)) + (((b32 & 0x0000FFFF) * ((c32 >> 16)) >> 16));
- return ret;
-}
-
-#undef silk_SMULBB
-static OPUS_INLINE opus_int32 silk_SMULBB(opus_int32 a32, opus_int32 b32){
- opus_int32 ret;
- ops_count += 1;
- ret = (opus_int32)((opus_int16)a32) * (opus_int32)((opus_int16)b32);
- return ret;
-}
-#undef silk_SMLABB
-static OPUS_INLINE opus_int32 silk_SMLABB(opus_int32 a32, opus_int32 b32, opus_int32 c32){
- opus_int32 ret;
- ops_count += 1;
- ret = a32 + (opus_int32)((opus_int16)b32) * (opus_int32)((opus_int16)c32);
- return ret;
-}
-
-#undef silk_SMULBT
-static OPUS_INLINE opus_int32 silk_SMULBT(opus_int32 a32, opus_int32 b32 ){
- opus_int32 ret;
- ops_count += 4;
- ret = ((opus_int32)((opus_int16)a32)) * (b32 >> 16);
- return ret;
-}
-
-#undef silk_SMLABT
-static OPUS_INLINE opus_int32 silk_SMLABT(opus_int32 a32, opus_int32 b32, opus_int32 c32){
- opus_int32 ret;
- ops_count += 1;
- ret = a32 + ((opus_int32)((opus_int16)b32)) * (c32 >> 16);
- return ret;
-}
-
-#undef silk_SMULTT
-static OPUS_INLINE opus_int32 silk_SMULTT(opus_int32 a32, opus_int32 b32){
- opus_int32 ret;
- ops_count += 1;
- ret = (a32 >> 16) * (b32 >> 16);
- return ret;
-}
-
-#undef silk_SMLATT
-static OPUS_INLINE opus_int32 silk_SMLATT(opus_int32 a32, opus_int32 b32, opus_int32 c32){
- opus_int32 ret;
- ops_count += 1;
- ret = a32 + (b32 >> 16) * (c32 >> 16);
- return ret;
-}
-
-
-/* multiply-accumulate macros that allow overflow in the addition (ie, no asserts in debug mode)*/
-#undef silk_MLA_ovflw
-#define silk_MLA_ovflw silk_MLA
-
-#undef silk_SMLABB_ovflw
-#define silk_SMLABB_ovflw silk_SMLABB
-
-#undef silk_SMLABT_ovflw
-#define silk_SMLABT_ovflw silk_SMLABT
-
-#undef silk_SMLATT_ovflw
-#define silk_SMLATT_ovflw silk_SMLATT
-
-#undef silk_SMLAWB_ovflw
-#define silk_SMLAWB_ovflw silk_SMLAWB
-
-#undef silk_SMLAWT_ovflw
-#define silk_SMLAWT_ovflw silk_SMLAWT
-
-#undef silk_SMULL
-static OPUS_INLINE opus_int64 silk_SMULL(opus_int32 a32, opus_int32 b32){
- opus_int64 ret;
- ops_count += 8;
- ret = ((opus_int64)(a32) * /*(opus_int64)*/(b32));
- return ret;
-}
-
-#undef silk_SMLAL
-static OPUS_INLINE opus_int64 silk_SMLAL(opus_int64 a64, opus_int32 b32, opus_int32 c32){
- opus_int64 ret;
- ops_count += 8;
- ret = a64 + ((opus_int64)(b32) * /*(opus_int64)*/(c32));
- return ret;
-}
-#undef silk_SMLALBB
-static OPUS_INLINE opus_int64 silk_SMLALBB(opus_int64 a64, opus_int16 b16, opus_int16 c16){
- opus_int64 ret;
- ops_count += 4;
- ret = a64 + ((opus_int64)(b16) * /*(opus_int64)*/(c16));
- return ret;
-}
-
-#undef SigProcFIX_CLZ16
-static OPUS_INLINE opus_int32 SigProcFIX_CLZ16(opus_int16 in16)
-{
- opus_int32 out32 = 0;
- ops_count += 10;
- 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;
- }
-}
-
-#undef SigProcFIX_CLZ32
-static OPUS_INLINE opus_int32 SigProcFIX_CLZ32(opus_int32 in32)
-{
- /* test highest 16 bits and convert to opus_int16 */
- ops_count += 2;
- if( in32 & 0xFFFF0000 ) {
- return SigProcFIX_CLZ16((opus_int16)(in32 >> 16));
- } else {
- return SigProcFIX_CLZ16((opus_int16)in32) + 16;
- }
-}
-
-#undef silk_DIV32
-static OPUS_INLINE opus_int32 silk_DIV32(opus_int32 a32, opus_int32 b32){
- ops_count += 64;
- return a32 / b32;
-}
-
-#undef silk_DIV32_16
-static OPUS_INLINE opus_int32 silk_DIV32_16(opus_int32 a32, opus_int32 b32){
- ops_count += 32;
- return a32 / b32;
-}
-
-#undef silk_SAT8
-static OPUS_INLINE opus_int8 silk_SAT8(opus_int64 a){
- opus_int8 tmp;
- ops_count += 1;
- tmp = (opus_int8)((a) > silk_int8_MAX ? silk_int8_MAX : \
- ((a) < silk_int8_MIN ? silk_int8_MIN : (a)));
- return(tmp);
-}
-
-#undef silk_SAT16
-static OPUS_INLINE opus_int16 silk_SAT16(opus_int64 a){
- opus_int16 tmp;
- ops_count += 1;
- tmp = (opus_int16)((a) > silk_int16_MAX ? silk_int16_MAX : \
- ((a) < silk_int16_MIN ? silk_int16_MIN : (a)));
- return(tmp);
-}
-#undef silk_SAT32
-static OPUS_INLINE opus_int32 silk_SAT32(opus_int64 a){
- opus_int32 tmp;
- ops_count += 1;
- tmp = (opus_int32)((a) > silk_int32_MAX ? silk_int32_MAX : \
- ((a) < silk_int32_MIN ? silk_int32_MIN : (a)));
- return(tmp);
-}
-#undef silk_POS_SAT32
-static OPUS_INLINE opus_int32 silk_POS_SAT32(opus_int64 a){
- opus_int32 tmp;
- ops_count += 1;
- tmp = (opus_int32)((a) > silk_int32_MAX ? silk_int32_MAX : (a));
- return(tmp);
-}
-
-#undef silk_ADD_POS_SAT8
-static OPUS_INLINE opus_int8 silk_ADD_POS_SAT8(opus_int64 a, opus_int64 b){
- opus_int8 tmp;
- ops_count += 1;
- tmp = (opus_int8)((((a)+(b)) & 0x80) ? silk_int8_MAX : ((a)+(b)));
- return(tmp);
-}
-#undef silk_ADD_POS_SAT16
-static OPUS_INLINE opus_int16 silk_ADD_POS_SAT16(opus_int64 a, opus_int64 b){
- opus_int16 tmp;
- ops_count += 1;
- tmp = (opus_int16)((((a)+(b)) & 0x8000) ? silk_int16_MAX : ((a)+(b)));
- return(tmp);
-}
-
-#undef silk_ADD_POS_SAT32
-static OPUS_INLINE opus_int32 silk_ADD_POS_SAT32(opus_int64 a, opus_int64 b){
- opus_int32 tmp;
- ops_count += 1;
- tmp = (opus_int32)((((a)+(b)) & 0x80000000) ? silk_int32_MAX : ((a)+(b)));
- return(tmp);
-}
-
-#undef silk_ADD_POS_SAT64
-static OPUS_INLINE opus_int64 silk_ADD_POS_SAT64(opus_int64 a, opus_int64 b){
- opus_int64 tmp;
- ops_count += 1;
- tmp = ((((a)+(b)) & 0x8000000000000000LL) ? silk_int64_MAX : ((a)+(b)));
- return(tmp);
-}
-
-#undef silk_LSHIFT8
-static OPUS_INLINE opus_int8 silk_LSHIFT8(opus_int8 a, opus_int32 shift){
- opus_int8 ret;
- ops_count += 1;
- ret = a << shift;
- return ret;
-}
-#undef silk_LSHIFT16
-static OPUS_INLINE opus_int16 silk_LSHIFT16(opus_int16 a, opus_int32 shift){
- opus_int16 ret;
- ops_count += 1;
- ret = a << shift;
- return ret;
-}
-#undef silk_LSHIFT32
-static OPUS_INLINE opus_int32 silk_LSHIFT32(opus_int32 a, opus_int32 shift){
- opus_int32 ret;
- ops_count += 1;
- ret = a << shift;
- return ret;
-}
-#undef silk_LSHIFT64
-static OPUS_INLINE opus_int64 silk_LSHIFT64(opus_int64 a, opus_int shift){
- ops_count += 1;
- return a << shift;
-}
-
-#undef silk_LSHIFT_ovflw
-static OPUS_INLINE opus_int32 silk_LSHIFT_ovflw(opus_int32 a, opus_int32 shift){
- ops_count += 1;
- return a << shift;
-}
-
-#undef silk_LSHIFT_uint
-static OPUS_INLINE opus_uint32 silk_LSHIFT_uint(opus_uint32 a, opus_int32 shift){
- opus_uint32 ret;
- ops_count += 1;
- ret = a << shift;
- return ret;
-}
-
-#undef silk_RSHIFT8
-static OPUS_INLINE opus_int8 silk_RSHIFT8(opus_int8 a, opus_int32 shift){
- ops_count += 1;
- return a >> shift;
-}
-#undef silk_RSHIFT16
-static OPUS_INLINE opus_int16 silk_RSHIFT16(opus_int16 a, opus_int32 shift){
- ops_count += 1;
- return a >> shift;
-}
-#undef silk_RSHIFT32
-static OPUS_INLINE opus_int32 silk_RSHIFT32(opus_int32 a, opus_int32 shift){
- ops_count += 1;
- return a >> shift;
-}
-#undef silk_RSHIFT64
-static OPUS_INLINE opus_int64 silk_RSHIFT64(opus_int64 a, opus_int64 shift){
- ops_count += 1;
- return a >> shift;
-}
-
-#undef silk_RSHIFT_uint
-static OPUS_INLINE opus_uint32 silk_RSHIFT_uint(opus_uint32 a, opus_int32 shift){
- ops_count += 1;
- return a >> shift;
-}
-
-#undef silk_ADD_LSHIFT
-static OPUS_INLINE opus_int32 silk_ADD_LSHIFT(opus_int32 a, opus_int32 b, opus_int32 shift){
- opus_int32 ret;
- ops_count += 1;
- ret = a + (b << shift);
- return ret; /* shift >= 0*/
-}
-#undef silk_ADD_LSHIFT32
-static OPUS_INLINE opus_int32 silk_ADD_LSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
- opus_int32 ret;
- ops_count += 1;
- ret = a + (b << shift);
- return ret; /* shift >= 0*/
-}
-#undef silk_ADD_LSHIFT_uint
-static OPUS_INLINE opus_uint32 silk_ADD_LSHIFT_uint(opus_uint32 a, opus_uint32 b, opus_int32 shift){
- opus_uint32 ret;
- ops_count += 1;
- ret = a + (b << shift);
- return ret; /* shift >= 0*/
-}
-#undef silk_ADD_RSHIFT
-static OPUS_INLINE opus_int32 silk_ADD_RSHIFT(opus_int32 a, opus_int32 b, opus_int32 shift){
- opus_int32 ret;
- ops_count += 1;
- ret = a + (b >> shift);
- return ret; /* shift > 0*/
-}
-#undef silk_ADD_RSHIFT32
-static OPUS_INLINE opus_int32 silk_ADD_RSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
- opus_int32 ret;
- ops_count += 1;
- ret = a + (b >> shift);
- return ret; /* shift > 0*/
-}
-#undef silk_ADD_RSHIFT_uint
-static OPUS_INLINE opus_uint32 silk_ADD_RSHIFT_uint(opus_uint32 a, opus_uint32 b, opus_int32 shift){
- opus_uint32 ret;
- ops_count += 1;
- ret = a + (b >> shift);
- return ret; /* shift > 0*/
-}
-#undef silk_SUB_LSHIFT32
-static OPUS_INLINE opus_int32 silk_SUB_LSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
- opus_int32 ret;
- ops_count += 1;
- ret = a - (b << shift);
- return ret; /* shift >= 0*/
-}
-#undef silk_SUB_RSHIFT32
-static OPUS_INLINE opus_int32 silk_SUB_RSHIFT32(opus_int32 a, opus_int32 b, opus_int32 shift){
- opus_int32 ret;
- ops_count += 1;
- ret = a - (b >> shift);
- return ret; /* shift > 0*/
-}
-
-#undef silk_RSHIFT_ROUND
-static OPUS_INLINE opus_int32 silk_RSHIFT_ROUND(opus_int32 a, opus_int32 shift){
- opus_int32 ret;
- ops_count += 3;
- ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
- return ret;
-}
-
-#undef silk_RSHIFT_ROUND64
-static OPUS_INLINE opus_int64 silk_RSHIFT_ROUND64(opus_int64 a, opus_int32 shift){
- opus_int64 ret;
- ops_count += 6;
- ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
- return ret;
-}
-
-#undef silk_abs_int64
-static OPUS_INLINE opus_int64 silk_abs_int64(opus_int64 a){
- ops_count += 1;
- return (((a) > 0) ? (a) : -(a)); /* Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN*/
-}
-
-#undef silk_abs_int32
-static OPUS_INLINE opus_int32 silk_abs_int32(opus_int32 a){
- ops_count += 1;
- return silk_abs(a);
-}
-
-
-#undef silk_min
-static silk_min(a, b){
- ops_count += 1;
- return (((a) < (b)) ? (a) : (b));
-}
-#undef silk_max
-static silk_max(a, b){
- ops_count += 1;
- return (((a) > (b)) ? (a) : (b));
-}
-#undef silk_sign
-static silk_sign(a){
- ops_count += 1;
- return ((a) > 0 ? 1 : ( (a) < 0 ? -1 : 0 ));
-}
-
-#undef silk_ADD16
-static OPUS_INLINE opus_int16 silk_ADD16(opus_int16 a, opus_int16 b){
- opus_int16 ret;
- ops_count += 1;
- ret = a + b;
- return ret;
-}
-
-#undef silk_ADD32
-static OPUS_INLINE opus_int32 silk_ADD32(opus_int32 a, opus_int32 b){
- opus_int32 ret;
- ops_count += 1;
- ret = a + b;
- return ret;
-}
-
-#undef silk_ADD64
-static OPUS_INLINE opus_int64 silk_ADD64(opus_int64 a, opus_int64 b){
- opus_int64 ret;
- ops_count += 2;
- ret = a + b;
- return ret;
-}
-
-#undef silk_SUB16
-static OPUS_INLINE opus_int16 silk_SUB16(opus_int16 a, opus_int16 b){
- opus_int16 ret;
- ops_count += 1;
- ret = a - b;
- return ret;
-}
-
-#undef silk_SUB32
-static OPUS_INLINE opus_int32 silk_SUB32(opus_int32 a, opus_int32 b){
- opus_int32 ret;
- ops_count += 1;
- ret = a - b;
- return ret;
-}
-
-#undef silk_SUB64
-static OPUS_INLINE opus_int64 silk_SUB64(opus_int64 a, opus_int64 b){
- opus_int64 ret;
- ops_count += 2;
- ret = a - b;
- return ret;
-}
-
-#undef silk_ADD_SAT16
-static OPUS_INLINE opus_int16 silk_ADD_SAT16( opus_int16 a16, opus_int16 b16 ) {
- opus_int16 res;
- /* Nb will be counted in AKP_add32 and silk_SAT16*/
- res = (opus_int16)silk_SAT16( silk_ADD32( (opus_int32)(a16), (b16) ) );
- return res;
-}
-
-#undef silk_ADD_SAT32
-static OPUS_INLINE opus_int32 silk_ADD_SAT32(opus_int32 a32, opus_int32 b32){
- opus_int32 res;
- ops_count += 1;
- res = ((((a32) + (b32)) & 0x80000000) == 0 ? \
- ((((a32) & (b32)) & 0x80000000) != 0 ? silk_int32_MIN : (a32)+(b32)) : \
- ((((a32) | (b32)) & 0x80000000) == 0 ? silk_int32_MAX : (a32)+(b32)) );
- return res;
-}
-
-#undef silk_ADD_SAT64
-static OPUS_INLINE opus_int64 silk_ADD_SAT64( opus_int64 a64, opus_int64 b64 ) {
- opus_int64 res;
- ops_count += 1;
- res = ((((a64) + (b64)) & 0x8000000000000000LL) == 0 ? \
- ((((a64) & (b64)) & 0x8000000000000000LL) != 0 ? silk_int64_MIN : (a64)+(b64)) : \
- ((((a64) | (b64)) & 0x8000000000000000LL) == 0 ? silk_int64_MAX : (a64)+(b64)) );
- return res;
-}
-
-#undef silk_SUB_SAT16
-static OPUS_INLINE opus_int16 silk_SUB_SAT16( opus_int16 a16, opus_int16 b16 ) {
- opus_int16 res;
- silk_assert(0);
- /* Nb will be counted in sub-macros*/
- res = (opus_int16)silk_SAT16( silk_SUB32( (opus_int32)(a16), (b16) ) );
- return res;
-}
-
-#undef silk_SUB_SAT32
-static OPUS_INLINE opus_int32 silk_SUB_SAT32( opus_int32 a32, opus_int32 b32 ) {
- opus_int32 res;
- ops_count += 1;
- res = ((((a32)-(b32)) & 0x80000000) == 0 ? \
- (( (a32) & ((b32)^0x80000000) & 0x80000000) ? silk_int32_MIN : (a32)-(b32)) : \
- ((((a32)^0x80000000) & (b32) & 0x80000000) ? silk_int32_MAX : (a32)-(b32)) );
- return res;
-}
-
-#undef silk_SUB_SAT64
-static OPUS_INLINE opus_int64 silk_SUB_SAT64( opus_int64 a64, opus_int64 b64 ) {
- opus_int64 res;
- ops_count += 1;
- res = ((((a64)-(b64)) & 0x8000000000000000LL) == 0 ? \
- (( (a64) & ((b64)^0x8000000000000000LL) & 0x8000000000000000LL) ? silk_int64_MIN : (a64)-(b64)) : \
- ((((a64)^0x8000000000000000LL) & (b64) & 0x8000000000000000LL) ? silk_int64_MAX : (a64)-(b64)) );
-
- return res;
-}
-
-#undef silk_SMULWW
-static OPUS_INLINE opus_int32 silk_SMULWW(opus_int32 a32, opus_int32 b32){
- opus_int32 ret;
- /* Nb will be counted in sub-macros*/
- ret = silk_MLA(silk_SMULWB((a32), (b32)), (a32), silk_RSHIFT_ROUND((b32), 16));
- return ret;
-}
-
-#undef silk_SMLAWW
-static OPUS_INLINE opus_int32 silk_SMLAWW(opus_int32 a32, opus_int32 b32, opus_int32 c32){
- opus_int32 ret;
- /* Nb will be counted in sub-macros*/
- ret = silk_MLA(silk_SMLAWB((a32), (b32), (c32)), (b32), silk_RSHIFT_ROUND((c32), 16));
- return ret;
-}
-
-#undef silk_min_int
-static OPUS_INLINE opus_int silk_min_int(opus_int a, opus_int b)
-{
- ops_count += 1;
- return (((a) < (b)) ? (a) : (b));
-}
-
-#undef silk_min_16
-static OPUS_INLINE opus_int16 silk_min_16(opus_int16 a, opus_int16 b)
-{
- ops_count += 1;
- return (((a) < (b)) ? (a) : (b));
-}
-#undef silk_min_32
-static OPUS_INLINE opus_int32 silk_min_32(opus_int32 a, opus_int32 b)
-{
- ops_count += 1;
- return (((a) < (b)) ? (a) : (b));
-}
-#undef silk_min_64
-static OPUS_INLINE opus_int64 silk_min_64(opus_int64 a, opus_int64 b)
-{
- ops_count += 1;
- return (((a) < (b)) ? (a) : (b));
-}
-
-/* silk_min() versions with typecast in the function call */
-#undef silk_max_int
-static OPUS_INLINE opus_int silk_max_int(opus_int a, opus_int b)
-{
- ops_count += 1;
- return (((a) > (b)) ? (a) : (b));
-}
-#undef silk_max_16
-static OPUS_INLINE opus_int16 silk_max_16(opus_int16 a, opus_int16 b)
-{
- ops_count += 1;
- return (((a) > (b)) ? (a) : (b));
-}
-#undef silk_max_32
-static OPUS_INLINE opus_int32 silk_max_32(opus_int32 a, opus_int32 b)
-{
- ops_count += 1;
- return (((a) > (b)) ? (a) : (b));
-}
-
-#undef silk_max_64
-static OPUS_INLINE opus_int64 silk_max_64(opus_int64 a, opus_int64 b)
-{
- ops_count += 1;
- return (((a) > (b)) ? (a) : (b));
-}
-
-
-#undef silk_LIMIT_int
-static OPUS_INLINE opus_int silk_LIMIT_int(opus_int a, opus_int limit1, opus_int limit2)
-{
- opus_int ret;
- ops_count += 6;
-
- ret = ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
- : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))));
-
- return(ret);
-}
-
-#undef silk_LIMIT_16
-static OPUS_INLINE opus_int16 silk_LIMIT_16(opus_int16 a, opus_int16 limit1, opus_int16 limit2)
-{
- opus_int16 ret;
- ops_count += 6;
-
- ret = ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
- : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))));
-
-return(ret);
-}
-
-
-#undef silk_LIMIT_32
-static OPUS_INLINE opus_int silk_LIMIT_32(opus_int32 a, opus_int32 limit1, opus_int32 limit2)
-{
- opus_int32 ret;
- ops_count += 6;
-
- ret = ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
- : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))));
- return(ret);
-}
-
-#else
-#define varDefine
-#define silk_SaveCount()
-
-#endif
-#endif
-
diff --git a/drivers/opus/silk/MacroDebug.h b/drivers/opus/silk/MacroDebug.h
deleted file mode 100644
index 35aedc5c5f..0000000000
--- a/drivers/opus/silk/MacroDebug.h
+++ /dev/null
@@ -1,952 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. All rights reserved.
-Copyright (C) 2012 Xiph.Org Foundation
-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 Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef MACRO_DEBUG_H
-#define MACRO_DEBUG_H
-
-/* Redefine macro functions with extensive assertion in DEBUG mode.
- As functions can't be undefined, this file can't work with SigProcFIX_MacroCount.h */
-
-#if ( defined (FIXED_DEBUG) || ( 0 && defined (_DEBUG) ) ) && !defined (silk_MACRO_COUNT)
-
-#undef silk_ADD16
-#define silk_ADD16(a,b) silk_ADD16_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int16 silk_ADD16_(opus_int16 a, opus_int16 b, char *file, int line){
- opus_int16 ret;
-
- ret = a + b;
- if ( ret != silk_ADD_SAT16( a, b ) )
- {
- fprintf (stderr, "silk_ADD16(%d, %d) in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_ADD32
-#define silk_ADD32(a,b) silk_ADD32_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_ADD32_(opus_int32 a, opus_int32 b, char *file, int line){
- opus_int32 ret;
-
- ret = a + b;
- if ( ret != silk_ADD_SAT32( a, b ) )
- {
- fprintf (stderr, "silk_ADD32(%d, %d) in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_ADD64
-#define silk_ADD64(a,b) silk_ADD64_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int64 silk_ADD64_(opus_int64 a, opus_int64 b, char *file, int line){
- opus_int64 ret;
-
- ret = a + b;
- if ( ret != silk_ADD_SAT64( a, b ) )
- {
- fprintf (stderr, "silk_ADD64(%lld, %lld) in %s: line %d\n", (long long)a, (long long)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_SUB16
-#define silk_SUB16(a,b) silk_SUB16_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int16 silk_SUB16_(opus_int16 a, opus_int16 b, char *file, int line){
- opus_int16 ret;
-
- ret = a - b;
- if ( ret != silk_SUB_SAT16( a, b ) )
- {
- fprintf (stderr, "silk_SUB16(%d, %d) in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_SUB32
-#define silk_SUB32(a,b) silk_SUB32_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SUB32_(opus_int32 a, opus_int32 b, char *file, int line){
- opus_int32 ret;
-
- ret = a - b;
- if ( ret != silk_SUB_SAT32( a, b ) )
- {
- fprintf (stderr, "silk_SUB32(%d, %d) in %s: line %d\n", a, b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_SUB64
-#define silk_SUB64(a,b) silk_SUB64_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int64 silk_SUB64_(opus_int64 a, opus_int64 b, char *file, int line){
- opus_int64 ret;
-
- ret = a - b;
- if ( ret != silk_SUB_SAT64( a, b ) )
- {
- fprintf (stderr, "silk_SUB64(%lld, %lld) in %s: line %d\n", (long long)a, (long long)b, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_ADD_SAT16
-#define silk_ADD_SAT16(a,b) silk_ADD_SAT16_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int16 silk_ADD_SAT16_( opus_int16 a16, opus_int16 b16, char *file, int line) {
- opus_int16 res;
- res = (opus_int16)silk_SAT16( silk_ADD32( (opus_int32)(a16), (b16) ) );
- if ( res != silk_SAT16( (opus_int32)a16 + (opus_int32)b16 ) )
- {
- fprintf (stderr, "silk_ADD_SAT16(%d, %d) in %s: line %d\n", a16, b16, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return res;
-}
-
-#undef silk_ADD_SAT32
-#define silk_ADD_SAT32(a,b) silk_ADD_SAT32_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_ADD_SAT32_(opus_int32 a32, opus_int32 b32, char *file, int line){
- opus_int32 res;
- res = ((((opus_uint32)(a32) + (opus_uint32)(b32)) & 0x80000000) == 0 ? \
- ((((a32) & (b32)) & 0x80000000) != 0 ? silk_int32_MIN : (a32)+(b32)) : \
- ((((a32) | (b32)) & 0x80000000) == 0 ? silk_int32_MAX : (a32)+(b32)) );
- if ( res != silk_SAT32( (opus_int64)a32 + (opus_int64)b32 ) )
- {
- fprintf (stderr, "silk_ADD_SAT32(%d, %d) in %s: line %d\n", a32, b32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return res;
-}
-
-#undef silk_ADD_SAT64
-#define silk_ADD_SAT64(a,b) silk_ADD_SAT64_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int64 silk_ADD_SAT64_( opus_int64 a64, opus_int64 b64, char *file, int line) {
- opus_int64 res;
- int fail = 0;
- res = ((((a64) + (b64)) & 0x8000000000000000LL) == 0 ? \
- ((((a64) & (b64)) & 0x8000000000000000LL) != 0 ? silk_int64_MIN : (a64)+(b64)) : \
- ((((a64) | (b64)) & 0x8000000000000000LL) == 0 ? silk_int64_MAX : (a64)+(b64)) );
- if( res != a64 + b64 ) {
- /* Check that we saturated to the correct extreme value */
- if ( !(( res == silk_int64_MAX && ( ( a64 >> 1 ) + ( b64 >> 1 ) > ( silk_int64_MAX >> 3 ) ) ) ||
- ( res == silk_int64_MIN && ( ( a64 >> 1 ) + ( b64 >> 1 ) < ( silk_int64_MIN >> 3 ) ) ) ) )
- {
- fail = 1;
- }
- } else {
- /* Saturation not necessary */
- fail = res != a64 + b64;
- }
- if ( fail )
- {
- fprintf (stderr, "silk_ADD_SAT64(%lld, %lld) in %s: line %d\n", (long long)a64, (long long)b64, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return res;
-}
-
-#undef silk_SUB_SAT16
-#define silk_SUB_SAT16(a,b) silk_SUB_SAT16_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int16 silk_SUB_SAT16_( opus_int16 a16, opus_int16 b16, char *file, int line ) {
- opus_int16 res;
- res = (opus_int16)silk_SAT16( silk_SUB32( (opus_int32)(a16), (b16) ) );
- if ( res != silk_SAT16( (opus_int32)a16 - (opus_int32)b16 ) )
- {
- fprintf (stderr, "silk_SUB_SAT16(%d, %d) in %s: line %d\n", a16, b16, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return res;
-}
-
-#undef silk_SUB_SAT32
-#define silk_SUB_SAT32(a,b) silk_SUB_SAT32_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SUB_SAT32_( opus_int32 a32, opus_int32 b32, char *file, int line ) {
- opus_int32 res;
- res = ((((opus_uint32)(a32)-(opus_uint32)(b32)) & 0x80000000) == 0 ? \
- (( (a32) & ((b32)^0x80000000) & 0x80000000) ? silk_int32_MIN : (a32)-(b32)) : \
- ((((a32)^0x80000000) & (b32) & 0x80000000) ? silk_int32_MAX : (a32)-(b32)) );
- if ( res != silk_SAT32( (opus_int64)a32 - (opus_int64)b32 ) )
- {
- fprintf (stderr, "silk_SUB_SAT32(%d, %d) in %s: line %d\n", a32, b32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return res;
-}
-
-#undef silk_SUB_SAT64
-#define silk_SUB_SAT64(a,b) silk_SUB_SAT64_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int64 silk_SUB_SAT64_( opus_int64 a64, opus_int64 b64, char *file, int line ) {
- opus_int64 res;
- int fail = 0;
- res = ((((a64)-(b64)) & 0x8000000000000000LL) == 0 ? \
- (( (a64) & ((b64)^0x8000000000000000LL) & 0x8000000000000000LL) ? silk_int64_MIN : (a64)-(b64)) : \
- ((((a64)^0x8000000000000000LL) & (b64) & 0x8000000000000000LL) ? silk_int64_MAX : (a64)-(b64)) );
- if( res != a64 - b64 ) {
- /* Check that we saturated to the correct extreme value */
- if( !(( res == silk_int64_MAX && ( ( a64 >> 1 ) + ( b64 >> 1 ) > ( silk_int64_MAX >> 3 ) ) ) ||
- ( res == silk_int64_MIN && ( ( a64 >> 1 ) + ( b64 >> 1 ) < ( silk_int64_MIN >> 3 ) ) ) ))
- {
- fail = 1;
- }
- } else {
- /* Saturation not necessary */
- fail = res != a64 - b64;
- }
- if ( fail )
- {
- fprintf (stderr, "silk_SUB_SAT64(%lld, %lld) in %s: line %d\n", (long long)a64, (long long)b64, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return res;
-}
-
-#undef silk_MUL
-#define silk_MUL(a,b) silk_MUL_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_MUL_(opus_int32 a32, opus_int32 b32, char *file, int line){
- opus_int32 ret;
- opus_int64 ret64;
- ret = a32 * b32;
- ret64 = (opus_int64)a32 * (opus_int64)b32;
- if ( (opus_int64)ret != ret64 )
- {
- fprintf (stderr, "silk_MUL(%d, %d) in %s: line %d\n", a32, b32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_MUL_uint
-#define silk_MUL_uint(a,b) silk_MUL_uint_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_uint32 silk_MUL_uint_(opus_uint32 a32, opus_uint32 b32, char *file, int line){
- opus_uint32 ret;
- ret = a32 * b32;
- if ( (opus_uint64)ret != (opus_uint64)a32 * (opus_uint64)b32 )
- {
- fprintf (stderr, "silk_MUL_uint(%u, %u) in %s: line %d\n", a32, b32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_MLA
-#define silk_MLA(a,b,c) silk_MLA_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_MLA_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
- opus_int32 ret;
- ret = a32 + b32 * c32;
- if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int64)c32 )
- {
- fprintf (stderr, "silk_MLA(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_MLA_uint
-#define silk_MLA_uint(a,b,c) silk_MLA_uint_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_MLA_uint_(opus_uint32 a32, opus_uint32 b32, opus_uint32 c32, char *file, int line){
- opus_uint32 ret;
- ret = a32 + b32 * c32;
- if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int64)c32 )
- {
- fprintf (stderr, "silk_MLA_uint(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_SMULWB
-#define silk_SMULWB(a,b) silk_SMULWB_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SMULWB_(opus_int32 a32, opus_int32 b32, char *file, int line){
- opus_int32 ret;
- ret = (a32 >> 16) * (opus_int32)((opus_int16)b32) + (((a32 & 0x0000FFFF) * (opus_int32)((opus_int16)b32)) >> 16);
- if ( (opus_int64)ret != ((opus_int64)a32 * (opus_int16)b32) >> 16 )
- {
- fprintf (stderr, "silk_SMULWB(%d, %d) in %s: line %d\n", a32, b32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_SMLAWB
-#define silk_SMLAWB(a,b,c) silk_SMLAWB_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SMLAWB_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
- opus_int32 ret;
- ret = silk_ADD32( a32, silk_SMULWB( b32, c32 ) );
- if ( silk_ADD32( a32, silk_SMULWB( b32, c32 ) ) != silk_ADD_SAT32( a32, silk_SMULWB( b32, c32 ) ) )
- {
- fprintf (stderr, "silk_SMLAWB(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_SMULWT
-#define silk_SMULWT(a,b) silk_SMULWT_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SMULWT_(opus_int32 a32, opus_int32 b32, char *file, int line){
- opus_int32 ret;
- ret = (a32 >> 16) * (b32 >> 16) + (((a32 & 0x0000FFFF) * (b32 >> 16)) >> 16);
- if ( (opus_int64)ret != ((opus_int64)a32 * (b32 >> 16)) >> 16 )
- {
- fprintf (stderr, "silk_SMULWT(%d, %d) in %s: line %d\n", a32, b32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_SMLAWT
-#define silk_SMLAWT(a,b,c) silk_SMLAWT_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SMLAWT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
- opus_int32 ret;
- ret = a32 + ((b32 >> 16) * (c32 >> 16)) + (((b32 & 0x0000FFFF) * ((c32 >> 16)) >> 16));
- if ( (opus_int64)ret != (opus_int64)a32 + (((opus_int64)b32 * (c32 >> 16)) >> 16) )
- {
- fprintf (stderr, "silk_SMLAWT(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_SMULL
-#define silk_SMULL(a,b) silk_SMULL_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int64 silk_SMULL_(opus_int64 a64, opus_int64 b64, char *file, int line){
- opus_int64 ret64;
- int fail = 0;
- ret64 = a64 * b64;
- if( b64 != 0 ) {
- fail = a64 != (ret64 / b64);
- } else if( a64 != 0 ) {
- fail = b64 != (ret64 / a64);
- }
- if ( fail )
- {
- fprintf (stderr, "silk_SMULL(%lld, %lld) in %s: line %d\n", (long long)a64, (long long)b64, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret64;
-}
-
-/* no checking needed for silk_SMULBB */
-#undef silk_SMLABB
-#define silk_SMLABB(a,b,c) silk_SMLABB_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SMLABB_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
- opus_int32 ret;
- ret = a32 + (opus_int32)((opus_int16)b32) * (opus_int32)((opus_int16)c32);
- if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (opus_int16)c32 )
- {
- fprintf (stderr, "silk_SMLABB(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-/* no checking needed for silk_SMULBT */
-#undef silk_SMLABT
-#define silk_SMLABT(a,b,c) silk_SMLABT_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SMLABT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
- opus_int32 ret;
- ret = a32 + ((opus_int32)((opus_int16)b32)) * (c32 >> 16);
- if ( (opus_int64)ret != (opus_int64)a32 + (opus_int64)b32 * (c32 >> 16) )
- {
- fprintf (stderr, "silk_SMLABT(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-/* no checking needed for silk_SMULTT */
-#undef silk_SMLATT
-#define silk_SMLATT(a,b,c) silk_SMLATT_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SMLATT_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
- opus_int32 ret;
- ret = a32 + (b32 >> 16) * (c32 >> 16);
- if ( (opus_int64)ret != (opus_int64)a32 + (b32 >> 16) * (c32 >> 16) )
- {
- fprintf (stderr, "silk_SMLATT(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_SMULWW
-#define silk_SMULWW(a,b) silk_SMULWW_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SMULWW_(opus_int32 a32, opus_int32 b32, char *file, int line){
- opus_int32 ret, tmp1, tmp2;
- opus_int64 ret64;
- int fail = 0;
-
- ret = silk_SMULWB( a32, b32 );
- tmp1 = silk_RSHIFT_ROUND( b32, 16 );
- tmp2 = silk_MUL( a32, tmp1 );
-
- fail |= (opus_int64)tmp2 != (opus_int64) a32 * (opus_int64) tmp1;
-
- tmp1 = ret;
- ret = silk_ADD32( tmp1, tmp2 );
- fail |= silk_ADD32( tmp1, tmp2 ) != silk_ADD_SAT32( tmp1, tmp2 );
-
- ret64 = silk_RSHIFT64( silk_SMULL( a32, b32 ), 16 );
- fail |= (opus_int64)ret != ret64;
-
- if ( fail )
- {
- fprintf (stderr, "silk_SMULWT(%d, %d) in %s: line %d\n", a32, b32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
-
- return ret;
-}
-
-#undef silk_SMLAWW
-#define silk_SMLAWW(a,b,c) silk_SMLAWW_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SMLAWW_(opus_int32 a32, opus_int32 b32, opus_int32 c32, char *file, int line){
- opus_int32 ret, tmp;
-
- tmp = silk_SMULWW( b32, c32 );
- ret = silk_ADD32( a32, tmp );
- if ( ret != silk_ADD_SAT32( a32, tmp ) )
- {
- fprintf (stderr, "silk_SMLAWW(%d, %d, %d) in %s: line %d\n", a32, b32, c32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-/* Multiply-accumulate macros that allow overflow in the addition (ie, no asserts in debug mode) */
-#undef silk_MLA_ovflw
-#define silk_MLA_ovflw(a32, b32, c32) ((a32) + ((b32) * (c32)))
-#undef silk_SMLABB_ovflw
-#define silk_SMLABB_ovflw(a32, b32, c32) ((a32) + ((opus_int32)((opus_int16)(b32))) * (opus_int32)((opus_int16)(c32)))
-
-/* no checking needed for silk_SMULL
- no checking needed for silk_SMLAL
- no checking needed for silk_SMLALBB
- no checking needed for SigProcFIX_CLZ16
- no checking needed for SigProcFIX_CLZ32*/
-
-#undef silk_DIV32
-#define silk_DIV32(a,b) silk_DIV32_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_DIV32_(opus_int32 a32, opus_int32 b32, char *file, int line){
- if ( b32 == 0 )
- {
- fprintf (stderr, "silk_DIV32(%d, %d) in %s: line %d\n", a32, b32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return a32 / b32;
-}
-
-#undef silk_DIV32_16
-#define silk_DIV32_16(a,b) silk_DIV32_16_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_DIV32_16_(opus_int32 a32, opus_int32 b32, char *file, int line){
- int fail = 0;
- fail |= b32 == 0;
- fail |= b32 > silk_int16_MAX;
- fail |= b32 < silk_int16_MIN;
- if ( fail )
- {
- fprintf (stderr, "silk_DIV32_16(%d, %d) in %s: line %d\n", a32, b32, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return a32 / b32;
-}
-
-/* no checking needed for silk_SAT8
- no checking needed for silk_SAT16
- no checking needed for silk_SAT32
- no checking needed for silk_POS_SAT32
- no checking needed for silk_ADD_POS_SAT8
- no checking needed for silk_ADD_POS_SAT16
- no checking needed for silk_ADD_POS_SAT32
- no checking needed for silk_ADD_POS_SAT64 */
-
-#undef silk_LSHIFT8
-#define silk_LSHIFT8(a,b) silk_LSHIFT8_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int8 silk_LSHIFT8_(opus_int8 a, opus_int32 shift, char *file, int line){
- opus_int8 ret;
- int fail = 0;
- ret = a << shift;
- fail |= shift < 0;
- fail |= shift >= 8;
- fail |= (opus_int64)ret != ((opus_int64)a) << shift;
- if ( fail )
- {
- fprintf (stderr, "silk_LSHIFT8(%d, %d) in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_LSHIFT16
-#define silk_LSHIFT16(a,b) silk_LSHIFT16_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int16 silk_LSHIFT16_(opus_int16 a, opus_int32 shift, char *file, int line){
- opus_int16 ret;
- int fail = 0;
- ret = a << shift;
- fail |= shift < 0;
- fail |= shift >= 16;
- fail |= (opus_int64)ret != ((opus_int64)a) << shift;
- if ( fail )
- {
- fprintf (stderr, "silk_LSHIFT16(%d, %d) in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_LSHIFT32
-#define silk_LSHIFT32(a,b) silk_LSHIFT32_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_LSHIFT32_(opus_int32 a, opus_int32 shift, char *file, int line){
- opus_int32 ret;
- int fail = 0;
- ret = a << shift;
- fail |= shift < 0;
- fail |= shift >= 32;
- fail |= (opus_int64)ret != ((opus_int64)a) << shift;
- if ( fail )
- {
- fprintf (stderr, "silk_LSHIFT32(%d, %d) in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_LSHIFT64
-#define silk_LSHIFT64(a,b) silk_LSHIFT64_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int64 silk_LSHIFT64_(opus_int64 a, opus_int shift, char *file, int line){
- opus_int64 ret;
- int fail = 0;
- ret = a << shift;
- fail |= shift < 0;
- fail |= shift >= 64;
- fail |= (ret>>shift) != ((opus_int64)a);
- if ( fail )
- {
- fprintf (stderr, "silk_LSHIFT64(%lld, %d) in %s: line %d\n", (long long)a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_LSHIFT_ovflw
-#define silk_LSHIFT_ovflw(a,b) silk_LSHIFT_ovflw_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_LSHIFT_ovflw_(opus_int32 a, opus_int32 shift, char *file, int line){
- if ( (shift < 0) || (shift >= 32) ) /* no check for overflow */
- {
- fprintf (stderr, "silk_LSHIFT_ovflw(%d, %d) in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return a << shift;
-}
-
-#undef silk_LSHIFT_uint
-#define silk_LSHIFT_uint(a,b) silk_LSHIFT_uint_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_uint32 silk_LSHIFT_uint_(opus_uint32 a, opus_int32 shift, char *file, int line){
- opus_uint32 ret;
- ret = a << shift;
- if ( (shift < 0) || ((opus_int64)ret != ((opus_int64)a) << shift))
- {
- fprintf (stderr, "silk_LSHIFT_uint(%u, %d) in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_RSHIFT8
-#define silk_RSHITF8(a,b) silk_RSHIFT8_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int8 silk_RSHIFT8_(opus_int8 a, opus_int32 shift, char *file, int line){
- if ( (shift < 0) || (shift>=8) )
- {
- fprintf (stderr, "silk_RSHITF8(%d, %d) in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return a >> shift;
-}
-
-#undef silk_RSHIFT16
-#define silk_RSHITF16(a,b) silk_RSHIFT16_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int16 silk_RSHIFT16_(opus_int16 a, opus_int32 shift, char *file, int line){
- if ( (shift < 0) || (shift>=16) )
- {
- fprintf (stderr, "silk_RSHITF16(%d, %d) in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return a >> shift;
-}
-
-#undef silk_RSHIFT32
-#define silk_RSHIFT32(a,b) silk_RSHIFT32_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_RSHIFT32_(opus_int32 a, opus_int32 shift, char *file, int line){
- if ( (shift < 0) || (shift>=32) )
- {
- fprintf (stderr, "silk_RSHITF32(%d, %d) in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return a >> shift;
-}
-
-#undef silk_RSHIFT64
-#define silk_RSHIFT64(a,b) silk_RSHIFT64_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int64 silk_RSHIFT64_(opus_int64 a, opus_int64 shift, char *file, int line){
- if ( (shift < 0) || (shift>=64) )
- {
- fprintf (stderr, "silk_RSHITF64(%lld, %lld) in %s: line %d\n", (long long)a, (long long)shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return a >> shift;
-}
-
-#undef silk_RSHIFT_uint
-#define silk_RSHIFT_uint(a,b) silk_RSHIFT_uint_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_uint32 silk_RSHIFT_uint_(opus_uint32 a, opus_int32 shift, char *file, int line){
- if ( (shift < 0) || (shift>32) )
- {
- fprintf (stderr, "silk_RSHIFT_uint(%u, %d) in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return a >> shift;
-}
-
-#undef silk_ADD_LSHIFT
-#define silk_ADD_LSHIFT(a,b,c) silk_ADD_LSHIFT_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE int silk_ADD_LSHIFT_(int a, int b, int shift, char *file, int line){
- opus_int16 ret;
- ret = a + (b << shift);
- if ( (shift < 0) || (shift>15) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) )
- {
- fprintf (stderr, "silk_ADD_LSHIFT(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret; /* shift >= 0 */
-}
-
-#undef silk_ADD_LSHIFT32
-#define silk_ADD_LSHIFT32(a,b,c) silk_ADD_LSHIFT32_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_ADD_LSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
- opus_int32 ret;
- ret = a + (b << shift);
- if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) )
- {
- fprintf (stderr, "silk_ADD_LSHIFT32(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret; /* shift >= 0 */
-}
-
-#undef silk_ADD_LSHIFT_uint
-#define silk_ADD_LSHIFT_uint(a,b,c) silk_ADD_LSHIFT_uint_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_uint32 silk_ADD_LSHIFT_uint_(opus_uint32 a, opus_uint32 b, opus_int32 shift, char *file, int line){
- opus_uint32 ret;
- ret = a + (b << shift);
- if ( (shift < 0) || (shift>32) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) << shift)) )
- {
- fprintf (stderr, "silk_ADD_LSHIFT_uint(%u, %u, %d) in %s: line %d\n", a, b, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret; /* shift >= 0 */
-}
-
-#undef silk_ADD_RSHIFT
-#define silk_ADD_RSHIFT(a,b,c) silk_ADD_RSHIFT_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE int silk_ADD_RSHIFT_(int a, int b, int shift, char *file, int line){
- opus_int16 ret;
- ret = a + (b >> shift);
- if ( (shift < 0) || (shift>15) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) )
- {
- fprintf (stderr, "silk_ADD_RSHIFT(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret; /* shift > 0 */
-}
-
-#undef silk_ADD_RSHIFT32
-#define silk_ADD_RSHIFT32(a,b,c) silk_ADD_RSHIFT32_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_ADD_RSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
- opus_int32 ret;
- ret = a + (b >> shift);
- if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) )
- {
- fprintf (stderr, "silk_ADD_RSHIFT32(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret; /* shift > 0 */
-}
-
-#undef silk_ADD_RSHIFT_uint
-#define silk_ADD_RSHIFT_uint(a,b,c) silk_ADD_RSHIFT_uint_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_uint32 silk_ADD_RSHIFT_uint_(opus_uint32 a, opus_uint32 b, opus_int32 shift, char *file, int line){
- opus_uint32 ret;
- ret = a + (b >> shift);
- if ( (shift < 0) || (shift>32) || ((opus_int64)ret != (opus_int64)a + (((opus_int64)b) >> shift)) )
- {
- fprintf (stderr, "silk_ADD_RSHIFT_uint(%u, %u, %d) in %s: line %d\n", a, b, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret; /* shift > 0 */
-}
-
-#undef silk_SUB_LSHIFT32
-#define silk_SUB_LSHIFT32(a,b,c) silk_SUB_LSHIFT32_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SUB_LSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
- opus_int32 ret;
- ret = a - (b << shift);
- if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a - (((opus_int64)b) << shift)) )
- {
- fprintf (stderr, "silk_SUB_LSHIFT32(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret; /* shift >= 0 */
-}
-
-#undef silk_SUB_RSHIFT32
-#define silk_SUB_RSHIFT32(a,b,c) silk_SUB_RSHIFT32_((a), (b), (c), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_SUB_RSHIFT32_(opus_int32 a, opus_int32 b, opus_int32 shift, char *file, int line){
- opus_int32 ret;
- ret = a - (b >> shift);
- if ( (shift < 0) || (shift>31) || ((opus_int64)ret != (opus_int64)a - (((opus_int64)b) >> shift)) )
- {
- fprintf (stderr, "silk_SUB_RSHIFT32(%d, %d, %d) in %s: line %d\n", a, b, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret; /* shift > 0 */
-}
-
-#undef silk_RSHIFT_ROUND
-#define silk_RSHIFT_ROUND(a,b) silk_RSHIFT_ROUND_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_RSHIFT_ROUND_(opus_int32 a, opus_int32 shift, char *file, int line){
- opus_int32 ret;
- ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
- /* the marco definition can't handle a shift of zero */
- if ( (shift <= 0) || (shift>31) || ((opus_int64)ret != ((opus_int64)a + ((opus_int64)1 << (shift - 1))) >> shift) )
- {
- fprintf (stderr, "silk_RSHIFT_ROUND(%d, %d) in %s: line %d\n", a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return ret;
-}
-
-#undef silk_RSHIFT_ROUND64
-#define silk_RSHIFT_ROUND64(a,b) silk_RSHIFT_ROUND64_((a), (b), __FILE__, __LINE__)
-static OPUS_INLINE opus_int64 silk_RSHIFT_ROUND64_(opus_int64 a, opus_int32 shift, char *file, int line){
- opus_int64 ret;
- /* the marco definition can't handle a shift of zero */
- if ( (shift <= 0) || (shift>=64) )
- {
- fprintf (stderr, "silk_RSHIFT_ROUND64(%lld, %d) in %s: line %d\n", (long long)a, shift, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- ret = shift == 1 ? (a >> 1) + (a & 1) : ((a >> (shift - 1)) + 1) >> 1;
- return ret;
-}
-
-/* silk_abs is used on floats also, so doesn't work... */
-/*#undef silk_abs
-static OPUS_INLINE opus_int32 silk_abs(opus_int32 a){
- silk_assert(a != 0x80000000);
- return (((a) > 0) ? (a) : -(a)); // Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN
-}*/
-
-#undef silk_abs_int64
-#define silk_abs_int64(a) silk_abs_int64_((a), __FILE__, __LINE__)
-static OPUS_INLINE opus_int64 silk_abs_int64_(opus_int64 a, char *file, int line){
- if ( a == silk_int64_MIN )
- {
- fprintf (stderr, "silk_abs_int64(%lld) in %s: line %d\n", (long long)a, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return (((a) > 0) ? (a) : -(a)); /* Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN */
-}
-
-#undef silk_abs_int32
-#define silk_abs_int32(a) silk_abs_int32_((a), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_abs_int32_(opus_int32 a, char *file, int line){
- if ( a == silk_int32_MIN )
- {
- fprintf (stderr, "silk_abs_int32(%d) in %s: line %d\n", a, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return silk_abs(a);
-}
-
-#undef silk_CHECK_FIT8
-#define silk_CHECK_FIT8(a) silk_CHECK_FIT8_((a), __FILE__, __LINE__)
-static OPUS_INLINE opus_int8 silk_CHECK_FIT8_( opus_int64 a, char *file, int line ){
- opus_int8 ret;
- ret = (opus_int8)a;
- if ( (opus_int64)ret != a )
- {
- fprintf (stderr, "silk_CHECK_FIT8(%lld) in %s: line %d\n", (long long)a, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return( ret );
-}
-
-#undef silk_CHECK_FIT16
-#define silk_CHECK_FIT16(a) silk_CHECK_FIT16_((a), __FILE__, __LINE__)
-static OPUS_INLINE opus_int16 silk_CHECK_FIT16_( opus_int64 a, char *file, int line ){
- opus_int16 ret;
- ret = (opus_int16)a;
- if ( (opus_int64)ret != a )
- {
- fprintf (stderr, "silk_CHECK_FIT16(%lld) in %s: line %d\n", (long long)a, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return( ret );
-}
-
-#undef silk_CHECK_FIT32
-#define silk_CHECK_FIT32(a) silk_CHECK_FIT32_((a), __FILE__, __LINE__)
-static OPUS_INLINE opus_int32 silk_CHECK_FIT32_( opus_int64 a, char *file, int line ){
- opus_int32 ret;
- ret = (opus_int32)a;
- if ( (opus_int64)ret != a )
- {
- fprintf (stderr, "silk_CHECK_FIT32(%lld) in %s: line %d\n", (long long)a, file, line);
-#ifdef FIXED_DEBUG_ASSERT
- silk_assert( 0 );
-#endif
- }
- return( ret );
-}
-
-/* no checking for silk_NSHIFT_MUL_32_32
- no checking for silk_NSHIFT_MUL_16_16
- no checking needed for silk_min
- no checking needed for silk_max
- no checking needed for silk_sign
-*/
-
-#endif
-#endif /* MACRO_DEBUG_H */
diff --git a/drivers/opus/silk/NLSF2A.c b/drivers/opus/silk/NLSF2A.c
deleted file mode 100644
index 09db1c1c3f..0000000000
--- a/drivers/opus/silk/NLSF2A.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/* 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 */
-/* functions are accurate inverses of each other */
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/tables.h"
-
-#define QA 16
-
-/* helper function for NLSF2A(..) */
-static OPUS_INLINE void silk_NLSF2A_find_poly(
- opus_int32 *out, /* O intermediate polynomial, QA [dd+1] */
- const opus_int32 *cLSF, /* I vector of interleaved 2*cos(LSFs), QA [d] */
- opus_int dd /* I polynomial order (= 1/2 * filter order) */
-)
-{
- opus_int k, n;
- opus_int32 ftmp;
-
- out[0] = silk_LSHIFT( 1, QA );
- out[1] = -cLSF[0];
- for( k = 1; k < dd; k++ ) {
- ftmp = cLSF[2*k]; /* QA*/
- out[k+1] = silk_LSHIFT( out[k-1], 1 ) - (opus_int32)silk_RSHIFT_ROUND64( silk_SMULL( ftmp, out[k] ), QA );
- for( n = k; n > 1; n-- ) {
- out[n] += out[n-2] - (opus_int32)silk_RSHIFT_ROUND64( silk_SMULL( ftmp, out[n-1] ), QA );
- }
- out[1] -= ftmp;
- }
-}
-
-/* compute whitening filter coefficients from normalized line spectral frequencies */
-void silk_NLSF2A(
- opus_int16 *a_Q12, /* O monic whitening filter coefficients in Q12, [ d ] */
- const opus_int16 *NLSF, /* I normalized line spectral frequencies in Q15, [ d ] */
- const opus_int d /* I filter order (should be even) */
-)
-{
- /* This ordering was found to maximize quality. It improves numerical accuracy of
- silk_NLSF2A_find_poly() compared to "standard" ordering. */
- static const unsigned char ordering16[16] = {
- 0, 15, 8, 7, 4, 11, 12, 3, 2, 13, 10, 5, 6, 9, 14, 1
- };
- static const unsigned char ordering10[10] = {
- 0, 9, 6, 3, 4, 5, 8, 1, 2, 7
- };
- const unsigned char *ordering;
- opus_int k, i, dd;
- opus_int32 cos_LSF_QA[ SILK_MAX_ORDER_LPC ];
- opus_int32 P[ SILK_MAX_ORDER_LPC / 2 + 1 ], Q[ SILK_MAX_ORDER_LPC / 2 + 1 ];
- opus_int32 Ptmp, Qtmp, f_int, f_frac, cos_val, delta;
- opus_int32 a32_QA1[ SILK_MAX_ORDER_LPC ];
- opus_int32 maxabs, absval, idx=0, sc_Q16;
-
- silk_assert( LSF_COS_TAB_SZ_FIX == 128 );
- silk_assert( d==10||d==16 );
-
- /* convert LSFs to 2*cos(LSF), using piecewise linear curve from table */
- ordering = d == 16 ? ordering16 : ordering10;
- for( k = 0; k < d; k++ ) {
- silk_assert(NLSF[k] >= 0 );
-
- /* f_int on a scale 0-127 (rounded down) */
- f_int = silk_RSHIFT( NLSF[k], 15 - 7 );
-
- /* f_frac, range: 0..255 */
- f_frac = NLSF[k] - silk_LSHIFT( f_int, 15 - 7 );
-
- silk_assert(f_int >= 0);
- silk_assert(f_int < LSF_COS_TAB_SZ_FIX );
-
- /* Read start and end value from table */
- cos_val = silk_LSFCosTab_FIX_Q12[ f_int ]; /* Q12 */
- delta = silk_LSFCosTab_FIX_Q12[ f_int + 1 ] - cos_val; /* Q12, with a range of 0..200 */
-
- /* Linear interpolation */
- cos_LSF_QA[ordering[k]] = silk_RSHIFT_ROUND( silk_LSHIFT( cos_val, 8 ) + silk_MUL( delta, f_frac ), 20 - QA ); /* QA */
- }
-
- dd = silk_RSHIFT( d, 1 );
-
- /* generate even and odd polynomials using convolution */
- silk_NLSF2A_find_poly( P, &cos_LSF_QA[ 0 ], dd );
- silk_NLSF2A_find_poly( Q, &cos_LSF_QA[ 1 ], dd );
-
- /* convert even and odd polynomials to opus_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 */
- a32_QA1[ k ] = -Qtmp - Ptmp; /* QA+1 */
- a32_QA1[ d-k-1 ] = Qtmp - Ptmp; /* QA+1 */
- }
-
- /* Limit the maximum absolute value of the prediction coefficients, so that they'll fit in int16 */
- for( i = 0; i < 10; i++ ) {
- /* Find maximum absolute value and its index */
- maxabs = 0;
- for( k = 0; k < d; k++ ) {
- absval = silk_abs( a32_QA1[k] );
- if( absval > maxabs ) {
- maxabs = absval;
- idx = k;
- }
- }
- maxabs = silk_RSHIFT_ROUND( maxabs, QA + 1 - 12 ); /* QA+1 -> Q12 */
-
- if( maxabs > silk_int16_MAX ) {
- /* Reduce magnitude of prediction coefficients */
- maxabs = silk_min( maxabs, 163838 ); /* ( silk_int32_MAX >> 14 ) + silk_int16_MAX = 163838 */
- sc_Q16 = SILK_FIX_CONST( 0.999, 16 ) - silk_DIV32( silk_LSHIFT( maxabs - silk_int16_MAX, 14 ),
- silk_RSHIFT32( silk_MUL( maxabs, idx + 1), 2 ) );
- silk_bwexpander_32( a32_QA1, d, sc_Q16 );
- } else {
- break;
- }
- }
-
- if( i == 10 ) {
- /* Reached the last iteration, clip the coefficients */
- for( k = 0; k < d; k++ ) {
- a_Q12[ k ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( a32_QA1[ k ], QA + 1 - 12 ) ); /* QA+1 -> Q12 */
- a32_QA1[ k ] = silk_LSHIFT( (opus_int32)a_Q12[ k ], QA + 1 - 12 );
- }
- } else {
- for( k = 0; k < d; k++ ) {
- a_Q12[ k ] = (opus_int16)silk_RSHIFT_ROUND( a32_QA1[ k ], QA + 1 - 12 ); /* QA+1 -> Q12 */
- }
- }
-
- for( i = 0; i < MAX_LPC_STABILIZE_ITERATIONS; i++ ) {
- if( silk_LPC_inverse_pred_gain( a_Q12, d ) < SILK_FIX_CONST( 1.0 / MAX_PREDICTION_POWER_GAIN, 30 ) ) {
- /* Prediction coefficients are (too close to) unstable; apply bandwidth expansion */
- /* on the unscaled coefficients, convert to Q12 and measure again */
- silk_bwexpander_32( a32_QA1, d, 65536 - silk_LSHIFT( 2, i ) );
- for( k = 0; k < d; k++ ) {
- a_Q12[ k ] = (opus_int16)silk_RSHIFT_ROUND( a32_QA1[ k ], QA + 1 - 12 ); /* QA+1 -> Q12 */
- }
- } else {
- break;
- }
- }
-}
-
diff --git a/drivers/opus/silk/NLSF_VQ.c b/drivers/opus/silk/NLSF_VQ.c
deleted file mode 100644
index 99a37d4e0d..0000000000
--- a/drivers/opus/silk/NLSF_VQ.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Compute quantization errors for an LPC_order element input vector for a VQ codebook */
-void silk_NLSF_VQ(
- opus_int32 err_Q26[], /* O Quantization errors [K] */
- const opus_int16 in_Q15[], /* I Input vectors to be quantized [LPC_order] */
- const opus_uint8 pCB_Q8[], /* I Codebook vectors [K*LPC_order] */
- const opus_int K, /* I Number of codebook vectors */
- const opus_int LPC_order /* I Number of LPCs */
-)
-{
- opus_int i, m;
- opus_int32 diff_Q15, sum_error_Q30, sum_error_Q26;
-
- silk_assert( LPC_order <= 16 );
- silk_assert( ( LPC_order & 1 ) == 0 );
-
- /* Loop over codebook */
- for( i = 0; i < K; i++ ) {
- sum_error_Q26 = 0;
- for( m = 0; m < LPC_order; m += 2 ) {
- /* Compute weighted squared quantization error for index m */
- diff_Q15 = silk_SUB_LSHIFT32( in_Q15[ m ], (opus_int32)*pCB_Q8++, 7 ); /* range: [ -32767 : 32767 ]*/
- sum_error_Q30 = silk_SMULBB( diff_Q15, diff_Q15 );
-
- /* Compute weighted squared quantization error for index m + 1 */
- diff_Q15 = silk_SUB_LSHIFT32( in_Q15[m + 1], (opus_int32)*pCB_Q8++, 7 ); /* range: [ -32767 : 32767 ]*/
- sum_error_Q30 = silk_SMLABB( sum_error_Q30, diff_Q15, diff_Q15 );
-
- sum_error_Q26 = silk_ADD_RSHIFT32( sum_error_Q26, sum_error_Q30, 4 );
-
- silk_assert( sum_error_Q26 >= 0 );
- silk_assert( sum_error_Q30 >= 0 );
- }
- err_Q26[ i ] = sum_error_Q26;
- }
-}
diff --git a/drivers/opus/silk/NLSF_VQ_weights_laroia.c b/drivers/opus/silk/NLSF_VQ_weights_laroia.c
deleted file mode 100644
index 5743a4dee9..0000000000
--- a/drivers/opus/silk/NLSF_VQ_weights_laroia.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/define.h"
-#include "opus/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.
-*/
-
-/* Laroia low complexity NLSF weights */
-void silk_NLSF_VQ_weights_laroia(
- opus_int16 *pNLSFW_Q_OUT, /* O Pointer to input vector weights [D] */
- const opus_int16 *pNLSF_Q15, /* I Pointer to input vector [D] */
- const opus_int D /* I Input vector dimension (even) */
-)
-{
- opus_int k;
- opus_int32 tmp1_int, tmp2_int;
-
- silk_assert( D > 0 );
- silk_assert( ( D & 1 ) == 0 );
-
- /* First value */
- tmp1_int = silk_max_int( pNLSF_Q15[ 0 ], 1 );
- tmp1_int = silk_DIV32_16( (opus_int32)1 << ( 15 + NLSF_W_Q ), tmp1_int );
- tmp2_int = silk_max_int( pNLSF_Q15[ 1 ] - pNLSF_Q15[ 0 ], 1 );
- tmp2_int = silk_DIV32_16( (opus_int32)1 << ( 15 + NLSF_W_Q ), tmp2_int );
- pNLSFW_Q_OUT[ 0 ] = (opus_int16)silk_min_int( tmp1_int + tmp2_int, silk_int16_MAX );
- silk_assert( pNLSFW_Q_OUT[ 0 ] > 0 );
-
- /* Main loop */
- for( k = 1; k < D - 1; k += 2 ) {
- tmp1_int = silk_max_int( pNLSF_Q15[ k + 1 ] - pNLSF_Q15[ k ], 1 );
- tmp1_int = silk_DIV32_16( (opus_int32)1 << ( 15 + NLSF_W_Q ), tmp1_int );
- pNLSFW_Q_OUT[ k ] = (opus_int16)silk_min_int( tmp1_int + tmp2_int, silk_int16_MAX );
- silk_assert( pNLSFW_Q_OUT[ k ] > 0 );
-
- tmp2_int = silk_max_int( pNLSF_Q15[ k + 2 ] - pNLSF_Q15[ k + 1 ], 1 );
- tmp2_int = silk_DIV32_16( (opus_int32)1 << ( 15 + NLSF_W_Q ), tmp2_int );
- pNLSFW_Q_OUT[ k + 1 ] = (opus_int16)silk_min_int( tmp1_int + tmp2_int, silk_int16_MAX );
- silk_assert( pNLSFW_Q_OUT[ k + 1 ] > 0 );
- }
-
- /* Last value */
- tmp1_int = silk_max_int( ( 1 << 15 ) - pNLSF_Q15[ D - 1 ], 1 );
- tmp1_int = silk_DIV32_16( (opus_int32)1 << ( 15 + NLSF_W_Q ), tmp1_int );
- pNLSFW_Q_OUT[ D - 1 ] = (opus_int16)silk_min_int( tmp1_int + tmp2_int, silk_int16_MAX );
- silk_assert( pNLSFW_Q_OUT[ D - 1 ] > 0 );
-}
diff --git a/drivers/opus/silk/NLSF_decode.c b/drivers/opus/silk/NLSF_decode.c
deleted file mode 100644
index 6b922f3eee..0000000000
--- a/drivers/opus/silk/NLSF_decode.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Predictive dequantizer for NLSF residuals */
-static OPUS_INLINE void silk_NLSF_residual_dequant( /* O Returns RD value in Q30 */
- opus_int16 x_Q10[], /* O Output [ order ] */
- const opus_int8 indices[], /* I Quantization indices [ order ] */
- const opus_uint8 pred_coef_Q8[], /* I Backward predictor coefs [ order ] */
- const opus_int quant_step_size_Q16, /* I Quantization step size */
- const opus_int16 order /* I Number of input values */
-)
-{
- opus_int i, out_Q10, pred_Q10;
-
- out_Q10 = 0;
- for( i = order-1; i >= 0; i-- ) {
- pred_Q10 = silk_RSHIFT( silk_SMULBB( out_Q10, (opus_int16)pred_coef_Q8[ i ] ), 8 );
- out_Q10 = silk_LSHIFT( indices[ i ], 10 );
- if( out_Q10 > 0 ) {
- out_Q10 = silk_SUB16( out_Q10, SILK_FIX_CONST( NLSF_QUANT_LEVEL_ADJ, 10 ) );
- } else if( out_Q10 < 0 ) {
- out_Q10 = silk_ADD16( out_Q10, SILK_FIX_CONST( NLSF_QUANT_LEVEL_ADJ, 10 ) );
- }
- out_Q10 = silk_SMLAWB( pred_Q10, (opus_int32)out_Q10, quant_step_size_Q16 );
- x_Q10[ i ] = out_Q10;
- }
-}
-
-
-/***********************/
-/* NLSF vector decoder */
-/***********************/
-void silk_NLSF_decode(
- opus_int16 *pNLSF_Q15, /* O Quantized NLSF vector [ LPC_ORDER ] */
- opus_int8 *NLSFIndices, /* I Codebook path vector [ LPC_ORDER + 1 ] */
- const silk_NLSF_CB_struct *psNLSF_CB /* I Codebook object */
-)
-{
- opus_int i;
- opus_uint8 pred_Q8[ MAX_LPC_ORDER ];
- opus_int16 ec_ix[ MAX_LPC_ORDER ];
- opus_int16 res_Q10[ MAX_LPC_ORDER ];
- opus_int16 W_tmp_QW[ MAX_LPC_ORDER ];
- opus_int32 W_tmp_Q9, NLSF_Q15_tmp;
- const opus_uint8 *pCB_element;
-
- /* Decode first stage */
- pCB_element = &psNLSF_CB->CB1_NLSF_Q8[ NLSFIndices[ 0 ] * psNLSF_CB->order ];
- for( i = 0; i < psNLSF_CB->order; i++ ) {
- pNLSF_Q15[ i ] = silk_LSHIFT( (opus_int16)pCB_element[ i ], 7 );
- }
-
- /* Unpack entropy table indices and predictor for current CB1 index */
- silk_NLSF_unpack( ec_ix, pred_Q8, psNLSF_CB, NLSFIndices[ 0 ] );
-
- /* Predictive residual dequantizer */
- silk_NLSF_residual_dequant( res_Q10, &NLSFIndices[ 1 ], pred_Q8, psNLSF_CB->quantStepSize_Q16, psNLSF_CB->order );
-
- /* Weights from codebook vector */
- silk_NLSF_VQ_weights_laroia( W_tmp_QW, pNLSF_Q15, psNLSF_CB->order );
-
- /* Apply inverse square-rooted weights and add to output */
- for( i = 0; i < psNLSF_CB->order; i++ ) {
- W_tmp_Q9 = silk_SQRT_APPROX( silk_LSHIFT( (opus_int32)W_tmp_QW[ i ], 18 - NLSF_W_Q ) );
- NLSF_Q15_tmp = silk_ADD32( pNLSF_Q15[ i ], silk_DIV32_16( silk_LSHIFT( (opus_int32)res_Q10[ i ], 14 ), W_tmp_Q9 ) );
- pNLSF_Q15[ i ] = (opus_int16)silk_LIMIT( NLSF_Q15_tmp, 0, 32767 );
- }
-
- /* NLSF stabilization */
- silk_NLSF_stabilize( pNLSF_Q15, psNLSF_CB->deltaMin_Q15, psNLSF_CB->order );
-}
diff --git a/drivers/opus/silk/NLSF_del_dec_quant.c b/drivers/opus/silk/NLSF_del_dec_quant.c
deleted file mode 100644
index 3f81b2028c..0000000000
--- a/drivers/opus/silk/NLSF_del_dec_quant.c
+++ /dev/null
@@ -1,214 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Delayed-decision quantizer for NLSF residuals */
-opus_int32 silk_NLSF_del_dec_quant( /* O Returns RD value in Q25 */
- opus_int8 indices[], /* O Quantization indices [ order ] */
- const opus_int16 x_Q10[], /* I Input [ order ] */
- const opus_int16 w_Q5[], /* I Weights [ order ] */
- const opus_uint8 pred_coef_Q8[], /* I Backward predictor coefs [ order ] */
- const opus_int16 ec_ix[], /* I Indices to entropy coding tables [ order ] */
- const opus_uint8 ec_rates_Q5[], /* I Rates [] */
- const opus_int quant_step_size_Q16, /* I Quantization step size */
- const opus_int16 inv_quant_step_size_Q6, /* I Inverse quantization step size */
- const opus_int32 mu_Q20, /* I R/D tradeoff */
- const opus_int16 order /* I Number of input values */
-)
-{
- opus_int i, j, nStates, ind_tmp, ind_min_max, ind_max_min, in_Q10, res_Q10;
- opus_int pred_Q10, diff_Q10, out0_Q10, out1_Q10, rate0_Q5, rate1_Q5;
- opus_int32 RD_tmp_Q25, min_Q25, min_max_Q25, max_min_Q25, pred_coef_Q16;
- opus_int ind_sort[ NLSF_QUANT_DEL_DEC_STATES ];
- opus_int8 ind[ NLSF_QUANT_DEL_DEC_STATES ][ MAX_LPC_ORDER ];
- opus_int16 prev_out_Q10[ 2 * NLSF_QUANT_DEL_DEC_STATES ];
- opus_int32 RD_Q25[ 2 * NLSF_QUANT_DEL_DEC_STATES ];
- opus_int32 RD_min_Q25[ NLSF_QUANT_DEL_DEC_STATES ];
- opus_int32 RD_max_Q25[ NLSF_QUANT_DEL_DEC_STATES ];
- const opus_uint8 *rates_Q5;
-
- opus_int out0_Q10_table[2 * NLSF_QUANT_MAX_AMPLITUDE_EXT];
- opus_int out1_Q10_table[2 * NLSF_QUANT_MAX_AMPLITUDE_EXT];
-
- for (i = -NLSF_QUANT_MAX_AMPLITUDE_EXT; i <= NLSF_QUANT_MAX_AMPLITUDE_EXT-1; i++)
- {
- out0_Q10 = silk_LSHIFT( i, 10 );
- out1_Q10 = silk_ADD16( out0_Q10, 1024 );
- if( i > 0 ) {
- out0_Q10 = silk_SUB16( out0_Q10, SILK_FIX_CONST( NLSF_QUANT_LEVEL_ADJ, 10 ) );
- out1_Q10 = silk_SUB16( out1_Q10, SILK_FIX_CONST( NLSF_QUANT_LEVEL_ADJ, 10 ) );
- } else if( i == 0 ) {
- out1_Q10 = silk_SUB16( out1_Q10, SILK_FIX_CONST( NLSF_QUANT_LEVEL_ADJ, 10 ) );
- } else if( i == -1 ) {
- out0_Q10 = silk_ADD16( out0_Q10, SILK_FIX_CONST( NLSF_QUANT_LEVEL_ADJ, 10 ) );
- } else {
- out0_Q10 = silk_ADD16( out0_Q10, SILK_FIX_CONST( NLSF_QUANT_LEVEL_ADJ, 10 ) );
- out1_Q10 = silk_ADD16( out1_Q10, SILK_FIX_CONST( NLSF_QUANT_LEVEL_ADJ, 10 ) );
- }
- out0_Q10_table[ i + NLSF_QUANT_MAX_AMPLITUDE_EXT ] = silk_SMULWB( (opus_int32)out0_Q10, quant_step_size_Q16 );
- out1_Q10_table[ i + NLSF_QUANT_MAX_AMPLITUDE_EXT ] = silk_SMULWB( (opus_int32)out1_Q10, quant_step_size_Q16 );
- }
-
- silk_assert( (NLSF_QUANT_DEL_DEC_STATES & (NLSF_QUANT_DEL_DEC_STATES-1)) == 0 ); /* must be power of two */
-
- nStates = 1;
- RD_Q25[ 0 ] = 0;
- prev_out_Q10[ 0 ] = 0;
- for( i = order - 1; ; i-- ) {
- rates_Q5 = &ec_rates_Q5[ ec_ix[ i ] ];
- pred_coef_Q16 = silk_LSHIFT( (opus_int32)pred_coef_Q8[ i ], 8 );
- in_Q10 = x_Q10[ i ];
- for( j = 0; j < nStates; j++ ) {
- pred_Q10 = silk_SMULWB( pred_coef_Q16, prev_out_Q10[ j ] );
- res_Q10 = silk_SUB16( in_Q10, pred_Q10 );
- ind_tmp = silk_SMULWB( (opus_int32)inv_quant_step_size_Q6, res_Q10 );
- ind_tmp = silk_LIMIT( ind_tmp, -NLSF_QUANT_MAX_AMPLITUDE_EXT, NLSF_QUANT_MAX_AMPLITUDE_EXT-1 );
- ind[ j ][ i ] = (opus_int8)ind_tmp;
-
- /* compute outputs for ind_tmp and ind_tmp + 1 */
- out0_Q10 = out0_Q10_table[ ind_tmp + NLSF_QUANT_MAX_AMPLITUDE_EXT ];
- out1_Q10 = out1_Q10_table[ ind_tmp + NLSF_QUANT_MAX_AMPLITUDE_EXT ];
-
- out0_Q10 = silk_ADD16( out0_Q10, pred_Q10 );
- out1_Q10 = silk_ADD16( out1_Q10, pred_Q10 );
- prev_out_Q10[ j ] = out0_Q10;
- prev_out_Q10[ j + nStates ] = out1_Q10;
-
- /* compute RD for ind_tmp and ind_tmp + 1 */
- if( ind_tmp + 1 >= NLSF_QUANT_MAX_AMPLITUDE ) {
- if( ind_tmp + 1 == NLSF_QUANT_MAX_AMPLITUDE ) {
- rate0_Q5 = rates_Q5[ ind_tmp + NLSF_QUANT_MAX_AMPLITUDE ];
- rate1_Q5 = 280;
- } else {
- rate0_Q5 = silk_SMLABB( 280 - 43 * NLSF_QUANT_MAX_AMPLITUDE, 43, ind_tmp );
- rate1_Q5 = silk_ADD16( rate0_Q5, 43 );
- }
- } else if( ind_tmp <= -NLSF_QUANT_MAX_AMPLITUDE ) {
- if( ind_tmp == -NLSF_QUANT_MAX_AMPLITUDE ) {
- rate0_Q5 = 280;
- rate1_Q5 = rates_Q5[ ind_tmp + 1 + NLSF_QUANT_MAX_AMPLITUDE ];
- } else {
- rate0_Q5 = silk_SMLABB( 280 - 43 * NLSF_QUANT_MAX_AMPLITUDE, -43, ind_tmp );
- rate1_Q5 = silk_SUB16( rate0_Q5, 43 );
- }
- } else {
- rate0_Q5 = rates_Q5[ ind_tmp + NLSF_QUANT_MAX_AMPLITUDE ];
- rate1_Q5 = rates_Q5[ ind_tmp + 1 + NLSF_QUANT_MAX_AMPLITUDE ];
- }
- RD_tmp_Q25 = RD_Q25[ j ];
- diff_Q10 = silk_SUB16( in_Q10, out0_Q10 );
- RD_Q25[ j ] = silk_SMLABB( silk_MLA( RD_tmp_Q25, silk_SMULBB( diff_Q10, diff_Q10 ), w_Q5[ i ] ), mu_Q20, rate0_Q5 );
- diff_Q10 = silk_SUB16( in_Q10, out1_Q10 );
- RD_Q25[ j + nStates ] = silk_SMLABB( silk_MLA( RD_tmp_Q25, silk_SMULBB( diff_Q10, diff_Q10 ), w_Q5[ i ] ), mu_Q20, rate1_Q5 );
- }
-
- if( nStates <= ( NLSF_QUANT_DEL_DEC_STATES >> 1 ) ) {
- /* double number of states and copy */
- for( j = 0; j < nStates; j++ ) {
- ind[ j + nStates ][ i ] = ind[ j ][ i ] + 1;
- }
- nStates = silk_LSHIFT( nStates, 1 );
- for( j = nStates; j < NLSF_QUANT_DEL_DEC_STATES; j++ ) {
- ind[ j ][ i ] = ind[ j - nStates ][ i ];
- }
- } else if( i > 0 ) {
- /* sort lower and upper half of RD_Q25, pairwise */
- for( j = 0; j < NLSF_QUANT_DEL_DEC_STATES; j++ ) {
- if( RD_Q25[ j ] > RD_Q25[ j + NLSF_QUANT_DEL_DEC_STATES ] ) {
- RD_max_Q25[ j ] = RD_Q25[ j ];
- RD_min_Q25[ j ] = RD_Q25[ j + NLSF_QUANT_DEL_DEC_STATES ];
- RD_Q25[ j ] = RD_min_Q25[ j ];
- RD_Q25[ j + NLSF_QUANT_DEL_DEC_STATES ] = RD_max_Q25[ j ];
- /* swap prev_out values */
- out0_Q10 = prev_out_Q10[ j ];
- prev_out_Q10[ j ] = prev_out_Q10[ j + NLSF_QUANT_DEL_DEC_STATES ];
- prev_out_Q10[ j + NLSF_QUANT_DEL_DEC_STATES ] = out0_Q10;
- ind_sort[ j ] = j + NLSF_QUANT_DEL_DEC_STATES;
- } else {
- RD_min_Q25[ j ] = RD_Q25[ j ];
- RD_max_Q25[ j ] = RD_Q25[ j + NLSF_QUANT_DEL_DEC_STATES ];
- ind_sort[ j ] = j;
- }
- }
- /* compare the highest RD values of the winning half with the lowest one in the losing half, and copy if necessary */
- /* afterwards ind_sort[] will contain the indices of the NLSF_QUANT_DEL_DEC_STATES winning RD values */
- while( 1 ) {
- min_max_Q25 = silk_int32_MAX;
- max_min_Q25 = 0;
- ind_min_max = 0;
- ind_max_min = 0;
- for( j = 0; j < NLSF_QUANT_DEL_DEC_STATES; j++ ) {
- if( min_max_Q25 > RD_max_Q25[ j ] ) {
- min_max_Q25 = RD_max_Q25[ j ];
- ind_min_max = j;
- }
- if( max_min_Q25 < RD_min_Q25[ j ] ) {
- max_min_Q25 = RD_min_Q25[ j ];
- ind_max_min = j;
- }
- }
- if( min_max_Q25 >= max_min_Q25 ) {
- break;
- }
- /* copy ind_min_max to ind_max_min */
- ind_sort[ ind_max_min ] = ind_sort[ ind_min_max ] ^ NLSF_QUANT_DEL_DEC_STATES;
- RD_Q25[ ind_max_min ] = RD_Q25[ ind_min_max + NLSF_QUANT_DEL_DEC_STATES ];
- prev_out_Q10[ ind_max_min ] = prev_out_Q10[ ind_min_max + NLSF_QUANT_DEL_DEC_STATES ];
- RD_min_Q25[ ind_max_min ] = 0;
- RD_max_Q25[ ind_min_max ] = silk_int32_MAX;
- silk_memcpy( ind[ ind_max_min ], ind[ ind_min_max ], MAX_LPC_ORDER * sizeof( opus_int8 ) );
- }
- /* increment index if it comes from the upper half */
- for( j = 0; j < NLSF_QUANT_DEL_DEC_STATES; j++ ) {
- ind[ j ][ i ] += silk_RSHIFT( ind_sort[ j ], NLSF_QUANT_DEL_DEC_STATES_LOG2 );
- }
- } else { /* i == 0 */
- break;
- }
- }
-
- /* last sample: find winner, copy indices and return RD value */
- ind_tmp = 0;
- min_Q25 = silk_int32_MAX;
- for( j = 0; j < 2 * NLSF_QUANT_DEL_DEC_STATES; j++ ) {
- if( min_Q25 > RD_Q25[ j ] ) {
- min_Q25 = RD_Q25[ j ];
- ind_tmp = j;
- }
- }
- for( j = 0; j < order; j++ ) {
- indices[ j ] = ind[ ind_tmp & ( NLSF_QUANT_DEL_DEC_STATES - 1 ) ][ j ];
- silk_assert( indices[ j ] >= -NLSF_QUANT_MAX_AMPLITUDE_EXT );
- silk_assert( indices[ j ] <= NLSF_QUANT_MAX_AMPLITUDE_EXT );
- }
- indices[ 0 ] += silk_RSHIFT( ind_tmp, NLSF_QUANT_DEL_DEC_STATES_LOG2 );
- silk_assert( indices[ 0 ] <= NLSF_QUANT_MAX_AMPLITUDE_EXT );
- silk_assert( min_Q25 >= 0 );
- return min_Q25;
-}
diff --git a/drivers/opus/silk/NLSF_encode.c b/drivers/opus/silk/NLSF_encode.c
deleted file mode 100644
index 9efb3e5158..0000000000
--- a/drivers/opus/silk/NLSF_encode.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-
-/***********************/
-/* NLSF vector encoder */
-/***********************/
-opus_int32 silk_NLSF_encode( /* O Returns RD value in Q25 */
- opus_int8 *NLSFIndices, /* I Codebook path vector [ LPC_ORDER + 1 ] */
- opus_int16 *pNLSF_Q15, /* I/O Quantized NLSF vector [ LPC_ORDER ] */
- const silk_NLSF_CB_struct *psNLSF_CB, /* I Codebook object */
- const opus_int16 *pW_QW, /* I NLSF weight vector [ LPC_ORDER ] */
- const opus_int NLSF_mu_Q20, /* I Rate weight for the RD optimization */
- const opus_int nSurvivors, /* I Max survivors after first stage */
- const opus_int signalType /* I Signal type: 0/1/2 */
-)
-{
- opus_int i, s, ind1, bestIndex, prob_Q8, bits_q7;
- opus_int32 W_tmp_Q9;
- VARDECL( opus_int32, err_Q26 );
- VARDECL( opus_int32, RD_Q25 );
- VARDECL( opus_int, tempIndices1 );
- VARDECL( opus_int8, tempIndices2 );
- opus_int16 res_Q15[ MAX_LPC_ORDER ];
- opus_int16 res_Q10[ MAX_LPC_ORDER ];
- opus_int16 NLSF_tmp_Q15[ MAX_LPC_ORDER ];
- opus_int16 W_tmp_QW[ MAX_LPC_ORDER ];
- opus_int16 W_adj_Q5[ MAX_LPC_ORDER ];
- opus_uint8 pred_Q8[ MAX_LPC_ORDER ];
- opus_int16 ec_ix[ MAX_LPC_ORDER ];
- const opus_uint8 *pCB_element, *iCDF_ptr;
- SAVE_STACK;
-
- silk_assert( nSurvivors <= NLSF_VQ_MAX_SURVIVORS );
- silk_assert( signalType >= 0 && signalType <= 2 );
- silk_assert( NLSF_mu_Q20 <= 32767 && NLSF_mu_Q20 >= 0 );
-
- /* NLSF stabilization */
- silk_NLSF_stabilize( pNLSF_Q15, psNLSF_CB->deltaMin_Q15, psNLSF_CB->order );
-
- /* First stage: VQ */
- ALLOC( err_Q26, psNLSF_CB->nVectors, opus_int32 );
- silk_NLSF_VQ( err_Q26, pNLSF_Q15, psNLSF_CB->CB1_NLSF_Q8, psNLSF_CB->nVectors, psNLSF_CB->order );
-
- /* Sort the quantization errors */
- ALLOC( tempIndices1, nSurvivors, opus_int );
- silk_insertion_sort_increasing( err_Q26, tempIndices1, psNLSF_CB->nVectors, nSurvivors );
-
- ALLOC( RD_Q25, nSurvivors, opus_int32 );
- ALLOC( tempIndices2, nSurvivors * MAX_LPC_ORDER, opus_int8 );
-
- /* Loop over survivors */
- for( s = 0; s < nSurvivors; s++ ) {
- ind1 = tempIndices1[ s ];
-
- /* Residual after first stage */
- pCB_element = &psNLSF_CB->CB1_NLSF_Q8[ ind1 * psNLSF_CB->order ];
- for( i = 0; i < psNLSF_CB->order; i++ ) {
- NLSF_tmp_Q15[ i ] = silk_LSHIFT16( (opus_int16)pCB_element[ i ], 7 );
- res_Q15[ i ] = pNLSF_Q15[ i ] - NLSF_tmp_Q15[ i ];
- }
-
- /* Weights from codebook vector */
- silk_NLSF_VQ_weights_laroia( W_tmp_QW, NLSF_tmp_Q15, psNLSF_CB->order );
-
- /* Apply square-rooted weights */
- for( i = 0; i < psNLSF_CB->order; i++ ) {
- W_tmp_Q9 = silk_SQRT_APPROX( silk_LSHIFT( (opus_int32)W_tmp_QW[ i ], 18 - NLSF_W_Q ) );
- res_Q10[ i ] = (opus_int16)silk_RSHIFT( silk_SMULBB( res_Q15[ i ], W_tmp_Q9 ), 14 );
- }
-
- /* Modify input weights accordingly */
- for( i = 0; i < psNLSF_CB->order; i++ ) {
- W_adj_Q5[ i ] = silk_DIV32_16( silk_LSHIFT( (opus_int32)pW_QW[ i ], 5 ), W_tmp_QW[ i ] );
- }
-
- /* Unpack entropy table indices and predictor for current CB1 index */
- silk_NLSF_unpack( ec_ix, pred_Q8, psNLSF_CB, ind1 );
-
- /* Trellis quantizer */
- RD_Q25[ s ] = silk_NLSF_del_dec_quant( &tempIndices2[ s * MAX_LPC_ORDER ], res_Q10, W_adj_Q5, pred_Q8, ec_ix,
- psNLSF_CB->ec_Rates_Q5, psNLSF_CB->quantStepSize_Q16, psNLSF_CB->invQuantStepSize_Q6, NLSF_mu_Q20, psNLSF_CB->order );
-
- /* Add rate for first stage */
- iCDF_ptr = &psNLSF_CB->CB1_iCDF[ ( signalType >> 1 ) * psNLSF_CB->nVectors ];
- if( ind1 == 0 ) {
- prob_Q8 = 256 - iCDF_ptr[ ind1 ];
- } else {
- prob_Q8 = iCDF_ptr[ ind1 - 1 ] - iCDF_ptr[ ind1 ];
- }
- bits_q7 = ( 8 << 7 ) - silk_lin2log( prob_Q8 );
- RD_Q25[ s ] = silk_SMLABB( RD_Q25[ s ], bits_q7, silk_RSHIFT( NLSF_mu_Q20, 2 ) );
- }
-
- /* Find the lowest rate-distortion error */
- silk_insertion_sort_increasing( RD_Q25, &bestIndex, nSurvivors, 1 );
-
- NLSFIndices[ 0 ] = (opus_int8)tempIndices1[ bestIndex ];
- silk_memcpy( &NLSFIndices[ 1 ], &tempIndices2[ bestIndex * MAX_LPC_ORDER ], psNLSF_CB->order * sizeof( opus_int8 ) );
-
- /* Decode */
- silk_NLSF_decode( pNLSF_Q15, NLSFIndices, psNLSF_CB );
-
- RESTORE_STACK;
- return RD_Q25[ 0 ];
-}
diff --git a/drivers/opus/silk/NLSF_stabilize.c b/drivers/opus/silk/NLSF_stabilize.c
deleted file mode 100644
index 1a45e16925..0000000000
--- a/drivers/opus/silk/NLSF_stabilize.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/* NLSF stabilizer: */
-/* */
-/* - Moves NLSFs further 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 "opus/silk/SigProc_FIX.h"
-
-/* Constant Definitions */
-#define MAX_LOOPS 20
-
-/* NLSF stabilizer, for a single input data vector */
-void silk_NLSF_stabilize(
- opus_int16 *NLSF_Q15, /* I/O Unstable/stabilized normalized LSF vector in Q15 [L] */
- const opus_int16 *NDeltaMin_Q15, /* I Min distance vector, NDeltaMin_Q15[L] must be >= 1 [L+1] */
- const opus_int L /* I Number of NLSF parameters in the input vector */
-)
-{
- opus_int i, I=0, k, loops;
- opus_int16 center_freq_Q15;
- opus_int32 diff_Q15, min_diff_Q15, min_center_Q15, max_center_Q15;
-
- /* This is necessary to ensure an output within range of a opus_int16 */
- silk_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 += silk_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 -= silk_RSHIFT( NDeltaMin_Q15[I], 1 );
-
- /* Move apart, sorted by value, keeping the same center frequency */
- center_freq_Q15 = (opus_int16)silk_LIMIT_32( silk_RSHIFT_ROUND( (opus_int32)NLSF_Q15[I-1] + (opus_int32)NLSF_Q15[I], 1 ),
- min_center_Q15, max_center_Q15 );
- NLSF_Q15[I-1] = center_freq_Q15 - silk_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 */
- silk_insertion_sort_increasing_all_values_int16( &NLSF_Q15[0], L );
-
- /* First NLSF should be no less than NDeltaMin[0] */
- NLSF_Q15[0] = silk_max_int( NLSF_Q15[0], NDeltaMin_Q15[0] );
-
- /* Keep delta_min distance between the NLSFs */
- for( i = 1; i < L; i++ )
- NLSF_Q15[i] = silk_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] = silk_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] = silk_min_int( NLSF_Q15[i], NLSF_Q15[i+1] - NDeltaMin_Q15[i+1] );
- }
-}
diff --git a/drivers/opus/silk/NLSF_unpack.c b/drivers/opus/silk/NLSF_unpack.c
deleted file mode 100644
index c958f4a6ef..0000000000
--- a/drivers/opus/silk/NLSF_unpack.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Unpack predictor values and indices for entropy coding tables */
-void silk_NLSF_unpack(
- opus_int16 ec_ix[], /* O Indices to entropy tables [ LPC_ORDER ] */
- opus_uint8 pred_Q8[], /* O LSF predictor [ LPC_ORDER ] */
- const silk_NLSF_CB_struct *psNLSF_CB, /* I Codebook object */
- const opus_int CB1_index /* I Index of vector in first LSF codebook */
-)
-{
- opus_int i;
- opus_uint8 entry;
- const opus_uint8 *ec_sel_ptr;
-
- ec_sel_ptr = &psNLSF_CB->ec_sel[ CB1_index * psNLSF_CB->order / 2 ];
- for( i = 0; i < psNLSF_CB->order; i += 2 ) {
- entry = *ec_sel_ptr++;
- ec_ix [ i ] = silk_SMULBB( silk_RSHIFT( entry, 1 ) & 7, 2 * NLSF_QUANT_MAX_AMPLITUDE + 1 );
- pred_Q8[ i ] = psNLSF_CB->pred_Q8[ i + ( entry & 1 ) * ( psNLSF_CB->order - 1 ) ];
- ec_ix [ i + 1 ] = silk_SMULBB( silk_RSHIFT( entry, 5 ) & 7, 2 * NLSF_QUANT_MAX_AMPLITUDE + 1 );
- pred_Q8[ i + 1 ] = psNLSF_CB->pred_Q8[ i + ( silk_RSHIFT( entry, 4 ) & 1 ) * ( psNLSF_CB->order - 1 ) + 1 ];
- }
-}
-
diff --git a/drivers/opus/silk/NSQ.c b/drivers/opus/silk/NSQ.c
deleted file mode 100644
index e41e533bde..0000000000
--- a/drivers/opus/silk/NSQ.c
+++ /dev/null
@@ -1,450 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-
-static OPUS_INLINE void silk_nsq_scale_states(
- const silk_encoder_state *psEncC, /* I Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- const opus_int32 x_Q3[], /* I input in Q3 */
- opus_int32 x_sc_Q10[], /* O input scaled with 1/Gain */
- const opus_int16 sLTP[], /* I re-whitened LTP state in Q0 */
- opus_int32 sLTP_Q15[], /* O LTP state matching scaled input */
- opus_int subfr, /* I subframe number */
- const opus_int LTP_scale_Q14, /* I */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lag */
- const opus_int signal_type /* I Signal type */
-);
-
-#if !defined(OPUS_X86_MAY_HAVE_SSE4_1)
-static OPUS_INLINE void silk_noise_shape_quantizer(
- silk_nsq_state *NSQ, /* I/O NSQ state */
- opus_int signalType, /* I Signal type */
- const opus_int32 x_sc_Q10[], /* I */
- opus_int8 pulses[], /* O */
- opus_int16 xq[], /* O */
- opus_int32 sLTP_Q15[], /* I/O LTP state */
- const opus_int16 a_Q12[], /* I Short term prediction coefs */
- const opus_int16 b_Q14[], /* I Long term prediction coefs */
- const opus_int16 AR_shp_Q13[], /* I Noise shaping AR coefs */
- opus_int lag, /* I Pitch lag */
- opus_int32 HarmShapeFIRPacked_Q14, /* I */
- opus_int Tilt_Q14, /* I Spectral tilt */
- opus_int32 LF_shp_Q14, /* I */
- opus_int32 Gain_Q16, /* I */
- opus_int Lambda_Q10, /* I */
- opus_int offset_Q10, /* I */
- opus_int length, /* I Input length */
- opus_int shapingLPCOrder, /* I Noise shaping AR filter order */
- opus_int predictLPCOrder /* I Prediction filter order */
-);
-#endif
-
-void silk_NSQ_c
-(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-)
-{
- opus_int k, lag, start_idx, LSF_interpolation_flag;
- const opus_int16 *A_Q12, *B_Q14, *AR_shp_Q13;
- opus_int16 *pxq;
- VARDECL( opus_int32, sLTP_Q15 );
- VARDECL( opus_int16, sLTP );
- opus_int32 HarmShapeFIRPacked_Q14;
- opus_int offset_Q10;
- VARDECL( opus_int32, x_sc_Q10 );
- SAVE_STACK;
-
- NSQ->rand_seed = psIndices->Seed;
-
- /* Set unvoiced lag to the previous one, overwrite later for voiced */
- lag = NSQ->lagPrev;
-
- silk_assert( NSQ->prev_gain_Q16 != 0 );
-
- offset_Q10 = silk_Quantization_Offsets_Q10[ psIndices->signalType >> 1 ][ psIndices->quantOffsetType ];
-
- if( psIndices->NLSFInterpCoef_Q2 == 4 ) {
- LSF_interpolation_flag = 0;
- } else {
- LSF_interpolation_flag = 1;
- }
-
- ALLOC( sLTP_Q15,
- psEncC->ltp_mem_length + psEncC->frame_length, opus_int32 );
- ALLOC( sLTP, psEncC->ltp_mem_length + psEncC->frame_length, opus_int16 );
- ALLOC( x_sc_Q10, psEncC->subfr_length, opus_int32 );
- /* Set up pointers to start of sub frame */
- NSQ->sLTP_shp_buf_idx = psEncC->ltp_mem_length;
- NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;
- pxq = &NSQ->xq[ psEncC->ltp_mem_length ];
- for( k = 0; k < psEncC->nb_subfr; k++ ) {
- A_Q12 = &PredCoef_Q12[ (( k >> 1 ) | ( 1 - LSF_interpolation_flag )) * MAX_LPC_ORDER ];
- B_Q14 = &LTPCoef_Q14[ k * LTP_ORDER ];
- AR_shp_Q13 = &AR2_Q13[ k * MAX_SHAPE_LPC_ORDER ];
-
- /* Noise shape parameters */
- silk_assert( HarmShapeGain_Q14[ k ] >= 0 );
- HarmShapeFIRPacked_Q14 = silk_RSHIFT( HarmShapeGain_Q14[ k ], 2 );
- HarmShapeFIRPacked_Q14 |= silk_LSHIFT( (opus_int32)silk_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 );
-
- NSQ->rewhite_flag = 0;
- if( psIndices->signalType == TYPE_VOICED ) {
- /* Voiced */
- lag = pitchL[ k ];
-
- /* Re-whitening */
- if( ( k & ( 3 - silk_LSHIFT( LSF_interpolation_flag, 1 ) ) ) == 0 ) {
- /* Rewhiten with new A coefs */
- start_idx = psEncC->ltp_mem_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2;
- silk_assert( start_idx > 0 );
-
- silk_LPC_analysis_filter( &sLTP[ start_idx ], &NSQ->xq[ start_idx + k * psEncC->subfr_length ],
- A_Q12, psEncC->ltp_mem_length - start_idx, psEncC->predictLPCOrder, psEncC->arch );
-
- NSQ->rewhite_flag = 1;
- NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;
- }
- }
-
- silk_nsq_scale_states( psEncC, NSQ, x_Q3, x_sc_Q10, sLTP, sLTP_Q15, k, LTP_scale_Q14, Gains_Q16, pitchL, psIndices->signalType );
-
- silk_noise_shape_quantizer( NSQ, psIndices->signalType, x_sc_Q10, pulses, pxq, sLTP_Q15, 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_Q3 += psEncC->subfr_length;
- pulses += psEncC->subfr_length;
- pxq += psEncC->subfr_length;
- }
-
- /* Update lagPrev for next frame */
- NSQ->lagPrev = pitchL[ psEncC->nb_subfr - 1 ];
-
- /* Save quantized speech and noise shaping signals */
- /* DEBUG_STORE_DATA( enc.pcm, &NSQ->xq[ psEncC->ltp_mem_length ], psEncC->frame_length * sizeof( opus_int16 ) ) */
- silk_memmove( NSQ->xq, &NSQ->xq[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( opus_int16 ) );
- silk_memmove( NSQ->sLTP_shp_Q14, &NSQ->sLTP_shp_Q14[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( opus_int32 ) );
- RESTORE_STACK;
-}
-
-/***********************************/
-/* silk_noise_shape_quantizer */
-/***********************************/
-
-#if !defined(OPUS_X86_MAY_HAVE_SSE4_1)
-static OPUS_INLINE
-#endif
-void silk_noise_shape_quantizer(
- silk_nsq_state *NSQ, /* I/O NSQ state */
- opus_int signalType, /* I Signal type */
- const opus_int32 x_sc_Q10[], /* I */
- opus_int8 pulses[], /* O */
- opus_int16 xq[], /* O */
- opus_int32 sLTP_Q15[], /* I/O LTP state */
- const opus_int16 a_Q12[], /* I Short term prediction coefs */
- const opus_int16 b_Q14[], /* I Long term prediction coefs */
- const opus_int16 AR_shp_Q13[], /* I Noise shaping AR coefs */
- opus_int lag, /* I Pitch lag */
- opus_int32 HarmShapeFIRPacked_Q14, /* I */
- opus_int Tilt_Q14, /* I Spectral tilt */
- opus_int32 LF_shp_Q14, /* I */
- opus_int32 Gain_Q16, /* I */
- opus_int Lambda_Q10, /* I */
- opus_int offset_Q10, /* I */
- opus_int length, /* I Input length */
- opus_int shapingLPCOrder, /* I Noise shaping AR filter order */
- opus_int predictLPCOrder /* I Prediction filter order */
-)
-{
- opus_int i, j;
- opus_int32 LTP_pred_Q13, LPC_pred_Q10, n_AR_Q12, n_LTP_Q13;
- opus_int32 n_LF_Q12, r_Q10, rr_Q10, q1_Q0, q1_Q10, q2_Q10, rd1_Q20, rd2_Q20;
- opus_int32 exc_Q14, LPC_exc_Q14, xq_Q14, Gain_Q10;
- opus_int32 tmp1, tmp2, sLF_AR_shp_Q14;
- opus_int32 *psLPC_Q14, *shp_lag_ptr, *pred_lag_ptr;
-
- shp_lag_ptr = &NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ];
- pred_lag_ptr = &sLTP_Q15[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
- Gain_Q10 = silk_RSHIFT( Gain_Q16, 6 );
-
- /* Set up short term AR state */
- psLPC_Q14 = &NSQ->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - 1 ];
-
- for( i = 0; i < length; i++ ) {
- /* Generate dither */
- NSQ->rand_seed = silk_RAND( NSQ->rand_seed );
-
- /* Short-term prediction */
- silk_assert( predictLPCOrder == 10 || predictLPCOrder == 16 );
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LPC_pred_Q10 = silk_RSHIFT( predictLPCOrder, 1 );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ 0 ], a_Q12[ 0 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -1 ], a_Q12[ 1 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -2 ], a_Q12[ 2 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -3 ], a_Q12[ 3 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -4 ], a_Q12[ 4 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -5 ], a_Q12[ 5 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -6 ], a_Q12[ 6 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -7 ], a_Q12[ 7 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -8 ], a_Q12[ 8 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -9 ], a_Q12[ 9 ] );
- if( predictLPCOrder == 16 ) {
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -10 ], a_Q12[ 10 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -11 ], a_Q12[ 11 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -12 ], a_Q12[ 12 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -13 ], a_Q12[ 13 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -14 ], a_Q12[ 14 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -15 ], a_Q12[ 15 ] );
- }
-
- /* Long-term prediction */
- if( signalType == TYPE_VOICED ) {
- /* Unrolled loop */
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LTP_pred_Q13 = 2;
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ 0 ], b_Q14[ 0 ] );
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ -1 ], b_Q14[ 1 ] );
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ -2 ], b_Q14[ 2 ] );
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ -3 ], b_Q14[ 3 ] );
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ -4 ], b_Q14[ 4 ] );
- pred_lag_ptr++;
- } else {
- LTP_pred_Q13 = 0;
- }
-
- /* Noise shape feedback */
- silk_assert( ( shapingLPCOrder & 1 ) == 0 ); /* check that order is even */
- tmp2 = psLPC_Q14[ 0 ];
- tmp1 = NSQ->sAR2_Q14[ 0 ];
- NSQ->sAR2_Q14[ 0 ] = tmp2;
- n_AR_Q12 = silk_RSHIFT( shapingLPCOrder, 1 );
- n_AR_Q12 = silk_SMLAWB( n_AR_Q12, tmp2, AR_shp_Q13[ 0 ] );
- for( j = 2; j < shapingLPCOrder; j += 2 ) {
- tmp2 = NSQ->sAR2_Q14[ j - 1 ];
- NSQ->sAR2_Q14[ j - 1 ] = tmp1;
- n_AR_Q12 = silk_SMLAWB( n_AR_Q12, tmp1, AR_shp_Q13[ j - 1 ] );
- tmp1 = NSQ->sAR2_Q14[ j + 0 ];
- NSQ->sAR2_Q14[ j + 0 ] = tmp2;
- n_AR_Q12 = silk_SMLAWB( n_AR_Q12, tmp2, AR_shp_Q13[ j ] );
- }
- NSQ->sAR2_Q14[ shapingLPCOrder - 1 ] = tmp1;
- n_AR_Q12 = silk_SMLAWB( n_AR_Q12, tmp1, AR_shp_Q13[ shapingLPCOrder - 1 ] );
-
- n_AR_Q12 = silk_LSHIFT32( n_AR_Q12, 1 ); /* Q11 -> Q12 */
- n_AR_Q12 = silk_SMLAWB( n_AR_Q12, NSQ->sLF_AR_shp_Q14, Tilt_Q14 );
-
- n_LF_Q12 = silk_SMULWB( NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - 1 ], LF_shp_Q14 );
- n_LF_Q12 = silk_SMLAWT( n_LF_Q12, NSQ->sLF_AR_shp_Q14, LF_shp_Q14 );
-
- silk_assert( lag > 0 || signalType != TYPE_VOICED );
-
- /* Combine prediction and noise shaping signals */
- tmp1 = silk_SUB32( silk_LSHIFT32( LPC_pred_Q10, 2 ), n_AR_Q12 ); /* Q12 */
- tmp1 = silk_SUB32( tmp1, n_LF_Q12 ); /* Q12 */
- if( lag > 0 ) {
- /* Symmetric, packed FIR coefficients */
- n_LTP_Q13 = silk_SMULWB( silk_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 );
- n_LTP_Q13 = silk_SMLAWT( n_LTP_Q13, shp_lag_ptr[ -1 ], HarmShapeFIRPacked_Q14 );
- n_LTP_Q13 = silk_LSHIFT( n_LTP_Q13, 1 );
- shp_lag_ptr++;
-
- tmp2 = silk_SUB32( LTP_pred_Q13, n_LTP_Q13 ); /* Q13 */
- tmp1 = silk_ADD_LSHIFT32( tmp2, tmp1, 1 ); /* Q13 */
- tmp1 = silk_RSHIFT_ROUND( tmp1, 3 ); /* Q10 */
- } else {
- tmp1 = silk_RSHIFT_ROUND( tmp1, 2 ); /* Q10 */
- }
-
- r_Q10 = silk_SUB32( x_sc_Q10[ i ], tmp1 ); /* residual error Q10 */
-
- /* Flip sign depending on dither */
- if ( NSQ->rand_seed < 0 ) {
- r_Q10 = -r_Q10;
- }
- r_Q10 = silk_LIMIT_32( r_Q10, -(31 << 10), 30 << 10 );
-
- /* Find two quantization level candidates and measure their rate-distortion */
- q1_Q10 = silk_SUB32( r_Q10, offset_Q10 );
- q1_Q0 = silk_RSHIFT( q1_Q10, 10 );
- if( q1_Q0 > 0 ) {
- q1_Q10 = silk_SUB32( silk_LSHIFT( q1_Q0, 10 ), QUANT_LEVEL_ADJUST_Q10 );
- q1_Q10 = silk_ADD32( q1_Q10, offset_Q10 );
- q2_Q10 = silk_ADD32( q1_Q10, 1024 );
- rd1_Q20 = silk_SMULBB( q1_Q10, Lambda_Q10 );
- rd2_Q20 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else if( q1_Q0 == 0 ) {
- q1_Q10 = offset_Q10;
- q2_Q10 = silk_ADD32( q1_Q10, 1024 - QUANT_LEVEL_ADJUST_Q10 );
- rd1_Q20 = silk_SMULBB( q1_Q10, Lambda_Q10 );
- rd2_Q20 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else if( q1_Q0 == -1 ) {
- q2_Q10 = offset_Q10;
- q1_Q10 = silk_SUB32( q2_Q10, 1024 - QUANT_LEVEL_ADJUST_Q10 );
- rd1_Q20 = silk_SMULBB( -q1_Q10, Lambda_Q10 );
- rd2_Q20 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else { /* Q1_Q0 < -1 */
- q1_Q10 = silk_ADD32( silk_LSHIFT( q1_Q0, 10 ), QUANT_LEVEL_ADJUST_Q10 );
- q1_Q10 = silk_ADD32( q1_Q10, offset_Q10 );
- q2_Q10 = silk_ADD32( q1_Q10, 1024 );
- rd1_Q20 = silk_SMULBB( -q1_Q10, Lambda_Q10 );
- rd2_Q20 = silk_SMULBB( -q2_Q10, Lambda_Q10 );
- }
- rr_Q10 = silk_SUB32( r_Q10, q1_Q10 );
- rd1_Q20 = silk_SMLABB( rd1_Q20, rr_Q10, rr_Q10 );
- rr_Q10 = silk_SUB32( r_Q10, q2_Q10 );
- rd2_Q20 = silk_SMLABB( rd2_Q20, rr_Q10, rr_Q10 );
-
- if( rd2_Q20 < rd1_Q20 ) {
- q1_Q10 = q2_Q10;
- }
-
- pulses[ i ] = (opus_int8)silk_RSHIFT_ROUND( q1_Q10, 10 );
-
- /* Excitation */
- exc_Q14 = silk_LSHIFT( q1_Q10, 4 );
- if ( NSQ->rand_seed < 0 ) {
- exc_Q14 = -exc_Q14;
- }
-
- /* Add predictions */
- LPC_exc_Q14 = silk_ADD_LSHIFT32( exc_Q14, LTP_pred_Q13, 1 );
- xq_Q14 = silk_ADD_LSHIFT32( LPC_exc_Q14, LPC_pred_Q10, 4 );
-
- /* Scale XQ back to normal level before saving */
- xq[ i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( silk_SMULWW( xq_Q14, Gain_Q10 ), 8 ) );
-
- /* Update states */
- psLPC_Q14++;
- *psLPC_Q14 = xq_Q14;
- sLF_AR_shp_Q14 = silk_SUB_LSHIFT32( xq_Q14, n_AR_Q12, 2 );
- NSQ->sLF_AR_shp_Q14 = sLF_AR_shp_Q14;
-
- NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx ] = silk_SUB_LSHIFT32( sLF_AR_shp_Q14, n_LF_Q12, 2 );
- sLTP_Q15[ NSQ->sLTP_buf_idx ] = silk_LSHIFT( LPC_exc_Q14, 1 );
- NSQ->sLTP_shp_buf_idx++;
- NSQ->sLTP_buf_idx++;
-
- /* Make dither dependent on quantized signal */
- NSQ->rand_seed = silk_ADD32_ovflw( NSQ->rand_seed, pulses[ i ] );
- }
-
- /* Update LPC synth buffer */
- silk_memcpy( NSQ->sLPC_Q14, &NSQ->sLPC_Q14[ length ], NSQ_LPC_BUF_LENGTH * sizeof( opus_int32 ) );
-}
-
-static OPUS_INLINE void silk_nsq_scale_states(
- const silk_encoder_state *psEncC, /* I Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- const opus_int32 x_Q3[], /* I input in Q3 */
- opus_int32 x_sc_Q10[], /* O input scaled with 1/Gain */
- const opus_int16 sLTP[], /* I re-whitened LTP state in Q0 */
- opus_int32 sLTP_Q15[], /* O LTP state matching scaled input */
- opus_int subfr, /* I subframe number */
- const opus_int LTP_scale_Q14, /* I */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lag */
- const opus_int signal_type /* I Signal type */
-)
-{
- opus_int i, lag;
- opus_int32 gain_adj_Q16, inv_gain_Q31, inv_gain_Q23;
-
- lag = pitchL[ subfr ];
- inv_gain_Q31 = silk_INVERSE32_varQ( silk_max( Gains_Q16[ subfr ], 1 ), 47 );
- silk_assert( inv_gain_Q31 != 0 );
-
- /* Calculate gain adjustment factor */
- if( Gains_Q16[ subfr ] != NSQ->prev_gain_Q16 ) {
- gain_adj_Q16 = silk_DIV32_varQ( NSQ->prev_gain_Q16, Gains_Q16[ subfr ], 16 );
- } else {
- gain_adj_Q16 = (opus_int32)1 << 16;
- }
-
- /* Scale input */
- inv_gain_Q23 = silk_RSHIFT_ROUND( inv_gain_Q31, 8 );
- for( i = 0; i < psEncC->subfr_length; i++ ) {
- x_sc_Q10[ i ] = silk_SMULWW( x_Q3[ i ], inv_gain_Q23 );
- }
-
- /* Save inverse gain */
- NSQ->prev_gain_Q16 = Gains_Q16[ subfr ];
-
- /* After rewhitening the LTP state is un-scaled, so scale with inv_gain_Q16 */
- if( NSQ->rewhite_flag ) {
- if( subfr == 0 ) {
- /* Do LTP downscaling */
- inv_gain_Q31 = silk_LSHIFT( silk_SMULWB( inv_gain_Q31, LTP_scale_Q14 ), 2 );
- }
- for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
- silk_assert( i < MAX_FRAME_LENGTH );
- sLTP_Q15[ i ] = silk_SMULWB( inv_gain_Q31, sLTP[ i ] );
- }
- }
-
- /* Adjust for changing gain */
- if( gain_adj_Q16 != (opus_int32)1 << 16 ) {
- /* Scale long-term shaping state */
- for( i = NSQ->sLTP_shp_buf_idx - psEncC->ltp_mem_length; i < NSQ->sLTP_shp_buf_idx; i++ ) {
- NSQ->sLTP_shp_Q14[ i ] = silk_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q14[ i ] );
- }
-
- /* Scale long-term prediction state */
- if( signal_type == TYPE_VOICED && NSQ->rewhite_flag == 0 ) {
- for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
- sLTP_Q15[ i ] = silk_SMULWW( gain_adj_Q16, sLTP_Q15[ i ] );
- }
- }
-
- NSQ->sLF_AR_shp_Q14 = silk_SMULWW( gain_adj_Q16, NSQ->sLF_AR_shp_Q14 );
-
- /* Scale short-term prediction and shaping states */
- for( i = 0; i < NSQ_LPC_BUF_LENGTH; i++ ) {
- NSQ->sLPC_Q14[ i ] = silk_SMULWW( gain_adj_Q16, NSQ->sLPC_Q14[ i ] );
- }
- for( i = 0; i < MAX_SHAPE_LPC_ORDER; i++ ) {
- NSQ->sAR2_Q14[ i ] = silk_SMULWW( gain_adj_Q16, NSQ->sAR2_Q14[ i ] );
- }
- }
-}
diff --git a/drivers/opus/silk/NSQ_del_dec.c b/drivers/opus/silk/NSQ_del_dec.c
deleted file mode 100644
index 28b385e415..0000000000
--- a/drivers/opus/silk/NSQ_del_dec.c
+++ /dev/null
@@ -1,721 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-
-typedef struct {
- opus_int32 sLPC_Q14[ MAX_SUB_FRAME_LENGTH + NSQ_LPC_BUF_LENGTH ];
- opus_int32 RandState[ DECISION_DELAY ];
- opus_int32 Q_Q10[ DECISION_DELAY ];
- opus_int32 Xq_Q14[ DECISION_DELAY ];
- opus_int32 Pred_Q15[ DECISION_DELAY ];
- opus_int32 Shape_Q14[ DECISION_DELAY ];
- opus_int32 sAR2_Q14[ MAX_SHAPE_LPC_ORDER ];
- opus_int32 LF_AR_Q14;
- opus_int32 Seed;
- opus_int32 SeedInit;
- opus_int32 RD_Q10;
-} NSQ_del_dec_struct;
-
-typedef struct {
- opus_int32 Q_Q10;
- opus_int32 RD_Q10;
- opus_int32 xq_Q14;
- opus_int32 LF_AR_Q14;
- opus_int32 sLTP_shp_Q14;
- opus_int32 LPC_exc_Q14;
-} NSQ_sample_struct;
-
-typedef NSQ_sample_struct NSQ_sample_pair[ 2 ];
-
-#if defined(MIPSr1_ASM)
-#include "opus/silk/mips/NSQ_del_dec_mipsr1.h"
-#endif
-static OPUS_INLINE void silk_nsq_del_dec_scale_states(
- const silk_encoder_state *psEncC, /* I Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */
- const opus_int32 x_Q3[], /* I Input in Q3 */
- opus_int32 x_sc_Q10[], /* O Input scaled with 1/Gain in Q10 */
- const opus_int16 sLTP[], /* I Re-whitened LTP state in Q0 */
- opus_int32 sLTP_Q15[], /* O LTP state matching scaled input */
- opus_int subfr, /* I Subframe number */
- opus_int nStatesDelayedDecision, /* I Number of del dec states */
- const opus_int LTP_scale_Q14, /* I LTP state scaling */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lag */
- const opus_int signal_type, /* I Signal type */
- const opus_int decisionDelay /* I Decision delay */
-);
-
-/******************************************/
-/* Noise shape quantizer for one subframe */
-/******************************************/
-static OPUS_INLINE void silk_noise_shape_quantizer_del_dec(
- silk_nsq_state *NSQ, /* I/O NSQ state */
- NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */
- opus_int signalType, /* I Signal type */
- const opus_int32 x_Q10[], /* I */
- opus_int8 pulses[], /* O */
- opus_int16 xq[], /* O */
- opus_int32 sLTP_Q15[], /* I/O LTP filter state */
- opus_int32 delayedGain_Q10[], /* I/O Gain delay buffer */
- const opus_int16 a_Q12[], /* I Short term prediction coefs */
- const opus_int16 b_Q14[], /* I Long term prediction coefs */
- const opus_int16 AR_shp_Q13[], /* I Noise shaping coefs */
- opus_int lag, /* I Pitch lag */
- opus_int32 HarmShapeFIRPacked_Q14, /* I */
- opus_int Tilt_Q14, /* I Spectral tilt */
- opus_int32 LF_shp_Q14, /* I */
- opus_int32 Gain_Q16, /* I */
- opus_int Lambda_Q10, /* I */
- opus_int offset_Q10, /* I */
- opus_int length, /* I Input length */
- opus_int subfr, /* I Subframe number */
- opus_int shapingLPCOrder, /* I Shaping LPC filter order */
- opus_int predictLPCOrder, /* I Prediction filter order */
- opus_int warping_Q16, /* I */
- opus_int nStatesDelayedDecision, /* I Number of states in decision tree */
- opus_int *smpl_buf_idx, /* I Index to newest samples in buffers */
- opus_int decisionDelay /* I */
-);
-
-void silk_NSQ_del_dec_c(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-)
-{
- opus_int i, k, lag, start_idx, LSF_interpolation_flag, Winner_ind, subfr;
- opus_int last_smple_idx, smpl_buf_idx, decisionDelay;
- const opus_int16 *A_Q12, *B_Q14, *AR_shp_Q13;
- opus_int16 *pxq;
- VARDECL( opus_int32, sLTP_Q15 );
- VARDECL( opus_int16, sLTP );
- opus_int32 HarmShapeFIRPacked_Q14;
- opus_int offset_Q10;
- opus_int32 RDmin_Q10, Gain_Q10;
- VARDECL( opus_int32, x_sc_Q10 );
- VARDECL( opus_int32, delayedGain_Q10 );
- VARDECL( NSQ_del_dec_struct, psDelDec );
- NSQ_del_dec_struct *psDD;
- SAVE_STACK;
-
- /* Set unvoiced lag to the previous one, overwrite later for voiced */
- lag = NSQ->lagPrev;
-
- silk_assert( NSQ->prev_gain_Q16 != 0 );
-
- /* Initialize delayed decision states */
- ALLOC( psDelDec, psEncC->nStatesDelayedDecision, NSQ_del_dec_struct );
- silk_memset( psDelDec, 0, psEncC->nStatesDelayedDecision * sizeof( NSQ_del_dec_struct ) );
- for( k = 0; k < psEncC->nStatesDelayedDecision; k++ ) {
- psDD = &psDelDec[ k ];
- psDD->Seed = ( k + psIndices->Seed ) & 3;
- psDD->SeedInit = psDD->Seed;
- psDD->RD_Q10 = 0;
- psDD->LF_AR_Q14 = NSQ->sLF_AR_shp_Q14;
- psDD->Shape_Q14[ 0 ] = NSQ->sLTP_shp_Q14[ psEncC->ltp_mem_length - 1 ];
- silk_memcpy( psDD->sLPC_Q14, NSQ->sLPC_Q14, NSQ_LPC_BUF_LENGTH * sizeof( opus_int32 ) );
- silk_memcpy( psDD->sAR2_Q14, NSQ->sAR2_Q14, sizeof( NSQ->sAR2_Q14 ) );
- }
-
- offset_Q10 = silk_Quantization_Offsets_Q10[ psIndices->signalType >> 1 ][ psIndices->quantOffsetType ];
- smpl_buf_idx = 0; /* index of oldest samples */
-
- decisionDelay = silk_min_int( DECISION_DELAY, psEncC->subfr_length );
-
- /* For voiced frames limit the decision delay to lower than the pitch lag */
- if( psIndices->signalType == TYPE_VOICED ) {
- for( k = 0; k < psEncC->nb_subfr; k++ ) {
- decisionDelay = silk_min_int( decisionDelay, pitchL[ k ] - LTP_ORDER / 2 - 1 );
- }
- } else {
- if( lag > 0 ) {
- decisionDelay = silk_min_int( decisionDelay, lag - LTP_ORDER / 2 - 1 );
- }
- }
-
- if( psIndices->NLSFInterpCoef_Q2 == 4 ) {
- LSF_interpolation_flag = 0;
- } else {
- LSF_interpolation_flag = 1;
- }
-
- ALLOC( sLTP_Q15,
- psEncC->ltp_mem_length + psEncC->frame_length, opus_int32 );
- ALLOC( sLTP, psEncC->ltp_mem_length + psEncC->frame_length, opus_int16 );
- ALLOC( x_sc_Q10, psEncC->subfr_length, opus_int32 );
- ALLOC( delayedGain_Q10, DECISION_DELAY, opus_int32 );
- /* Set up pointers to start of sub frame */
- pxq = &NSQ->xq[ psEncC->ltp_mem_length ];
- NSQ->sLTP_shp_buf_idx = psEncC->ltp_mem_length;
- NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;
- subfr = 0;
- for( k = 0; k < psEncC->nb_subfr; k++ ) {
- A_Q12 = &PredCoef_Q12[ ( ( k >> 1 ) | ( 1 - LSF_interpolation_flag ) ) * MAX_LPC_ORDER ];
- B_Q14 = &LTPCoef_Q14[ k * LTP_ORDER ];
- AR_shp_Q13 = &AR2_Q13[ k * MAX_SHAPE_LPC_ORDER ];
-
- /* Noise shape parameters */
- silk_assert( HarmShapeGain_Q14[ k ] >= 0 );
- HarmShapeFIRPacked_Q14 = silk_RSHIFT( HarmShapeGain_Q14[ k ], 2 );
- HarmShapeFIRPacked_Q14 |= silk_LSHIFT( (opus_int32)silk_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 );
-
- NSQ->rewhite_flag = 0;
- if( psIndices->signalType == TYPE_VOICED ) {
- /* Voiced */
- lag = pitchL[ k ];
-
- /* Re-whitening */
- if( ( k & ( 3 - silk_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 += ( silk_int32_MAX >> 4 );
- silk_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;
- pulses[ i - decisionDelay ] = (opus_int8)silk_RSHIFT_ROUND( psDD->Q_Q10[ last_smple_idx ], 10 );
- pxq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND(
- silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], Gains_Q16[ 1 ] ), 14 ) );
- NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q14[ last_smple_idx ];
- }
-
- subfr = 0;
- }
-
- /* Rewhiten with new A coefs */
- start_idx = psEncC->ltp_mem_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2;
- silk_assert( start_idx > 0 );
-
- silk_LPC_analysis_filter( &sLTP[ start_idx ], &NSQ->xq[ start_idx + k * psEncC->subfr_length ],
- A_Q12, psEncC->ltp_mem_length - start_idx, psEncC->predictLPCOrder, psEncC->arch );
-
- NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;
- NSQ->rewhite_flag = 1;
- }
- }
-
- silk_nsq_del_dec_scale_states( psEncC, NSQ, psDelDec, x_Q3, x_sc_Q10, sLTP, sLTP_Q15, k,
- psEncC->nStatesDelayedDecision, LTP_scale_Q14, Gains_Q16, pitchL, psIndices->signalType, decisionDelay );
-
- silk_noise_shape_quantizer_del_dec( NSQ, psDelDec, psIndices->signalType, x_sc_Q10, pulses, pxq, sLTP_Q15,
- delayedGain_Q10, 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->warping_Q16, psEncC->nStatesDelayedDecision, &smpl_buf_idx, decisionDelay );
-
- x_Q3 += psEncC->subfr_length;
- pulses += 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 ];
- psIndices->Seed = psDD->SeedInit;
- last_smple_idx = smpl_buf_idx + decisionDelay;
- Gain_Q10 = silk_RSHIFT32( Gains_Q16[ psEncC->nb_subfr - 1 ], 6 );
- for( i = 0; i < decisionDelay; i++ ) {
- last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK;
- pulses[ i - decisionDelay ] = (opus_int8)silk_RSHIFT_ROUND( psDD->Q_Q10[ last_smple_idx ], 10 );
- pxq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND(
- silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], Gain_Q10 ), 8 ) );
- NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q14[ last_smple_idx ];
- }
- silk_memcpy( NSQ->sLPC_Q14, &psDD->sLPC_Q14[ psEncC->subfr_length ], NSQ_LPC_BUF_LENGTH * sizeof( opus_int32 ) );
- silk_memcpy( NSQ->sAR2_Q14, psDD->sAR2_Q14, sizeof( psDD->sAR2_Q14 ) );
-
- /* Update states */
- NSQ->sLF_AR_shp_Q14 = psDD->LF_AR_Q14;
- NSQ->lagPrev = pitchL[ psEncC->nb_subfr - 1 ];
-
- /* Save quantized speech signal */
- /* DEBUG_STORE_DATA( enc.pcm, &NSQ->xq[psEncC->ltp_mem_length], psEncC->frame_length * sizeof( opus_int16 ) ) */
- silk_memmove( NSQ->xq, &NSQ->xq[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( opus_int16 ) );
- silk_memmove( NSQ->sLTP_shp_Q14, &NSQ->sLTP_shp_Q14[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( opus_int32 ) );
- RESTORE_STACK;
-}
-
-/******************************************/
-/* Noise shape quantizer for one subframe */
-/******************************************/
-#ifndef OVERRIDE_silk_noise_shape_quantizer_del_dec
-static OPUS_INLINE void silk_noise_shape_quantizer_del_dec(
- silk_nsq_state *NSQ, /* I/O NSQ state */
- NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */
- opus_int signalType, /* I Signal type */
- const opus_int32 x_Q10[], /* I */
- opus_int8 pulses[], /* O */
- opus_int16 xq[], /* O */
- opus_int32 sLTP_Q15[], /* I/O LTP filter state */
- opus_int32 delayedGain_Q10[], /* I/O Gain delay buffer */
- const opus_int16 a_Q12[], /* I Short term prediction coefs */
- const opus_int16 b_Q14[], /* I Long term prediction coefs */
- const opus_int16 AR_shp_Q13[], /* I Noise shaping coefs */
- opus_int lag, /* I Pitch lag */
- opus_int32 HarmShapeFIRPacked_Q14, /* I */
- opus_int Tilt_Q14, /* I Spectral tilt */
- opus_int32 LF_shp_Q14, /* I */
- opus_int32 Gain_Q16, /* I */
- opus_int Lambda_Q10, /* I */
- opus_int offset_Q10, /* I */
- opus_int length, /* I Input length */
- opus_int subfr, /* I Subframe number */
- opus_int shapingLPCOrder, /* I Shaping LPC filter order */
- opus_int predictLPCOrder, /* I Prediction filter order */
- opus_int warping_Q16, /* I */
- opus_int nStatesDelayedDecision, /* I Number of states in decision tree */
- opus_int *smpl_buf_idx, /* I Index to newest samples in buffers */
- opus_int decisionDelay /* I */
-)
-{
- opus_int i, j, k, Winner_ind, RDmin_ind, RDmax_ind, last_smple_idx;
- opus_int32 Winner_rand_state;
- opus_int32 LTP_pred_Q14, LPC_pred_Q14, n_AR_Q14, n_LTP_Q14;
- opus_int32 n_LF_Q14, r_Q10, rr_Q10, rd1_Q10, rd2_Q10, RDmin_Q10, RDmax_Q10;
- opus_int32 q1_Q0, q1_Q10, q2_Q10, exc_Q14, LPC_exc_Q14, xq_Q14, Gain_Q10;
- opus_int32 tmp1, tmp2, sLF_AR_shp_Q14;
- opus_int32 *pred_lag_ptr, *shp_lag_ptr, *psLPC_Q14;
- VARDECL( NSQ_sample_pair, psSampleState );
- NSQ_del_dec_struct *psDD;
- NSQ_sample_struct *psSS;
- SAVE_STACK;
-
- silk_assert( nStatesDelayedDecision > 0 );
- ALLOC( psSampleState, nStatesDelayedDecision, NSQ_sample_pair );
-
- shp_lag_ptr = &NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ];
- pred_lag_ptr = &sLTP_Q15[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
- Gain_Q10 = silk_RSHIFT( Gain_Q16, 6 );
-
- for( i = 0; i < length; i++ ) {
- /* Perform common calculations used in all states */
-
- /* Long-term prediction */
- if( signalType == TYPE_VOICED ) {
- /* Unrolled loop */
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LTP_pred_Q14 = 2;
- LTP_pred_Q14 = silk_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ 0 ], b_Q14[ 0 ] );
- LTP_pred_Q14 = silk_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -1 ], b_Q14[ 1 ] );
- LTP_pred_Q14 = silk_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -2 ], b_Q14[ 2 ] );
- LTP_pred_Q14 = silk_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -3 ], b_Q14[ 3 ] );
- LTP_pred_Q14 = silk_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], b_Q14[ 4 ] );
- LTP_pred_Q14 = silk_LSHIFT( LTP_pred_Q14, 1 ); /* Q13 -> Q14 */
- pred_lag_ptr++;
- } else {
- LTP_pred_Q14 = 0;
- }
-
- /* Long-term shaping */
- if( lag > 0 ) {
- /* Symmetric, packed FIR coefficients */
- n_LTP_Q14 = silk_SMULWB( silk_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 );
- n_LTP_Q14 = silk_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ], HarmShapeFIRPacked_Q14 );
- n_LTP_Q14 = silk_SUB_LSHIFT32( LTP_pred_Q14, n_LTP_Q14, 2 ); /* Q12 -> Q14 */
- 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 = silk_RAND( psDD->Seed );
-
- /* Pointer used in short term prediction and shaping */
- psLPC_Q14 = &psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - 1 + i ];
- /* Short-term prediction */
- silk_assert( predictLPCOrder == 10 || predictLPCOrder == 16 );
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LPC_pred_Q14 = silk_RSHIFT( predictLPCOrder, 1 );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ 0 ], a_Q12[ 0 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -1 ], a_Q12[ 1 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -2 ], a_Q12[ 2 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -3 ], a_Q12[ 3 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -4 ], a_Q12[ 4 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -5 ], a_Q12[ 5 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -6 ], a_Q12[ 6 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -7 ], a_Q12[ 7 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -8 ], a_Q12[ 8 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -9 ], a_Q12[ 9 ] );
- if( predictLPCOrder == 16 ) {
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -10 ], a_Q12[ 10 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -11 ], a_Q12[ 11 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -12 ], a_Q12[ 12 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -13 ], a_Q12[ 13 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -14 ], a_Q12[ 14 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -15 ], a_Q12[ 15 ] );
- }
- LPC_pred_Q14 = silk_LSHIFT( LPC_pred_Q14, 4 ); /* Q10 -> Q14 */
-
- /* Noise shape feedback */
- silk_assert( ( shapingLPCOrder & 1 ) == 0 ); /* check that order is even */
- /* Output of lowpass section */
- tmp2 = silk_SMLAWB( psLPC_Q14[ 0 ], psDD->sAR2_Q14[ 0 ], warping_Q16 );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( psDD->sAR2_Q14[ 0 ], psDD->sAR2_Q14[ 1 ] - tmp2, warping_Q16 );
- psDD->sAR2_Q14[ 0 ] = tmp2;
- n_AR_Q14 = silk_RSHIFT( shapingLPCOrder, 1 );
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, tmp2, AR_shp_Q13[ 0 ] );
- /* Loop over allpass sections */
- for( j = 2; j < shapingLPCOrder; j += 2 ) {
- /* Output of allpass section */
- tmp2 = silk_SMLAWB( psDD->sAR2_Q14[ j - 1 ], psDD->sAR2_Q14[ j + 0 ] - tmp1, warping_Q16 );
- psDD->sAR2_Q14[ j - 1 ] = tmp1;
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, tmp1, AR_shp_Q13[ j - 1 ] );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( psDD->sAR2_Q14[ j + 0 ], psDD->sAR2_Q14[ j + 1 ] - tmp2, warping_Q16 );
- psDD->sAR2_Q14[ j + 0 ] = tmp2;
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, tmp2, AR_shp_Q13[ j ] );
- }
- psDD->sAR2_Q14[ shapingLPCOrder - 1 ] = tmp1;
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, tmp1, AR_shp_Q13[ shapingLPCOrder - 1 ] );
-
- n_AR_Q14 = silk_LSHIFT( n_AR_Q14, 1 ); /* Q11 -> Q12 */
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, psDD->LF_AR_Q14, Tilt_Q14 ); /* Q12 */
- n_AR_Q14 = silk_LSHIFT( n_AR_Q14, 2 ); /* Q12 -> Q14 */
-
- n_LF_Q14 = silk_SMULWB( psDD->Shape_Q14[ *smpl_buf_idx ], LF_shp_Q14 ); /* Q12 */
- n_LF_Q14 = silk_SMLAWT( n_LF_Q14, psDD->LF_AR_Q14, LF_shp_Q14 ); /* Q12 */
- n_LF_Q14 = silk_LSHIFT( n_LF_Q14, 2 ); /* Q12 -> Q14 */
-
- /* Input minus prediction plus noise feedback */
- /* r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP */
- tmp1 = silk_ADD32( n_AR_Q14, n_LF_Q14 ); /* Q14 */
- tmp2 = silk_ADD32( n_LTP_Q14, LPC_pred_Q14 ); /* Q13 */
- tmp1 = silk_SUB32( tmp2, tmp1 ); /* Q13 */
- tmp1 = silk_RSHIFT_ROUND( tmp1, 4 ); /* Q10 */
-
- r_Q10 = silk_SUB32( x_Q10[ i ], tmp1 ); /* residual error Q10 */
-
- /* Flip sign depending on dither */
- if ( psDD->Seed < 0 ) {
- r_Q10 = -r_Q10;
- }
- r_Q10 = silk_LIMIT_32( r_Q10, -(31 << 10), 30 << 10 );
-
- /* Find two quantization level candidates and measure their rate-distortion */
- q1_Q10 = silk_SUB32( r_Q10, offset_Q10 );
- q1_Q0 = silk_RSHIFT( q1_Q10, 10 );
- if( q1_Q0 > 0 ) {
- q1_Q10 = silk_SUB32( silk_LSHIFT( q1_Q0, 10 ), QUANT_LEVEL_ADJUST_Q10 );
- q1_Q10 = silk_ADD32( q1_Q10, offset_Q10 );
- q2_Q10 = silk_ADD32( q1_Q10, 1024 );
- rd1_Q10 = silk_SMULBB( q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else if( q1_Q0 == 0 ) {
- q1_Q10 = offset_Q10;
- q2_Q10 = silk_ADD32( q1_Q10, 1024 - QUANT_LEVEL_ADJUST_Q10 );
- rd1_Q10 = silk_SMULBB( q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else if( q1_Q0 == -1 ) {
- q2_Q10 = offset_Q10;
- q1_Q10 = silk_SUB32( q2_Q10, 1024 - QUANT_LEVEL_ADJUST_Q10 );
- rd1_Q10 = silk_SMULBB( -q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else { /* q1_Q0 < -1 */
- q1_Q10 = silk_ADD32( silk_LSHIFT( q1_Q0, 10 ), QUANT_LEVEL_ADJUST_Q10 );
- q1_Q10 = silk_ADD32( q1_Q10, offset_Q10 );
- q2_Q10 = silk_ADD32( q1_Q10, 1024 );
- rd1_Q10 = silk_SMULBB( -q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( -q2_Q10, Lambda_Q10 );
- }
- rr_Q10 = silk_SUB32( r_Q10, q1_Q10 );
- rd1_Q10 = silk_RSHIFT( silk_SMLABB( rd1_Q10, rr_Q10, rr_Q10 ), 10 );
- rr_Q10 = silk_SUB32( r_Q10, q2_Q10 );
- rd2_Q10 = silk_RSHIFT( silk_SMLABB( rd2_Q10, rr_Q10, rr_Q10 ), 10 );
-
- if( rd1_Q10 < rd2_Q10 ) {
- psSS[ 0 ].RD_Q10 = silk_ADD32( psDD->RD_Q10, rd1_Q10 );
- psSS[ 1 ].RD_Q10 = silk_ADD32( psDD->RD_Q10, rd2_Q10 );
- psSS[ 0 ].Q_Q10 = q1_Q10;
- psSS[ 1 ].Q_Q10 = q2_Q10;
- } else {
- psSS[ 0 ].RD_Q10 = silk_ADD32( psDD->RD_Q10, rd2_Q10 );
- psSS[ 1 ].RD_Q10 = silk_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_Q14 = silk_LSHIFT32( psSS[ 0 ].Q_Q10, 4 );
- if ( psDD->Seed < 0 ) {
- exc_Q14 = -exc_Q14;
- }
-
- /* Add predictions */
- LPC_exc_Q14 = silk_ADD32( exc_Q14, LTP_pred_Q14 );
- xq_Q14 = silk_ADD32( LPC_exc_Q14, LPC_pred_Q14 );
-
- /* Update states */
- sLF_AR_shp_Q14 = silk_SUB32( xq_Q14, n_AR_Q14 );
- psSS[ 0 ].sLTP_shp_Q14 = silk_SUB32( sLF_AR_shp_Q14, n_LF_Q14 );
- psSS[ 0 ].LF_AR_Q14 = sLF_AR_shp_Q14;
- psSS[ 0 ].LPC_exc_Q14 = LPC_exc_Q14;
- psSS[ 0 ].xq_Q14 = xq_Q14;
-
- /* Update states for second best quantization */
-
- /* Quantized excitation */
- exc_Q14 = silk_LSHIFT32( psSS[ 1 ].Q_Q10, 4 );
- if ( psDD->Seed < 0 ) {
- exc_Q14 = -exc_Q14;
- }
-
-
- /* Add predictions */
- LPC_exc_Q14 = silk_ADD32( exc_Q14, LTP_pred_Q14 );
- xq_Q14 = silk_ADD32( LPC_exc_Q14, LPC_pred_Q14 );
-
- /* Update states */
- sLF_AR_shp_Q14 = silk_SUB32( xq_Q14, n_AR_Q14 );
- psSS[ 1 ].sLTP_shp_Q14 = silk_SUB32( sLF_AR_shp_Q14, n_LF_Q14 );
- psSS[ 1 ].LF_AR_Q14 = sLF_AR_shp_Q14;
- psSS[ 1 ].LPC_exc_Q14 = LPC_exc_Q14;
- psSS[ 1 ].xq_Q14 = xq_Q14;
- }
-
- *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 = silk_ADD32( psSampleState[ k ][ 0 ].RD_Q10, silk_int32_MAX >> 4 );
- psSampleState[ k ][ 1 ].RD_Q10 = silk_ADD32( psSampleState[ k ][ 1 ].RD_Q10, silk_int32_MAX >> 4 );
- silk_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 ) {
- silk_memcpy( ( (opus_int32 *)&psDelDec[ RDmax_ind ] ) + i,
- ( (opus_int32 *)&psDelDec[ RDmin_ind ] ) + i, sizeof( NSQ_del_dec_struct ) - i * sizeof( opus_int32) );
- silk_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 ) {
- pulses[ i - decisionDelay ] = (opus_int8)silk_RSHIFT_ROUND( psDD->Q_Q10[ last_smple_idx ], 10 );
- xq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND(
- silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], delayedGain_Q10[ last_smple_idx ] ), 8 ) );
- NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay ] = psDD->Shape_Q14[ last_smple_idx ];
- sLTP_Q15[ NSQ->sLTP_buf_idx - decisionDelay ] = psDD->Pred_Q15[ 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_Q14 = psSS->LF_AR_Q14;
- psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH + i ] = psSS->xq_Q14;
- psDD->Xq_Q14[ *smpl_buf_idx ] = psSS->xq_Q14;
- psDD->Q_Q10[ *smpl_buf_idx ] = psSS->Q_Q10;
- psDD->Pred_Q15[ *smpl_buf_idx ] = silk_LSHIFT32( psSS->LPC_exc_Q14, 1 );
- psDD->Shape_Q14[ *smpl_buf_idx ] = psSS->sLTP_shp_Q14;
- psDD->Seed = silk_ADD32_ovflw( psDD->Seed, silk_RSHIFT_ROUND( psSS->Q_Q10, 10 ) );
- psDD->RandState[ *smpl_buf_idx ] = psDD->Seed;
- psDD->RD_Q10 = psSS->RD_Q10;
- }
- delayedGain_Q10[ *smpl_buf_idx ] = Gain_Q10;
- }
- /* Update LPC states */
- for( k = 0; k < nStatesDelayedDecision; k++ ) {
- psDD = &psDelDec[ k ];
- silk_memcpy( psDD->sLPC_Q14, &psDD->sLPC_Q14[ length ], NSQ_LPC_BUF_LENGTH * sizeof( opus_int32 ) );
- }
- RESTORE_STACK;
-}
-#endif /* OVERRIDE_silk_noise_shape_quantizer_del_dec */
-
-static OPUS_INLINE void silk_nsq_del_dec_scale_states(
- const silk_encoder_state *psEncC, /* I Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */
- const opus_int32 x_Q3[], /* I Input in Q3 */
- opus_int32 x_sc_Q10[], /* O Input scaled with 1/Gain in Q10 */
- const opus_int16 sLTP[], /* I Re-whitened LTP state in Q0 */
- opus_int32 sLTP_Q15[], /* O LTP state matching scaled input */
- opus_int subfr, /* I Subframe number */
- opus_int nStatesDelayedDecision, /* I Number of del dec states */
- const opus_int LTP_scale_Q14, /* I LTP state scaling */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lag */
- const opus_int signal_type, /* I Signal type */
- const opus_int decisionDelay /* I Decision delay */
-)
-{
- opus_int i, k, lag;
- opus_int32 gain_adj_Q16, inv_gain_Q31, inv_gain_Q23;
- NSQ_del_dec_struct *psDD;
-
- lag = pitchL[ subfr ];
- inv_gain_Q31 = silk_INVERSE32_varQ( silk_max( Gains_Q16[ subfr ], 1 ), 47 );
- silk_assert( inv_gain_Q31 != 0 );
-
- /* Calculate gain adjustment factor */
- if( Gains_Q16[ subfr ] != NSQ->prev_gain_Q16 ) {
- gain_adj_Q16 = silk_DIV32_varQ( NSQ->prev_gain_Q16, Gains_Q16[ subfr ], 16 );
- } else {
- gain_adj_Q16 = (opus_int32)1 << 16;
- }
-
- /* Scale input */
- inv_gain_Q23 = silk_RSHIFT_ROUND( inv_gain_Q31, 8 );
- for( i = 0; i < psEncC->subfr_length; i++ ) {
- x_sc_Q10[ i ] = silk_SMULWW( x_Q3[ i ], inv_gain_Q23 );
- }
-
- /* Save inverse gain */
- NSQ->prev_gain_Q16 = Gains_Q16[ subfr ];
-
- /* After rewhitening the LTP state is un-scaled, so scale with inv_gain_Q16 */
- if( NSQ->rewhite_flag ) {
- if( subfr == 0 ) {
- /* Do LTP downscaling */
- inv_gain_Q31 = silk_LSHIFT( silk_SMULWB( inv_gain_Q31, LTP_scale_Q14 ), 2 );
- }
- for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
- silk_assert( i < MAX_FRAME_LENGTH );
- sLTP_Q15[ i ] = silk_SMULWB( inv_gain_Q31, sLTP[ i ] );
- }
- }
-
- /* Adjust for changing gain */
- if( gain_adj_Q16 != (opus_int32)1 << 16 ) {
- /* Scale long-term shaping state */
- for( i = NSQ->sLTP_shp_buf_idx - psEncC->ltp_mem_length; i < NSQ->sLTP_shp_buf_idx; i++ ) {
- NSQ->sLTP_shp_Q14[ i ] = silk_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q14[ i ] );
- }
-
- /* Scale long-term prediction state */
- if( signal_type == TYPE_VOICED && NSQ->rewhite_flag == 0 ) {
- for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx - decisionDelay; i++ ) {
- sLTP_Q15[ i ] = silk_SMULWW( gain_adj_Q16, sLTP_Q15[ i ] );
- }
- }
-
- for( k = 0; k < nStatesDelayedDecision; k++ ) {
- psDD = &psDelDec[ k ];
-
- /* Scale scalar states */
- psDD->LF_AR_Q14 = silk_SMULWW( gain_adj_Q16, psDD->LF_AR_Q14 );
-
- /* Scale short-term prediction and shaping states */
- for( i = 0; i < NSQ_LPC_BUF_LENGTH; i++ ) {
- psDD->sLPC_Q14[ i ] = silk_SMULWW( gain_adj_Q16, psDD->sLPC_Q14[ i ] );
- }
- for( i = 0; i < MAX_SHAPE_LPC_ORDER; i++ ) {
- psDD->sAR2_Q14[ i ] = silk_SMULWW( gain_adj_Q16, psDD->sAR2_Q14[ i ] );
- }
- for( i = 0; i < DECISION_DELAY; i++ ) {
- psDD->Pred_Q15[ i ] = silk_SMULWW( gain_adj_Q16, psDD->Pred_Q15[ i ] );
- psDD->Shape_Q14[ i ] = silk_SMULWW( gain_adj_Q16, psDD->Shape_Q14[ i ] );
- }
- }
- }
-}
diff --git a/drivers/opus/silk/PLC.c b/drivers/opus/silk/PLC.c
deleted file mode 100644
index 4007112c5a..0000000000
--- a/drivers/opus/silk/PLC.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/PLC.h"
-
-#define NB_ATT 2
-static const opus_int16 HARM_ATT_Q15[NB_ATT] = { 32440, 31130 }; /* 0.99, 0.95 */
-static const opus_int16 PLC_RAND_ATTENUATE_V_Q15[NB_ATT] = { 31130, 26214 }; /* 0.95, 0.8 */
-static const opus_int16 PLC_RAND_ATTENUATE_UV_Q15[NB_ATT] = { 32440, 29491 }; /* 0.99, 0.9 */
-
-static OPUS_INLINE void silk_PLC_update(
- silk_decoder_state *psDec, /* I/O Decoder state */
- silk_decoder_control *psDecCtrl /* I/O Decoder control */
-);
-
-static OPUS_INLINE void silk_PLC_conceal(
- silk_decoder_state *psDec, /* I/O Decoder state */
- silk_decoder_control *psDecCtrl, /* I/O Decoder control */
- opus_int16 frame[], /* O LPC residual signal */
- int arch /* I Run-time architecture */
-);
-
-
-void silk_PLC_Reset(
- silk_decoder_state *psDec /* I/O Decoder state */
-)
-{
- psDec->sPLC.pitchL_Q8 = silk_LSHIFT( psDec->frame_length, 8 - 1 );
- psDec->sPLC.prevGain_Q16[ 0 ] = SILK_FIX_CONST( 1, 16 );
- psDec->sPLC.prevGain_Q16[ 1 ] = SILK_FIX_CONST( 1, 16 );
- psDec->sPLC.subfr_length = 20;
- psDec->sPLC.nb_subfr = 2;
-}
-
-void silk_PLC(
- silk_decoder_state *psDec, /* I/O Decoder state */
- silk_decoder_control *psDecCtrl, /* I/O Decoder control */
- opus_int16 frame[], /* I/O signal */
- opus_int lost, /* I Loss flag */
- int arch /* I Run-time architecture */
-)
-{
- /* PLC control function */
- if( psDec->fs_kHz != psDec->sPLC.fs_kHz ) {
- silk_PLC_Reset( psDec );
- psDec->sPLC.fs_kHz = psDec->fs_kHz;
- }
-
- if( lost ) {
- /****************************/
- /* Generate Signal */
- /****************************/
- silk_PLC_conceal( psDec, psDecCtrl, frame, arch );
-
- psDec->lossCnt++;
- } else {
- /****************************/
- /* Update state */
- /****************************/
- silk_PLC_update( psDec, psDecCtrl );
- }
-}
-
-/**************************************************/
-/* Update state of PLC */
-/**************************************************/
-static OPUS_INLINE void silk_PLC_update(
- silk_decoder_state *psDec, /* I/O Decoder state */
- silk_decoder_control *psDecCtrl /* I/O Decoder control */
-)
-{
- opus_int32 LTP_Gain_Q14, temp_LTP_Gain_Q14;
- opus_int i, j;
- silk_PLC_struct *psPLC;
-
- psPLC = &psDec->sPLC;
-
- /* Update parameters used in case of packet loss */
- psDec->prevSignalType = psDec->indices.signalType;
- LTP_Gain_Q14 = 0;
- if( psDec->indices.signalType == TYPE_VOICED ) {
- /* Find the parameters for the last subframe which contains a pitch pulse */
- for( j = 0; j * psDec->subfr_length < psDecCtrl->pitchL[ psDec->nb_subfr - 1 ]; j++ ) {
- if( j == psDec->nb_subfr ) {
- break;
- }
- temp_LTP_Gain_Q14 = 0;
- for( i = 0; i < LTP_ORDER; i++ ) {
- temp_LTP_Gain_Q14 += psDecCtrl->LTPCoef_Q14[ ( psDec->nb_subfr - 1 - j ) * LTP_ORDER + i ];
- }
- if( temp_LTP_Gain_Q14 > LTP_Gain_Q14 ) {
- LTP_Gain_Q14 = temp_LTP_Gain_Q14;
- silk_memcpy( psPLC->LTPCoef_Q14,
- &psDecCtrl->LTPCoef_Q14[ silk_SMULBB( psDec->nb_subfr - 1 - j, LTP_ORDER ) ],
- LTP_ORDER * sizeof( opus_int16 ) );
-
- psPLC->pitchL_Q8 = silk_LSHIFT( psDecCtrl->pitchL[ psDec->nb_subfr - 1 - j ], 8 );
- }
- }
-
- silk_memset( psPLC->LTPCoef_Q14, 0, LTP_ORDER * sizeof( opus_int16 ) );
- psPLC->LTPCoef_Q14[ LTP_ORDER / 2 ] = LTP_Gain_Q14;
-
- /* Limit LT coefs */
- if( LTP_Gain_Q14 < V_PITCH_GAIN_START_MIN_Q14 ) {
- opus_int scale_Q10;
- opus_int32 tmp;
-
- tmp = silk_LSHIFT( V_PITCH_GAIN_START_MIN_Q14, 10 );
- scale_Q10 = silk_DIV32( tmp, silk_max( LTP_Gain_Q14, 1 ) );
- for( i = 0; i < LTP_ORDER; i++ ) {
- psPLC->LTPCoef_Q14[ i ] = silk_RSHIFT( silk_SMULBB( psPLC->LTPCoef_Q14[ i ], scale_Q10 ), 10 );
- }
- } else if( LTP_Gain_Q14 > V_PITCH_GAIN_START_MAX_Q14 ) {
- opus_int scale_Q14;
- opus_int32 tmp;
-
- tmp = silk_LSHIFT( V_PITCH_GAIN_START_MAX_Q14, 14 );
- scale_Q14 = silk_DIV32( tmp, silk_max( LTP_Gain_Q14, 1 ) );
- for( i = 0; i < LTP_ORDER; i++ ) {
- psPLC->LTPCoef_Q14[ i ] = silk_RSHIFT( silk_SMULBB( psPLC->LTPCoef_Q14[ i ], scale_Q14 ), 14 );
- }
- }
- } else {
- psPLC->pitchL_Q8 = silk_LSHIFT( silk_SMULBB( psDec->fs_kHz, 18 ), 8 );
- silk_memset( psPLC->LTPCoef_Q14, 0, LTP_ORDER * sizeof( opus_int16 ));
- }
-
- /* Save LPC coeficients */
- silk_memcpy( psPLC->prevLPC_Q12, psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order * sizeof( opus_int16 ) );
- psPLC->prevLTP_scale_Q14 = psDecCtrl->LTP_scale_Q14;
-
- /* Save last two gains */
- silk_memcpy( psPLC->prevGain_Q16, &psDecCtrl->Gains_Q16[ psDec->nb_subfr - 2 ], 2 * sizeof( opus_int32 ) );
-
- psPLC->subfr_length = psDec->subfr_length;
- psPLC->nb_subfr = psDec->nb_subfr;
-}
-
-static OPUS_INLINE void silk_PLC_energy(opus_int32 *energy1, opus_int *shift1, opus_int32 *energy2, opus_int *shift2,
- const opus_int32 *exc_Q14, const opus_int32 *prevGain_Q10, int subfr_length, int nb_subfr)
-{
- int i, k;
- VARDECL( opus_int16, exc_buf );
- opus_int16 *exc_buf_ptr;
- SAVE_STACK;
- ALLOC( exc_buf, 2*subfr_length, opus_int16 );
- /* Find random noise component */
- /* Scale previous excitation signal */
- exc_buf_ptr = exc_buf;
- for( k = 0; k < 2; k++ ) {
- for( i = 0; i < subfr_length; i++ ) {
- exc_buf_ptr[ i ] = (opus_int16)silk_SAT16( silk_RSHIFT(
- silk_SMULWW( exc_Q14[ i + ( k + nb_subfr - 2 ) * subfr_length ], prevGain_Q10[ k ] ), 8 ) );
- }
- exc_buf_ptr += subfr_length;
- }
- /* Find the subframe with lowest energy of the last two and use that as random noise generator */
- silk_sum_sqr_shift( energy1, shift1, exc_buf, subfr_length );
- silk_sum_sqr_shift( energy2, shift2, &exc_buf[ subfr_length ], subfr_length );
- RESTORE_STACK;
-}
-
-static OPUS_INLINE void silk_PLC_conceal(
- silk_decoder_state *psDec, /* I/O Decoder state */
- silk_decoder_control *psDecCtrl, /* I/O Decoder control */
- opus_int16 frame[], /* O LPC residual signal */
- int arch /* I Run-time architecture */
-)
-{
- opus_int i, j, k;
- opus_int lag, idx, sLTP_buf_idx, shift1, shift2;
- opus_int32 rand_seed, harm_Gain_Q15, rand_Gain_Q15, inv_gain_Q30;
- opus_int32 energy1, energy2, *rand_ptr, *pred_lag_ptr;
- opus_int32 LPC_pred_Q10, LTP_pred_Q12;
- opus_int16 rand_scale_Q14;
- opus_int16 *B_Q14;
- opus_int32 *sLPC_Q14_ptr;
- opus_int16 A_Q12[ MAX_LPC_ORDER ];
-#ifdef SMALL_FOOTPRINT
- opus_int16 *sLTP;
-#else
- VARDECL( opus_int16, sLTP );
-#endif
- VARDECL( opus_int32, sLTP_Q14 );
- silk_PLC_struct *psPLC = &psDec->sPLC;
- opus_int32 prevGain_Q10[2];
- SAVE_STACK;
-
- ALLOC( sLTP_Q14, psDec->ltp_mem_length + psDec->frame_length, opus_int32 );
-#ifdef SMALL_FOOTPRINT
- /* Ugly hack that breaks aliasing rules to save stack: put sLTP at the very end of sLTP_Q14. */
- sLTP = ((opus_int16*)&sLTP_Q14[psDec->ltp_mem_length + psDec->frame_length])-psDec->ltp_mem_length;
-#else
- ALLOC( sLTP, psDec->ltp_mem_length, opus_int16 );
-#endif
-
- prevGain_Q10[0] = silk_RSHIFT( psPLC->prevGain_Q16[ 0 ], 6);
- prevGain_Q10[1] = silk_RSHIFT( psPLC->prevGain_Q16[ 1 ], 6);
-
- if( psDec->first_frame_after_reset ) {
- silk_memset( psPLC->prevLPC_Q12, 0, sizeof( psPLC->prevLPC_Q12 ) );
- }
-
- silk_PLC_energy(&energy1, &shift1, &energy2, &shift2, psDec->exc_Q14, prevGain_Q10, psDec->subfr_length, psDec->nb_subfr);
-
- if( silk_RSHIFT( energy1, shift2 ) < silk_RSHIFT( energy2, shift1 ) ) {
- /* First sub-frame has lowest energy */
- rand_ptr = &psDec->exc_Q14[ silk_max_int( 0, ( psPLC->nb_subfr - 1 ) * psPLC->subfr_length - RAND_BUF_SIZE ) ];
- } else {
- /* Second sub-frame has lowest energy */
- rand_ptr = &psDec->exc_Q14[ silk_max_int( 0, psPLC->nb_subfr * psPLC->subfr_length - RAND_BUF_SIZE ) ];
- }
-
- /* Set up Gain to random noise component */
- B_Q14 = psPLC->LTPCoef_Q14;
- rand_scale_Q14 = psPLC->randScale_Q14;
-
- /* Set up attenuation gains */
- harm_Gain_Q15 = HARM_ATT_Q15[ silk_min_int( NB_ATT - 1, psDec->lossCnt ) ];
- if( psDec->prevSignalType == TYPE_VOICED ) {
- rand_Gain_Q15 = PLC_RAND_ATTENUATE_V_Q15[ silk_min_int( NB_ATT - 1, psDec->lossCnt ) ];
- } else {
- rand_Gain_Q15 = PLC_RAND_ATTENUATE_UV_Q15[ silk_min_int( NB_ATT - 1, psDec->lossCnt ) ];
- }
-
- /* LPC concealment. Apply BWE to previous LPC */
- silk_bwexpander( psPLC->prevLPC_Q12, psDec->LPC_order, SILK_FIX_CONST( BWE_COEF, 16 ) );
-
- /* Preload LPC coeficients to array on stack. Gives small performance gain */
- silk_memcpy( A_Q12, psPLC->prevLPC_Q12, psDec->LPC_order * sizeof( opus_int16 ) );
-
- /* First Lost frame */
- if( psDec->lossCnt == 0 ) {
- rand_scale_Q14 = 1 << 14;
-
- /* Reduce random noise Gain for voiced frames */
- if( psDec->prevSignalType == TYPE_VOICED ) {
- for( i = 0; i < LTP_ORDER; i++ ) {
- rand_scale_Q14 -= B_Q14[ i ];
- }
- rand_scale_Q14 = silk_max_16( 3277, rand_scale_Q14 ); /* 0.2 */
- rand_scale_Q14 = (opus_int16)silk_RSHIFT( silk_SMULBB( rand_scale_Q14, psPLC->prevLTP_scale_Q14 ), 14 );
- } else {
- /* Reduce random noise for unvoiced frames with high LPC gain */
- opus_int32 invGain_Q30, down_scale_Q30;
-
- invGain_Q30 = silk_LPC_inverse_pred_gain( psPLC->prevLPC_Q12, psDec->LPC_order );
-
- down_scale_Q30 = silk_min_32( silk_RSHIFT( (opus_int32)1 << 30, LOG2_INV_LPC_GAIN_HIGH_THRES ), invGain_Q30 );
- down_scale_Q30 = silk_max_32( silk_RSHIFT( (opus_int32)1 << 30, LOG2_INV_LPC_GAIN_LOW_THRES ), down_scale_Q30 );
- down_scale_Q30 = silk_LSHIFT( down_scale_Q30, LOG2_INV_LPC_GAIN_HIGH_THRES );
-
- rand_Gain_Q15 = silk_RSHIFT( silk_SMULWB( down_scale_Q30, rand_Gain_Q15 ), 14 );
- }
- }
-
- rand_seed = psPLC->rand_seed;
- lag = silk_RSHIFT_ROUND( psPLC->pitchL_Q8, 8 );
- sLTP_buf_idx = psDec->ltp_mem_length;
-
- /* Rewhiten LTP state */
- idx = psDec->ltp_mem_length - lag - psDec->LPC_order - LTP_ORDER / 2;
- silk_assert( idx > 0 );
- silk_LPC_analysis_filter( &sLTP[ idx ], &psDec->outBuf[ idx ], A_Q12, psDec->ltp_mem_length - idx, psDec->LPC_order, arch );
- /* Scale LTP state */
- inv_gain_Q30 = silk_INVERSE32_varQ( psPLC->prevGain_Q16[ 1 ], 46 );
- inv_gain_Q30 = silk_min( inv_gain_Q30, silk_int32_MAX >> 1 );
- for( i = idx + psDec->LPC_order; i < psDec->ltp_mem_length; i++ ) {
- sLTP_Q14[ i ] = silk_SMULWB( inv_gain_Q30, sLTP[ i ] );
- }
-
- /***************************/
- /* LTP synthesis filtering */
- /***************************/
- for( k = 0; k < psDec->nb_subfr; k++ ) {
- /* Set up pointer */
- pred_lag_ptr = &sLTP_Q14[ sLTP_buf_idx - lag + LTP_ORDER / 2 ];
- for( i = 0; i < psDec->subfr_length; i++ ) {
- /* Unrolled loop */
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LTP_pred_Q12 = 2;
- LTP_pred_Q12 = silk_SMLAWB( LTP_pred_Q12, pred_lag_ptr[ 0 ], B_Q14[ 0 ] );
- LTP_pred_Q12 = silk_SMLAWB( LTP_pred_Q12, pred_lag_ptr[ -1 ], B_Q14[ 1 ] );
- LTP_pred_Q12 = silk_SMLAWB( LTP_pred_Q12, pred_lag_ptr[ -2 ], B_Q14[ 2 ] );
- LTP_pred_Q12 = silk_SMLAWB( LTP_pred_Q12, pred_lag_ptr[ -3 ], B_Q14[ 3 ] );
- LTP_pred_Q12 = silk_SMLAWB( LTP_pred_Q12, pred_lag_ptr[ -4 ], B_Q14[ 4 ] );
- pred_lag_ptr++;
-
- /* Generate LPC excitation */
- rand_seed = silk_RAND( rand_seed );
- idx = silk_RSHIFT( rand_seed, 25 ) & RAND_BUF_MASK;
- sLTP_Q14[ sLTP_buf_idx ] = silk_LSHIFT32( silk_SMLAWB( LTP_pred_Q12, rand_ptr[ idx ], rand_scale_Q14 ), 2 );
- sLTP_buf_idx++;
- }
-
- /* Gradually reduce LTP gain */
- for( j = 0; j < LTP_ORDER; j++ ) {
- B_Q14[ j ] = silk_RSHIFT( silk_SMULBB( harm_Gain_Q15, B_Q14[ j ] ), 15 );
- }
- /* Gradually reduce excitation gain */
- rand_scale_Q14 = silk_RSHIFT( silk_SMULBB( rand_scale_Q14, rand_Gain_Q15 ), 15 );
-
- /* Slowly increase pitch lag */
- psPLC->pitchL_Q8 = silk_SMLAWB( psPLC->pitchL_Q8, psPLC->pitchL_Q8, PITCH_DRIFT_FAC_Q16 );
- psPLC->pitchL_Q8 = silk_min_32( psPLC->pitchL_Q8, silk_LSHIFT( silk_SMULBB( MAX_PITCH_LAG_MS, psDec->fs_kHz ), 8 ) );
- lag = silk_RSHIFT_ROUND( psPLC->pitchL_Q8, 8 );
- }
-
- /***************************/
- /* LPC synthesis filtering */
- /***************************/
- sLPC_Q14_ptr = &sLTP_Q14[ psDec->ltp_mem_length - MAX_LPC_ORDER ];
-
- /* Copy LPC state */
- silk_memcpy( sLPC_Q14_ptr, psDec->sLPC_Q14_buf, MAX_LPC_ORDER * sizeof( opus_int32 ) );
-
- silk_assert( psDec->LPC_order >= 10 ); /* check that unrolling works */
- for( i = 0; i < psDec->frame_length; i++ ) {
- /* partly unrolled */
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LPC_pred_Q10 = silk_RSHIFT( psDec->LPC_order, 1 );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - 1 ], A_Q12[ 0 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - 2 ], A_Q12[ 1 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - 3 ], A_Q12[ 2 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - 4 ], A_Q12[ 3 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - 5 ], A_Q12[ 4 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - 6 ], A_Q12[ 5 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - 7 ], A_Q12[ 6 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - 8 ], A_Q12[ 7 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - 9 ], A_Q12[ 8 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - 10 ], A_Q12[ 9 ] );
- for( j = 10; j < psDec->LPC_order; j++ ) {
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14_ptr[ MAX_LPC_ORDER + i - j - 1 ], A_Q12[ j ] );
- }
-
- /* Add prediction to LPC excitation */
- sLPC_Q14_ptr[ MAX_LPC_ORDER + i ] = silk_ADD_LSHIFT32( sLPC_Q14_ptr[ MAX_LPC_ORDER + i ], LPC_pred_Q10, 4 );
-
- /* Scale with Gain */
- frame[ i ] = (opus_int16)silk_SAT16( silk_SAT16( silk_RSHIFT_ROUND( silk_SMULWW( sLPC_Q14_ptr[ MAX_LPC_ORDER + i ], prevGain_Q10[ 1 ] ), 8 ) ) );
- }
-
- /* Save LPC state */
- silk_memcpy( psDec->sLPC_Q14_buf, &sLPC_Q14_ptr[ psDec->frame_length ], MAX_LPC_ORDER * sizeof( opus_int32 ) );
-
- /**************************************/
- /* Update states */
- /**************************************/
- psPLC->rand_seed = rand_seed;
- psPLC->randScale_Q14 = rand_scale_Q14;
- for( i = 0; i < MAX_NB_SUBFR; i++ ) {
- psDecCtrl->pitchL[ i ] = lag;
- }
- RESTORE_STACK;
-}
-
-/* Glues concealed frames with new good received frames */
-void silk_PLC_glue_frames(
- silk_decoder_state *psDec, /* I/O decoder state */
- opus_int16 frame[], /* I/O signal */
- opus_int length /* I length of signal */
-)
-{
- opus_int i, energy_shift;
- opus_int32 energy;
- silk_PLC_struct *psPLC;
- psPLC = &psDec->sPLC;
-
- if( psDec->lossCnt ) {
- /* Calculate energy in concealed residual */
- silk_sum_sqr_shift( &psPLC->conc_energy, &psPLC->conc_energy_shift, frame, length );
-
- psPLC->last_frame_lost = 1;
- } else {
- if( psDec->sPLC.last_frame_lost ) {
- /* Calculate residual in decoded signal if last frame was lost */
- silk_sum_sqr_shift( &energy, &energy_shift, frame, length );
-
- /* Normalize energies */
- if( energy_shift > psPLC->conc_energy_shift ) {
- psPLC->conc_energy = silk_RSHIFT( psPLC->conc_energy, energy_shift - psPLC->conc_energy_shift );
- } else if( energy_shift < psPLC->conc_energy_shift ) {
- energy = silk_RSHIFT( energy, psPLC->conc_energy_shift - energy_shift );
- }
-
- /* Fade in the energy difference */
- if( energy > psPLC->conc_energy ) {
- opus_int32 frac_Q24, LZ;
- opus_int32 gain_Q16, slope_Q16;
-
- LZ = silk_CLZ32( psPLC->conc_energy );
- LZ = LZ - 1;
- psPLC->conc_energy = silk_LSHIFT( psPLC->conc_energy, LZ );
- energy = silk_RSHIFT( energy, silk_max_32( 24 - LZ, 0 ) );
-
- frac_Q24 = silk_DIV32( psPLC->conc_energy, silk_max( energy, 1 ) );
-
- gain_Q16 = silk_LSHIFT( silk_SQRT_APPROX( frac_Q24 ), 4 );
- slope_Q16 = silk_DIV32_16( ( (opus_int32)1 << 16 ) - gain_Q16, length );
- /* Make slope 4x steeper to avoid missing onsets after DTX */
- slope_Q16 = silk_LSHIFT( slope_Q16, 2 );
-
- for( i = 0; i < length; i++ ) {
- frame[ i ] = silk_SMULWB( gain_Q16, frame[ i ] );
- gain_Q16 += slope_Q16;
- if( gain_Q16 > (opus_int32)1 << 16 ) {
- break;
- }
- }
- }
- }
- psPLC->last_frame_lost = 0;
- }
-}
diff --git a/drivers/opus/silk/PLC.h b/drivers/opus/silk/PLC.h
deleted file mode 100644
index 209c2de48f..0000000000
--- a/drivers/opus/silk/PLC.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_PLC_H
-#define SILK_PLC_H
-
-#include "opus/silk/main.h"
-
-#define BWE_COEF 0.99
-#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 RAND_BUF_SIZE 128
-#define RAND_BUF_MASK ( RAND_BUF_SIZE - 1 )
-#define LOG2_INV_LPC_GAIN_HIGH_THRES 3 /* 2^3 = 8 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 silk_PLC_Reset(
- silk_decoder_state *psDec /* I/O Decoder state */
-);
-
-void silk_PLC(
- silk_decoder_state *psDec, /* I/O Decoder state */
- silk_decoder_control *psDecCtrl, /* I/O Decoder control */
- opus_int16 frame[], /* I/O signal */
- opus_int lost, /* I Loss flag */
- int arch /* I Run-time architecture */
-);
-
-void silk_PLC_glue_frames(
- silk_decoder_state *psDec, /* I/O decoder state */
- opus_int16 frame[], /* I/O signal */
- opus_int length /* I length of signal */
-);
-
-#endif
-
diff --git a/drivers/opus/silk/SigProc_FIX.h b/drivers/opus/silk/SigProc_FIX.h
deleted file mode 100644
index 743cf7800c..0000000000
--- a/drivers/opus/silk/SigProc_FIX.h
+++ /dev/null
@@ -1,615 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_SIGPROC_FIX_H
-#define SILK_SIGPROC_FIX_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*#define silk_MACRO_COUNT */ /* Used to enable WMOPS counting */
-
-#define SILK_MAX_ORDER_LPC 16 /* max order of the LPC analysis in schur() and k2a() */
-
-#include <string.h> /* for memset(), memcpy(), memmove() */
-#include "opus/silk/typedef.h"
-#include "opus/silk/resampler_structs.h"
-#include "opus/silk/macros.h"
-#include "opus/celt/cpu_support.h"
-
-#if defined(OPUS_X86_MAY_HAVE_SSE4_1)
-#include "opus/silk/x86/SigProc_FIX_sse.h"
-#endif
-
-/********************************************************************/
-/* SIGNAL PROCESSING FUNCTIONS */
-/********************************************************************/
-
-/*!
- * Initialize/reset the resampler state for a given pair of input/output sampling rates
-*/
-opus_int silk_resampler_init(
- silk_resampler_state_struct *S, /* I/O Resampler state */
- opus_int32 Fs_Hz_in, /* I Input sampling rate (Hz) */
- opus_int32 Fs_Hz_out, /* I Output sampling rate (Hz) */
- opus_int forEnc /* I If 1: encoder; if 0: decoder */
-);
-
-/*!
- * Resampler: convert from one sampling rate to another
- */
-opus_int silk_resampler(
- silk_resampler_state_struct *S, /* I/O Resampler state */
- opus_int16 out[], /* O Output signal */
- const opus_int16 in[], /* I Input signal */
- opus_int32 inLen /* I Number of input samples */
-);
-
-/*!
-* Downsample 2x, mediocre quality
-*/
-void silk_resampler_down2(
- opus_int32 *S, /* I/O State vector [ 2 ] */
- opus_int16 *out, /* O Output signal [ len ] */
- const opus_int16 *in, /* I Input signal [ floor(len/2) ] */
- opus_int32 inLen /* I Number of input samples */
-);
-
-/*!
- * Downsample by a factor 2/3, low quality
-*/
-void silk_resampler_down2_3(
- opus_int32 *S, /* I/O State vector [ 6 ] */
- opus_int16 *out, /* O Output signal [ floor(2*inLen/3) ] */
- const opus_int16 *in, /* I Input signal [ inLen ] */
- opus_int32 inLen /* I Number of input samples */
-);
-
-/*!
- * second order ARMA filter;
- * slower than biquad() but uses more precise coefficients
- * can handle (slowly) varying coefficients
- */
-void silk_biquad_alt(
- const opus_int16 *in, /* I input signal */
- const opus_int32 *B_Q28, /* I MA coefficients [3] */
- const opus_int32 *A_Q28, /* I AR coefficients [2] */
- opus_int32 *S, /* I/O State vector [2] */
- opus_int16 *out, /* O output signal */
- const opus_int32 len, /* I signal length (must be even) */
- opus_int stride /* I Operate on interleaved signal if > 1 */
-);
-
-/* Variable order MA prediction error filter. */
-void silk_LPC_analysis_filter(
- opus_int16 *out, /* O Output signal */
- const opus_int16 *in, /* I Input signal */
- const opus_int16 *B, /* I MA prediction coefficients, Q12 [order] */
- const opus_int32 len, /* I Signal length */
- const opus_int32 d, /* I Filter order */
- int arch /* I Run-time architecture */
-);
-
-/* Chirp (bandwidth expand) LP AR filter */
-void silk_bwexpander(
- opus_int16 *ar, /* I/O AR filter to be expanded (without leading 1) */
- const opus_int d, /* I Length of ar */
- opus_int32 chirp_Q16 /* I Chirp factor (typically in the range 0 to 1) */
-);
-
-/* Chirp (bandwidth expand) LP AR filter */
-void silk_bwexpander_32(
- opus_int32 *ar, /* I/O AR filter to be expanded (without leading 1) */
- const opus_int d, /* I Length of ar */
- opus_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) */
-opus_int32 silk_LPC_inverse_pred_gain( /* O Returns inverse prediction gain in energy domain, Q30 */
- const opus_int16 *A_Q12, /* I Prediction coefficients, Q12 [order] */
- const opus_int order /* I Prediction order */
-);
-
-/* For input in Q24 domain */
-opus_int32 silk_LPC_inverse_pred_gain_Q24( /* O Returns inverse prediction gain in energy domain, Q30 */
- const opus_int32 *A_Q24, /* I Prediction coefficients [order] */
- const opus_int order /* I Prediction order */
-);
-
-/* Split signal in two decimated bands using first-order allpass filters */
-void silk_ana_filt_bank_1(
- const opus_int16 *in, /* I Input signal [N] */
- opus_int32 *S, /* I/O State vector [2] */
- opus_int16 *outL, /* O Low band [N/2] */
- opus_int16 *outH, /* O High band [N/2] */
- const opus_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 */
-opus_int32 silk_lin2log(
- const opus_int32 inLin /* I input in linear scale */
-);
-
-/* Approximation of a sigmoid function */
-opus_int silk_sigm_Q15(
- opus_int in_Q5 /* I */
-);
-
-/* Approximation of 2^() (exact inverse of approx log2() above) */
-/* Convert input to a linear scale */
-opus_int32 silk_log2lin(
- const opus_int32 inLog_Q7 /* I input on log scale */
-);
-
-/* Compute number of bits to right shift the sum of squares of a vector */
-/* of int16s to make it fit in an int32 */
-void silk_sum_sqr_shift(
- opus_int32 *energy, /* O Energy of x, after shifting to the right */
- opus_int *shift, /* O Number of bits right shift applied to energy */
- const opus_int16 *x, /* I Input vector */
- opus_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. */
-opus_int32 silk_schur( /* O Returns residual energy */
- opus_int16 *rc_Q15, /* O reflection coefficients [order] Q15 */
- const opus_int32 *c, /* I correlations [order+1] */
- const opus_int32 order /* I prediction order */
-);
-
-/* Calculates the reflection coefficients from the correlation sequence */
-/* Slower than schur(), but more accurate. */
-/* Uses SMULL(), available on armv4 */
-opus_int32 silk_schur64( /* O returns residual energy */
- opus_int32 rc_Q16[], /* O Reflection coefficients [order] Q16 */
- const opus_int32 c[], /* I Correlations [order+1] */
- opus_int32 order /* I Prediction order */
-);
-
-/* Step up function, converts reflection coefficients to prediction coefficients */
-void silk_k2a(
- opus_int32 *A_Q24, /* O Prediction coefficients [order] Q24 */
- const opus_int16 *rc_Q15, /* I Reflection coefficients [order] Q15 */
- const opus_int32 order /* I Prediction order */
-);
-
-/* Step up function, converts reflection coefficients to prediction coefficients */
-void silk_k2a_Q16(
- opus_int32 *A_Q24, /* O Prediction coefficients [order] Q24 */
- const opus_int32 *rc_Q16, /* I Reflection coefficients [order] Q16 */
- const opus_int32 order /* I Prediction order */
-);
-
-/* Apply sine window to signal vector. */
-/* Window types: */
-/* 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 silk_apply_sine_window(
- opus_int16 px_win[], /* O Pointer to windowed signal */
- const opus_int16 px[], /* I Pointer to input signal */
- const opus_int win_type, /* I Selects a window type */
- const opus_int length /* I Window length, multiple of 4 */
-);
-
-/* Compute autocorrelation */
-void silk_autocorr(
- opus_int32 *results, /* O Result (length correlationCount) */
- opus_int *scale, /* O Scaling of the correlation vector */
- const opus_int16 *inputData, /* I Input data to correlate */
- const opus_int inputDataSize, /* I Length of input */
- const opus_int correlationCount, /* I Number of correlation taps to compute */
- int arch /* I Run-time architecture */
-);
-
-void silk_decode_pitch(
- opus_int16 lagIndex, /* I */
- opus_int8 contourIndex, /* O */
- opus_int pitch_lags[], /* O 4 pitch values */
- const opus_int Fs_kHz, /* I sampling frequency (kHz) */
- const opus_int nb_subfr /* I number of sub frames */
-);
-
-opus_int silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unvoiced */
- const opus_int16 *frame, /* I Signal of length PE_FRAME_LENGTH_MS*Fs_kHz */
- opus_int *pitch_out, /* O 4 pitch lag values */
- opus_int16 *lagIndex, /* O Lag Index */
- opus_int8 *contourIndex, /* O Pitch contour Index */
- opus_int *LTPCorr_Q15, /* I/O Normalized correlation; input: value from previous frame */
- opus_int prevLag, /* I Last lag of previous frame; set to zero is unvoiced */
- const opus_int32 search_thres1_Q16, /* I First stage threshold for lag candidates 0 - 1 */
- const opus_int search_thres2_Q13, /* I Final threshold for lag candidates 0 - 1 */
- const opus_int Fs_kHz, /* I Sample frequency (kHz) */
- const opus_int complexity, /* I Complexity setting, 0-2, where 2 is highest */
- const opus_int nb_subfr, /* I number of 5 ms subframes */
- int arch /* I Run-time architecture */
-);
-
-/* 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 silk_A2NLSF(
- opus_int16 *NLSF, /* O Normalized Line Spectral Frequencies in Q15 (0..2^15-1) [d] */
- opus_int32 *a_Q16, /* I/O Monic whitening filter coefficients in Q16 [d] */
- const opus_int d /* I Filter order (must be even) */
-);
-
-/* compute whitening filter coefficients from normalized line spectral frequencies */
-void silk_NLSF2A(
- opus_int16 *a_Q12, /* O monic whitening filter coefficients in Q12, [ d ] */
- const opus_int16 *NLSF, /* I normalized line spectral frequencies in Q15, [ d ] */
- const opus_int d /* I filter order (should be even) */
-);
-
-void silk_insertion_sort_increasing(
- opus_int32 *a, /* I/O Unsorted / Sorted vector */
- opus_int *idx, /* O Index vector for the sorted elements */
- const opus_int L, /* I Vector length */
- const opus_int K /* I Number of correctly sorted positions */
-);
-
-void silk_insertion_sort_decreasing_int16(
- opus_int16 *a, /* I/O Unsorted / Sorted vector */
- opus_int *idx, /* O Index vector for the sorted elements */
- const opus_int L, /* I Vector length */
- const opus_int K /* I Number of correctly sorted positions */
-);
-
-void silk_insertion_sort_increasing_all_values_int16(
- opus_int16 *a, /* I/O Unsorted / Sorted vector */
- const opus_int L /* I Vector length */
-);
-
-/* NLSF stabilizer, for a single input data vector */
-void silk_NLSF_stabilize(
- opus_int16 *NLSF_Q15, /* I/O Unstable/stabilized normalized LSF vector in Q15 [L] */
- const opus_int16 *NDeltaMin_Q15, /* I Min distance vector, NDeltaMin_Q15[L] must be >= 1 [L+1] */
- const opus_int L /* I Number of NLSF parameters in the input vector */
-);
-
-/* Laroia low complexity NLSF weights */
-void silk_NLSF_VQ_weights_laroia(
- opus_int16 *pNLSFW_Q_OUT, /* O Pointer to input vector weights [D] */
- const opus_int16 *pNLSF_Q15, /* I Pointer to input vector [D] */
- const opus_int D /* I Input vector dimension (even) */
-);
-
-/* Compute reflection coefficients from input signal */
-void silk_burg_modified_c(
- opus_int32 *res_nrg, /* O Residual energy */
- opus_int *res_nrg_Q, /* O Residual energy Q value */
- opus_int32 A_Q16[], /* O Prediction coefficients (length order) */
- const opus_int16 x[], /* I Input signal, length: nb_subfr * ( D + subfr_length ) */
- const opus_int32 minInvGain_Q30, /* I Inverse of max prediction gain */
- const opus_int subfr_length, /* I Input signal subframe length (incl. D preceding samples) */
- const opus_int nb_subfr, /* I Number of subframes stacked in x */
- const opus_int D, /* I Order */
- int arch /* I Run-time architecture */
-);
-
-/* Copy and multiply a vector by a constant */
-void silk_scale_copy_vector16(
- opus_int16 *data_out,
- const opus_int16 *data_in,
- opus_int32 gain_Q16, /* I Gain in Q16 */
- const opus_int dataSize /* I Length */
-);
-
-/* Some for the LTP related function requires Q26 to work.*/
-void silk_scale_vector32_Q26_lshift_18(
- opus_int32 *data1, /* I/O Q0/Q18 */
- opus_int32 gain_Q26, /* I Q26 */
- opus_int dataSize /* I length */
-);
-
-/********************************************************************/
-/* INLINE ARM MATH */
-/********************************************************************/
-
-/* return sum( inVec1[i] * inVec2[i] ) */
-
-opus_int32 silk_inner_prod_aligned(
- const opus_int16 *const inVec1, /* I input vector 1 */
- const opus_int16 *const inVec2, /* I input vector 2 */
- const opus_int len, /* I vector lengths */
- int arch /* I Run-time architecture */
-);
-
-
-opus_int32 silk_inner_prod_aligned_scale(
- const opus_int16 *const inVec1, /* I input vector 1 */
- const opus_int16 *const inVec2, /* I input vector 2 */
- const opus_int scale, /* I number of bits to shift */
- const opus_int len /* I vector lengths */
-);
-
-opus_int64 silk_inner_prod16_aligned_64_c(
- const opus_int16 *inVec1, /* I input vector 1 */
- const opus_int16 *inVec2, /* I input vector 2 */
- const opus_int len /* I vector lengths */
-);
-
-/********************************************************************/
-/* MACROS */
-/********************************************************************/
-
-/* Rotate a32 right by 'rot' bits. Negative rot values result in rotating
- left. Output is 32bit int.
- Note: contemporary compilers recognize the C expression below and
- compile it into a 'ror' instruction if available. No need for OPUS_INLINE ASM! */
-static OPUS_INLINE opus_int32 silk_ROR32( opus_int32 a32, opus_int rot )
-{
- opus_uint32 x = (opus_uint32) a32;
- opus_uint32 r = (opus_uint32) rot;
- opus_uint32 m = (opus_uint32) -rot;
- if( rot == 0 ) {
- return a32;
- } else if( rot < 0 ) {
- return (opus_int32) ((x << m) | (x >> (32 - m)));
- } else {
- return (opus_int32) ((x << (32 - r)) | (x >> r));
- }
-}
-
-/* Allocate opus_int16 aligned to 4-byte memory address */
-#if EMBEDDED_ARM
-#define silk_DWORD_ALIGN __attribute__((aligned(4)))
-#else
-#define silk_DWORD_ALIGN
-#endif
-
-/* Useful Macros that can be adjusted to other platforms */
-#define silk_memcpy(dest, src, size) memcpy((dest), (src), (size))
-#define silk_memset(dest, src, size) memset((dest), (src), (size))
-#define silk_memmove(dest, src, size) memmove((dest), (src), (size))
-
-/* Fixed point macros */
-
-/* (a32 * b32) output have to be 32bit int */
-#define silk_MUL(a32, b32) ((a32) * (b32))
-
-/* (a32 * b32) output have to be 32bit uint */
-#define silk_MUL_uint(a32, b32) silk_MUL(a32, b32)
-
-/* a32 + (b32 * c32) output have to be 32bit int */
-#define silk_MLA(a32, b32, c32) silk_ADD32((a32),((b32) * (c32)))
-
-/* a32 + (b32 * c32) output have to be 32bit uint */
-#define silk_MLA_uint(a32, b32, c32) silk_MLA(a32, b32, c32)
-
-/* ((a32 >> 16) * (b32 >> 16)) output have to be 32bit int */
-#define silk_SMULTT(a32, b32) (((a32) >> 16) * ((b32) >> 16))
-
-/* a32 + ((a32 >> 16) * (b32 >> 16)) output have to be 32bit int */
-#define silk_SMLATT(a32, b32, c32) silk_ADD32((a32),((b32) >> 16) * ((c32) >> 16))
-
-#define silk_SMLALBB(a64, b16, c16) silk_ADD64((a64),(opus_int64)((opus_int32)(b16) * (opus_int32)(c16)))
-
-/* (a32 * b32) */
-#define silk_SMULL(a32, b32) ((opus_int64)(a32) * /*(opus_int64)*/(b32))
-
-/* Adds two signed 32-bit values in a way that can overflow, while not relying on undefined behaviour
- (just standard two's complement implementation-specific behaviour) */
-#define silk_ADD32_ovflw(a, b) ((opus_int32)((opus_uint32)(a) + (opus_uint32)(b)))
-/* Subtractss two signed 32-bit values in a way that can overflow, while not relying on undefined behaviour
- (just standard two's complement implementation-specific behaviour) */
-#define silk_SUB32_ovflw(a, b) ((opus_int32)((opus_uint32)(a) - (opus_uint32)(b)))
-
-/* Multiply-accumulate macros that allow overflow in the addition (ie, no asserts in debug mode) */
-#define silk_MLA_ovflw(a32, b32, c32) silk_ADD32_ovflw((a32), (opus_uint32)(b32) * (opus_uint32)(c32))
-#define silk_SMLABB_ovflw(a32, b32, c32) (silk_ADD32_ovflw((a32) , ((opus_int32)((opus_int16)(b32))) * (opus_int32)((opus_int16)(c32))))
-
-#define silk_DIV32_16(a32, b16) ((opus_int32)((a32) / (b16)))
-#define silk_DIV32(a32, b32) ((opus_int32)((a32) / (b32)))
-
-/* These macros enables checking for overflow in silk_API_Debug.h*/
-#define silk_ADD16(a, b) ((a) + (b))
-#define silk_ADD32(a, b) ((a) + (b))
-#define silk_ADD64(a, b) ((a) + (b))
-
-#define silk_SUB16(a, b) ((a) - (b))
-#define silk_SUB32(a, b) ((a) - (b))
-#define silk_SUB64(a, b) ((a) - (b))
-
-#define silk_SAT8(a) ((a) > silk_int8_MAX ? silk_int8_MAX : \
- ((a) < silk_int8_MIN ? silk_int8_MIN : (a)))
-#define silk_SAT16(a) ((a) > silk_int16_MAX ? silk_int16_MAX : \
- ((a) < silk_int16_MIN ? silk_int16_MIN : (a)))
-#define silk_SAT32(a) ((a) > silk_int32_MAX ? silk_int32_MAX : \
- ((a) < silk_int32_MIN ? silk_int32_MIN : (a)))
-
-#define silk_CHECK_FIT8(a) (a)
-#define silk_CHECK_FIT16(a) (a)
-#define silk_CHECK_FIT32(a) (a)
-
-#define silk_ADD_SAT16(a, b) (opus_int16)silk_SAT16( silk_ADD32( (opus_int32)(a), (b) ) )
-#define silk_ADD_SAT64(a, b) ((((a) + (b)) & 0x8000000000000000LL) == 0 ? \
- ((((a) & (b)) & 0x8000000000000000LL) != 0 ? silk_int64_MIN : (a)+(b)) : \
- ((((a) | (b)) & 0x8000000000000000LL) == 0 ? silk_int64_MAX : (a)+(b)) )
-
-#define silk_SUB_SAT16(a, b) (opus_int16)silk_SAT16( silk_SUB32( (opus_int32)(a), (b) ) )
-#define silk_SUB_SAT64(a, b) ((((a)-(b)) & 0x8000000000000000LL) == 0 ? \
- (( (a) & ((b)^0x8000000000000000LL) & 0x8000000000000000LL) ? silk_int64_MIN : (a)-(b)) : \
- ((((a)^0x8000000000000000LL) & (b) & 0x8000000000000000LL) ? silk_int64_MAX : (a)-(b)) )
-
-/* Saturation for positive input values */
-#define silk_POS_SAT32(a) ((a) > silk_int32_MAX ? silk_int32_MAX : (a))
-
-/* Add with saturation for positive input values */
-#define silk_ADD_POS_SAT8(a, b) ((((a)+(b)) & 0x80) ? silk_int8_MAX : ((a)+(b)))
-#define silk_ADD_POS_SAT16(a, b) ((((a)+(b)) & 0x8000) ? silk_int16_MAX : ((a)+(b)))
-#define silk_ADD_POS_SAT32(a, b) ((((a)+(b)) & 0x80000000) ? silk_int32_MAX : ((a)+(b)))
-#define silk_ADD_POS_SAT64(a, b) ((((a)+(b)) & 0x8000000000000000LL) ? silk_int64_MAX : ((a)+(b)))
-
-#define silk_LSHIFT8(a, shift) ((opus_int8)((opus_uint8)(a)<<(shift))) /* shift >= 0, shift < 8 */
-#define silk_LSHIFT16(a, shift) ((opus_int16)((opus_uint16)(a)<<(shift))) /* shift >= 0, shift < 16 */
-#define silk_LSHIFT32(a, shift) ((opus_int32)((opus_uint32)(a)<<(shift))) /* shift >= 0, shift < 32 */
-#define silk_LSHIFT64(a, shift) ((opus_int64)((opus_uint64)(a)<<(shift))) /* shift >= 0, shift < 64 */
-#define silk_LSHIFT(a, shift) silk_LSHIFT32(a, shift) /* shift >= 0, shift < 32 */
-
-#define silk_RSHIFT8(a, shift) ((a)>>(shift)) /* shift >= 0, shift < 8 */
-#define silk_RSHIFT16(a, shift) ((a)>>(shift)) /* shift >= 0, shift < 16 */
-#define silk_RSHIFT32(a, shift) ((a)>>(shift)) /* shift >= 0, shift < 32 */
-#define silk_RSHIFT64(a, shift) ((a)>>(shift)) /* shift >= 0, shift < 64 */
-#define silk_RSHIFT(a, shift) silk_RSHIFT32(a, shift) /* shift >= 0, shift < 32 */
-
-/* saturates before shifting */
-#define silk_LSHIFT_SAT32(a, shift) (silk_LSHIFT32( silk_LIMIT( (a), silk_RSHIFT32( silk_int32_MIN, (shift) ), \
- silk_RSHIFT32( silk_int32_MAX, (shift) ) ), (shift) ))
-
-#define silk_LSHIFT_ovflw(a, shift) ((opus_int32)((opus_uint32)(a) << (shift))) /* shift >= 0, allowed to overflow */
-#define silk_LSHIFT_uint(a, shift) ((a) << (shift)) /* shift >= 0 */
-#define silk_RSHIFT_uint(a, shift) ((a) >> (shift)) /* shift >= 0 */
-
-#define silk_ADD_LSHIFT(a, b, shift) ((a) + silk_LSHIFT((b), (shift))) /* shift >= 0 */
-#define silk_ADD_LSHIFT32(a, b, shift) silk_ADD32((a), silk_LSHIFT32((b), (shift))) /* shift >= 0 */
-#define silk_ADD_LSHIFT_uint(a, b, shift) ((a) + silk_LSHIFT_uint((b), (shift))) /* shift >= 0 */
-#define silk_ADD_RSHIFT(a, b, shift) ((a) + silk_RSHIFT((b), (shift))) /* shift >= 0 */
-#define silk_ADD_RSHIFT32(a, b, shift) silk_ADD32((a), silk_RSHIFT32((b), (shift))) /* shift >= 0 */
-#define silk_ADD_RSHIFT_uint(a, b, shift) ((a) + silk_RSHIFT_uint((b), (shift))) /* shift >= 0 */
-#define silk_SUB_LSHIFT32(a, b, shift) silk_SUB32((a), silk_LSHIFT32((b), (shift))) /* shift >= 0 */
-#define silk_SUB_RSHIFT32(a, b, shift) silk_SUB32((a), silk_RSHIFT32((b), (shift))) /* shift >= 0 */
-
-/* Requires that shift > 0 */
-#define silk_RSHIFT_ROUND(a, shift) ((shift) == 1 ? ((a) >> 1) + ((a) & 1) : (((a) >> ((shift) - 1)) + 1) >> 1)
-#define silk_RSHIFT_ROUND64(a, shift) ((shift) == 1 ? ((a) >> 1) + ((a) & 1) : (((a) >> ((shift) - 1)) + 1) >> 1)
-
-/* Number of rightshift required to fit the multiplication */
-#define silk_NSHIFT_MUL_32_32(a, b) ( -(31- (32-silk_CLZ32(silk_abs(a)) + (32-silk_CLZ32(silk_abs(b))))) )
-#define silk_NSHIFT_MUL_16_16(a, b) ( -(15- (16-silk_CLZ16(silk_abs(a)) + (16-silk_CLZ16(silk_abs(b))))) )
-
-
-#define silk_min(a, b) (((a) < (b)) ? (a) : (b))
-#define silk_max(a, b) (((a) > (b)) ? (a) : (b))
-
-/* Macro to convert floating-point constants to fixed-point */
-#define SILK_FIX_CONST( C, Q ) ((opus_int32)((C) * ((opus_int64)1 << (Q)) + 0.5))
-
-/* silk_min() versions with typecast in the function call */
-static OPUS_INLINE opus_int silk_min_int(opus_int a, opus_int b)
-{
- return (((a) < (b)) ? (a) : (b));
-}
-static OPUS_INLINE opus_int16 silk_min_16(opus_int16 a, opus_int16 b)
-{
- return (((a) < (b)) ? (a) : (b));
-}
-static OPUS_INLINE opus_int32 silk_min_32(opus_int32 a, opus_int32 b)
-{
- return (((a) < (b)) ? (a) : (b));
-}
-static OPUS_INLINE opus_int64 silk_min_64(opus_int64 a, opus_int64 b)
-{
- return (((a) < (b)) ? (a) : (b));
-}
-
-/* silk_min() versions with typecast in the function call */
-static OPUS_INLINE opus_int silk_max_int(opus_int a, opus_int b)
-{
- return (((a) > (b)) ? (a) : (b));
-}
-static OPUS_INLINE opus_int16 silk_max_16(opus_int16 a, opus_int16 b)
-{
- return (((a) > (b)) ? (a) : (b));
-}
-static OPUS_INLINE opus_int32 silk_max_32(opus_int32 a, opus_int32 b)
-{
- return (((a) > (b)) ? (a) : (b));
-}
-static OPUS_INLINE opus_int64 silk_max_64(opus_int64 a, opus_int64 b)
-{
- return (((a) > (b)) ? (a) : (b));
-}
-
-#define silk_LIMIT( a, limit1, limit2) ((limit1) > (limit2) ? ((a) > (limit1) ? (limit1) : ((a) < (limit2) ? (limit2) : (a))) \
- : ((a) > (limit2) ? (limit2) : ((a) < (limit1) ? (limit1) : (a))))
-
-#define silk_LIMIT_int silk_LIMIT
-#define silk_LIMIT_16 silk_LIMIT
-#define silk_LIMIT_32 silk_LIMIT
-
-#define silk_abs(a) (((a) > 0) ? (a) : -(a)) /* Be careful, silk_abs returns wrong when input equals to silk_intXX_MIN */
-#define silk_abs_int(a) (((a) ^ ((a) >> (8 * sizeof(a) - 1))) - ((a) >> (8 * sizeof(a) - 1)))
-#define silk_abs_int32(a) (((a) ^ ((a) >> 31)) - ((a) >> 31))
-#define silk_abs_int64(a) (((a) > 0) ? (a) : -(a))
-
-#define silk_sign(a) ((a) > 0 ? 1 : ( (a) < 0 ? -1 : 0 ))
-
-/* 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. */
-#define silk_RAND(seed) (silk_MLA_ovflw(907633515, (seed), 196314165))
-
-/* Add some multiplication functions that can be easily mapped to ARM. */
-
-/* silk_SMMUL: Signed top word multiply.
- ARMv6 2 instruction cycles.
- ARMv3M+ 3 instruction cycles. use SMULL and ignore LSB registers.(except xM)*/
-/*#define silk_SMMUL(a32, b32) (opus_int32)silk_RSHIFT(silk_SMLAL(silk_SMULWB((a32), (b32)), (a32), silk_RSHIFT_ROUND((b32), 16)), 16)*/
-/* the following seems faster on x86 */
-#define silk_SMMUL(a32, b32) (opus_int32)silk_RSHIFT64(silk_SMULL((a32), (b32)), 32)
-
-#if !defined(OPUS_X86_MAY_HAVE_SSE4_1)
-#define silk_burg_modified(res_nrg, res_nrg_Q, A_Q16, x, minInvGain_Q30, subfr_length, nb_subfr, D, arch) \
- ((void)(arch), silk_burg_modified_c(res_nrg, res_nrg_Q, A_Q16, x, minInvGain_Q30, subfr_length, nb_subfr, D, arch))
-
-#define silk_inner_prod16_aligned_64(inVec1, inVec2, len, arch) \
- ((void)(arch),silk_inner_prod16_aligned_64_c(inVec1, inVec2, len))
-#endif
-
-#include "opus/silk/Inlines.h"
-#include "opus/silk/MacroCount.h"
-#include "opus/silk/MacroDebug.h"
-
-#ifdef OPUS_ARM_INLINE_ASM
-#include "opus/silk/arm/SigProc_FIX_armv4.h"
-#endif
-
-#ifdef OPUS_ARM_INLINE_EDSP
-#include "opus/silk/arm/SigProc_FIX_armv5e.h"
-#endif
-
-#if defined(MIPSr1_ASM)
-#include "opus/silk/mips/sigproc_fix_mipsr1.h"
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SILK_SIGPROC_FIX_H */
diff --git a/drivers/opus/silk/VAD.c b/drivers/opus/silk/VAD.c
deleted file mode 100644
index bb664cff87..0000000000
--- a/drivers/opus/silk/VAD.c
+++ /dev/null
@@ -1,359 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-
-/* Silk VAD noise level estimation */
-# if !defined(OPUS_X86_MAY_HAVE_SSE4_1)
-static OPUS_INLINE void silk_VAD_GetNoiseLevels(
- const opus_int32 pX[ VAD_N_BANDS ], /* I subband energies */
- silk_VAD_state *psSilk_VAD /* I/O Pointer to Silk VAD state */
-);
-#endif
-
-/**********************************/
-/* Initialization of the Silk VAD */
-/**********************************/
-opus_int silk_VAD_Init( /* O Return value, 0 if success */
- silk_VAD_state *psSilk_VAD /* I/O Pointer to Silk VAD state */
-)
-{
- opus_int b, ret = 0;
-
- /* reset state memory */
- silk_memset( psSilk_VAD, 0, sizeof( 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 ] = silk_max_32( silk_DIV32_16( VAD_NOISE_LEVELS_BIAS, b + 1 ), 1 );
- }
-
- /* Initialize state */
- for( b = 0; b < VAD_N_BANDS; b++ ) {
- psSilk_VAD->NL[ b ] = silk_MUL( 100, psSilk_VAD->NoiseLevelBias[ b ] );
- psSilk_VAD->inv_NL[ b ] = silk_DIV32( silk_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 */
-static const opus_int32 tiltWeights[ VAD_N_BANDS ] = { 30000, 6000, -12000, -12000 };
-
-/***************************************/
-/* Get the speech activity level in Q8 */
-/***************************************/
-opus_int silk_VAD_GetSA_Q8_c( /* O Return value, 0 if success */
- silk_encoder_state *psEncC, /* I/O Encoder state */
- const opus_int16 pIn[] /* I PCM input */
-)
-{
- opus_int SA_Q15, pSNR_dB_Q7, input_tilt;
- opus_int decimated_framelength1, decimated_framelength2;
- opus_int decimated_framelength;
- opus_int dec_subframe_length, dec_subframe_offset, SNR_Q7, i, b, s;
- opus_int32 sumSquared, smooth_coef_Q16;
- opus_int16 HPstateTmp;
- VARDECL( opus_int16, X );
- opus_int32 Xnrg[ VAD_N_BANDS ];
- opus_int32 NrgToNoiseRatio_Q8[ VAD_N_BANDS ];
- opus_int32 speech_nrg, x_tmp;
- opus_int X_offset[ VAD_N_BANDS ];
- opus_int ret = 0;
- silk_VAD_state *psSilk_VAD = &psEncC->sVAD;
- SAVE_STACK;
-
- /* Safety checks */
- silk_assert( VAD_N_BANDS == 4 );
- silk_assert( MAX_FRAME_LENGTH >= psEncC->frame_length );
- silk_assert( psEncC->frame_length <= 512 );
- silk_assert( psEncC->frame_length == 8 * silk_RSHIFT( psEncC->frame_length, 3 ) );
-
- /***********************/
- /* Filter and Decimate */
- /***********************/
- decimated_framelength1 = silk_RSHIFT( psEncC->frame_length, 1 );
- decimated_framelength2 = silk_RSHIFT( psEncC->frame_length, 2 );
- decimated_framelength = silk_RSHIFT( psEncC->frame_length, 3 );
- /* Decimate into 4 bands:
- 0 L 3L L 3L 5L
- - -- - -- --
- 8 8 2 4 4
-
- [0-1 kHz| temp. |1-2 kHz| 2-4 kHz | 4-8 kHz |
-
- They're arranged to allow the minimal ( frame_length / 4 ) extra
- scratch space during the downsampling process */
- X_offset[ 0 ] = 0;
- X_offset[ 1 ] = decimated_framelength + decimated_framelength2;
- X_offset[ 2 ] = X_offset[ 1 ] + decimated_framelength;
- X_offset[ 3 ] = X_offset[ 2 ] + decimated_framelength2;
- ALLOC( X, X_offset[ 3 ] + decimated_framelength1, opus_int16 );
-
- /* 0-8 kHz to 0-4 kHz and 4-8 kHz */
- silk_ana_filt_bank_1( pIn, &psSilk_VAD->AnaState[ 0 ],
- X, &X[ X_offset[ 3 ] ], psEncC->frame_length );
-
- /* 0-4 kHz to 0-2 kHz and 2-4 kHz */
- silk_ana_filt_bank_1( X, &psSilk_VAD->AnaState1[ 0 ],
- X, &X[ X_offset[ 2 ] ], decimated_framelength1 );
-
- /* 0-2 kHz to 0-1 kHz and 1-2 kHz */
- silk_ana_filt_bank_1( X, &psSilk_VAD->AnaState2[ 0 ],
- X, &X[ X_offset[ 1 ] ], decimated_framelength2 );
-
- /*********************************************/
- /* HP filter on lowest band (differentiator) */
- /*********************************************/
- X[ decimated_framelength - 1 ] = silk_RSHIFT( X[ decimated_framelength - 1 ], 1 );
- HPstateTmp = X[ decimated_framelength - 1 ];
- for( i = decimated_framelength - 1; i > 0; i-- ) {
- X[ i - 1 ] = silk_RSHIFT( X[ i - 1 ], 1 );
- X[ i ] -= X[ i - 1 ];
- }
- X[ 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 = silk_RSHIFT( psEncC->frame_length, silk_min_int( VAD_N_BANDS - b, VAD_N_BANDS - 1 ) );
-
- /* Split length into subframe lengths */
- dec_subframe_length = silk_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 * ( silk_int16_MIN / 8 ) ^ 2. */
- /* Therefore we can accumulate with no risk of overflow (unless dec_subframe_length > 128) */
- x_tmp = silk_RSHIFT(
- X[ X_offset[ b ] + i + dec_subframe_offset ], 3 );
- sumSquared = silk_SMLABB( sumSquared, x_tmp, x_tmp );
-
- /* Safety check */
- silk_assert( sumSquared >= 0 );
- }
-
- /* Add/saturate summed energy of current subframe */
- if( s < VAD_INTERNAL_SUBFRAMES - 1 ) {
- Xnrg[ b ] = silk_ADD_POS_SAT32( Xnrg[ b ], sumSquared );
- } else {
- /* Look-ahead subframe */
- Xnrg[ b ] = silk_ADD_POS_SAT32( Xnrg[ b ], silk_RSHIFT( sumSquared, 1 ) );
- }
-
- dec_subframe_offset += dec_subframe_length;
- }
- psSilk_VAD->XnrgSubfr[ b ] = sumSquared;
- }
-
- /********************/
- /* Noise estimation */
- /********************/
- 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 ] = silk_DIV32( silk_LSHIFT( Xnrg[ b ], 8 ), psSilk_VAD->NL[ b ] + 1 );
- } else {
- NrgToNoiseRatio_Q8[ b ] = silk_DIV32( Xnrg[ b ], silk_RSHIFT( psSilk_VAD->NL[ b ], 8 ) + 1 );
- }
-
- /* Convert to log domain */
- SNR_Q7 = silk_lin2log( NrgToNoiseRatio_Q8[ b ] ) - 8 * 128;
-
- /* Sum-of-squares */
- sumSquared = silk_SMLABB( sumSquared, SNR_Q7, SNR_Q7 ); /* Q14 */
-
- /* Tilt measure */
- if( speech_nrg < ( (opus_int32)1 << 20 ) ) {
- /* Scale down SNR value for small subband speech energies */
- SNR_Q7 = silk_SMULWB( silk_LSHIFT( silk_SQRT_APPROX( speech_nrg ), 6 ), SNR_Q7 );
- }
- input_tilt = silk_SMLAWB( input_tilt, tiltWeights[ b ], SNR_Q7 );
- } else {
- NrgToNoiseRatio_Q8[ b ] = 256;
- }
- }
-
- /* Mean-of-squares */
- sumSquared = silk_DIV32_16( sumSquared, VAD_N_BANDS ); /* Q14 */
-
- /* Root-mean-square approximation, scale to dBs, and write to output pointer */
- pSNR_dB_Q7 = (opus_int16)( 3 * silk_SQRT_APPROX( sumSquared ) ); /* Q7 */
-
- /*********************************/
- /* Speech Probability Estimation */
- /*********************************/
- SA_Q15 = silk_sigm_Q15( silk_SMULWB( VAD_SNR_FACTOR_Q16, pSNR_dB_Q7 ) - VAD_NEGATIVE_OFFSET_Q5 );
-
- /**************************/
- /* Frequency Tilt Measure */
- /**************************/
- psEncC->input_tilt_Q15 = silk_LSHIFT( 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 ) * silk_RSHIFT( Xnrg[ b ] - psSilk_VAD->NL[ b ], 4 );
- }
-
- /* Power scaling */
- if( speech_nrg <= 0 ) {
- SA_Q15 = silk_RSHIFT( SA_Q15, 1 );
- } else if( speech_nrg < 32768 ) {
- if( psEncC->frame_length == 10 * psEncC->fs_kHz ) {
- speech_nrg = silk_LSHIFT_SAT32( speech_nrg, 16 );
- } else {
- speech_nrg = silk_LSHIFT_SAT32( speech_nrg, 15 );
- }
-
- /* square-root */
- speech_nrg = silk_SQRT_APPROX( speech_nrg );
- SA_Q15 = silk_SMULWB( 32768 + speech_nrg, SA_Q15 );
- }
-
- /* Copy the resulting speech activity in Q8 */
- psEncC->speech_activity_Q8 = silk_min_int( silk_RSHIFT( SA_Q15, 7 ), silk_uint8_MAX );
-
- /***********************************/
- /* Energy Level and SNR estimation */
- /***********************************/
- /* Smoothing coefficient */
- smooth_coef_Q16 = silk_SMULWB( VAD_SNR_SMOOTH_COEF_Q18, silk_SMULWB( (opus_int32)SA_Q15, SA_Q15 ) );
-
- if( psEncC->frame_length == 10 * psEncC->fs_kHz ) {
- smooth_coef_Q16 >>= 1;
- }
-
- for( b = 0; b < VAD_N_BANDS; b++ ) {
- /* compute smoothed energy-to-noise ratio per band */
- psSilk_VAD->NrgRatioSmth_Q8[ b ] = silk_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 * ( silk_lin2log( psSilk_VAD->NrgRatioSmth_Q8[b] ) - 8 * 128 );
- /* quality = sigmoid( 0.25 * ( SNR_dB - 16 ) ); */
- psEncC->input_quality_bands_Q15[ b ] = silk_sigm_Q15( silk_RSHIFT( SNR_Q7 - 16 * 128, 4 ) );
- }
-
- RESTORE_STACK;
- return( ret );
-}
-
-/**************************/
-/* Noise level estimation */
-/**************************/
-# if !defined(OPUS_X86_MAY_HAVE_SSE4_1)
-static OPUS_INLINE
-#endif
-void silk_VAD_GetNoiseLevels(
- const opus_int32 pX[ VAD_N_BANDS ], /* I subband energies */
- silk_VAD_state *psSilk_VAD /* I/O Pointer to Silk VAD state */
-)
-{
- opus_int k;
- opus_int32 nl, nrg, inv_nrg;
- opus_int coef, min_coef;
-
- /* Initially faster smoothing */
- if( psSilk_VAD->counter < 1000 ) { /* 1000 = 20 sec */
- min_coef = silk_DIV32_16( silk_int16_MAX, silk_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 ];
- silk_assert( nl >= 0 );
-
- /* Add bias */
- nrg = silk_ADD_POS_SAT32( pX[ k ], psSilk_VAD->NoiseLevelBias[ k ] );
- silk_assert( nrg > 0 );
-
- /* Invert energies */
- inv_nrg = silk_DIV32( silk_int32_MAX, nrg );
- silk_assert( inv_nrg >= 0 );
-
- /* Less update when subband energy is high */
- if( nrg > silk_LSHIFT( nl, 3 ) ) {
- coef = VAD_NOISE_LEVEL_SMOOTH_COEF_Q16 >> 3;
- } else if( nrg < nl ) {
- coef = VAD_NOISE_LEVEL_SMOOTH_COEF_Q16;
- } else {
- coef = silk_SMULWB( silk_SMULWW( inv_nrg, nl ), VAD_NOISE_LEVEL_SMOOTH_COEF_Q16 << 1 );
- }
-
- /* Initially faster smoothing */
- coef = silk_max_int( coef, min_coef );
-
- /* Smooth inverse energies */
- psSilk_VAD->inv_NL[ k ] = silk_SMLAWB( psSilk_VAD->inv_NL[ k ], inv_nrg - psSilk_VAD->inv_NL[ k ], coef );
- silk_assert( psSilk_VAD->inv_NL[ k ] >= 0 );
-
- /* Compute noise level by inverting again */
- nl = silk_DIV32( silk_int32_MAX, psSilk_VAD->inv_NL[ k ] );
- silk_assert( nl >= 0 );
-
- /* Limit noise levels (guarantee 7 bits of head room) */
- nl = silk_min( nl, 0x00FFFFFF );
-
- /* Store as part of state */
- psSilk_VAD->NL[ k ] = nl;
- }
-
- /* Increment frame counter */
- psSilk_VAD->counter++;
-}
diff --git a/drivers/opus/silk/VQ_WMat_EC.c b/drivers/opus/silk/VQ_WMat_EC.c
deleted file mode 100644
index fec9ee8dde..0000000000
--- a/drivers/opus/silk/VQ_WMat_EC.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Entropy constrained matrix-weighted VQ, hard-coded to 5-element vectors, for a single input data vector */
-void silk_VQ_WMat_EC_c(
- opus_int8 *ind, /* O index of best codebook vector */
- opus_int32 *rate_dist_Q14, /* O best weighted quant error + mu * rate */
- opus_int *gain_Q7, /* O sum of absolute LTP coefficients */
- const opus_int16 *in_Q14, /* I input vector to be quantized */
- const opus_int32 *W_Q18, /* I weighting matrix */
- const opus_int8 *cb_Q7, /* I codebook */
- const opus_uint8 *cb_gain_Q7, /* I codebook effective gain */
- const opus_uint8 *cl_Q5, /* I code length for each codebook vector */
- const opus_int mu_Q9, /* I tradeoff betw. weighted error and rate */
- const opus_int32 max_gain_Q7, /* I maximum sum of absolute LTP coefficients */
- opus_int L /* I number of vectors in codebook */
-)
-{
- opus_int k, gain_tmp_Q7;
- const opus_int8 *cb_row_Q7;
- opus_int16 diff_Q14[ 5 ];
- opus_int32 sum1_Q14, sum2_Q16;
-
- /* Loop over codebook */
- *rate_dist_Q14 = silk_int32_MAX;
- cb_row_Q7 = cb_Q7;
- for( k = 0; k < L; k++ ) {
- gain_tmp_Q7 = cb_gain_Q7[k];
-
- diff_Q14[ 0 ] = in_Q14[ 0 ] - silk_LSHIFT( cb_row_Q7[ 0 ], 7 );
- diff_Q14[ 1 ] = in_Q14[ 1 ] - silk_LSHIFT( cb_row_Q7[ 1 ], 7 );
- diff_Q14[ 2 ] = in_Q14[ 2 ] - silk_LSHIFT( cb_row_Q7[ 2 ], 7 );
- diff_Q14[ 3 ] = in_Q14[ 3 ] - silk_LSHIFT( cb_row_Q7[ 3 ], 7 );
- diff_Q14[ 4 ] = in_Q14[ 4 ] - silk_LSHIFT( cb_row_Q7[ 4 ], 7 );
-
- /* Weighted rate */
- sum1_Q14 = silk_SMULBB( mu_Q9, cl_Q5[ k ] );
-
- /* Penalty for too large gain */
- sum1_Q14 = silk_ADD_LSHIFT32( sum1_Q14, silk_max( silk_SUB32( gain_tmp_Q7, max_gain_Q7 ), 0 ), 10 );
-
- silk_assert( sum1_Q14 >= 0 );
-
- /* first row of W_Q18 */
- sum2_Q16 = silk_SMULWB( W_Q18[ 1 ], diff_Q14[ 1 ] );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 2 ], diff_Q14[ 2 ] );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 3 ], diff_Q14[ 3 ] );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 4 ], diff_Q14[ 4 ] );
- sum2_Q16 = silk_LSHIFT( sum2_Q16, 1 );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 0 ], diff_Q14[ 0 ] );
- sum1_Q14 = silk_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14[ 0 ] );
-
- /* second row of W_Q18 */
- sum2_Q16 = silk_SMULWB( W_Q18[ 7 ], diff_Q14[ 2 ] );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 8 ], diff_Q14[ 3 ] );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 9 ], diff_Q14[ 4 ] );
- sum2_Q16 = silk_LSHIFT( sum2_Q16, 1 );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 6 ], diff_Q14[ 1 ] );
- sum1_Q14 = silk_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14[ 1 ] );
-
- /* third row of W_Q18 */
- sum2_Q16 = silk_SMULWB( W_Q18[ 13 ], diff_Q14[ 3 ] );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 14 ], diff_Q14[ 4 ] );
- sum2_Q16 = silk_LSHIFT( sum2_Q16, 1 );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 12 ], diff_Q14[ 2 ] );
- sum1_Q14 = silk_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14[ 2 ] );
-
- /* fourth row of W_Q18 */
- sum2_Q16 = silk_SMULWB( W_Q18[ 19 ], diff_Q14[ 4 ] );
- sum2_Q16 = silk_LSHIFT( sum2_Q16, 1 );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 18 ], diff_Q14[ 3 ] );
- sum1_Q14 = silk_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14[ 3 ] );
-
- /* last row of W_Q18 */
- sum2_Q16 = silk_SMULWB( W_Q18[ 24 ], diff_Q14[ 4 ] );
- sum1_Q14 = silk_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14[ 4 ] );
-
- silk_assert( sum1_Q14 >= 0 );
-
- /* find best */
- if( sum1_Q14 < *rate_dist_Q14 ) {
- *rate_dist_Q14 = sum1_Q14;
- *ind = (opus_int8)k;
- *gain_Q7 = gain_tmp_Q7;
- }
-
- /* Go to next cbk vector */
- cb_row_Q7 += LTP_ORDER;
- }
-}
diff --git a/drivers/opus/silk/ana_filt_bank_1.c b/drivers/opus/silk/ana_filt_bank_1.c
deleted file mode 100644
index b49bdd90be..0000000000
--- a/drivers/opus/silk/ana_filt_bank_1.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* Coefficients for 2-band filter bank based on first-order allpass filters */
-static opus_int16 A_fb1_20 = 5394 << 1;
-static opus_int16 A_fb1_21 = -24290; /* (opus_int16)(20623 << 1) */
-
-/* Split signal into two decimated bands using first-order allpass filters */
-void silk_ana_filt_bank_1(
- const opus_int16 *in, /* I Input signal [N] */
- opus_int32 *S, /* I/O State vector [2] */
- opus_int16 *outL, /* O Low band [N/2] */
- opus_int16 *outH, /* O High band [N/2] */
- const opus_int32 N /* I Number of input samples */
-)
-{
- opus_int k, N2 = silk_RSHIFT( N, 1 );
- opus_int32 in32, X, Y, out_1, out_2;
-
- /* Internal variables and state are in Q10 format */
- for( k = 0; k < N2; k++ ) {
- /* Convert to Q10 */
- in32 = silk_LSHIFT( (opus_int32)in[ 2 * k ], 10 );
-
- /* All-pass section for even input sample */
- Y = silk_SUB32( in32, S[ 0 ] );
- X = silk_SMLAWB( Y, Y, A_fb1_21 );
- out_1 = silk_ADD32( S[ 0 ], X );
- S[ 0 ] = silk_ADD32( in32, X );
-
- /* Convert to Q10 */
- in32 = silk_LSHIFT( (opus_int32)in[ 2 * k + 1 ], 10 );
-
- /* All-pass section for odd input sample, and add to output of previous section */
- Y = silk_SUB32( in32, S[ 1 ] );
- X = silk_SMULWB( Y, A_fb1_20 );
- out_2 = silk_ADD32( S[ 1 ], X );
- S[ 1 ] = silk_ADD32( in32, X );
-
- /* Add/subtract, convert back to int16 and store to output */
- outL[ k ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( silk_ADD32( out_2, out_1 ), 11 ) );
- outH[ k ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( silk_SUB32( out_2, out_1 ), 11 ) );
- }
-}
diff --git a/drivers/opus/silk/arm/SigProc_FIX_armv4.h b/drivers/opus/silk/arm/SigProc_FIX_armv4.h
deleted file mode 100644
index ff62b1e5d6..0000000000
--- a/drivers/opus/silk/arm/SigProc_FIX_armv4.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/***********************************************************************
-Copyright (C) 2013 Xiph.Org Foundation and contributors
-Copyright (c) 2013 Parrot
-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 Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_SIGPROC_FIX_ARMv4_H
-#define SILK_SIGPROC_FIX_ARMv4_H
-
-#undef silk_MLA
-static OPUS_INLINE opus_int32 silk_MLA_armv4(opus_int32 a, opus_int32 b,
- opus_int32 c)
-{
- opus_int32 res;
- __asm__(
- "#silk_MLA\n\t"
- "mla %0, %1, %2, %3\n\t"
- : "=&r"(res)
- : "r"(b), "r"(c), "r"(a)
- );
- return res;
-}
-#define silk_MLA(a, b, c) (silk_MLA_armv4(a, b, c))
-
-#endif
diff --git a/drivers/opus/silk/arm/SigProc_FIX_armv5e.h b/drivers/opus/silk/arm/SigProc_FIX_armv5e.h
deleted file mode 100644
index 617a09cab1..0000000000
--- a/drivers/opus/silk/arm/SigProc_FIX_armv5e.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. All rights reserved.
-Copyright (c) 2013 Parrot
-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 Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_SIGPROC_FIX_ARMv5E_H
-#define SILK_SIGPROC_FIX_ARMv5E_H
-
-#undef silk_SMULTT
-static OPUS_INLINE opus_int32 silk_SMULTT_armv5e(opus_int32 a, opus_int32 b)
-{
- opus_int32 res;
- __asm__(
- "#silk_SMULTT\n\t"
- "smultt %0, %1, %2\n\t"
- : "=r"(res)
- : "%r"(a), "r"(b)
- );
- return res;
-}
-#define silk_SMULTT(a, b) (silk_SMULTT_armv5e(a, b))
-
-#undef silk_SMLATT
-static OPUS_INLINE opus_int32 silk_SMLATT_armv5e(opus_int32 a, opus_int32 b,
- opus_int32 c)
-{
- opus_int32 res;
- __asm__(
- "#silk_SMLATT\n\t"
- "smlatt %0, %1, %2, %3\n\t"
- : "=r"(res)
- : "%r"(b), "r"(c), "r"(a)
- );
- return res;
-}
-#define silk_SMLATT(a, b, c) (silk_SMLATT_armv5e(a, b, c))
-
-#endif
diff --git a/drivers/opus/silk/arm/macros_armv4.h b/drivers/opus/silk/arm/macros_armv4.h
deleted file mode 100644
index 3f30e97288..0000000000
--- a/drivers/opus/silk/arm/macros_armv4.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/***********************************************************************
-Copyright (C) 2013 Xiph.Org Foundation and contributors.
-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 Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_MACROS_ARMv4_H
-#define SILK_MACROS_ARMv4_H
-
-/* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */
-#undef silk_SMULWB
-static OPUS_INLINE opus_int32 silk_SMULWB_armv4(opus_int32 a, opus_int16 b)
-{
- unsigned rd_lo;
- int rd_hi;
- __asm__(
- "#silk_SMULWB\n\t"
- "smull %0, %1, %2, %3\n\t"
- : "=&r"(rd_lo), "=&r"(rd_hi)
- : "%r"(a), "r"(b<<16)
- );
- return rd_hi;
-}
-#define silk_SMULWB(a, b) (silk_SMULWB_armv4(a, b))
-
-/* a32 + (b32 * (opus_int32)((opus_int16)(c32))) >> 16 output have to be 32bit int */
-#undef silk_SMLAWB
-#define silk_SMLAWB(a, b, c) ((a) + silk_SMULWB(b, c))
-
-/* (a32 * (b32 >> 16)) >> 16 */
-#undef silk_SMULWT
-static OPUS_INLINE opus_int32 silk_SMULWT_armv4(opus_int32 a, opus_int32 b)
-{
- unsigned rd_lo;
- int rd_hi;
- __asm__(
- "#silk_SMULWT\n\t"
- "smull %0, %1, %2, %3\n\t"
- : "=&r"(rd_lo), "=&r"(rd_hi)
- : "%r"(a), "r"(b&~0xFFFF)
- );
- return rd_hi;
-}
-#define silk_SMULWT(a, b) (silk_SMULWT_armv4(a, b))
-
-/* a32 + (b32 * (c32 >> 16)) >> 16 */
-#undef silk_SMLAWT
-#define silk_SMLAWT(a, b, c) ((a) + silk_SMULWT(b, c))
-
-/* (a32 * b32) >> 16 */
-#undef silk_SMULWW
-static OPUS_INLINE opus_int32 silk_SMULWW_armv4(opus_int32 a, opus_int32 b)
-{
- unsigned rd_lo;
- int rd_hi;
- __asm__(
- "#silk_SMULWW\n\t"
- "smull %0, %1, %2, %3\n\t"
- : "=&r"(rd_lo), "=&r"(rd_hi)
- : "%r"(a), "r"(b)
- );
- return (rd_hi<<16)+(rd_lo>>16);
-}
-#define silk_SMULWW(a, b) (silk_SMULWW_armv4(a, b))
-
-#undef silk_SMLAWW
-static OPUS_INLINE opus_int32 silk_SMLAWW_armv4(opus_int32 a, opus_int32 b,
- opus_int32 c)
-{
- unsigned rd_lo;
- int rd_hi;
- __asm__(
- "#silk_SMLAWW\n\t"
- "smull %0, %1, %2, %3\n\t"
- : "=&r"(rd_lo), "=&r"(rd_hi)
- : "%r"(b), "r"(c)
- );
- return a+(rd_hi<<16)+(rd_lo>>16);
-}
-#define silk_SMLAWW(a, b, c) (silk_SMLAWW_armv4(a, b, c))
-
-#endif /* SILK_MACROS_ARMv4_H */
diff --git a/drivers/opus/silk/arm/macros_armv5e.h b/drivers/opus/silk/arm/macros_armv5e.h
deleted file mode 100644
index aad4117e46..0000000000
--- a/drivers/opus/silk/arm/macros_armv5e.h
+++ /dev/null
@@ -1,213 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. All rights reserved.
-Copyright (c) 2013 Parrot
-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 Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_MACROS_ARMv5E_H
-#define SILK_MACROS_ARMv5E_H
-
-/* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */
-#undef silk_SMULWB
-static OPUS_INLINE opus_int32 silk_SMULWB_armv5e(opus_int32 a, opus_int16 b)
-{
- int res;
- __asm__(
- "#silk_SMULWB\n\t"
- "smulwb %0, %1, %2\n\t"
- : "=r"(res)
- : "r"(a), "r"(b)
- );
- return res;
-}
-#define silk_SMULWB(a, b) (silk_SMULWB_armv5e(a, b))
-
-/* a32 + (b32 * (opus_int32)((opus_int16)(c32))) >> 16 output have to be 32bit int */
-#undef silk_SMLAWB
-static OPUS_INLINE opus_int32 silk_SMLAWB_armv5e(opus_int32 a, opus_int32 b,
- opus_int16 c)
-{
- int res;
- __asm__(
- "#silk_SMLAWB\n\t"
- "smlawb %0, %1, %2, %3\n\t"
- : "=r"(res)
- : "r"(b), "r"(c), "r"(a)
- );
- return res;
-}
-#define silk_SMLAWB(a, b, c) (silk_SMLAWB_armv5e(a, b, c))
-
-/* (a32 * (b32 >> 16)) >> 16 */
-#undef silk_SMULWT
-static OPUS_INLINE opus_int32 silk_SMULWT_armv5e(opus_int32 a, opus_int32 b)
-{
- int res;
- __asm__(
- "#silk_SMULWT\n\t"
- "smulwt %0, %1, %2\n\t"
- : "=r"(res)
- : "r"(a), "r"(b)
- );
- return res;
-}
-#define silk_SMULWT(a, b) (silk_SMULWT_armv5e(a, b))
-
-/* a32 + (b32 * (c32 >> 16)) >> 16 */
-#undef silk_SMLAWT
-static OPUS_INLINE opus_int32 silk_SMLAWT_armv5e(opus_int32 a, opus_int32 b,
- opus_int32 c)
-{
- int res;
- __asm__(
- "#silk_SMLAWT\n\t"
- "smlawt %0, %1, %2, %3\n\t"
- : "=r"(res)
- : "r"(b), "r"(c), "r"(a)
- );
- return res;
-}
-#define silk_SMLAWT(a, b, c) (silk_SMLAWT_armv5e(a, b, c))
-
-/* (opus_int32)((opus_int16)(a3))) * (opus_int32)((opus_int16)(b32)) output have to be 32bit int */
-#undef silk_SMULBB
-static OPUS_INLINE opus_int32 silk_SMULBB_armv5e(opus_int32 a, opus_int32 b)
-{
- int res;
- __asm__(
- "#silk_SMULBB\n\t"
- "smulbb %0, %1, %2\n\t"
- : "=r"(res)
- : "%r"(a), "r"(b)
- );
- return res;
-}
-#define silk_SMULBB(a, b) (silk_SMULBB_armv5e(a, b))
-
-/* a32 + (opus_int32)((opus_int16)(b32)) * (opus_int32)((opus_int16)(c32)) output have to be 32bit int */
-#undef silk_SMLABB
-static OPUS_INLINE opus_int32 silk_SMLABB_armv5e(opus_int32 a, opus_int32 b,
- opus_int32 c)
-{
- int res;
- __asm__(
- "#silk_SMLABB\n\t"
- "smlabb %0, %1, %2, %3\n\t"
- : "=r"(res)
- : "%r"(b), "r"(c), "r"(a)
- );
- return res;
-}
-#define silk_SMLABB(a, b, c) (silk_SMLABB_armv5e(a, b, c))
-
-/* (opus_int32)((opus_int16)(a32)) * (b32 >> 16) */
-#undef silk_SMULBT
-static OPUS_INLINE opus_int32 silk_SMULBT_armv5e(opus_int32 a, opus_int32 b)
-{
- int res;
- __asm__(
- "#silk_SMULBT\n\t"
- "smulbt %0, %1, %2\n\t"
- : "=r"(res)
- : "r"(a), "r"(b)
- );
- return res;
-}
-#define silk_SMULBT(a, b) (silk_SMULBT_armv5e(a, b))
-
-/* a32 + (opus_int32)((opus_int16)(b32)) * (c32 >> 16) */
-#undef silk_SMLABT
-static OPUS_INLINE opus_int32 silk_SMLABT_armv5e(opus_int32 a, opus_int32 b,
- opus_int32 c)
-{
- int res;
- __asm__(
- "#silk_SMLABT\n\t"
- "smlabt %0, %1, %2, %3\n\t"
- : "=r"(res)
- : "r"(b), "r"(c), "r"(a)
- );
- return res;
-}
-#define silk_SMLABT(a, b, c) (silk_SMLABT_armv5e(a, b, c))
-
-/* add/subtract with output saturated */
-#undef silk_ADD_SAT32
-static OPUS_INLINE opus_int32 silk_ADD_SAT32_armv5e(opus_int32 a, opus_int32 b)
-{
- int res;
- __asm__(
- "#silk_ADD_SAT32\n\t"
- "qadd %0, %1, %2\n\t"
- : "=r"(res)
- : "%r"(a), "r"(b)
- );
- return res;
-}
-#define silk_ADD_SAT32(a, b) (silk_ADD_SAT32_armv5e(a, b))
-
-#undef silk_SUB_SAT32
-static OPUS_INLINE opus_int32 silk_SUB_SAT32_armv5e(opus_int32 a, opus_int32 b)
-{
- int res;
- __asm__(
- "#silk_SUB_SAT32\n\t"
- "qsub %0, %1, %2\n\t"
- : "=r"(res)
- : "r"(a), "r"(b)
- );
- return res;
-}
-#define silk_SUB_SAT32(a, b) (silk_SUB_SAT32_armv5e(a, b))
-
-#undef silk_CLZ16
-static OPUS_INLINE opus_int32 silk_CLZ16_armv5(opus_int16 in16)
-{
- int res;
- __asm__(
- "#silk_CLZ16\n\t"
- "clz %0, %1;\n"
- : "=r"(res)
- : "r"(in16<<16|0x8000)
- );
- return res;
-}
-#define silk_CLZ16(in16) (silk_CLZ16_armv5(in16))
-
-#undef silk_CLZ32
-static OPUS_INLINE opus_int32 silk_CLZ32_armv5(opus_int32 in32)
-{
- int res;
- __asm__(
- "#silk_CLZ32\n\t"
- "clz %0, %1\n\t"
- : "=r"(res)
- : "r"(in32)
- );
- return res;
-}
-#define silk_CLZ32(in32) (silk_CLZ32_armv5(in32))
-
-#endif /* SILK_MACROS_ARMv5E_H */
diff --git a/drivers/opus/silk/biquad_alt.c b/drivers/opus/silk/biquad_alt.c
deleted file mode 100644
index f797d1e709..0000000000
--- a/drivers/opus/silk/biquad_alt.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-/* *
- * silk_biquad_alt.c *
- * *
- * Second order ARMA filter *
- * Can handle slowly varying filter coefficients *
- * */
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* Second order ARMA filter, alternative implementation */
-void silk_biquad_alt(
- const opus_int16 *in, /* I input signal */
- const opus_int32 *B_Q28, /* I MA coefficients [3] */
- const opus_int32 *A_Q28, /* I AR coefficients [2] */
- opus_int32 *S, /* I/O State vector [2] */
- opus_int16 *out, /* O output signal */
- const opus_int32 len, /* I signal length (must be even) */
- opus_int stride /* I Operate on interleaved signal if > 1 */
-)
-{
- /* DIRECT FORM II TRANSPOSED (uses 2 element state vector) */
- opus_int k;
- opus_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 = silk_RSHIFT( -A_Q28[ 0 ], 14 ); /* upper part */
- A1_L_Q28 = ( -A_Q28[ 1 ] ) & 0x00003FFF; /* lower part */
- A1_U_Q28 = silk_RSHIFT( -A_Q28[ 1 ], 14 ); /* upper part */
-
- for( k = 0; k < len; k++ ) {
- /* S[ 0 ], S[ 1 ]: Q12 */
- inval = in[ k * stride ];
- out32_Q14 = silk_LSHIFT( silk_SMLAWB( S[ 0 ], B_Q28[ 0 ], inval ), 2 );
-
- S[ 0 ] = S[1] + silk_RSHIFT_ROUND( silk_SMULWB( out32_Q14, A0_L_Q28 ), 14 );
- S[ 0 ] = silk_SMLAWB( S[ 0 ], out32_Q14, A0_U_Q28 );
- S[ 0 ] = silk_SMLAWB( S[ 0 ], B_Q28[ 1 ], inval);
-
- S[ 1 ] = silk_RSHIFT_ROUND( silk_SMULWB( out32_Q14, A1_L_Q28 ), 14 );
- S[ 1 ] = silk_SMLAWB( S[ 1 ], out32_Q14, A1_U_Q28 );
- S[ 1 ] = silk_SMLAWB( S[ 1 ], B_Q28[ 2 ], inval );
-
- /* Scale back to Q0 and saturate */
- out[ k * stride ] = (opus_int16)silk_SAT16( silk_RSHIFT( out32_Q14 + (1<<14) - 1, 14 ) );
- }
-}
diff --git a/drivers/opus/silk/bwexpander.c b/drivers/opus/silk/bwexpander.c
deleted file mode 100644
index e7cc448520..0000000000
--- a/drivers/opus/silk/bwexpander.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* Chirp (bandwidth expand) LP AR filter */
-void silk_bwexpander(
- opus_int16 *ar, /* I/O AR filter to be expanded (without leading 1) */
- const opus_int d, /* I Length of ar */
- opus_int32 chirp_Q16 /* I Chirp factor (typically in the range 0 to 1) */
-)
-{
- opus_int i;
- opus_int32 chirp_minus_one_Q16 = chirp_Q16 - 65536;
-
- /* NB: Dont use silk_SMULWB, instead of silk_RSHIFT_ROUND( silk_MUL(), 16 ), below. */
- /* Bias in silk_SMULWB can lead to unstable filters */
- for( i = 0; i < d - 1; i++ ) {
- ar[ i ] = (opus_int16)silk_RSHIFT_ROUND( silk_MUL( chirp_Q16, ar[ i ] ), 16 );
- chirp_Q16 += silk_RSHIFT_ROUND( silk_MUL( chirp_Q16, chirp_minus_one_Q16 ), 16 );
- }
- ar[ d - 1 ] = (opus_int16)silk_RSHIFT_ROUND( silk_MUL( chirp_Q16, ar[ d - 1 ] ), 16 );
-}
diff --git a/drivers/opus/silk/bwexpander_32.c b/drivers/opus/silk/bwexpander_32.c
deleted file mode 100644
index dedd213b3e..0000000000
--- a/drivers/opus/silk/bwexpander_32.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* Chirp (bandwidth expand) LP AR filter */
-void silk_bwexpander_32(
- opus_int32 *ar, /* I/O AR filter to be expanded (without leading 1) */
- const opus_int d, /* I Length of ar */
- opus_int32 chirp_Q16 /* I Chirp factor in Q16 */
-)
-{
- opus_int i;
- opus_int32 chirp_minus_one_Q16 = chirp_Q16 - 65536;
-
- for( i = 0; i < d - 1; i++ ) {
- ar[ i ] = silk_SMULWW( chirp_Q16, ar[ i ] );
- chirp_Q16 += silk_RSHIFT_ROUND( silk_MUL( chirp_Q16, chirp_minus_one_Q16 ), 16 );
- }
- ar[ d - 1 ] = silk_SMULWW( chirp_Q16, ar[ d - 1 ] );
-}
-
diff --git a/drivers/opus/silk/check_control_input.c b/drivers/opus/silk/check_control_input.c
deleted file mode 100644
index 61a7cc1f33..0000000000
--- a/drivers/opus/silk/check_control_input.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/silk/control.h"
-#include "opus/silk/errors.h"
-
-/* Check encoder control struct */
-opus_int check_control_input(
- silk_EncControlStruct *encControl /* I Control structure */
-)
-{
- silk_assert( encControl != NULL );
-
- if( ( ( encControl->API_sampleRate != 8000 ) &&
- ( encControl->API_sampleRate != 12000 ) &&
- ( encControl->API_sampleRate != 16000 ) &&
- ( encControl->API_sampleRate != 24000 ) &&
- ( encControl->API_sampleRate != 32000 ) &&
- ( encControl->API_sampleRate != 44100 ) &&
- ( encControl->API_sampleRate != 48000 ) ) ||
- ( ( encControl->desiredInternalSampleRate != 8000 ) &&
- ( encControl->desiredInternalSampleRate != 12000 ) &&
- ( encControl->desiredInternalSampleRate != 16000 ) ) ||
- ( ( encControl->maxInternalSampleRate != 8000 ) &&
- ( encControl->maxInternalSampleRate != 12000 ) &&
- ( encControl->maxInternalSampleRate != 16000 ) ) ||
- ( ( encControl->minInternalSampleRate != 8000 ) &&
- ( encControl->minInternalSampleRate != 12000 ) &&
- ( encControl->minInternalSampleRate != 16000 ) ) ||
- ( encControl->minInternalSampleRate > encControl->desiredInternalSampleRate ) ||
- ( encControl->maxInternalSampleRate < encControl->desiredInternalSampleRate ) ||
- ( encControl->minInternalSampleRate > encControl->maxInternalSampleRate ) ) {
- silk_assert( 0 );
- return SILK_ENC_FS_NOT_SUPPORTED;
- }
- if( encControl->payloadSize_ms != 10 &&
- encControl->payloadSize_ms != 20 &&
- encControl->payloadSize_ms != 40 &&
- encControl->payloadSize_ms != 60 ) {
- silk_assert( 0 );
- return SILK_ENC_PACKET_SIZE_NOT_SUPPORTED;
- }
- if( encControl->packetLossPercentage < 0 || encControl->packetLossPercentage > 100 ) {
- silk_assert( 0 );
- return SILK_ENC_INVALID_LOSS_RATE;
- }
- if( encControl->useDTX < 0 || encControl->useDTX > 1 ) {
- silk_assert( 0 );
- return SILK_ENC_INVALID_DTX_SETTING;
- }
- if( encControl->useCBR < 0 || encControl->useCBR > 1 ) {
- silk_assert( 0 );
- return SILK_ENC_INVALID_CBR_SETTING;
- }
- if( encControl->useInBandFEC < 0 || encControl->useInBandFEC > 1 ) {
- silk_assert( 0 );
- return SILK_ENC_INVALID_INBAND_FEC_SETTING;
- }
- if( encControl->nChannelsAPI < 1 || encControl->nChannelsAPI > ENCODER_NUM_CHANNELS ) {
- silk_assert( 0 );
- return SILK_ENC_INVALID_NUMBER_OF_CHANNELS_ERROR;
- }
- if( encControl->nChannelsInternal < 1 || encControl->nChannelsInternal > ENCODER_NUM_CHANNELS ) {
- silk_assert( 0 );
- return SILK_ENC_INVALID_NUMBER_OF_CHANNELS_ERROR;
- }
- if( encControl->nChannelsInternal > encControl->nChannelsAPI ) {
- silk_assert( 0 );
- return SILK_ENC_INVALID_NUMBER_OF_CHANNELS_ERROR;
- }
- if( encControl->complexity < 0 || encControl->complexity > 10 ) {
- silk_assert( 0 );
- return SILK_ENC_INVALID_COMPLEXITY_SETTING;
- }
-
- return SILK_NO_ERROR;
-}
diff --git a/drivers/opus/silk/code_signs.c b/drivers/opus/silk/code_signs.c
deleted file mode 100644
index 79c1893514..0000000000
--- a/drivers/opus/silk/code_signs.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/*#define silk_enc_map(a) ((a) > 0 ? 1 : 0)*/
-/*#define silk_dec_map(a) ((a) > 0 ? 1 : -1)*/
-/* shifting avoids if-statement */
-#define silk_enc_map(a) ( silk_RSHIFT( (a), 15 ) + 1 )
-#define silk_dec_map(a) ( silk_LSHIFT( (a), 1 ) - 1 )
-
-/* Encodes signs of excitation */
-void silk_encode_signs(
- ec_enc *psRangeEnc, /* I/O Compressor data structure */
- const opus_int8 pulses[], /* I pulse signal */
- opus_int length, /* I length of input */
- const opus_int signalType, /* I Signal type */
- const opus_int quantOffsetType, /* I Quantization offset type */
- const opus_int sum_pulses[ MAX_NB_SHELL_BLOCKS ] /* I Sum of absolute pulses per block */
-)
-{
- opus_int i, j, p;
- opus_uint8 icdf[ 2 ];
- const opus_int8 *q_ptr;
- const opus_uint8 *icdf_ptr;
-
- icdf[ 1 ] = 0;
- q_ptr = pulses;
- i = silk_SMULBB( 7, silk_ADD_LSHIFT( quantOffsetType, signalType, 1 ) );
- icdf_ptr = &silk_sign_iCDF[ i ];
- length = silk_RSHIFT( length + SHELL_CODEC_FRAME_LENGTH/2, LOG2_SHELL_CODEC_FRAME_LENGTH );
- for( i = 0; i < length; i++ ) {
- p = sum_pulses[ i ];
- if( p > 0 ) {
- icdf[ 0 ] = icdf_ptr[ silk_min( p & 0x1F, 6 ) ];
- for( j = 0; j < SHELL_CODEC_FRAME_LENGTH; j++ ) {
- if( q_ptr[ j ] != 0 ) {
- ec_enc_icdf( psRangeEnc, silk_enc_map( q_ptr[ j ]), icdf, 8 );
- }
- }
- }
- q_ptr += SHELL_CODEC_FRAME_LENGTH;
- }
-}
-
-/* Decodes signs of excitation */
-void silk_decode_signs(
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int16 pulses[], /* I/O pulse signal */
- opus_int length, /* I length of input */
- const opus_int signalType, /* I Signal type */
- const opus_int quantOffsetType, /* I Quantization offset type */
- const opus_int sum_pulses[ MAX_NB_SHELL_BLOCKS ] /* I Sum of absolute pulses per block */
-)
-{
- opus_int i, j, p;
- opus_uint8 icdf[ 2 ];
- opus_int16 *q_ptr;
- const opus_uint8 *icdf_ptr;
-
- icdf[ 1 ] = 0;
- q_ptr = pulses;
- i = silk_SMULBB( 7, silk_ADD_LSHIFT( quantOffsetType, signalType, 1 ) );
- icdf_ptr = &silk_sign_iCDF[ i ];
- length = silk_RSHIFT( length + SHELL_CODEC_FRAME_LENGTH/2, LOG2_SHELL_CODEC_FRAME_LENGTH );
- for( i = 0; i < length; i++ ) {
- p = sum_pulses[ i ];
- if( p > 0 ) {
- icdf[ 0 ] = icdf_ptr[ silk_min( p & 0x1F, 6 ) ];
- for( j = 0; j < SHELL_CODEC_FRAME_LENGTH; j++ ) {
- if( q_ptr[ j ] > 0 ) {
- /* attach sign */
-#if 0
- /* conditional implementation */
- if( ec_dec_icdf( psRangeDec, icdf, 8 ) == 0 ) {
- q_ptr[ j ] = -q_ptr[ j ];
- }
-#else
- /* implementation with shift, subtraction, multiplication */
- q_ptr[ j ] *= silk_dec_map( ec_dec_icdf( psRangeDec, icdf, 8 ) );
-#endif
- }
- }
- }
- q_ptr += SHELL_CODEC_FRAME_LENGTH;
- }
-}
diff --git a/drivers/opus/silk/control.h b/drivers/opus/silk/control.h
deleted file mode 100644
index 4b20c4a8b8..0000000000
--- a/drivers/opus/silk/control.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_CONTROL_H
-#define SILK_CONTROL_H
-
-#include "opus/silk/typedef.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Decoder API flags */
-#define FLAG_DECODE_NORMAL 0
-#define FLAG_PACKET_LOST 1
-#define FLAG_DECODE_LBRR 2
-
-/***********************************************/
-/* Structure for controlling encoder operation */
-/***********************************************/
-typedef struct {
- /* I: Number of channels; 1/2 */
- opus_int32 nChannelsAPI;
-
- /* I: Number of channels; 1/2 */
- opus_int32 nChannelsInternal;
-
- /* I: Input signal sampling rate in Hertz; 8000/12000/16000/24000/32000/44100/48000 */
- opus_int32 API_sampleRate;
-
- /* I: Maximum internal sampling rate in Hertz; 8000/12000/16000 */
- opus_int32 maxInternalSampleRate;
-
- /* I: Minimum internal sampling rate in Hertz; 8000/12000/16000 */
- opus_int32 minInternalSampleRate;
-
- /* I: Soft request for internal sampling rate in Hertz; 8000/12000/16000 */
- opus_int32 desiredInternalSampleRate;
-
- /* I: Number of samples per packet in milliseconds; 10/20/40/60 */
- opus_int payloadSize_ms;
-
- /* I: Bitrate during active speech in bits/second; internally limited */
- opus_int32 bitRate;
-
- /* I: Uplink packet loss in percent (0-100) */
- opus_int packetLossPercentage;
-
- /* I: Complexity mode; 0 is lowest, 10 is highest complexity */
- opus_int complexity;
-
- /* I: Flag to enable in-band Forward Error Correction (FEC); 0/1 */
- opus_int useInBandFEC;
-
- /* I: Flag to enable discontinuous transmission (DTX); 0/1 */
- opus_int useDTX;
-
- /* I: Flag to use constant bitrate */
- opus_int useCBR;
-
- /* I: Maximum number of bits allowed for the frame */
- opus_int maxBits;
-
- /* I: Causes a smooth downmix to mono */
- opus_int toMono;
-
- /* I: Opus encoder is allowing us to switch bandwidth */
- opus_int opusCanSwitch;
-
- /* I: Make frames as independent as possible (but still use LPC) */
- opus_int reducedDependency;
-
- /* O: Internal sampling rate used, in Hertz; 8000/12000/16000 */
- opus_int32 internalSampleRate;
-
- /* O: Flag that bandwidth switching is allowed (because low voice activity) */
- opus_int allowBandwidthSwitch;
-
- /* O: Flag that SILK runs in WB mode without variable LP filter (use for switching between WB/SWB/FB) */
- opus_int inWBmodeWithoutVariableLP;
-
- /* O: Stereo width */
- opus_int stereoWidth_Q14;
-
- /* O: Tells the Opus encoder we're ready to switch */
- opus_int switchReady;
-
-} silk_EncControlStruct;
-
-/**************************************************************************/
-/* Structure for controlling decoder operation and reading decoder status */
-/**************************************************************************/
-typedef struct {
- /* I: Number of channels; 1/2 */
- opus_int32 nChannelsAPI;
-
- /* I: Number of channels; 1/2 */
- opus_int32 nChannelsInternal;
-
- /* I: Output signal sampling rate in Hertz; 8000/12000/16000/24000/32000/44100/48000 */
- opus_int32 API_sampleRate;
-
- /* I: Internal sampling rate used, in Hertz; 8000/12000/16000 */
- opus_int32 internalSampleRate;
-
- /* I: Number of samples per packet in milliseconds; 10/20/40/60 */
- opus_int payloadSize_ms;
-
- /* O: Pitch lag of previous frame (0 if unvoiced), measured in samples at 48 kHz */
- opus_int prevPitchLag;
-} silk_DecControlStruct;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/drivers/opus/silk/control_SNR.c b/drivers/opus/silk/control_SNR.c
deleted file mode 100644
index 5aebfcf385..0000000000
--- a/drivers/opus/silk/control_SNR.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Control SNR of redidual quantizer */
-opus_int silk_control_SNR(
- silk_encoder_state *psEncC, /* I/O Pointer to Silk encoder state */
- opus_int32 TargetRate_bps /* I Target max bitrate (bps) */
-)
-{
- opus_int k, ret = SILK_NO_ERROR;
- opus_int32 frac_Q6;
- const opus_int32 *rateTable;
-
- /* Set bitrate/coding quality */
- TargetRate_bps = silk_LIMIT( TargetRate_bps, MIN_TARGET_RATE_BPS, MAX_TARGET_RATE_BPS );
- if( TargetRate_bps != psEncC->TargetRate_bps ) {
- psEncC->TargetRate_bps = TargetRate_bps;
-
- /* If new TargetRate_bps, translate to SNR_dB value */
- if( psEncC->fs_kHz == 8 ) {
- rateTable = silk_TargetRate_table_NB;
- } else if( psEncC->fs_kHz == 12 ) {
- rateTable = silk_TargetRate_table_MB;
- } else {
- rateTable = silk_TargetRate_table_WB;
- }
-
- /* Reduce bitrate for 10 ms modes in these calculations */
- if( psEncC->nb_subfr == 2 ) {
- TargetRate_bps -= REDUCE_BITRATE_10_MS_BPS;
- }
-
- /* Find bitrate interval in table and interpolate */
- for( k = 1; k < TARGET_RATE_TAB_SZ; k++ ) {
- if( TargetRate_bps <= rateTable[ k ] ) {
- frac_Q6 = silk_DIV32( silk_LSHIFT( TargetRate_bps - rateTable[ k - 1 ], 6 ),
- rateTable[ k ] - rateTable[ k - 1 ] );
- psEncC->SNR_dB_Q7 = silk_LSHIFT( silk_SNR_table_Q1[ k - 1 ], 6 ) + silk_MUL( frac_Q6, silk_SNR_table_Q1[ k ] - silk_SNR_table_Q1[ k - 1 ] );
- break;
- }
- }
- }
-
- return ret;
-}
diff --git a/drivers/opus/silk/control_audio_bandwidth.c b/drivers/opus/silk/control_audio_bandwidth.c
deleted file mode 100644
index 04640f53fe..0000000000
--- a/drivers/opus/silk/control_audio_bandwidth.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Control internal sampling rate */
-opus_int silk_control_audio_bandwidth(
- silk_encoder_state *psEncC, /* I/O Pointer to Silk encoder state */
- silk_EncControlStruct *encControl /* I Control structure */
-)
-{
- opus_int fs_kHz;
- opus_int32 fs_Hz;
-
- fs_kHz = psEncC->fs_kHz;
- fs_Hz = silk_SMULBB( fs_kHz, 1000 );
- if( fs_Hz == 0 ) {
- /* Encoder has just been initialized */
- fs_Hz = silk_min( psEncC->desiredInternal_fs_Hz, psEncC->API_fs_Hz );
- fs_kHz = silk_DIV32_16( fs_Hz, 1000 );
- } else if( fs_Hz > psEncC->API_fs_Hz || fs_Hz > psEncC->maxInternal_fs_Hz || fs_Hz < psEncC->minInternal_fs_Hz ) {
- /* Make sure internal rate is not higher than external rate or maximum allowed, or lower than minimum allowed */
- fs_Hz = psEncC->API_fs_Hz;
- fs_Hz = silk_min( fs_Hz, psEncC->maxInternal_fs_Hz );
- fs_Hz = silk_max( fs_Hz, psEncC->minInternal_fs_Hz );
- fs_kHz = silk_DIV32_16( fs_Hz, 1000 );
- } else {
- /* State machine for the internal sampling rate switching */
- if( psEncC->sLP.transition_frame_no >= TRANSITION_FRAMES ) {
- /* Stop transition phase */
- psEncC->sLP.mode = 0;
- }
- if( psEncC->allow_bandwidth_switch || encControl->opusCanSwitch ) {
- /* Check if we should switch down */
- if( silk_SMULBB( psEncC->fs_kHz, 1000 ) > psEncC->desiredInternal_fs_Hz )
- {
- /* Switch down */
- if( psEncC->sLP.mode == 0 ) {
- /* New transition */
- psEncC->sLP.transition_frame_no = TRANSITION_FRAMES;
-
- /* Reset transition filter state */
- silk_memset( psEncC->sLP.In_LP_State, 0, sizeof( psEncC->sLP.In_LP_State ) );
- }
- if( encControl->opusCanSwitch ) {
- /* Stop transition phase */
- psEncC->sLP.mode = 0;
-
- /* Switch to a lower sample frequency */
- fs_kHz = psEncC->fs_kHz == 16 ? 12 : 8;
- } else {
- if( psEncC->sLP.transition_frame_no <= 0 ) {
- encControl->switchReady = 1;
- /* Make room for redundancy */
- encControl->maxBits -= encControl->maxBits * 5 / ( encControl->payloadSize_ms + 5 );
- } else {
- /* Direction: down (at double speed) */
- psEncC->sLP.mode = -2;
- }
- }
- }
- else
- /* Check if we should switch up */
- if( silk_SMULBB( psEncC->fs_kHz, 1000 ) < psEncC->desiredInternal_fs_Hz )
- {
- /* Switch up */
- if( encControl->opusCanSwitch ) {
- /* Switch to a higher sample frequency */
- fs_kHz = psEncC->fs_kHz == 8 ? 12 : 16;
-
- /* New transition */
- psEncC->sLP.transition_frame_no = 0;
-
- /* Reset transition filter state */
- silk_memset( psEncC->sLP.In_LP_State, 0, sizeof( psEncC->sLP.In_LP_State ) );
-
- /* Direction: up */
- psEncC->sLP.mode = 1;
- } else {
- if( psEncC->sLP.mode == 0 ) {
- encControl->switchReady = 1;
- /* Make room for redundancy */
- encControl->maxBits -= encControl->maxBits * 5 / ( encControl->payloadSize_ms + 5 );
- } else {
- /* Direction: up */
- psEncC->sLP.mode = 1;
- }
- }
- } else {
- if (psEncC->sLP.mode<0)
- psEncC->sLP.mode = 1;
- }
- }
- }
-
- return fs_kHz;
-}
diff --git a/drivers/opus/silk/control_codec.c b/drivers/opus/silk/control_codec.c
deleted file mode 100644
index 03caab36a9..0000000000
--- a/drivers/opus/silk/control_codec.c
+++ /dev/null
@@ -1,425 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-#ifdef OPUS_FIXED_POINT
-#include "opus/silk/fixed/main_FIX.h"
-#define silk_encoder_state_Fxx silk_encoder_state_FIX
-#else
-#include "opus/silk/float/main_FLP.h"
-#define silk_encoder_state_Fxx silk_encoder_state_FLP
-#endif
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/tuning_parameters.h"
-#include "opus/silk/pitch_est_defines.h"
-
-static opus_int silk_setup_resamplers(
- silk_encoder_state_Fxx *psEnc, /* I/O */
- opus_int fs_kHz /* I */
-);
-
-static opus_int silk_setup_fs(
- silk_encoder_state_Fxx *psEnc, /* I/O */
- opus_int fs_kHz, /* I */
- opus_int PacketSize_ms /* I */
-);
-
-static opus_int silk_setup_complexity(
- silk_encoder_state *psEncC, /* I/O */
- opus_int Complexity /* I */
-);
-
-static OPUS_INLINE opus_int silk_setup_LBRR(
- silk_encoder_state *psEncC, /* I/O */
- const opus_int32 TargetRate_bps /* I */
-);
-
-
-/* Control encoder */
-opus_int silk_control_encoder(
- silk_encoder_state_Fxx *psEnc, /* I/O Pointer to Silk encoder state */
- silk_EncControlStruct *encControl, /* I Control structure */
- const opus_int32 TargetRate_bps, /* I Target max bitrate (bps) */
- const opus_int allow_bw_switch, /* I Flag to allow switching audio bandwidth */
- const opus_int channelNb, /* I Channel number */
- const opus_int force_fs_kHz
-)
-{
- opus_int fs_kHz, ret = 0;
-
- psEnc->sCmn.useDTX = encControl->useDTX;
- psEnc->sCmn.useCBR = encControl->useCBR;
- psEnc->sCmn.API_fs_Hz = encControl->API_sampleRate;
- psEnc->sCmn.maxInternal_fs_Hz = encControl->maxInternalSampleRate;
- psEnc->sCmn.minInternal_fs_Hz = encControl->minInternalSampleRate;
- psEnc->sCmn.desiredInternal_fs_Hz = encControl->desiredInternalSampleRate;
- psEnc->sCmn.useInBandFEC = encControl->useInBandFEC;
- psEnc->sCmn.nChannelsAPI = encControl->nChannelsAPI;
- psEnc->sCmn.nChannelsInternal = encControl->nChannelsInternal;
- psEnc->sCmn.allow_bandwidth_switch = allow_bw_switch;
- psEnc->sCmn.channelNb = channelNb;
-
- if( psEnc->sCmn.controlled_since_last_payload != 0 && psEnc->sCmn.prefillFlag == 0 ) {
- if( psEnc->sCmn.API_fs_Hz != psEnc->sCmn.prev_API_fs_Hz && psEnc->sCmn.fs_kHz > 0 ) {
- /* Change in API sampling rate in the middle of encoding a packet */
- ret += silk_setup_resamplers( psEnc, psEnc->sCmn.fs_kHz );
- }
- return ret;
- }
-
- /* Beyond this point we know that there are no previously coded frames in the payload buffer */
-
- /********************************************/
- /* Determine internal sampling rate */
- /********************************************/
- fs_kHz = silk_control_audio_bandwidth( &psEnc->sCmn, encControl );
- if( force_fs_kHz ) {
- fs_kHz = force_fs_kHz;
- }
- /********************************************/
- /* Prepare resampler and buffered data */
- /********************************************/
- ret += silk_setup_resamplers( psEnc, fs_kHz );
-
- /********************************************/
- /* Set internal sampling frequency */
- /********************************************/
- ret += silk_setup_fs( psEnc, fs_kHz, encControl->payloadSize_ms );
-
- /********************************************/
- /* Set encoding complexity */
- /********************************************/
- ret += silk_setup_complexity( &psEnc->sCmn, encControl->complexity );
-
- /********************************************/
- /* Set packet loss rate measured by farend */
- /********************************************/
- psEnc->sCmn.PacketLoss_perc = encControl->packetLossPercentage;
-
- /********************************************/
- /* Set LBRR usage */
- /********************************************/
- ret += silk_setup_LBRR( &psEnc->sCmn, TargetRate_bps );
-
- psEnc->sCmn.controlled_since_last_payload = 1;
-
- return ret;
-}
-
-static opus_int silk_setup_resamplers(
- silk_encoder_state_Fxx *psEnc, /* I/O */
- opus_int fs_kHz /* I */
-)
-{
- opus_int ret = SILK_NO_ERROR;
- SAVE_STACK;
-
- if( psEnc->sCmn.fs_kHz != fs_kHz || psEnc->sCmn.prev_API_fs_Hz != psEnc->sCmn.API_fs_Hz )
- {
- if( psEnc->sCmn.fs_kHz == 0 ) {
- /* Initialize the resampler for enc_API.c preparing resampling from API_fs_Hz to fs_kHz */
- ret += silk_resampler_init( &psEnc->sCmn.resampler_state, psEnc->sCmn.API_fs_Hz, fs_kHz * 1000, 1 );
- } else {
- VARDECL( opus_int16, x_buf_API_fs_Hz );
- VARDECL( silk_resampler_state_struct, temp_resampler_state );
-#ifdef OPUS_FIXED_POINT
- opus_int16 *x_bufFIX = psEnc->x_buf;
-#else
- VARDECL( opus_int16, x_bufFIX );
- opus_int32 new_buf_samples;
-#endif
- opus_int32 api_buf_samples;
- opus_int32 old_buf_samples;
- opus_int32 buf_length_ms;
-
- buf_length_ms = silk_LSHIFT( psEnc->sCmn.nb_subfr * 5, 1 ) + LA_SHAPE_MS;
- old_buf_samples = buf_length_ms * psEnc->sCmn.fs_kHz;
-
-#ifndef OPUS_FIXED_POINT
- new_buf_samples = buf_length_ms * fs_kHz;
- ALLOC( x_bufFIX, silk_max( old_buf_samples, new_buf_samples ),
- opus_int16 );
- silk_float2short_array( x_bufFIX, psEnc->x_buf, old_buf_samples );
-#endif
-
- /* Initialize resampler for temporary resampling of x_buf data to API_fs_Hz */
- ALLOC( temp_resampler_state, 1, silk_resampler_state_struct );
- ret += silk_resampler_init( temp_resampler_state, silk_SMULBB( psEnc->sCmn.fs_kHz, 1000 ), psEnc->sCmn.API_fs_Hz, 0 );
-
- /* Calculate number of samples to temporarily upsample */
- api_buf_samples = buf_length_ms * silk_DIV32_16( psEnc->sCmn.API_fs_Hz, 1000 );
-
- /* Temporary resampling of x_buf data to API_fs_Hz */
- ALLOC( x_buf_API_fs_Hz, api_buf_samples, opus_int16 );
- ret += silk_resampler( temp_resampler_state, x_buf_API_fs_Hz, x_bufFIX, old_buf_samples );
-
- /* Initialize the resampler for enc_API.c preparing resampling from API_fs_Hz to fs_kHz */
- ret += silk_resampler_init( &psEnc->sCmn.resampler_state, psEnc->sCmn.API_fs_Hz, silk_SMULBB( fs_kHz, 1000 ), 1 );
-
- /* Correct resampler state by resampling buffered data from API_fs_Hz to fs_kHz */
- ret += silk_resampler( &psEnc->sCmn.resampler_state, x_bufFIX, x_buf_API_fs_Hz, api_buf_samples );
-
-#ifndef OPUS_FIXED_POINT
- silk_short2float_array( psEnc->x_buf, x_bufFIX, new_buf_samples);
-#endif
- }
- }
-
- psEnc->sCmn.prev_API_fs_Hz = psEnc->sCmn.API_fs_Hz;
-
- RESTORE_STACK;
- return ret;
-}
-
-static opus_int silk_setup_fs(
- silk_encoder_state_Fxx *psEnc, /* I/O */
- opus_int fs_kHz, /* I */
- opus_int PacketSize_ms /* I */
-)
-{
- opus_int ret = SILK_NO_ERROR;
-
- /* Set packet size */
- if( PacketSize_ms != psEnc->sCmn.PacketSize_ms ) {
- if( ( PacketSize_ms != 10 ) &&
- ( PacketSize_ms != 20 ) &&
- ( PacketSize_ms != 40 ) &&
- ( PacketSize_ms != 60 ) ) {
- ret = SILK_ENC_PACKET_SIZE_NOT_SUPPORTED;
- }
- if( PacketSize_ms <= 10 ) {
- psEnc->sCmn.nFramesPerPacket = 1;
- psEnc->sCmn.nb_subfr = PacketSize_ms == 10 ? 2 : 1;
- psEnc->sCmn.frame_length = silk_SMULBB( PacketSize_ms, fs_kHz );
- psEnc->sCmn.pitch_LPC_win_length = silk_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, fs_kHz );
- if( psEnc->sCmn.fs_kHz == 8 ) {
- psEnc->sCmn.pitch_contour_iCDF = silk_pitch_contour_10_ms_NB_iCDF;
- } else {
- psEnc->sCmn.pitch_contour_iCDF = silk_pitch_contour_10_ms_iCDF;
- }
- } else {
- psEnc->sCmn.nFramesPerPacket = silk_DIV32_16( PacketSize_ms, MAX_FRAME_LENGTH_MS );
- psEnc->sCmn.nb_subfr = MAX_NB_SUBFR;
- psEnc->sCmn.frame_length = silk_SMULBB( 20, fs_kHz );
- psEnc->sCmn.pitch_LPC_win_length = silk_SMULBB( FIND_PITCH_LPC_WIN_MS, fs_kHz );
- if( psEnc->sCmn.fs_kHz == 8 ) {
- psEnc->sCmn.pitch_contour_iCDF = silk_pitch_contour_NB_iCDF;
- } else {
- psEnc->sCmn.pitch_contour_iCDF = silk_pitch_contour_iCDF;
- }
- }
- psEnc->sCmn.PacketSize_ms = PacketSize_ms;
- psEnc->sCmn.TargetRate_bps = 0; /* trigger new SNR computation */
- }
-
- /* Set internal sampling frequency */
- silk_assert( fs_kHz == 8 || fs_kHz == 12 || fs_kHz == 16 );
- silk_assert( psEnc->sCmn.nb_subfr == 2 || psEnc->sCmn.nb_subfr == 4 );
- if( psEnc->sCmn.fs_kHz != fs_kHz ) {
- /* reset part of the state */
- silk_memset( &psEnc->sShape, 0, sizeof( psEnc->sShape ) );
- silk_memset( &psEnc->sPrefilt, 0, sizeof( psEnc->sPrefilt ) );
- silk_memset( &psEnc->sCmn.sNSQ, 0, sizeof( psEnc->sCmn.sNSQ ) );
- silk_memset( psEnc->sCmn.prev_NLSFq_Q15, 0, sizeof( psEnc->sCmn.prev_NLSFq_Q15 ) );
- silk_memset( &psEnc->sCmn.sLP.In_LP_State, 0, sizeof( psEnc->sCmn.sLP.In_LP_State ) );
- psEnc->sCmn.inputBufIx = 0;
- psEnc->sCmn.nFramesEncoded = 0;
- psEnc->sCmn.TargetRate_bps = 0; /* trigger new SNR computation */
-
- /* Initialize non-zero parameters */
- psEnc->sCmn.prevLag = 100;
- psEnc->sCmn.first_frame_after_reset = 1;
- psEnc->sPrefilt.lagPrev = 100;
- psEnc->sShape.LastGainIndex = 10;
- psEnc->sCmn.sNSQ.lagPrev = 100;
- psEnc->sCmn.sNSQ.prev_gain_Q16 = 65536;
- psEnc->sCmn.prevSignalType = TYPE_NO_VOICE_ACTIVITY;
-
- psEnc->sCmn.fs_kHz = fs_kHz;
- if( psEnc->sCmn.fs_kHz == 8 ) {
- if( psEnc->sCmn.nb_subfr == MAX_NB_SUBFR ) {
- psEnc->sCmn.pitch_contour_iCDF = silk_pitch_contour_NB_iCDF;
- } else {
- psEnc->sCmn.pitch_contour_iCDF = silk_pitch_contour_10_ms_NB_iCDF;
- }
- } else {
- if( psEnc->sCmn.nb_subfr == MAX_NB_SUBFR ) {
- psEnc->sCmn.pitch_contour_iCDF = silk_pitch_contour_iCDF;
- } else {
- psEnc->sCmn.pitch_contour_iCDF = silk_pitch_contour_10_ms_iCDF;
- }
- }
- if( psEnc->sCmn.fs_kHz == 8 || psEnc->sCmn.fs_kHz == 12 ) {
- psEnc->sCmn.predictLPCOrder = MIN_LPC_ORDER;
- psEnc->sCmn.psNLSF_CB = &silk_NLSF_CB_NB_MB;
- } else {
- psEnc->sCmn.predictLPCOrder = MAX_LPC_ORDER;
- psEnc->sCmn.psNLSF_CB = &silk_NLSF_CB_WB;
- }
- psEnc->sCmn.subfr_length = SUB_FRAME_LENGTH_MS * fs_kHz;
- psEnc->sCmn.frame_length = silk_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr );
- psEnc->sCmn.ltp_mem_length = silk_SMULBB( LTP_MEM_LENGTH_MS, fs_kHz );
- psEnc->sCmn.la_pitch = silk_SMULBB( LA_PITCH_MS, fs_kHz );
- psEnc->sCmn.max_pitch_lag = silk_SMULBB( 18, fs_kHz );
- if( psEnc->sCmn.nb_subfr == MAX_NB_SUBFR ) {
- psEnc->sCmn.pitch_LPC_win_length = silk_SMULBB( FIND_PITCH_LPC_WIN_MS, fs_kHz );
- } else {
- psEnc->sCmn.pitch_LPC_win_length = silk_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, fs_kHz );
- }
- if( psEnc->sCmn.fs_kHz == 16 ) {
- psEnc->sCmn.mu_LTP_Q9 = SILK_FIX_CONST( MU_LTP_QUANT_WB, 9 );
- psEnc->sCmn.pitch_lag_low_bits_iCDF = silk_uniform8_iCDF;
- } else if( psEnc->sCmn.fs_kHz == 12 ) {
- psEnc->sCmn.mu_LTP_Q9 = SILK_FIX_CONST( MU_LTP_QUANT_MB, 9 );
- psEnc->sCmn.pitch_lag_low_bits_iCDF = silk_uniform6_iCDF;
- } else {
- psEnc->sCmn.mu_LTP_Q9 = SILK_FIX_CONST( MU_LTP_QUANT_NB, 9 );
- psEnc->sCmn.pitch_lag_low_bits_iCDF = silk_uniform4_iCDF;
- }
- }
-
- /* Check that settings are valid */
- silk_assert( ( psEnc->sCmn.subfr_length * psEnc->sCmn.nb_subfr ) == psEnc->sCmn.frame_length );
-
- return ret;
-}
-
-static opus_int silk_setup_complexity(
- silk_encoder_state *psEncC, /* I/O */
- opus_int Complexity /* I */
-)
-{
- opus_int ret = 0;
-
- /* Set encoding complexity */
- silk_assert( Complexity >= 0 && Complexity <= 10 );
- if( Complexity < 2 ) {
- psEncC->pitchEstimationComplexity = SILK_PE_MIN_COMPLEX;
- psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.8, 16 );
- psEncC->pitchEstimationLPCOrder = 6;
- psEncC->shapingLPCOrder = 8;
- psEncC->la_shape = 3 * psEncC->fs_kHz;
- psEncC->nStatesDelayedDecision = 1;
- psEncC->useInterpolatedNLSFs = 0;
- psEncC->LTPQuantLowComplexity = 1;
- psEncC->NLSF_MSVQ_Survivors = 2;
- psEncC->warping_Q16 = 0;
- } else if( Complexity < 4 ) {
- psEncC->pitchEstimationComplexity = SILK_PE_MID_COMPLEX;
- psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.76, 16 );
- psEncC->pitchEstimationLPCOrder = 8;
- psEncC->shapingLPCOrder = 10;
- psEncC->la_shape = 5 * psEncC->fs_kHz;
- psEncC->nStatesDelayedDecision = 1;
- psEncC->useInterpolatedNLSFs = 0;
- psEncC->LTPQuantLowComplexity = 0;
- psEncC->NLSF_MSVQ_Survivors = 4;
- psEncC->warping_Q16 = 0;
- } else if( Complexity < 6 ) {
- psEncC->pitchEstimationComplexity = SILK_PE_MID_COMPLEX;
- psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.74, 16 );
- psEncC->pitchEstimationLPCOrder = 10;
- psEncC->shapingLPCOrder = 12;
- psEncC->la_shape = 5 * psEncC->fs_kHz;
- psEncC->nStatesDelayedDecision = 2;
- psEncC->useInterpolatedNLSFs = 1;
- psEncC->LTPQuantLowComplexity = 0;
- psEncC->NLSF_MSVQ_Survivors = 8;
- psEncC->warping_Q16 = psEncC->fs_kHz * SILK_FIX_CONST( WARPING_MULTIPLIER, 16 );
- } else if( Complexity < 8 ) {
- psEncC->pitchEstimationComplexity = SILK_PE_MID_COMPLEX;
- psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.72, 16 );
- psEncC->pitchEstimationLPCOrder = 12;
- psEncC->shapingLPCOrder = 14;
- psEncC->la_shape = 5 * psEncC->fs_kHz;
- psEncC->nStatesDelayedDecision = 3;
- psEncC->useInterpolatedNLSFs = 1;
- psEncC->LTPQuantLowComplexity = 0;
- psEncC->NLSF_MSVQ_Survivors = 16;
- psEncC->warping_Q16 = psEncC->fs_kHz * SILK_FIX_CONST( WARPING_MULTIPLIER, 16 );
- } else {
- psEncC->pitchEstimationComplexity = SILK_PE_MAX_COMPLEX;
- psEncC->pitchEstimationThreshold_Q16 = SILK_FIX_CONST( 0.7, 16 );
- psEncC->pitchEstimationLPCOrder = 16;
- psEncC->shapingLPCOrder = 16;
- psEncC->la_shape = 5 * psEncC->fs_kHz;
- psEncC->nStatesDelayedDecision = MAX_DEL_DEC_STATES;
- psEncC->useInterpolatedNLSFs = 1;
- psEncC->LTPQuantLowComplexity = 0;
- psEncC->NLSF_MSVQ_Survivors = 32;
- psEncC->warping_Q16 = psEncC->fs_kHz * SILK_FIX_CONST( WARPING_MULTIPLIER, 16 );
- }
-
- /* Do not allow higher pitch estimation LPC order than predict LPC order */
- psEncC->pitchEstimationLPCOrder = silk_min_int( psEncC->pitchEstimationLPCOrder, psEncC->predictLPCOrder );
- psEncC->shapeWinLength = SUB_FRAME_LENGTH_MS * psEncC->fs_kHz + 2 * psEncC->la_shape;
- psEncC->Complexity = Complexity;
-
- silk_assert( psEncC->pitchEstimationLPCOrder <= MAX_FIND_PITCH_LPC_ORDER );
- silk_assert( psEncC->shapingLPCOrder <= MAX_SHAPE_LPC_ORDER );
- silk_assert( psEncC->nStatesDelayedDecision <= MAX_DEL_DEC_STATES );
- silk_assert( psEncC->warping_Q16 <= 32767 );
- silk_assert( psEncC->la_shape <= LA_SHAPE_MAX );
- silk_assert( psEncC->shapeWinLength <= SHAPE_LPC_WIN_MAX );
- silk_assert( psEncC->NLSF_MSVQ_Survivors <= NLSF_VQ_MAX_SURVIVORS );
-
- return ret;
-}
-
-static OPUS_INLINE opus_int silk_setup_LBRR(
- silk_encoder_state *psEncC, /* I/O */
- const opus_int32 TargetRate_bps /* I */
-)
-{
- opus_int LBRR_in_previous_packet, ret = SILK_NO_ERROR;
- opus_int32 LBRR_rate_thres_bps;
-
- LBRR_in_previous_packet = psEncC->LBRR_enabled;
- psEncC->LBRR_enabled = 0;
- if( psEncC->useInBandFEC && psEncC->PacketLoss_perc > 0 ) {
- if( psEncC->fs_kHz == 8 ) {
- LBRR_rate_thres_bps = LBRR_NB_MIN_RATE_BPS;
- } else if( psEncC->fs_kHz == 12 ) {
- LBRR_rate_thres_bps = LBRR_MB_MIN_RATE_BPS;
- } else {
- LBRR_rate_thres_bps = LBRR_WB_MIN_RATE_BPS;
- }
- LBRR_rate_thres_bps = silk_SMULWB( silk_MUL( LBRR_rate_thres_bps, 125 - silk_min( psEncC->PacketLoss_perc, 25 ) ), SILK_FIX_CONST( 0.01, 16 ) );
-
- if( TargetRate_bps > LBRR_rate_thres_bps ) {
- /* Set gain increase for coding LBRR excitation */
- if( LBRR_in_previous_packet == 0 ) {
- /* Previous packet did not have LBRR, and was therefore coded at a higher bitrate */
- psEncC->LBRR_GainIncreases = 7;
- } else {
- psEncC->LBRR_GainIncreases = silk_max_int( 7 - silk_SMULWB( (opus_int32)psEncC->PacketLoss_perc, SILK_FIX_CONST( 0.4, 16 ) ), 2 );
- }
- psEncC->LBRR_enabled = 1;
- }
- }
-
- return ret;
-}
diff --git a/drivers/opus/silk/debug.c b/drivers/opus/silk/debug.c
deleted file mode 100644
index ffb3f811a1..0000000000
--- a/drivers/opus/silk/debug.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/debug.h"
-#include "opus/silk/SigProc_FIX.h"
-
-#if SILK_TIC_TOC
-
-#ifdef _WIN32
-
-#if (defined(_WIN32) || defined(_WINCE))
-#include <windows.h> /* timer */
-#else /* Linux or Mac*/
-#include <sys/time.h>
-#endif
-
-unsigned long silk_GetHighResolutionTime(void) /* O time in usec*/
-{
- /* Returns a time counter in microsec */
- /* the resolution is platform dependent */
- /* but is typically 1.62 us resolution */
- LARGE_INTEGER lpPerformanceCount;
- LARGE_INTEGER lpFrequency;
- QueryPerformanceCounter(&lpPerformanceCount);
- QueryPerformanceFrequency(&lpFrequency);
- return (unsigned long)((1000000*(lpPerformanceCount.QuadPart)) / lpFrequency.QuadPart);
-}
-#else /* Linux or Mac*/
-unsigned long GetHighResolutionTime(void) /* O time in usec*/
-{
- struct timeval tv;
- gettimeofday(&tv, 0);
- return((tv.tv_sec*1000000)+(tv.tv_usec));
-}
-#endif
-
-int silk_Timer_nTimers = 0;
-int silk_Timer_depth_ctr = 0;
-char silk_Timer_tags[silk_NUM_TIMERS_MAX][silk_NUM_TIMERS_MAX_TAG_LEN];
-#ifdef WIN32
-LARGE_INTEGER silk_Timer_start[silk_NUM_TIMERS_MAX];
-#else
-unsigned long silk_Timer_start[silk_NUM_TIMERS_MAX];
-#endif
-unsigned int silk_Timer_cnt[silk_NUM_TIMERS_MAX];
-opus_int64 silk_Timer_min[silk_NUM_TIMERS_MAX];
-opus_int64 silk_Timer_sum[silk_NUM_TIMERS_MAX];
-opus_int64 silk_Timer_max[silk_NUM_TIMERS_MAX];
-opus_int64 silk_Timer_depth[silk_NUM_TIMERS_MAX];
-
-#ifdef WIN32
-void silk_TimerSave(char *file_name)
-{
- if( silk_Timer_nTimers > 0 )
- {
- int k;
- FILE *fp;
- LARGE_INTEGER lpFrequency;
- LARGE_INTEGER lpPerformanceCount1, lpPerformanceCount2;
- int del = 0x7FFFFFFF;
- double avg, sum_avg;
- /* estimate overhead of calling performance counters */
- for( k = 0; k < 1000; k++ ) {
- QueryPerformanceCounter(&lpPerformanceCount1);
- QueryPerformanceCounter(&lpPerformanceCount2);
- lpPerformanceCount2.QuadPart -= lpPerformanceCount1.QuadPart;
- if( (int)lpPerformanceCount2.LowPart < del )
- del = lpPerformanceCount2.LowPart;
- }
- QueryPerformanceFrequency(&lpFrequency);
- /* print results to file */
- sum_avg = 0.0f;
- for( k = 0; k < silk_Timer_nTimers; k++ ) {
- if (silk_Timer_depth[k] == 0) {
- sum_avg += (1e6 * silk_Timer_sum[k] / silk_Timer_cnt[k] - del) / lpFrequency.QuadPart * silk_Timer_cnt[k];
- }
- }
- fp = fopen(file_name, "w");
- fprintf(fp, " min avg %% max count\n");
- for( k = 0; k < silk_Timer_nTimers; k++ ) {
- if (silk_Timer_depth[k] == 0) {
- fprintf(fp, "%-28s", silk_Timer_tags[k]);
- } else if (silk_Timer_depth[k] == 1) {
- fprintf(fp, " %-27s", silk_Timer_tags[k]);
- } else if (silk_Timer_depth[k] == 2) {
- fprintf(fp, " %-26s", silk_Timer_tags[k]);
- } else if (silk_Timer_depth[k] == 3) {
- fprintf(fp, " %-25s", silk_Timer_tags[k]);
- } else {
- fprintf(fp, " %-24s", silk_Timer_tags[k]);
- }
- avg = (1e6 * silk_Timer_sum[k] / silk_Timer_cnt[k] - del) / lpFrequency.QuadPart;
- fprintf(fp, "%8.2f", (1e6 * (silk_max_64(silk_Timer_min[k] - del, 0))) / lpFrequency.QuadPart);
- fprintf(fp, "%12.2f %6.2f", avg, 100.0 * avg / sum_avg * silk_Timer_cnt[k]);
- fprintf(fp, "%12.2f", (1e6 * (silk_max_64(silk_Timer_max[k] - del, 0))) / lpFrequency.QuadPart);
- fprintf(fp, "%10d\n", silk_Timer_cnt[k]);
- }
- fprintf(fp, " microseconds\n");
- fclose(fp);
- }
-}
-#else
-void silk_TimerSave(char *file_name)
-{
- if( silk_Timer_nTimers > 0 )
- {
- int k;
- FILE *fp;
- /* print results to file */
- fp = fopen(file_name, "w");
- fprintf(fp, " min avg max count\n");
- for( k = 0; k < silk_Timer_nTimers; k++ )
- {
- if (silk_Timer_depth[k] == 0) {
- fprintf(fp, "%-28s", silk_Timer_tags[k]);
- } else if (silk_Timer_depth[k] == 1) {
- fprintf(fp, " %-27s", silk_Timer_tags[k]);
- } else if (silk_Timer_depth[k] == 2) {
- fprintf(fp, " %-26s", silk_Timer_tags[k]);
- } else if (silk_Timer_depth[k] == 3) {
- fprintf(fp, " %-25s", silk_Timer_tags[k]);
- } else {
- fprintf(fp, " %-24s", silk_Timer_tags[k]);
- }
- fprintf(fp, "%d ", silk_Timer_min[k]);
- fprintf(fp, "%f ", (double)silk_Timer_sum[k] / (double)silk_Timer_cnt[k]);
- fprintf(fp, "%d ", silk_Timer_max[k]);
- fprintf(fp, "%10d\n", silk_Timer_cnt[k]);
- }
- fprintf(fp, " microseconds\n");
- fclose(fp);
- }
-}
-#endif
-
-#endif /* SILK_TIC_TOC */
-
-#if SILK_DEBUG
-FILE *silk_debug_store_fp[ silk_NUM_STORES_MAX ];
-int silk_debug_store_count = 0;
-#endif /* SILK_DEBUG */
-
diff --git a/drivers/opus/silk/debug.h b/drivers/opus/silk/debug.h
deleted file mode 100644
index d2eccfa1e4..0000000000
--- a/drivers/opus/silk/debug.h
+++ /dev/null
@@ -1,279 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_DEBUG_H
-#define SILK_DEBUG_H
-
-#include "opus/silk/typedef.h"
-#include <stdio.h> /* file writing */
-#include <string.h> /* strcpy, strcmp */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-unsigned long GetHighResolutionTime(void); /* O time in usec*/
-
-/* make SILK_DEBUG dependent on compiler's _DEBUG */
-#if defined _WIN32
- #ifdef _DEBUG
- #define SILK_DEBUG 1
- #else
- #define SILK_DEBUG 0
- #endif
-
- /* overrule the above */
- #if 0
- /* #define NO_ASSERTS*/
- #undef SILK_DEBUG
- #define SILK_DEBUG 1
- #endif
-#else
- #define SILK_DEBUG 0
-#endif
-
-/* Flag for using timers */
-#define SILK_TIC_TOC 0
-
-
-#if SILK_TIC_TOC
-
-#if (defined(_WIN32) || defined(_WINCE))
-#include <windows.h> /* timer */
-#else /* Linux or Mac*/
-#include <sys/time.h>
-#endif
-
-/*********************************/
-/* timer functions for profiling */
-/*********************************/
-/* example: */
-/* */
-/* TIC(LPC) */
-/* do_LPC(in_vec, order, acoef); // do LPC analysis */
-/* TOC(LPC) */
-/* */
-/* and call the following just before exiting (from main) */
-/* */
-/* silk_TimerSave("silk_TimingData.txt"); */
-/* */
-/* results are now in silk_TimingData.txt */
-
-void silk_TimerSave(char *file_name);
-
-/* max number of timers (in different locations) */
-#define silk_NUM_TIMERS_MAX 50
-/* max length of name tags in TIC(..), TOC(..) */
-#define silk_NUM_TIMERS_MAX_TAG_LEN 30
-
-extern int silk_Timer_nTimers;
-extern int silk_Timer_depth_ctr;
-extern char silk_Timer_tags[silk_NUM_TIMERS_MAX][silk_NUM_TIMERS_MAX_TAG_LEN];
-#ifdef _WIN32
-extern LARGE_INTEGER silk_Timer_start[silk_NUM_TIMERS_MAX];
-#else
-extern unsigned long silk_Timer_start[silk_NUM_TIMERS_MAX];
-#endif
-extern unsigned int silk_Timer_cnt[silk_NUM_TIMERS_MAX];
-extern opus_int64 silk_Timer_sum[silk_NUM_TIMERS_MAX];
-extern opus_int64 silk_Timer_max[silk_NUM_TIMERS_MAX];
-extern opus_int64 silk_Timer_min[silk_NUM_TIMERS_MAX];
-extern opus_int64 silk_Timer_depth[silk_NUM_TIMERS_MAX];
-
-/* WARNING: TIC()/TOC can measure only up to 0.1 seconds at a time */
-#ifdef _WIN32
-#define TIC(TAG_NAME) { \
- static int init = 0; \
- static int ID = -1; \
- if( init == 0 ) \
- { \
- int k; \
- init = 1; \
- for( k = 0; k < silk_Timer_nTimers; k++ ) { \
- if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) { \
- ID = k; \
- break; \
- } \
- } \
- if (ID == -1) { \
- ID = silk_Timer_nTimers; \
- silk_Timer_nTimers++; \
- silk_Timer_depth[ID] = silk_Timer_depth_ctr; \
- strcpy(silk_Timer_tags[ID], #TAG_NAME); \
- silk_Timer_cnt[ID] = 0; \
- silk_Timer_sum[ID] = 0; \
- silk_Timer_min[ID] = 0xFFFFFFFF; \
- silk_Timer_max[ID] = 0; \
- } \
- } \
- silk_Timer_depth_ctr++; \
- QueryPerformanceCounter(&silk_Timer_start[ID]); \
-}
-#else
-#define TIC(TAG_NAME) { \
- static int init = 0; \
- static int ID = -1; \
- if( init == 0 ) \
- { \
- int k; \
- init = 1; \
- for( k = 0; k < silk_Timer_nTimers; k++ ) { \
- if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) { \
- ID = k; \
- break; \
- } \
- } \
- if (ID == -1) { \
- ID = silk_Timer_nTimers; \
- silk_Timer_nTimers++; \
- silk_Timer_depth[ID] = silk_Timer_depth_ctr; \
- strcpy(silk_Timer_tags[ID], #TAG_NAME); \
- silk_Timer_cnt[ID] = 0; \
- silk_Timer_sum[ID] = 0; \
- silk_Timer_min[ID] = 0xFFFFFFFF; \
- silk_Timer_max[ID] = 0; \
- } \
- } \
- silk_Timer_depth_ctr++; \
- silk_Timer_start[ID] = GetHighResolutionTime(); \
-}
-#endif
-
-#ifdef _WIN32
-#define TOC(TAG_NAME) { \
- LARGE_INTEGER lpPerformanceCount; \
- static int init = 0; \
- static int ID = 0; \
- if( init == 0 ) \
- { \
- int k; \
- init = 1; \
- for( k = 0; k < silk_Timer_nTimers; k++ ) { \
- if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) { \
- ID = k; \
- break; \
- } \
- } \
- } \
- QueryPerformanceCounter(&lpPerformanceCount); \
- lpPerformanceCount.QuadPart -= silk_Timer_start[ID].QuadPart; \
- if((lpPerformanceCount.QuadPart < 100000000) && \
- (lpPerformanceCount.QuadPart >= 0)) { \
- silk_Timer_cnt[ID]++; \
- silk_Timer_sum[ID] += lpPerformanceCount.QuadPart; \
- if( lpPerformanceCount.QuadPart > silk_Timer_max[ID] ) \
- silk_Timer_max[ID] = lpPerformanceCount.QuadPart; \
- if( lpPerformanceCount.QuadPart < silk_Timer_min[ID] ) \
- silk_Timer_min[ID] = lpPerformanceCount.QuadPart; \
- } \
- silk_Timer_depth_ctr--; \
-}
-#else
-#define TOC(TAG_NAME) { \
- unsigned long endTime; \
- static int init = 0; \
- static int ID = 0; \
- if( init == 0 ) \
- { \
- int k; \
- init = 1; \
- for( k = 0; k < silk_Timer_nTimers; k++ ) { \
- if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) { \
- ID = k; \
- break; \
- } \
- } \
- } \
- endTime = GetHighResolutionTime(); \
- endTime -= silk_Timer_start[ID]; \
- if((endTime < 100000000) && \
- (endTime >= 0)) { \
- silk_Timer_cnt[ID]++; \
- silk_Timer_sum[ID] += endTime; \
- if( endTime > silk_Timer_max[ID] ) \
- silk_Timer_max[ID] = endTime; \
- if( endTime < silk_Timer_min[ID] ) \
- silk_Timer_min[ID] = endTime; \
- } \
- silk_Timer_depth_ctr--; \
-}
-#endif
-
-#else /* SILK_TIC_TOC */
-
-/* define macros as empty strings */
-#define TIC(TAG_NAME)
-#define TOC(TAG_NAME)
-#define silk_TimerSave(FILE_NAME)
-
-#endif /* SILK_TIC_TOC */
-
-
-#if SILK_DEBUG
-/************************************/
-/* write data to file for debugging */
-/************************************/
-/* Example: DEBUG_STORE_DATA(testfile.pcm, &RIN[0], 160*sizeof(opus_int16)); */
-
-#define silk_NUM_STORES_MAX 100
-extern FILE *silk_debug_store_fp[ silk_NUM_STORES_MAX ];
-extern int silk_debug_store_count;
-
-/* Faster way of storing the data */
-#define DEBUG_STORE_DATA( FILE_NAME, DATA_PTR, N_BYTES ) { \
- static opus_int init = 0, cnt = 0; \
- static FILE **fp; \
- if (init == 0) { \
- init = 1; \
- cnt = silk_debug_store_count++; \
- silk_debug_store_fp[ cnt ] = fopen(#FILE_NAME, "wb"); \
- } \
- fwrite((DATA_PTR), (N_BYTES), 1, silk_debug_store_fp[ cnt ]); \
-}
-
-/* Call this at the end of main() */
-#define SILK_DEBUG_STORE_CLOSE_FILES { \
- opus_int i; \
- for( i = 0; i < silk_debug_store_count; i++ ) { \
- fclose( silk_debug_store_fp[ i ] ); \
- } \
-}
-
-#else /* SILK_DEBUG */
-
-/* define macros as empty strings */
-#define DEBUG_STORE_DATA(FILE_NAME, DATA_PTR, N_BYTES)
-#define SILK_DEBUG_STORE_CLOSE_FILES
-
-#endif /* SILK_DEBUG */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SILK_DEBUG_H */
diff --git a/drivers/opus/silk/dec_API.c b/drivers/opus/silk/dec_API.c
deleted file mode 100644
index 2fd681c0d2..0000000000
--- a/drivers/opus/silk/dec_API.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-#include "opus/silk/API.h"
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/celt/os_support.h"
-
-/************************/
-/* Decoder Super Struct */
-/************************/
-typedef struct {
- silk_decoder_state channel_state[ DECODER_NUM_CHANNELS ];
- stereo_dec_state sStereo;
- opus_int nChannelsAPI;
- opus_int nChannelsInternal;
- opus_int prev_decode_only_middle;
-} silk_decoder;
-
-/*********************/
-/* Decoder functions */
-/*********************/
-
-opus_int silk_Get_Decoder_Size( /* O Returns error code */
- opus_int *decSizeBytes /* O Number of bytes in SILK decoder state */
-)
-{
- opus_int ret = SILK_NO_ERROR;
-
- *decSizeBytes = sizeof( silk_decoder );
-
- return ret;
-}
-
-/* Reset decoder state */
-opus_int silk_InitDecoder( /* O Returns error code */
- void *decState /* I/O State */
-)
-{
- opus_int n, ret = SILK_NO_ERROR;
- silk_decoder_state *channel_state = ((silk_decoder *)decState)->channel_state;
-
- for( n = 0; n < DECODER_NUM_CHANNELS; n++ ) {
- ret = silk_init_decoder( &channel_state[ n ] );
- }
- silk_memset(&((silk_decoder *)decState)->sStereo, 0, sizeof(((silk_decoder *)decState)->sStereo));
- /* Not strictly needed, but it's cleaner that way */
- ((silk_decoder *)decState)->prev_decode_only_middle = 0;
-
- return ret;
-}
-
-/* Decode a frame */
-opus_int silk_Decode( /* O Returns error code */
- void* decState, /* I/O State */
- silk_DecControlStruct* decControl, /* I/O Control Structure */
- opus_int lostFlag, /* I 0: no loss, 1 loss, 2 decode fec */
- opus_int newPacketFlag, /* I Indicates first decoder call for this packet */
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int16 *samplesOut, /* O Decoded output speech vector */
- opus_int32 *nSamplesOut, /* O Number of samples decoded */
- int arch /* I Run-time architecture */
-)
-{
- opus_int i, n, decode_only_middle = 0, ret = SILK_NO_ERROR;
- opus_int32 nSamplesOutDec, LBRR_symbol;
- opus_int16 *samplesOut1_tmp[ 2 ];
- VARDECL( opus_int16, samplesOut1_tmp_storage1 );
- VARDECL( opus_int16, samplesOut1_tmp_storage2 );
- VARDECL( opus_int16, samplesOut2_tmp );
- opus_int32 MS_pred_Q13[ 2 ] = { 0 };
- opus_int16 *resample_out_ptr;
- silk_decoder *psDec = ( silk_decoder * )decState;
- silk_decoder_state *channel_state = psDec->channel_state;
- opus_int has_side;
- opus_int stereo_to_mono;
- int delay_stack_alloc;
- SAVE_STACK;
-
- silk_assert( decControl->nChannelsInternal == 1 || decControl->nChannelsInternal == 2 );
-
- /**********************************/
- /* Test if first frame in payload */
- /**********************************/
- if( newPacketFlag ) {
- for( n = 0; n < decControl->nChannelsInternal; n++ ) {
- channel_state[ n ].nFramesDecoded = 0; /* Used to count frames in packet */
- }
- }
-
- /* If Mono -> Stereo transition in bitstream: init state of second channel */
- if( decControl->nChannelsInternal > psDec->nChannelsInternal ) {
- ret += silk_init_decoder( &channel_state[ 1 ] );
- }
-
- stereo_to_mono = decControl->nChannelsInternal == 1 && psDec->nChannelsInternal == 2 &&
- ( decControl->internalSampleRate == 1000*channel_state[ 0 ].fs_kHz );
-
- if( channel_state[ 0 ].nFramesDecoded == 0 ) {
- for( n = 0; n < decControl->nChannelsInternal; n++ ) {
- opus_int fs_kHz_dec;
- if( decControl->payloadSize_ms == 0 ) {
- /* Assuming packet loss, use 10 ms */
- channel_state[ n ].nFramesPerPacket = 1;
- channel_state[ n ].nb_subfr = 2;
- } else if( decControl->payloadSize_ms == 10 ) {
- channel_state[ n ].nFramesPerPacket = 1;
- channel_state[ n ].nb_subfr = 2;
- } else if( decControl->payloadSize_ms == 20 ) {
- channel_state[ n ].nFramesPerPacket = 1;
- channel_state[ n ].nb_subfr = 4;
- } else if( decControl->payloadSize_ms == 40 ) {
- channel_state[ n ].nFramesPerPacket = 2;
- channel_state[ n ].nb_subfr = 4;
- } else if( decControl->payloadSize_ms == 60 ) {
- channel_state[ n ].nFramesPerPacket = 3;
- channel_state[ n ].nb_subfr = 4;
- } else {
- silk_assert( 0 );
- RESTORE_STACK;
- return SILK_DEC_INVALID_FRAME_SIZE;
- }
- fs_kHz_dec = ( decControl->internalSampleRate >> 10 ) + 1;
- if( fs_kHz_dec != 8 && fs_kHz_dec != 12 && fs_kHz_dec != 16 ) {
- silk_assert( 0 );
- RESTORE_STACK;
- return SILK_DEC_INVALID_SAMPLING_FREQUENCY;
- }
- ret += silk_decoder_set_fs( &channel_state[ n ], fs_kHz_dec, decControl->API_sampleRate );
- }
- }
-
- if( decControl->nChannelsAPI == 2 && decControl->nChannelsInternal == 2 && ( psDec->nChannelsAPI == 1 || psDec->nChannelsInternal == 1 ) ) {
- silk_memset( psDec->sStereo.pred_prev_Q13, 0, sizeof( psDec->sStereo.pred_prev_Q13 ) );
- silk_memset( psDec->sStereo.sSide, 0, sizeof( psDec->sStereo.sSide ) );
- silk_memcpy( &channel_state[ 1 ].resampler_state, &channel_state[ 0 ].resampler_state, sizeof( silk_resampler_state_struct ) );
- }
- psDec->nChannelsAPI = decControl->nChannelsAPI;
- psDec->nChannelsInternal = decControl->nChannelsInternal;
-
- if( decControl->API_sampleRate > (opus_int32)MAX_API_FS_KHZ * 1000 || decControl->API_sampleRate < 8000 ) {
- ret = SILK_DEC_INVALID_SAMPLING_FREQUENCY;
- RESTORE_STACK;
- return( ret );
- }
-
- if( lostFlag != FLAG_PACKET_LOST && channel_state[ 0 ].nFramesDecoded == 0 ) {
- /* First decoder call for this payload */
- /* Decode VAD flags and LBRR flag */
- for( n = 0; n < decControl->nChannelsInternal; n++ ) {
- for( i = 0; i < channel_state[ n ].nFramesPerPacket; i++ ) {
- channel_state[ n ].VAD_flags[ i ] = ec_dec_bit_logp(psRangeDec, 1);
- }
- channel_state[ n ].LBRR_flag = ec_dec_bit_logp(psRangeDec, 1);
- }
- /* Decode LBRR flags */
- for( n = 0; n < decControl->nChannelsInternal; n++ ) {
- silk_memset( channel_state[ n ].LBRR_flags, 0, sizeof( channel_state[ n ].LBRR_flags ) );
- if( channel_state[ n ].LBRR_flag ) {
- if( channel_state[ n ].nFramesPerPacket == 1 ) {
- channel_state[ n ].LBRR_flags[ 0 ] = 1;
- } else {
- LBRR_symbol = ec_dec_icdf( psRangeDec, silk_LBRR_flags_iCDF_ptr[ channel_state[ n ].nFramesPerPacket - 2 ], 8 ) + 1;
- for( i = 0; i < channel_state[ n ].nFramesPerPacket; i++ ) {
- channel_state[ n ].LBRR_flags[ i ] = silk_RSHIFT( LBRR_symbol, i ) & 1;
- }
- }
- }
- }
-
- if( lostFlag == FLAG_DECODE_NORMAL ) {
- /* Regular decoding: skip all LBRR data */
- for( i = 0; i < channel_state[ 0 ].nFramesPerPacket; i++ ) {
- for( n = 0; n < decControl->nChannelsInternal; n++ ) {
- if( channel_state[ n ].LBRR_flags[ i ] ) {
- opus_int16 pulses[ MAX_FRAME_LENGTH ];
- opus_int condCoding;
-
- if( decControl->nChannelsInternal == 2 && n == 0 ) {
- silk_stereo_decode_pred( psRangeDec, MS_pred_Q13 );
- if( channel_state[ 1 ].LBRR_flags[ i ] == 0 ) {
- silk_stereo_decode_mid_only( psRangeDec, &decode_only_middle );
- }
- }
- /* Use conditional coding if previous frame available */
- if( i > 0 && channel_state[ n ].LBRR_flags[ i - 1 ] ) {
- condCoding = CODE_CONDITIONALLY;
- } else {
- condCoding = CODE_INDEPENDENTLY;
- }
- silk_decode_indices( &channel_state[ n ], psRangeDec, i, 1, condCoding );
- silk_decode_pulses( psRangeDec, pulses, channel_state[ n ].indices.signalType,
- channel_state[ n ].indices.quantOffsetType, channel_state[ n ].frame_length );
- }
- }
- }
- }
- }
-
- /* Get MS predictor index */
- if( decControl->nChannelsInternal == 2 ) {
- if( lostFlag == FLAG_DECODE_NORMAL ||
- ( lostFlag == FLAG_DECODE_LBRR && channel_state[ 0 ].LBRR_flags[ channel_state[ 0 ].nFramesDecoded ] == 1 ) )
- {
- silk_stereo_decode_pred( psRangeDec, MS_pred_Q13 );
- /* For LBRR data, decode mid-only flag only if side-channel's LBRR flag is false */
- if( ( lostFlag == FLAG_DECODE_NORMAL && channel_state[ 1 ].VAD_flags[ channel_state[ 0 ].nFramesDecoded ] == 0 ) ||
- ( lostFlag == FLAG_DECODE_LBRR && channel_state[ 1 ].LBRR_flags[ channel_state[ 0 ].nFramesDecoded ] == 0 ) )
- {
- silk_stereo_decode_mid_only( psRangeDec, &decode_only_middle );
- } else {
- decode_only_middle = 0;
- }
- } else {
- for( n = 0; n < 2; n++ ) {
- MS_pred_Q13[ n ] = psDec->sStereo.pred_prev_Q13[ n ];
- }
- }
- }
-
- /* Reset side channel decoder prediction memory for first frame with side coding */
- if( decControl->nChannelsInternal == 2 && decode_only_middle == 0 && psDec->prev_decode_only_middle == 1 ) {
- silk_memset( psDec->channel_state[ 1 ].outBuf, 0, sizeof(psDec->channel_state[ 1 ].outBuf) );
- silk_memset( psDec->channel_state[ 1 ].sLPC_Q14_buf, 0, sizeof(psDec->channel_state[ 1 ].sLPC_Q14_buf) );
- psDec->channel_state[ 1 ].lagPrev = 100;
- psDec->channel_state[ 1 ].LastGainIndex = 10;
- psDec->channel_state[ 1 ].prevSignalType = TYPE_NO_VOICE_ACTIVITY;
- psDec->channel_state[ 1 ].first_frame_after_reset = 1;
- }
-
- /* Check if the temp buffer fits into the output PCM buffer. If it fits,
- we can delay allocating the temp buffer until after the SILK peak stack
- usage. We need to use a < and not a <= because of the two extra samples. */
- delay_stack_alloc = decControl->internalSampleRate*decControl->nChannelsInternal
- < decControl->API_sampleRate*decControl->nChannelsAPI;
- ALLOC( samplesOut1_tmp_storage1, delay_stack_alloc ? ALLOC_NONE
- : decControl->nChannelsInternal*(channel_state[ 0 ].frame_length + 2 ),
- opus_int16 );
- if ( delay_stack_alloc )
- {
- samplesOut1_tmp[ 0 ] = samplesOut;
- samplesOut1_tmp[ 1 ] = samplesOut + channel_state[ 0 ].frame_length + 2;
- } else {
- samplesOut1_tmp[ 0 ] = samplesOut1_tmp_storage1;
- samplesOut1_tmp[ 1 ] = samplesOut1_tmp_storage1 + channel_state[ 0 ].frame_length + 2;
- }
-
- if( lostFlag == FLAG_DECODE_NORMAL ) {
- has_side = !decode_only_middle;
- } else {
- has_side = !psDec->prev_decode_only_middle
- || (decControl->nChannelsInternal == 2 && lostFlag == FLAG_DECODE_LBRR && channel_state[1].LBRR_flags[ channel_state[1].nFramesDecoded ] == 1 );
- }
- /* Call decoder for one frame */
- for( n = 0; n < decControl->nChannelsInternal; n++ ) {
- if( n == 0 || has_side ) {
- opus_int FrameIndex;
- opus_int condCoding;
-
- FrameIndex = channel_state[ 0 ].nFramesDecoded - n;
- /* Use independent coding if no previous frame available */
- if( FrameIndex <= 0 ) {
- condCoding = CODE_INDEPENDENTLY;
- } else if( lostFlag == FLAG_DECODE_LBRR ) {
- condCoding = channel_state[ n ].LBRR_flags[ FrameIndex - 1 ] ? CODE_CONDITIONALLY : CODE_INDEPENDENTLY;
- } else if( n > 0 && psDec->prev_decode_only_middle ) {
- /* If we skipped a side frame in this packet, we don't
- need LTP scaling; the LTP state is well-defined. */
- condCoding = CODE_INDEPENDENTLY_NO_LTP_SCALING;
- } else {
- condCoding = CODE_CONDITIONALLY;
- }
- ret += silk_decode_frame( &channel_state[ n ], psRangeDec, &samplesOut1_tmp[ n ][ 2 ], &nSamplesOutDec, lostFlag, condCoding, arch);
- } else {
- silk_memset( &samplesOut1_tmp[ n ][ 2 ], 0, nSamplesOutDec * sizeof( opus_int16 ) );
- }
- channel_state[ n ].nFramesDecoded++;
- }
-
- if( decControl->nChannelsAPI == 2 && decControl->nChannelsInternal == 2 ) {
- /* Convert Mid/Side to Left/Right */
- silk_stereo_MS_to_LR( &psDec->sStereo, samplesOut1_tmp[ 0 ], samplesOut1_tmp[ 1 ], MS_pred_Q13, channel_state[ 0 ].fs_kHz, nSamplesOutDec );
- } else {
- /* Buffering */
- silk_memcpy( samplesOut1_tmp[ 0 ], psDec->sStereo.sMid, 2 * sizeof( opus_int16 ) );
- silk_memcpy( psDec->sStereo.sMid, &samplesOut1_tmp[ 0 ][ nSamplesOutDec ], 2 * sizeof( opus_int16 ) );
- }
-
- /* Number of output samples */
- *nSamplesOut = silk_DIV32( nSamplesOutDec * decControl->API_sampleRate, silk_SMULBB( channel_state[ 0 ].fs_kHz, 1000 ) );
-
- /* Set up pointers to temp buffers */
- ALLOC( samplesOut2_tmp,
- decControl->nChannelsAPI == 2 ? *nSamplesOut : ALLOC_NONE, opus_int16 );
- if( decControl->nChannelsAPI == 2 ) {
- resample_out_ptr = samplesOut2_tmp;
- } else {
- resample_out_ptr = samplesOut;
- }
-
- ALLOC( samplesOut1_tmp_storage2, delay_stack_alloc
- ? decControl->nChannelsInternal*(channel_state[ 0 ].frame_length + 2 )
- : ALLOC_NONE,
- opus_int16 );
- if ( delay_stack_alloc ) {
- OPUS_COPY(samplesOut1_tmp_storage2, samplesOut, decControl->nChannelsInternal*(channel_state[ 0 ].frame_length + 2));
- samplesOut1_tmp[ 0 ] = samplesOut1_tmp_storage2;
- samplesOut1_tmp[ 1 ] = samplesOut1_tmp_storage2 + channel_state[ 0 ].frame_length + 2;
- }
- for( n = 0; n < silk_min( decControl->nChannelsAPI, decControl->nChannelsInternal ); n++ ) {
-
- /* Resample decoded signal to API_sampleRate */
- ret += silk_resampler( &channel_state[ n ].resampler_state, resample_out_ptr, &samplesOut1_tmp[ n ][ 1 ], nSamplesOutDec );
-
- /* Interleave if stereo output and stereo stream */
- if( decControl->nChannelsAPI == 2 ) {
- for( i = 0; i < *nSamplesOut; i++ ) {
- samplesOut[ n + 2 * i ] = resample_out_ptr[ i ];
- }
- }
- }
-
- /* Create two channel output from mono stream */
- if( decControl->nChannelsAPI == 2 && decControl->nChannelsInternal == 1 ) {
- if ( stereo_to_mono ){
- /* Resample right channel for newly collapsed stereo just in case
- we weren't doing collapsing when switching to mono */
- ret += silk_resampler( &channel_state[ 1 ].resampler_state, resample_out_ptr, &samplesOut1_tmp[ 0 ][ 1 ], nSamplesOutDec );
-
- for( i = 0; i < *nSamplesOut; i++ ) {
- samplesOut[ 1 + 2 * i ] = resample_out_ptr[ i ];
- }
- } else {
- for( i = 0; i < *nSamplesOut; i++ ) {
- samplesOut[ 1 + 2 * i ] = samplesOut[ 0 + 2 * i ];
- }
- }
- }
-
- /* Export pitch lag, measured at 48 kHz sampling rate */
- if( channel_state[ 0 ].prevSignalType == TYPE_VOICED ) {
- int mult_tab[ 3 ] = { 6, 4, 3 };
- decControl->prevPitchLag = channel_state[ 0 ].lagPrev * mult_tab[ ( channel_state[ 0 ].fs_kHz - 8 ) >> 2 ];
- } else {
- decControl->prevPitchLag = 0;
- }
-
- if( lostFlag == FLAG_PACKET_LOST ) {
- /* On packet loss, remove the gain clamping to prevent having the energy "bounce back"
- if we lose packets when the energy is going down */
- for ( i = 0; i < psDec->nChannelsInternal; i++ )
- psDec->channel_state[ i ].LastGainIndex = 10;
- } else {
- psDec->prev_decode_only_middle = decode_only_middle;
- }
- RESTORE_STACK;
- return ret;
-}
-
-#if 0
-/* Getting table of contents for a packet */
-opus_int silk_get_TOC(
- const opus_uint8 *payload, /* I Payload data */
- const opus_int nBytesIn, /* I Number of input bytes */
- const opus_int nFramesPerPayload, /* I Number of SILK frames per payload */
- silk_TOC_struct *Silk_TOC /* O Type of content */
-)
-{
- opus_int i, flags, ret = SILK_NO_ERROR;
-
- if( nBytesIn < 1 ) {
- return -1;
- }
- if( nFramesPerPayload < 0 || nFramesPerPayload > 3 ) {
- return -1;
- }
-
- silk_memset( Silk_TOC, 0, sizeof( *Silk_TOC ) );
-
- /* For stereo, extract the flags for the mid channel */
- flags = silk_RSHIFT( payload[ 0 ], 7 - nFramesPerPayload ) & ( silk_LSHIFT( 1, nFramesPerPayload + 1 ) - 1 );
-
- Silk_TOC->inbandFECFlag = flags & 1;
- for( i = nFramesPerPayload - 1; i >= 0 ; i-- ) {
- flags = silk_RSHIFT( flags, 1 );
- Silk_TOC->VADFlags[ i ] = flags & 1;
- Silk_TOC->VADFlag |= flags & 1;
- }
-
- return ret;
-}
-#endif
diff --git a/drivers/opus/silk/decode_core.c b/drivers/opus/silk/decode_core.c
deleted file mode 100644
index 8ca1adffdd..0000000000
--- a/drivers/opus/silk/decode_core.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-
-/**********************************************************/
-/* Core decoder. Performs inverse NSQ operation LTP + LPC */
-/**********************************************************/
-void silk_decode_core(
- silk_decoder_state *psDec, /* I/O Decoder state */
- silk_decoder_control *psDecCtrl, /* I Decoder control */
- opus_int16 xq[], /* O Decoded speech */
- const opus_int16 pulses[ MAX_FRAME_LENGTH ], /* I Pulse signal */
- int arch /* I Run-time architecture */
-)
-{
- opus_int i, k, lag = 0, start_idx, sLTP_buf_idx, NLSF_interpolation_flag, signalType;
- opus_int16 *A_Q12, *B_Q14, *pxq, A_Q12_tmp[ MAX_LPC_ORDER ];
- VARDECL( opus_int16, sLTP );
- VARDECL( opus_int32, sLTP_Q15 );
- opus_int32 LTP_pred_Q13, LPC_pred_Q10, Gain_Q10, inv_gain_Q31, gain_adj_Q16, rand_seed, offset_Q10;
- opus_int32 *pred_lag_ptr, *pexc_Q14, *pres_Q14;
- VARDECL( opus_int32, res_Q14 );
- VARDECL( opus_int32, sLPC_Q14 );
- SAVE_STACK;
-
- silk_assert( psDec->prev_gain_Q16 != 0 );
-
- ALLOC( sLTP, psDec->ltp_mem_length, opus_int16 );
- ALLOC( sLTP_Q15, psDec->ltp_mem_length + psDec->frame_length, opus_int32 );
- ALLOC( res_Q14, psDec->subfr_length, opus_int32 );
- ALLOC( sLPC_Q14, psDec->subfr_length + MAX_LPC_ORDER, opus_int32 );
-
- offset_Q10 = silk_Quantization_Offsets_Q10[ psDec->indices.signalType >> 1 ][ psDec->indices.quantOffsetType ];
-
- if( psDec->indices.NLSFInterpCoef_Q2 < 1 << 2 ) {
- NLSF_interpolation_flag = 1;
- } else {
- NLSF_interpolation_flag = 0;
- }
-
- /* Decode excitation */
- rand_seed = psDec->indices.Seed;
- for( i = 0; i < psDec->frame_length; i++ ) {
- rand_seed = silk_RAND( rand_seed );
- psDec->exc_Q14[ i ] = silk_LSHIFT( (opus_int32)pulses[ i ], 14 );
- if( psDec->exc_Q14[ i ] > 0 ) {
- psDec->exc_Q14[ i ] -= QUANT_LEVEL_ADJUST_Q10 << 4;
- } else
- if( psDec->exc_Q14[ i ] < 0 ) {
- psDec->exc_Q14[ i ] += QUANT_LEVEL_ADJUST_Q10 << 4;
- }
- psDec->exc_Q14[ i ] += offset_Q10 << 4;
- if( rand_seed < 0 ) {
- psDec->exc_Q14[ i ] = -psDec->exc_Q14[ i ];
- }
-
- rand_seed = silk_ADD32_ovflw( rand_seed, pulses[ i ] );
- }
-
- /* Copy LPC state */
- silk_memcpy( sLPC_Q14, psDec->sLPC_Q14_buf, MAX_LPC_ORDER * sizeof( opus_int32 ) );
-
- pexc_Q14 = psDec->exc_Q14;
- pxq = xq;
- sLTP_buf_idx = psDec->ltp_mem_length;
- /* Loop over subframes */
- for( k = 0; k < psDec->nb_subfr; k++ ) {
- pres_Q14 = res_Q14;
- A_Q12 = psDecCtrl->PredCoef_Q12[ k >> 1 ];
-
- /* Preload LPC coeficients to array on stack. Gives small performance gain */
- silk_memcpy( A_Q12_tmp, A_Q12, psDec->LPC_order * sizeof( opus_int16 ) );
- B_Q14 = &psDecCtrl->LTPCoef_Q14[ k * LTP_ORDER ];
- signalType = psDec->indices.signalType;
-
- Gain_Q10 = silk_RSHIFT( psDecCtrl->Gains_Q16[ k ], 6 );
- inv_gain_Q31 = silk_INVERSE32_varQ( psDecCtrl->Gains_Q16[ k ], 47 );
-
- /* Calculate gain adjustment factor */
- if( psDecCtrl->Gains_Q16[ k ] != psDec->prev_gain_Q16 ) {
- gain_adj_Q16 = silk_DIV32_varQ( psDec->prev_gain_Q16, psDecCtrl->Gains_Q16[ k ], 16 );
-
- /* Scale short term state */
- for( i = 0; i < MAX_LPC_ORDER; i++ ) {
- sLPC_Q14[ i ] = silk_SMULWW( gain_adj_Q16, sLPC_Q14[ i ] );
- }
- } else {
- gain_adj_Q16 = (opus_int32)1 << 16;
- }
-
- /* Save inv_gain */
- silk_assert( inv_gain_Q31 != 0 );
- psDec->prev_gain_Q16 = psDecCtrl->Gains_Q16[ k ];
-
- /* Avoid abrupt transition from voiced PLC to unvoiced normal decoding */
- if( psDec->lossCnt && psDec->prevSignalType == TYPE_VOICED &&
- psDec->indices.signalType != TYPE_VOICED && k < MAX_NB_SUBFR/2 ) {
-
- silk_memset( B_Q14, 0, LTP_ORDER * sizeof( opus_int16 ) );
- B_Q14[ LTP_ORDER/2 ] = SILK_FIX_CONST( 0.25, 14 );
-
- signalType = TYPE_VOICED;
- psDecCtrl->pitchL[ k ] = psDec->lagPrev;
- }
-
- if( signalType == TYPE_VOICED ) {
- /* Voiced */
- lag = psDecCtrl->pitchL[ k ];
-
- /* Re-whitening */
- if( k == 0 || ( k == 2 && NLSF_interpolation_flag ) ) {
- /* Rewhiten with new A coefs */
- start_idx = psDec->ltp_mem_length - lag - psDec->LPC_order - LTP_ORDER / 2;
- silk_assert( start_idx > 0 );
-
- if( k == 2 ) {
- silk_memcpy( &psDec->outBuf[ psDec->ltp_mem_length ], xq, 2 * psDec->subfr_length * sizeof( opus_int16 ) );
- }
-
- silk_LPC_analysis_filter( &sLTP[ start_idx ], &psDec->outBuf[ start_idx + k * psDec->subfr_length ],
- A_Q12, psDec->ltp_mem_length - start_idx, psDec->LPC_order, arch );
-
- /* After rewhitening the LTP state is unscaled */
- if( k == 0 ) {
- /* Do LTP downscaling to reduce inter-packet dependency */
- inv_gain_Q31 = silk_LSHIFT( silk_SMULWB( inv_gain_Q31, psDecCtrl->LTP_scale_Q14 ), 2 );
- }
- for( i = 0; i < lag + LTP_ORDER/2; i++ ) {
- sLTP_Q15[ sLTP_buf_idx - i - 1 ] = silk_SMULWB( inv_gain_Q31, sLTP[ psDec->ltp_mem_length - i - 1 ] );
- }
- } else {
- /* Update LTP state when Gain changes */
- if( gain_adj_Q16 != (opus_int32)1 << 16 ) {
- for( i = 0; i < lag + LTP_ORDER/2; i++ ) {
- sLTP_Q15[ sLTP_buf_idx - i - 1 ] = silk_SMULWW( gain_adj_Q16, sLTP_Q15[ sLTP_buf_idx - i - 1 ] );
- }
- }
- }
- }
-
- /* Long-term prediction */
- if( signalType == TYPE_VOICED ) {
- /* Set up pointer */
- pred_lag_ptr = &sLTP_Q15[ sLTP_buf_idx - lag + LTP_ORDER / 2 ];
- for( i = 0; i < psDec->subfr_length; i++ ) {
- /* Unrolled loop */
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LTP_pred_Q13 = 2;
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ 0 ], B_Q14[ 0 ] );
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ -1 ], B_Q14[ 1 ] );
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ -2 ], B_Q14[ 2 ] );
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ -3 ], B_Q14[ 3 ] );
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ -4 ], B_Q14[ 4 ] );
- pred_lag_ptr++;
-
- /* Generate LPC excitation */
- pres_Q14[ i ] = silk_ADD_LSHIFT32( pexc_Q14[ i ], LTP_pred_Q13, 1 );
-
- /* Update states */
- sLTP_Q15[ sLTP_buf_idx ] = silk_LSHIFT( pres_Q14[ i ], 1 );
- sLTP_buf_idx++;
- }
- } else {
- pres_Q14 = pexc_Q14;
- }
-
- for( i = 0; i < psDec->subfr_length; i++ ) {
- /* Short-term prediction */
- silk_assert( psDec->LPC_order == 10 || psDec->LPC_order == 16 );
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LPC_pred_Q10 = silk_RSHIFT( psDec->LPC_order, 1 );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 1 ], A_Q12_tmp[ 0 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 2 ], A_Q12_tmp[ 1 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 3 ], A_Q12_tmp[ 2 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 4 ], A_Q12_tmp[ 3 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 5 ], A_Q12_tmp[ 4 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 6 ], A_Q12_tmp[ 5 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 7 ], A_Q12_tmp[ 6 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 8 ], A_Q12_tmp[ 7 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 9 ], A_Q12_tmp[ 8 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 10 ], A_Q12_tmp[ 9 ] );
- if( psDec->LPC_order == 16 ) {
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 11 ], A_Q12_tmp[ 10 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 12 ], A_Q12_tmp[ 11 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 13 ], A_Q12_tmp[ 12 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 14 ], A_Q12_tmp[ 13 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 15 ], A_Q12_tmp[ 14 ] );
- LPC_pred_Q10 = silk_SMLAWB( LPC_pred_Q10, sLPC_Q14[ MAX_LPC_ORDER + i - 16 ], A_Q12_tmp[ 15 ] );
- }
-
- /* Add prediction to LPC excitation */
- sLPC_Q14[ MAX_LPC_ORDER + i ] = silk_ADD_LSHIFT32( pres_Q14[ i ], LPC_pred_Q10, 4 );
-
- /* Scale with gain */
- pxq[ i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( silk_SMULWW( sLPC_Q14[ MAX_LPC_ORDER + i ], Gain_Q10 ), 8 ) );
- }
-
- /* DEBUG_STORE_DATA( dec.pcm, pxq, psDec->subfr_length * sizeof( opus_int16 ) ) */
-
- /* Update LPC filter state */
- silk_memcpy( sLPC_Q14, &sLPC_Q14[ psDec->subfr_length ], MAX_LPC_ORDER * sizeof( opus_int32 ) );
- pexc_Q14 += psDec->subfr_length;
- pxq += psDec->subfr_length;
- }
-
- /* Save LPC state */
- silk_memcpy( psDec->sLPC_Q14_buf, sLPC_Q14, MAX_LPC_ORDER * sizeof( opus_int32 ) );
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/decode_frame.c b/drivers/opus/silk/decode_frame.c
deleted file mode 100644
index 18e2bc9b1a..0000000000
--- a/drivers/opus/silk/decode_frame.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/PLC.h"
-
-/****************/
-/* Decode frame */
-/****************/
-opus_int silk_decode_frame(
- silk_decoder_state *psDec, /* I/O Pointer to Silk decoder state */
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int16 pOut[], /* O Pointer to output speech frame */
- opus_int32 *pN, /* O Pointer to size of output frame */
- opus_int lostFlag, /* I 0: no loss, 1 loss, 2 decode fec */
- opus_int condCoding, /* I The type of conditional coding to use */
- int arch /* I Run-time architecture */
-)
-{
- VARDECL( silk_decoder_control, psDecCtrl );
- opus_int L, mv_len, ret = 0;
- SAVE_STACK;
-
- L = psDec->frame_length;
- ALLOC( psDecCtrl, 1, silk_decoder_control );
- psDecCtrl->LTP_scale_Q14 = 0;
-
- /* Safety checks */
- silk_assert( L > 0 && L <= MAX_FRAME_LENGTH );
-
- if( lostFlag == FLAG_DECODE_NORMAL ||
- ( lostFlag == FLAG_DECODE_LBRR && psDec->LBRR_flags[ psDec->nFramesDecoded ] == 1 ) )
- {
- VARDECL( opus_int16, pulses );
- ALLOC( pulses, (L + SHELL_CODEC_FRAME_LENGTH - 1) &
- ~(SHELL_CODEC_FRAME_LENGTH - 1), opus_int16 );
- /*********************************************/
- /* Decode quantization indices of side info */
- /*********************************************/
- silk_decode_indices( psDec, psRangeDec, psDec->nFramesDecoded, lostFlag, condCoding );
-
- /*********************************************/
- /* Decode quantization indices of excitation */
- /*********************************************/
- silk_decode_pulses( psRangeDec, pulses, psDec->indices.signalType,
- psDec->indices.quantOffsetType, psDec->frame_length );
-
- /********************************************/
- /* Decode parameters and pulse signal */
- /********************************************/
- silk_decode_parameters( psDec, psDecCtrl, condCoding );
-
- /********************************************************/
- /* Run inverse NSQ */
- /********************************************************/
- silk_decode_core( psDec, psDecCtrl, pOut, pulses, arch );
-
- /********************************************************/
- /* Update PLC state */
- /********************************************************/
- silk_PLC( psDec, psDecCtrl, pOut, 0, arch );
-
- psDec->lossCnt = 0;
- psDec->prevSignalType = psDec->indices.signalType;
- silk_assert( psDec->prevSignalType >= 0 && psDec->prevSignalType <= 2 );
-
- /* A frame has been decoded without errors */
- psDec->first_frame_after_reset = 0;
- } else {
- /* Handle packet loss by extrapolation */
- silk_PLC( psDec, psDecCtrl, pOut, 1, arch );
- }
-
- /*************************/
- /* Update output buffer. */
- /*************************/
- silk_assert( psDec->ltp_mem_length >= psDec->frame_length );
- mv_len = psDec->ltp_mem_length - psDec->frame_length;
- silk_memmove( psDec->outBuf, &psDec->outBuf[ psDec->frame_length ], mv_len * sizeof(opus_int16) );
- silk_memcpy( &psDec->outBuf[ mv_len ], pOut, psDec->frame_length * sizeof( opus_int16 ) );
-
- /************************************************/
- /* Comfort noise generation / estimation */
- /************************************************/
- silk_CNG( psDec, psDecCtrl, pOut, L );
-
- /****************************************************************/
- /* Ensure smooth connection of extrapolated and good frames */
- /****************************************************************/
- silk_PLC_glue_frames( psDec, pOut, L );
-
- /* Update some decoder state variables */
- psDec->lagPrev = psDecCtrl->pitchL[ psDec->nb_subfr - 1 ];
-
- /* Set output frame length */
- *pN = L;
-
- RESTORE_STACK;
- return ret;
-}
diff --git a/drivers/opus/silk/decode_indices.c b/drivers/opus/silk/decode_indices.c
deleted file mode 100644
index fa8066e5f7..0000000000
--- a/drivers/opus/silk/decode_indices.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Decode side-information parameters from payload */
-void silk_decode_indices(
- silk_decoder_state *psDec, /* I/O State */
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int FrameIndex, /* I Frame number */
- opus_int decode_LBRR, /* I Flag indicating LBRR data is being decoded */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- opus_int i, k, Ix;
- opus_int decode_absolute_lagIndex, delta_lagIndex;
- opus_int16 ec_ix[ MAX_LPC_ORDER ];
- opus_uint8 pred_Q8[ MAX_LPC_ORDER ];
-
- /*******************************************/
- /* Decode signal type and quantizer offset */
- /*******************************************/
- if( decode_LBRR || psDec->VAD_flags[ FrameIndex ] ) {
- Ix = ec_dec_icdf( psRangeDec, silk_type_offset_VAD_iCDF, 8 ) + 2;
- } else {
- Ix = ec_dec_icdf( psRangeDec, silk_type_offset_no_VAD_iCDF, 8 );
- }
- psDec->indices.signalType = (opus_int8)silk_RSHIFT( Ix, 1 );
- psDec->indices.quantOffsetType = (opus_int8)( Ix & 1 );
-
- /****************/
- /* Decode gains */
- /****************/
- /* First subframe */
- if( condCoding == CODE_CONDITIONALLY ) {
- /* Conditional coding */
- psDec->indices.GainsIndices[ 0 ] = (opus_int8)ec_dec_icdf( psRangeDec, silk_delta_gain_iCDF, 8 );
- } else {
- /* Independent coding, in two stages: MSB bits followed by 3 LSBs */
- psDec->indices.GainsIndices[ 0 ] = (opus_int8)silk_LSHIFT( ec_dec_icdf( psRangeDec, silk_gain_iCDF[ psDec->indices.signalType ], 8 ), 3 );
- psDec->indices.GainsIndices[ 0 ] += (opus_int8)ec_dec_icdf( psRangeDec, silk_uniform8_iCDF, 8 );
- }
-
- /* Remaining subframes */
- for( i = 1; i < psDec->nb_subfr; i++ ) {
- psDec->indices.GainsIndices[ i ] = (opus_int8)ec_dec_icdf( psRangeDec, silk_delta_gain_iCDF, 8 );
- }
-
- /**********************/
- /* Decode LSF Indices */
- /**********************/
- psDec->indices.NLSFIndices[ 0 ] = (opus_int8)ec_dec_icdf( psRangeDec, &psDec->psNLSF_CB->CB1_iCDF[ ( psDec->indices.signalType >> 1 ) * psDec->psNLSF_CB->nVectors ], 8 );
- silk_NLSF_unpack( ec_ix, pred_Q8, psDec->psNLSF_CB, psDec->indices.NLSFIndices[ 0 ] );
- silk_assert( psDec->psNLSF_CB->order == psDec->LPC_order );
- for( i = 0; i < psDec->psNLSF_CB->order; i++ ) {
- Ix = ec_dec_icdf( psRangeDec, &psDec->psNLSF_CB->ec_iCDF[ ec_ix[ i ] ], 8 );
- if( Ix == 0 ) {
- Ix -= ec_dec_icdf( psRangeDec, silk_NLSF_EXT_iCDF, 8 );
- } else if( Ix == 2 * NLSF_QUANT_MAX_AMPLITUDE ) {
- Ix += ec_dec_icdf( psRangeDec, silk_NLSF_EXT_iCDF, 8 );
- }
- psDec->indices.NLSFIndices[ i+1 ] = (opus_int8)( Ix - NLSF_QUANT_MAX_AMPLITUDE );
- }
-
- /* Decode LSF interpolation factor */
- if( psDec->nb_subfr == MAX_NB_SUBFR ) {
- psDec->indices.NLSFInterpCoef_Q2 = (opus_int8)ec_dec_icdf( psRangeDec, silk_NLSF_interpolation_factor_iCDF, 8 );
- } else {
- psDec->indices.NLSFInterpCoef_Q2 = 4;
- }
-
- if( psDec->indices.signalType == TYPE_VOICED )
- {
- /*********************/
- /* Decode pitch lags */
- /*********************/
- /* Get lag index */
- decode_absolute_lagIndex = 1;
- if( condCoding == CODE_CONDITIONALLY && psDec->ec_prevSignalType == TYPE_VOICED ) {
- /* Decode Delta index */
- delta_lagIndex = (opus_int16)ec_dec_icdf( psRangeDec, silk_pitch_delta_iCDF, 8 );
- if( delta_lagIndex > 0 ) {
- delta_lagIndex = delta_lagIndex - 9;
- psDec->indices.lagIndex = (opus_int16)( psDec->ec_prevLagIndex + delta_lagIndex );
- decode_absolute_lagIndex = 0;
- }
- }
- if( decode_absolute_lagIndex ) {
- /* Absolute decoding */
- psDec->indices.lagIndex = (opus_int16)ec_dec_icdf( psRangeDec, silk_pitch_lag_iCDF, 8 ) * silk_RSHIFT( psDec->fs_kHz, 1 );
- psDec->indices.lagIndex += (opus_int16)ec_dec_icdf( psRangeDec, psDec->pitch_lag_low_bits_iCDF, 8 );
- }
- psDec->ec_prevLagIndex = psDec->indices.lagIndex;
-
- /* Get countour index */
- psDec->indices.contourIndex = (opus_int8)ec_dec_icdf( psRangeDec, psDec->pitch_contour_iCDF, 8 );
-
- /********************/
- /* Decode LTP gains */
- /********************/
- /* Decode PERIndex value */
- psDec->indices.PERIndex = (opus_int8)ec_dec_icdf( psRangeDec, silk_LTP_per_index_iCDF, 8 );
-
- for( k = 0; k < psDec->nb_subfr; k++ ) {
- psDec->indices.LTPIndex[ k ] = (opus_int8)ec_dec_icdf( psRangeDec, silk_LTP_gain_iCDF_ptrs[ psDec->indices.PERIndex ], 8 );
- }
-
- /**********************/
- /* Decode LTP scaling */
- /**********************/
- if( condCoding == CODE_INDEPENDENTLY ) {
- psDec->indices.LTP_scaleIndex = (opus_int8)ec_dec_icdf( psRangeDec, silk_LTPscale_iCDF, 8 );
- } else {
- psDec->indices.LTP_scaleIndex = 0;
- }
- }
- psDec->ec_prevSignalType = psDec->indices.signalType;
-
- /***************/
- /* Decode seed */
- /***************/
- psDec->indices.Seed = (opus_int8)ec_dec_icdf( psRangeDec, silk_uniform4_iCDF, 8 );
-}
diff --git a/drivers/opus/silk/decode_parameters.c b/drivers/opus/silk/decode_parameters.c
deleted file mode 100644
index d17cb8a3df..0000000000
--- a/drivers/opus/silk/decode_parameters.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Decode parameters from payload */
-void silk_decode_parameters(
- silk_decoder_state *psDec, /* I/O State */
- silk_decoder_control *psDecCtrl, /* I/O Decoder control */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- opus_int i, k, Ix;
- opus_int16 pNLSF_Q15[ MAX_LPC_ORDER ], pNLSF0_Q15[ MAX_LPC_ORDER ];
- const opus_int8 *cbk_ptr_Q7;
-
- /* Dequant Gains */
- silk_gains_dequant( psDecCtrl->Gains_Q16, psDec->indices.GainsIndices,
- &psDec->LastGainIndex, condCoding == CODE_CONDITIONALLY, psDec->nb_subfr );
-
- /****************/
- /* Decode NLSFs */
- /****************/
- silk_NLSF_decode( pNLSF_Q15, psDec->indices.NLSFIndices, psDec->psNLSF_CB );
-
- /* Convert NLSF parameters to AR prediction filter coefficients */
- silk_NLSF2A( 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 ) {
- psDec->indices.NLSFInterpCoef_Q2 = 4;
- }
-
- if( psDec->indices.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 ] + silk_RSHIFT( silk_MUL( psDec->indices.NLSFInterpCoef_Q2,
- pNLSF_Q15[ i ] - psDec->prevNLSF_Q15[ i ] ), 2 );
- }
-
- /* Convert NLSF parameters to AR prediction filter coefficients */
- silk_NLSF2A( psDecCtrl->PredCoef_Q12[ 0 ], pNLSF0_Q15, psDec->LPC_order );
- } else {
- /* Copy LPC coefficients for first half from second half */
- silk_memcpy( psDecCtrl->PredCoef_Q12[ 0 ], psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order * sizeof( opus_int16 ) );
- }
-
- silk_memcpy( psDec->prevNLSF_Q15, pNLSF_Q15, psDec->LPC_order * sizeof( opus_int16 ) );
-
- /* After a packet loss do BWE of LPC coefs */
- if( psDec->lossCnt ) {
- silk_bwexpander( psDecCtrl->PredCoef_Q12[ 0 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 );
- silk_bwexpander( psDecCtrl->PredCoef_Q12[ 1 ], psDec->LPC_order, BWE_AFTER_LOSS_Q16 );
- }
-
- if( psDec->indices.signalType == TYPE_VOICED ) {
- /*********************/
- /* Decode pitch lags */
- /*********************/
-
- /* Decode pitch values */
- silk_decode_pitch( psDec->indices.lagIndex, psDec->indices.contourIndex, psDecCtrl->pitchL, psDec->fs_kHz, psDec->nb_subfr );
-
- /* Decode Codebook Index */
- cbk_ptr_Q7 = silk_LTP_vq_ptrs_Q7[ psDec->indices.PERIndex ]; /* set pointer to start of codebook */
-
- for( k = 0; k < psDec->nb_subfr; k++ ) {
- Ix = psDec->indices.LTPIndex[ k ];
- for( i = 0; i < LTP_ORDER; i++ ) {
- psDecCtrl->LTPCoef_Q14[ k * LTP_ORDER + i ] = silk_LSHIFT( cbk_ptr_Q7[ Ix * LTP_ORDER + i ], 7 );
- }
- }
-
- /**********************/
- /* Decode LTP scaling */
- /**********************/
- Ix = psDec->indices.LTP_scaleIndex;
- psDecCtrl->LTP_scale_Q14 = silk_LTPScales_table_Q14[ Ix ];
- } else {
- silk_memset( psDecCtrl->pitchL, 0, psDec->nb_subfr * sizeof( opus_int ) );
- silk_memset( psDecCtrl->LTPCoef_Q14, 0, LTP_ORDER * psDec->nb_subfr * sizeof( opus_int16 ) );
- psDec->indices.PERIndex = 0;
- psDecCtrl->LTP_scale_Q14 = 0;
- }
-}
diff --git a/drivers/opus/silk/decode_pitch.c b/drivers/opus/silk/decode_pitch.c
deleted file mode 100644
index 1d98ee7f33..0000000000
--- a/drivers/opus/silk/decode_pitch.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/***********************************************************
-* Pitch analyser function
-********************************************************** */
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/pitch_est_defines.h"
-
-void silk_decode_pitch(
- opus_int16 lagIndex, /* I */
- opus_int8 contourIndex, /* O */
- opus_int pitch_lags[], /* O 4 pitch values */
- const opus_int Fs_kHz, /* I sampling frequency (kHz) */
- const opus_int nb_subfr /* I number of sub frames */
-)
-{
- opus_int lag, k, min_lag, max_lag, cbk_size;
- const opus_int8 *Lag_CB_ptr;
-
- if( Fs_kHz == 8 ) {
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- Lag_CB_ptr = &silk_CB_lags_stage2[ 0 ][ 0 ];
- cbk_size = PE_NB_CBKS_STAGE2_EXT;
- } else {
- silk_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1 );
- Lag_CB_ptr = &silk_CB_lags_stage2_10_ms[ 0 ][ 0 ];
- cbk_size = PE_NB_CBKS_STAGE2_10MS;
- }
- } else {
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- Lag_CB_ptr = &silk_CB_lags_stage3[ 0 ][ 0 ];
- cbk_size = PE_NB_CBKS_STAGE3_MAX;
- } else {
- silk_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1 );
- Lag_CB_ptr = &silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
- cbk_size = PE_NB_CBKS_STAGE3_10MS;
- }
- }
-
- min_lag = silk_SMULBB( PE_MIN_LAG_MS, Fs_kHz );
- max_lag = silk_SMULBB( PE_MAX_LAG_MS, Fs_kHz );
- lag = min_lag + lagIndex;
-
- for( k = 0; k < nb_subfr; k++ ) {
- pitch_lags[ k ] = lag + matrix_ptr( Lag_CB_ptr, k, contourIndex, cbk_size );
- pitch_lags[ k ] = silk_LIMIT( pitch_lags[ k ], min_lag, max_lag );
- }
-}
diff --git a/drivers/opus/silk/decode_pulses.c b/drivers/opus/silk/decode_pulses.c
deleted file mode 100644
index c687d3bfa8..0000000000
--- a/drivers/opus/silk/decode_pulses.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/*********************************************/
-/* Decode quantization indices of excitation */
-/*********************************************/
-void silk_decode_pulses(
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int16 pulses[], /* O Excitation signal */
- const opus_int signalType, /* I Sigtype */
- const opus_int quantOffsetType, /* I quantOffsetType */
- const opus_int frame_length /* I Frame length */
-)
-{
- opus_int i, j, k, iter, abs_q, nLS, RateLevelIndex;
- opus_int sum_pulses[ MAX_NB_SHELL_BLOCKS ], nLshifts[ MAX_NB_SHELL_BLOCKS ];
- opus_int16 *pulses_ptr;
- const opus_uint8 *cdf_ptr;
-
- /*********************/
- /* Decode rate level */
- /*********************/
- RateLevelIndex = ec_dec_icdf( psRangeDec, silk_rate_levels_iCDF[ signalType >> 1 ], 8 );
-
- /* Calculate number of shell blocks */
- silk_assert( 1 << LOG2_SHELL_CODEC_FRAME_LENGTH == SHELL_CODEC_FRAME_LENGTH );
- iter = silk_RSHIFT( frame_length, LOG2_SHELL_CODEC_FRAME_LENGTH );
- if( iter * SHELL_CODEC_FRAME_LENGTH < frame_length ) {
- silk_assert( frame_length == 12 * 10 ); /* Make sure only happens for 10 ms @ 12 kHz */
- iter++;
- }
-
- /***************************************************/
- /* Sum-Weighted-Pulses Decoding */
- /***************************************************/
- cdf_ptr = silk_pulses_per_block_iCDF[ RateLevelIndex ];
- for( i = 0; i < iter; i++ ) {
- nLshifts[ i ] = 0;
- sum_pulses[ i ] = ec_dec_icdf( psRangeDec, cdf_ptr, 8 );
-
- /* LSB indication */
- while( sum_pulses[ i ] == SILK_MAX_PULSES + 1 ) {
- nLshifts[ i ]++;
- /* When we've already got 10 LSBs, we shift the table to not allow (SILK_MAX_PULSES + 1) */
- sum_pulses[ i ] = ec_dec_icdf( psRangeDec,
- silk_pulses_per_block_iCDF[ N_RATE_LEVELS - 1] + ( nLshifts[ i ] == 10 ), 8 );
- }
- }
-
- /***************************************************/
- /* Shell decoding */
- /***************************************************/
- for( i = 0; i < iter; i++ ) {
- if( sum_pulses[ i ] > 0 ) {
- silk_shell_decoder( &pulses[ silk_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ], psRangeDec, sum_pulses[ i ] );
- } else {
- silk_memset( &pulses[ silk_SMULBB( i, SHELL_CODEC_FRAME_LENGTH ) ], 0, SHELL_CODEC_FRAME_LENGTH * sizeof( pulses[0] ) );
- }
- }
-
- /***************************************************/
- /* LSB Decoding */
- /***************************************************/
- for( i = 0; i < iter; i++ ) {
- if( nLshifts[ i ] > 0 ) {
- nLS = nLshifts[ i ];
- pulses_ptr = &pulses[ silk_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 = silk_LSHIFT( abs_q, 1 );
- abs_q += ec_dec_icdf( psRangeDec, silk_lsb_iCDF, 8 );
- }
- pulses_ptr[ k ] = abs_q;
- }
- /* Mark the number of pulses non-zero for sign decoding. */
- sum_pulses[ i ] |= nLS << 5;
- }
- }
-
- /****************************************/
- /* Decode and add signs to pulse signal */
- /****************************************/
- silk_decode_signs( psRangeDec, pulses, frame_length, signalType, quantOffsetType, sum_pulses );
-}
diff --git a/drivers/opus/silk/decoder_set_fs.c b/drivers/opus/silk/decoder_set_fs.c
deleted file mode 100644
index 0079a506ee..0000000000
--- a/drivers/opus/silk/decoder_set_fs.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Set decoder sampling rate */
-opus_int silk_decoder_set_fs(
- silk_decoder_state *psDec, /* I/O Decoder state pointer */
- opus_int fs_kHz, /* I Sampling frequency (kHz) */
- opus_int32 fs_API_Hz /* I API Sampling frequency (Hz) */
-)
-{
- opus_int frame_length, ret = 0;
-
- silk_assert( fs_kHz == 8 || fs_kHz == 12 || fs_kHz == 16 );
- silk_assert( psDec->nb_subfr == MAX_NB_SUBFR || psDec->nb_subfr == MAX_NB_SUBFR/2 );
-
- /* New (sub)frame length */
- psDec->subfr_length = silk_SMULBB( SUB_FRAME_LENGTH_MS, fs_kHz );
- frame_length = silk_SMULBB( psDec->nb_subfr, psDec->subfr_length );
-
- /* Initialize resampler when switching internal or external sampling frequency */
- if( psDec->fs_kHz != fs_kHz || psDec->fs_API_hz != fs_API_Hz ) {
- /* Initialize the resampler for dec_API.c preparing resampling from fs_kHz to API_fs_Hz */
- ret += silk_resampler_init( &psDec->resampler_state, silk_SMULBB( fs_kHz, 1000 ), fs_API_Hz, 0 );
-
- psDec->fs_API_hz = fs_API_Hz;
- }
-
- if( psDec->fs_kHz != fs_kHz || frame_length != psDec->frame_length ) {
- if( fs_kHz == 8 ) {
- if( psDec->nb_subfr == MAX_NB_SUBFR ) {
- psDec->pitch_contour_iCDF = silk_pitch_contour_NB_iCDF;
- } else {
- psDec->pitch_contour_iCDF = silk_pitch_contour_10_ms_NB_iCDF;
- }
- } else {
- if( psDec->nb_subfr == MAX_NB_SUBFR ) {
- psDec->pitch_contour_iCDF = silk_pitch_contour_iCDF;
- } else {
- psDec->pitch_contour_iCDF = silk_pitch_contour_10_ms_iCDF;
- }
- }
- if( psDec->fs_kHz != fs_kHz ) {
- psDec->ltp_mem_length = silk_SMULBB( LTP_MEM_LENGTH_MS, fs_kHz );
- if( fs_kHz == 8 || fs_kHz == 12 ) {
- psDec->LPC_order = MIN_LPC_ORDER;
- psDec->psNLSF_CB = &silk_NLSF_CB_NB_MB;
- } else {
- psDec->LPC_order = MAX_LPC_ORDER;
- psDec->psNLSF_CB = &silk_NLSF_CB_WB;
- }
- if( fs_kHz == 16 ) {
- psDec->pitch_lag_low_bits_iCDF = silk_uniform8_iCDF;
- } else if( fs_kHz == 12 ) {
- psDec->pitch_lag_low_bits_iCDF = silk_uniform6_iCDF;
- } else if( fs_kHz == 8 ) {
- psDec->pitch_lag_low_bits_iCDF = silk_uniform4_iCDF;
- } else {
- /* unsupported sampling rate */
- silk_assert( 0 );
- }
- psDec->first_frame_after_reset = 1;
- psDec->lagPrev = 100;
- psDec->LastGainIndex = 10;
- psDec->prevSignalType = TYPE_NO_VOICE_ACTIVITY;
- silk_memset( psDec->outBuf, 0, sizeof(psDec->outBuf));
- silk_memset( psDec->sLPC_Q14_buf, 0, sizeof(psDec->sLPC_Q14_buf) );
- }
-
- psDec->fs_kHz = fs_kHz;
- psDec->frame_length = frame_length;
- }
-
- /* Check that settings are valid */
- silk_assert( psDec->frame_length > 0 && psDec->frame_length <= MAX_FRAME_LENGTH );
-
- return ret;
-}
-
diff --git a/drivers/opus/silk/define.h b/drivers/opus/silk/define.h
deleted file mode 100644
index c6165e3cff..0000000000
--- a/drivers/opus/silk/define.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_DEFINE_H
-#define SILK_DEFINE_H
-
-#include "opus/silk/errors.h"
-#include "opus/silk/typedef.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Max number of encoder channels (1/2) */
-#define ENCODER_NUM_CHANNELS 2
-/* Number of decoder channels (1/2) */
-#define DECODER_NUM_CHANNELS 2
-
-#define MAX_FRAMES_PER_PACKET 3
-
-/* Limits on bitrate */
-#define MIN_TARGET_RATE_BPS 5000
-#define MAX_TARGET_RATE_BPS 80000
-#define TARGET_RATE_TAB_SZ 8
-
-/* LBRR thresholds */
-#define LBRR_NB_MIN_RATE_BPS 12000
-#define LBRR_MB_MIN_RATE_BPS 14000
-#define LBRR_WB_MIN_RATE_BPS 16000
-
-/* DTX settings */
-#define NB_SPEECH_FRAMES_BEFORE_DTX 10 /* eq 200 ms */
-#define MAX_CONSECUTIVE_DTX 20 /* eq 400 ms */
-
-/* Maximum sampling frequency */
-#define MAX_FS_KHZ 16
-#define MAX_API_FS_KHZ 48
-
-/* Signal types */
-#define TYPE_NO_VOICE_ACTIVITY 0
-#define TYPE_UNVOICED 1
-#define TYPE_VOICED 2
-
-/* Conditional coding types */
-#define CODE_INDEPENDENTLY 0
-#define CODE_INDEPENDENTLY_NO_LTP_SCALING 1
-#define CODE_CONDITIONALLY 2
-
-/* Settings for stereo processing */
-#define STEREO_QUANT_TAB_SIZE 16
-#define STEREO_QUANT_SUB_STEPS 5
-#define STEREO_INTERP_LEN_MS 8 /* must be even */
-#define STEREO_RATIO_SMOOTH_COEF 0.01 /* smoothing coef for signal norms and stereo width */
-
-/* Range of pitch lag estimates */
-#define PITCH_EST_MIN_LAG_MS 2 /* 2 ms -> 500 Hz */
-#define PITCH_EST_MAX_LAG_MS 18 /* 18 ms -> 56 Hz */
-
-/* Maximum number of subframes */
-#define MAX_NB_SUBFR 4
-
-/* Number of samples per frame */
-#define LTP_MEM_LENGTH_MS 20
-#define SUB_FRAME_LENGTH_MS 5
-#define MAX_SUB_FRAME_LENGTH ( SUB_FRAME_LENGTH_MS * MAX_FS_KHZ )
-#define MAX_FRAME_LENGTH_MS ( SUB_FRAME_LENGTH_MS * MAX_NB_SUBFR )
-#define MAX_FRAME_LENGTH ( MAX_FRAME_LENGTH_MS * MAX_FS_KHZ )
-
-/* Milliseconds of lookahead for pitch analysis */
-#define LA_PITCH_MS 2
-#define LA_PITCH_MAX ( LA_PITCH_MS * MAX_FS_KHZ )
-
-/* Order of LPC used in find pitch */
-#define MAX_FIND_PITCH_LPC_ORDER 16
-
-/* Length of LPC window used in find pitch */
-#define FIND_PITCH_LPC_WIN_MS ( 20 + (LA_PITCH_MS << 1) )
-#define FIND_PITCH_LPC_WIN_MS_2_SF ( 10 + (LA_PITCH_MS << 1) )
-#define FIND_PITCH_LPC_WIN_MAX ( FIND_PITCH_LPC_WIN_MS * MAX_FS_KHZ )
-
-/* Milliseconds of lookahead for noise shape analysis */
-#define LA_SHAPE_MS 5
-#define LA_SHAPE_MAX ( LA_SHAPE_MS * MAX_FS_KHZ )
-
-/* Maximum length of LPC window used in noise shape analysis */
-#define SHAPE_LPC_WIN_MAX ( 15 * MAX_FS_KHZ )
-
-/* dB level of lowest gain quantization level */
-#define MIN_QGAIN_DB 2
-/* dB level of highest gain quantization level */
-#define MAX_QGAIN_DB 88
-/* Number of gain quantization levels */
-#define N_LEVELS_QGAIN 64
-/* Max increase in gain quantization index */
-#define MAX_DELTA_GAIN_QUANT 36
-/* 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 240
-
-#define QUANT_LEVEL_ADJUST_Q10 80
-
-/* Maximum numbers of iterations used to stabilize an LPC vector */
-#define MAX_LPC_STABILIZE_ITERATIONS 16
-#define MAX_PREDICTION_POWER_GAIN 1e4f
-#define MAX_PREDICTION_POWER_GAIN_AFTER_RESET 1e2f
-
-#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
-
-/* Flag to use harmonic noise shaping */
-#define USE_HARM_SHAPING 1
-
-/* Max LPC order of noise shaping filters */
-#define MAX_SHAPE_LPC_ORDER 16
-
-#define HARM_SHAPE_FIR_TAPS 3
-
-/* Maximum number of delayed decision states */
-#define MAX_DEL_DEC_STATES 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 LOG2_SHELL_CODEC_FRAME_LENGTH 4
-#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 SILK_MAX_PULSES 16
-
-#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
-
-/***************************/
-/* Voice activity detector */
-/***************************/
-#define VAD_N_BANDS 4
-
-#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
-
-/* Size of the piecewise linear cosine approximation table for the LSFs */
-#define LSF_COS_TAB_SZ_FIX 128
-
-/******************/
-/* NLSF quantizer */
-/******************/
-#define NLSF_W_Q 2
-#define NLSF_VQ_MAX_VECTORS 32
-#define NLSF_VQ_MAX_SURVIVORS 32
-#define NLSF_QUANT_MAX_AMPLITUDE 4
-#define NLSF_QUANT_MAX_AMPLITUDE_EXT 10
-#define NLSF_QUANT_LEVEL_ADJ 0.1
-#define NLSF_QUANT_DEL_DEC_STATES_LOG2 2
-#define NLSF_QUANT_DEL_DEC_STATES ( 1 << NLSF_QUANT_DEL_DEC_STATES_LOG2 )
-
-/* Transition filtering for mode switching */
-#define TRANSITION_TIME_MS 5120 /* 5120 = 64 * FRAME_LENGTH_MS * ( TRANSITION_INT_NUM - 1 ) = 64*(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 ( TRANSITION_TIME_MS / MAX_FRAME_LENGTH_MS )
-#define TRANSITION_INT_STEPS ( TRANSITION_FRAMES / ( TRANSITION_INT_NUM - 1 ) )
-
-/* BWE factors to apply after packet loss */
-#define BWE_AFTER_LOSS_Q16 63570
-
-/* Defines for CN generation */
-#define CNG_BUF_MASK_MAX 255 /* 2^floor(log2(MAX_FRAME_LENGTH))-1 */
-#define CNG_GAIN_SMTH_Q16 4634 /* 0.25^(1/4) */
-#define CNG_NLSF_SMTH_Q16 16348 /* 0.25 */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/drivers/opus/silk/enc_API.c b/drivers/opus/silk/enc_API.c
deleted file mode 100644
index beb46214d8..0000000000
--- a/drivers/opus/silk/enc_API.c
+++ /dev/null
@@ -1,560 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-#include "opus/silk/define.h"
-#include "opus/silk/API.h"
-#include "opus/silk/control.h"
-#include "opus/silk/typedef.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/structs.h"
-#include "opus/silk/tuning_parameters.h"
-#ifdef OPUS_FIXED_POINT
-#include "opus/silk/fixed/main_FIX.h"
-#else
-#include "opus/silk/float/main_FLP.h"
-#endif
-
-/***************************************/
-/* Read control structure from encoder */
-/***************************************/
-static opus_int silk_QueryEncoder( /* O Returns error code */
- const void *encState, /* I State */
- silk_EncControlStruct *encStatus /* O Encoder Status */
-);
-
-/****************************************/
-/* Encoder functions */
-/****************************************/
-
-opus_int silk_Get_Encoder_Size( /* O Returns error code */
- opus_int *encSizeBytes /* O Number of bytes in SILK encoder state */
-)
-{
- opus_int ret = SILK_NO_ERROR;
-
- *encSizeBytes = sizeof( silk_encoder );
-
- return ret;
-}
-
-/*************************/
-/* Init or Reset encoder */
-/*************************/
-opus_int silk_InitEncoder( /* O Returns error code */
- void *encState, /* I/O State */
- int arch, /* I Run-time architecture */
- silk_EncControlStruct *encStatus /* O Encoder Status */
-)
-{
- silk_encoder *psEnc;
- opus_int n, ret = SILK_NO_ERROR;
-
- psEnc = (silk_encoder *)encState;
-
- /* Reset encoder */
- silk_memset( psEnc, 0, sizeof( silk_encoder ) );
- for( n = 0; n < ENCODER_NUM_CHANNELS; n++ ) {
- if( ret += silk_init_encoder( &psEnc->state_Fxx[ n ], arch ) ) {
- silk_assert( 0 );
- }
- }
-
- psEnc->nChannelsAPI = 1;
- psEnc->nChannelsInternal = 1;
-
- /* Read control structure */
- if( ret += silk_QueryEncoder( encState, encStatus ) ) {
- silk_assert( 0 );
- }
-
- return ret;
-}
-
-/***************************************/
-/* Read control structure from encoder */
-/***************************************/
-static opus_int silk_QueryEncoder( /* O Returns error code */
- const void *encState, /* I State */
- silk_EncControlStruct *encStatus /* O Encoder Status */
-)
-{
- opus_int ret = SILK_NO_ERROR;
- silk_encoder_state_Fxx *state_Fxx;
- silk_encoder *psEnc = (silk_encoder *)encState;
-
- state_Fxx = psEnc->state_Fxx;
-
- encStatus->nChannelsAPI = psEnc->nChannelsAPI;
- encStatus->nChannelsInternal = psEnc->nChannelsInternal;
- encStatus->API_sampleRate = state_Fxx[ 0 ].sCmn.API_fs_Hz;
- encStatus->maxInternalSampleRate = state_Fxx[ 0 ].sCmn.maxInternal_fs_Hz;
- encStatus->minInternalSampleRate = state_Fxx[ 0 ].sCmn.minInternal_fs_Hz;
- encStatus->desiredInternalSampleRate = state_Fxx[ 0 ].sCmn.desiredInternal_fs_Hz;
- encStatus->payloadSize_ms = state_Fxx[ 0 ].sCmn.PacketSize_ms;
- encStatus->bitRate = state_Fxx[ 0 ].sCmn.TargetRate_bps;
- encStatus->packetLossPercentage = state_Fxx[ 0 ].sCmn.PacketLoss_perc;
- encStatus->complexity = state_Fxx[ 0 ].sCmn.Complexity;
- encStatus->useInBandFEC = state_Fxx[ 0 ].sCmn.useInBandFEC;
- encStatus->useDTX = state_Fxx[ 0 ].sCmn.useDTX;
- encStatus->useCBR = state_Fxx[ 0 ].sCmn.useCBR;
- encStatus->internalSampleRate = silk_SMULBB( state_Fxx[ 0 ].sCmn.fs_kHz, 1000 );
- encStatus->allowBandwidthSwitch = state_Fxx[ 0 ].sCmn.allow_bandwidth_switch;
- encStatus->inWBmodeWithoutVariableLP = state_Fxx[ 0 ].sCmn.fs_kHz == 16 && state_Fxx[ 0 ].sCmn.sLP.mode == 0;
-
- return ret;
-}
-
-
-/**************************/
-/* Encode frame with Silk */
-/**************************/
-/* Note: if prefillFlag is set, the input must contain 10 ms of audio, irrespective of what */
-/* encControl->payloadSize_ms is set to */
-opus_int silk_Encode( /* O Returns error code */
- void *encState, /* I/O State */
- silk_EncControlStruct *encControl, /* I Control status */
- const opus_int16 *samplesIn, /* I Speech sample input vector */
- opus_int nSamplesIn, /* I Number of samples in input vector */
- ec_enc *psRangeEnc, /* I/O Compressor data structure */
- opus_int32 *nBytesOut, /* I/O Number of bytes in payload (input: Max bytes) */
- const opus_int prefillFlag /* I Flag to indicate prefilling buffers no coding */
-)
-{
- opus_int n, i, nBits, flags, tmp_payloadSize_ms = 0, tmp_complexity = 0, ret = 0;
- opus_int nSamplesToBuffer, nSamplesToBufferMax, nBlocksOf10ms;
- opus_int nSamplesFromInput = 0, nSamplesFromInputMax;
- opus_int speech_act_thr_for_switch_Q8;
- opus_int32 TargetRate_bps, MStargetRates_bps[ 2 ], channelRate_bps, LBRR_symbol, sum;
- silk_encoder *psEnc = ( silk_encoder * )encState;
- VARDECL( opus_int16, buf );
- opus_int transition, curr_block, tot_blocks;
- SAVE_STACK;
-
- if (encControl->reducedDependency)
- {
- psEnc->state_Fxx[0].sCmn.first_frame_after_reset = 1;
- psEnc->state_Fxx[1].sCmn.first_frame_after_reset = 1;
- }
- psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded = psEnc->state_Fxx[ 1 ].sCmn.nFramesEncoded = 0;
-
- /* Check values in encoder control structure */
- if( ( ret = check_control_input( encControl ) ) != 0 ) {
- silk_assert( 0 );
- RESTORE_STACK;
- return ret;
- }
-
- encControl->switchReady = 0;
-
- if( encControl->nChannelsInternal > psEnc->nChannelsInternal ) {
- /* Mono -> Stereo transition: init state of second channel and stereo state */
- ret += silk_init_encoder( &psEnc->state_Fxx[ 1 ], psEnc->state_Fxx[ 0 ].sCmn.arch );
- silk_memset( psEnc->sStereo.pred_prev_Q13, 0, sizeof( psEnc->sStereo.pred_prev_Q13 ) );
- silk_memset( psEnc->sStereo.sSide, 0, sizeof( psEnc->sStereo.sSide ) );
- psEnc->sStereo.mid_side_amp_Q0[ 0 ] = 0;
- psEnc->sStereo.mid_side_amp_Q0[ 1 ] = 1;
- psEnc->sStereo.mid_side_amp_Q0[ 2 ] = 0;
- psEnc->sStereo.mid_side_amp_Q0[ 3 ] = 1;
- psEnc->sStereo.width_prev_Q14 = 0;
- psEnc->sStereo.smth_width_Q14 = SILK_FIX_CONST( 1, 14 );
- if( psEnc->nChannelsAPI == 2 ) {
- silk_memcpy( &psEnc->state_Fxx[ 1 ].sCmn.resampler_state, &psEnc->state_Fxx[ 0 ].sCmn.resampler_state, sizeof( silk_resampler_state_struct ) );
- silk_memcpy( &psEnc->state_Fxx[ 1 ].sCmn.In_HP_State, &psEnc->state_Fxx[ 0 ].sCmn.In_HP_State, sizeof( psEnc->state_Fxx[ 1 ].sCmn.In_HP_State ) );
- }
- }
-
- transition = (encControl->payloadSize_ms != psEnc->state_Fxx[ 0 ].sCmn.PacketSize_ms) || (psEnc->nChannelsInternal != encControl->nChannelsInternal);
-
- psEnc->nChannelsAPI = encControl->nChannelsAPI;
- psEnc->nChannelsInternal = encControl->nChannelsInternal;
-
- nBlocksOf10ms = silk_DIV32( 100 * nSamplesIn, encControl->API_sampleRate );
- tot_blocks = ( nBlocksOf10ms > 1 ) ? nBlocksOf10ms >> 1 : 1;
- curr_block = 0;
- if( prefillFlag ) {
- /* Only accept input length of 10 ms */
- if( nBlocksOf10ms != 1 ) {
- silk_assert( 0 );
- RESTORE_STACK;
- return SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES;
- }
- /* Reset Encoder */
- for( n = 0; n < encControl->nChannelsInternal; n++ ) {
- ret = silk_init_encoder( &psEnc->state_Fxx[ n ], psEnc->state_Fxx[ n ].sCmn.arch );
- silk_assert( !ret );
- }
- tmp_payloadSize_ms = encControl->payloadSize_ms;
- encControl->payloadSize_ms = 10;
- tmp_complexity = encControl->complexity;
- encControl->complexity = 0;
- for( n = 0; n < encControl->nChannelsInternal; n++ ) {
- psEnc->state_Fxx[ n ].sCmn.controlled_since_last_payload = 0;
- psEnc->state_Fxx[ n ].sCmn.prefillFlag = 1;
- }
- } else {
- /* Only accept input lengths that are a multiple of 10 ms */
- if( nBlocksOf10ms * encControl->API_sampleRate != 100 * nSamplesIn || nSamplesIn < 0 ) {
- silk_assert( 0 );
- RESTORE_STACK;
- return SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES;
- }
- /* Make sure no more than one packet can be produced */
- if( 1000 * (opus_int32)nSamplesIn > encControl->payloadSize_ms * encControl->API_sampleRate ) {
- silk_assert( 0 );
- RESTORE_STACK;
- return SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES;
- }
- }
-
- TargetRate_bps = silk_RSHIFT32( encControl->bitRate, encControl->nChannelsInternal - 1 );
- for( n = 0; n < encControl->nChannelsInternal; n++ ) {
- /* Force the side channel to the same rate as the mid */
- opus_int force_fs_kHz = (n==1) ? psEnc->state_Fxx[0].sCmn.fs_kHz : 0;
- if( ( ret = silk_control_encoder( &psEnc->state_Fxx[ n ], encControl, TargetRate_bps, psEnc->allowBandwidthSwitch, n, force_fs_kHz ) ) != 0 ) {
- silk_assert( 0 );
- RESTORE_STACK;
- return ret;
- }
- if( psEnc->state_Fxx[n].sCmn.first_frame_after_reset || transition ) {
- for( i = 0; i < psEnc->state_Fxx[ 0 ].sCmn.nFramesPerPacket; i++ ) {
- psEnc->state_Fxx[ n ].sCmn.LBRR_flags[ i ] = 0;
- }
- }
- psEnc->state_Fxx[ n ].sCmn.inDTX = psEnc->state_Fxx[ n ].sCmn.useDTX;
- }
- silk_assert( encControl->nChannelsInternal == 1 || psEnc->state_Fxx[ 0 ].sCmn.fs_kHz == psEnc->state_Fxx[ 1 ].sCmn.fs_kHz );
-
- /* Input buffering/resampling and encoding */
- nSamplesToBufferMax =
- 10 * nBlocksOf10ms * psEnc->state_Fxx[ 0 ].sCmn.fs_kHz;
- nSamplesFromInputMax =
- silk_DIV32_16( nSamplesToBufferMax *
- psEnc->state_Fxx[ 0 ].sCmn.API_fs_Hz,
- psEnc->state_Fxx[ 0 ].sCmn.fs_kHz * 1000 );
- ALLOC( buf, nSamplesFromInputMax, opus_int16 );
- while( 1 ) {
- nSamplesToBuffer = psEnc->state_Fxx[ 0 ].sCmn.frame_length - psEnc->state_Fxx[ 0 ].sCmn.inputBufIx;
- nSamplesToBuffer = silk_min( nSamplesToBuffer, nSamplesToBufferMax );
- nSamplesFromInput = silk_DIV32_16( nSamplesToBuffer * psEnc->state_Fxx[ 0 ].sCmn.API_fs_Hz, psEnc->state_Fxx[ 0 ].sCmn.fs_kHz * 1000 );
- /* Resample and write to buffer */
- if( encControl->nChannelsAPI == 2 && encControl->nChannelsInternal == 2 ) {
- opus_int id = psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded;
- for( n = 0; n < nSamplesFromInput; n++ ) {
- buf[ n ] = samplesIn[ 2 * n ];
- }
- /* Making sure to start both resamplers from the same state when switching from mono to stereo */
- if( psEnc->nPrevChannelsInternal == 1 && id==0 ) {
- silk_memcpy( &psEnc->state_Fxx[ 1 ].sCmn.resampler_state, &psEnc->state_Fxx[ 0 ].sCmn.resampler_state, sizeof(psEnc->state_Fxx[ 1 ].sCmn.resampler_state));
- }
-
- ret += silk_resampler( &psEnc->state_Fxx[ 0 ].sCmn.resampler_state,
- &psEnc->state_Fxx[ 0 ].sCmn.inputBuf[ psEnc->state_Fxx[ 0 ].sCmn.inputBufIx + 2 ], buf, nSamplesFromInput );
- psEnc->state_Fxx[ 0 ].sCmn.inputBufIx += nSamplesToBuffer;
-
- nSamplesToBuffer = psEnc->state_Fxx[ 1 ].sCmn.frame_length - psEnc->state_Fxx[ 1 ].sCmn.inputBufIx;
- nSamplesToBuffer = silk_min( nSamplesToBuffer, 10 * nBlocksOf10ms * psEnc->state_Fxx[ 1 ].sCmn.fs_kHz );
- for( n = 0; n < nSamplesFromInput; n++ ) {
- buf[ n ] = samplesIn[ 2 * n + 1 ];
- }
- ret += silk_resampler( &psEnc->state_Fxx[ 1 ].sCmn.resampler_state,
- &psEnc->state_Fxx[ 1 ].sCmn.inputBuf[ psEnc->state_Fxx[ 1 ].sCmn.inputBufIx + 2 ], buf, nSamplesFromInput );
-
- psEnc->state_Fxx[ 1 ].sCmn.inputBufIx += nSamplesToBuffer;
- } else if( encControl->nChannelsAPI == 2 && encControl->nChannelsInternal == 1 ) {
- /* Combine left and right channels before resampling */
- for( n = 0; n < nSamplesFromInput; n++ ) {
- sum = samplesIn[ 2 * n ] + samplesIn[ 2 * n + 1 ];
- buf[ n ] = (opus_int16)silk_RSHIFT_ROUND( sum, 1 );
- }
- ret += silk_resampler( &psEnc->state_Fxx[ 0 ].sCmn.resampler_state,
- &psEnc->state_Fxx[ 0 ].sCmn.inputBuf[ psEnc->state_Fxx[ 0 ].sCmn.inputBufIx + 2 ], buf, nSamplesFromInput );
- /* On the first mono frame, average the results for the two resampler states */
- if( psEnc->nPrevChannelsInternal == 2 && psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded == 0 ) {
- ret += silk_resampler( &psEnc->state_Fxx[ 1 ].sCmn.resampler_state,
- &psEnc->state_Fxx[ 1 ].sCmn.inputBuf[ psEnc->state_Fxx[ 1 ].sCmn.inputBufIx + 2 ], buf, nSamplesFromInput );
- for( n = 0; n < psEnc->state_Fxx[ 0 ].sCmn.frame_length; n++ ) {
- psEnc->state_Fxx[ 0 ].sCmn.inputBuf[ psEnc->state_Fxx[ 0 ].sCmn.inputBufIx+n+2 ] =
- silk_RSHIFT(psEnc->state_Fxx[ 0 ].sCmn.inputBuf[ psEnc->state_Fxx[ 0 ].sCmn.inputBufIx+n+2 ]
- + psEnc->state_Fxx[ 1 ].sCmn.inputBuf[ psEnc->state_Fxx[ 1 ].sCmn.inputBufIx+n+2 ], 1);
- }
- }
- psEnc->state_Fxx[ 0 ].sCmn.inputBufIx += nSamplesToBuffer;
- } else {
- silk_assert( encControl->nChannelsAPI == 1 && encControl->nChannelsInternal == 1 );
- silk_memcpy(buf, samplesIn, nSamplesFromInput*sizeof(opus_int16));
- ret += silk_resampler( &psEnc->state_Fxx[ 0 ].sCmn.resampler_state,
- &psEnc->state_Fxx[ 0 ].sCmn.inputBuf[ psEnc->state_Fxx[ 0 ].sCmn.inputBufIx + 2 ], buf, nSamplesFromInput );
- psEnc->state_Fxx[ 0 ].sCmn.inputBufIx += nSamplesToBuffer;
- }
-
- samplesIn += nSamplesFromInput * encControl->nChannelsAPI;
- nSamplesIn -= nSamplesFromInput;
-
- /* Default */
- psEnc->allowBandwidthSwitch = 0;
-
- /* Silk encoder */
- if( psEnc->state_Fxx[ 0 ].sCmn.inputBufIx >= psEnc->state_Fxx[ 0 ].sCmn.frame_length ) {
- /* Enough data in input buffer, so encode */
- silk_assert( psEnc->state_Fxx[ 0 ].sCmn.inputBufIx == psEnc->state_Fxx[ 0 ].sCmn.frame_length );
- silk_assert( encControl->nChannelsInternal == 1 || psEnc->state_Fxx[ 1 ].sCmn.inputBufIx == psEnc->state_Fxx[ 1 ].sCmn.frame_length );
-
- /* Deal with LBRR data */
- if( psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded == 0 && !prefillFlag ) {
- /* Create space at start of payload for VAD and FEC flags */
- opus_uint8 iCDF[ 2 ] = { 0, 0 };
- iCDF[ 0 ] = 256 - silk_RSHIFT( 256, ( psEnc->state_Fxx[ 0 ].sCmn.nFramesPerPacket + 1 ) * encControl->nChannelsInternal );
- ec_enc_icdf( psRangeEnc, 0, iCDF, 8 );
-
- /* Encode any LBRR data from previous packet */
- /* Encode LBRR flags */
- for( n = 0; n < encControl->nChannelsInternal; n++ ) {
- LBRR_symbol = 0;
- for( i = 0; i < psEnc->state_Fxx[ n ].sCmn.nFramesPerPacket; i++ ) {
- LBRR_symbol |= silk_LSHIFT( psEnc->state_Fxx[ n ].sCmn.LBRR_flags[ i ], i );
- }
- psEnc->state_Fxx[ n ].sCmn.LBRR_flag = LBRR_symbol > 0 ? 1 : 0;
- if( LBRR_symbol && psEnc->state_Fxx[ n ].sCmn.nFramesPerPacket > 1 ) {
- ec_enc_icdf( psRangeEnc, LBRR_symbol - 1, silk_LBRR_flags_iCDF_ptr[ psEnc->state_Fxx[ n ].sCmn.nFramesPerPacket - 2 ], 8 );
- }
- }
-
- /* Code LBRR indices and excitation signals */
- for( i = 0; i < psEnc->state_Fxx[ 0 ].sCmn.nFramesPerPacket; i++ ) {
- for( n = 0; n < encControl->nChannelsInternal; n++ ) {
- if( psEnc->state_Fxx[ n ].sCmn.LBRR_flags[ i ] ) {
- opus_int condCoding;
-
- if( encControl->nChannelsInternal == 2 && n == 0 ) {
- silk_stereo_encode_pred( psRangeEnc, psEnc->sStereo.predIx[ i ] );
- /* For LBRR data there's no need to code the mid-only flag if the side-channel LBRR flag is set */
- if( psEnc->state_Fxx[ 1 ].sCmn.LBRR_flags[ i ] == 0 ) {
- silk_stereo_encode_mid_only( psRangeEnc, psEnc->sStereo.mid_only_flags[ i ] );
- }
- }
- /* Use conditional coding if previous frame available */
- if( i > 0 && psEnc->state_Fxx[ n ].sCmn.LBRR_flags[ i - 1 ] ) {
- condCoding = CODE_CONDITIONALLY;
- } else {
- condCoding = CODE_INDEPENDENTLY;
- }
- silk_encode_indices( &psEnc->state_Fxx[ n ].sCmn, psRangeEnc, i, 1, condCoding );
- silk_encode_pulses( psRangeEnc, psEnc->state_Fxx[ n ].sCmn.indices_LBRR[i].signalType, psEnc->state_Fxx[ n ].sCmn.indices_LBRR[i].quantOffsetType,
- psEnc->state_Fxx[ n ].sCmn.pulses_LBRR[ i ], psEnc->state_Fxx[ n ].sCmn.frame_length );
- }
- }
- }
-
- /* Reset LBRR flags */
- for( n = 0; n < encControl->nChannelsInternal; n++ ) {
- silk_memset( psEnc->state_Fxx[ n ].sCmn.LBRR_flags, 0, sizeof( psEnc->state_Fxx[ n ].sCmn.LBRR_flags ) );
- }
-
- psEnc->nBitsUsedLBRR = ec_tell( psRangeEnc );
- }
-
- silk_HP_variable_cutoff( psEnc->state_Fxx );
-
- /* Total target bits for packet */
- nBits = silk_DIV32_16( silk_MUL( encControl->bitRate, encControl->payloadSize_ms ), 1000 );
- /* Subtract bits used for LBRR */
- if( !prefillFlag ) {
- nBits -= psEnc->nBitsUsedLBRR;
- }
- /* Divide by number of uncoded frames left in packet */
- nBits = silk_DIV32_16( nBits, psEnc->state_Fxx[ 0 ].sCmn.nFramesPerPacket );
- /* Convert to bits/second */
- if( encControl->payloadSize_ms == 10 ) {
- TargetRate_bps = silk_SMULBB( nBits, 100 );
- } else {
- TargetRate_bps = silk_SMULBB( nBits, 50 );
- }
- /* Subtract fraction of bits in excess of target in previous frames and packets */
- TargetRate_bps -= silk_DIV32_16( silk_MUL( psEnc->nBitsExceeded, 1000 ), BITRESERVOIR_DECAY_TIME_MS );
- if( !prefillFlag && psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded > 0 ) {
- /* Compare actual vs target bits so far in this packet */
- opus_int32 bitsBalance = ec_tell( psRangeEnc ) - psEnc->nBitsUsedLBRR - nBits * psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded;
- TargetRate_bps -= silk_DIV32_16( silk_MUL( bitsBalance, 1000 ), BITRESERVOIR_DECAY_TIME_MS );
- }
- /* Never exceed input bitrate */
- TargetRate_bps = silk_LIMIT( TargetRate_bps, encControl->bitRate, 5000 );
-
- /* Convert Left/Right to Mid/Side */
- if( encControl->nChannelsInternal == 2 ) {
- silk_stereo_LR_to_MS( &psEnc->sStereo, &psEnc->state_Fxx[ 0 ].sCmn.inputBuf[ 2 ], &psEnc->state_Fxx[ 1 ].sCmn.inputBuf[ 2 ],
- psEnc->sStereo.predIx[ psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded ], &psEnc->sStereo.mid_only_flags[ psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded ],
- MStargetRates_bps, TargetRate_bps, psEnc->state_Fxx[ 0 ].sCmn.speech_activity_Q8, encControl->toMono,
- psEnc->state_Fxx[ 0 ].sCmn.fs_kHz, psEnc->state_Fxx[ 0 ].sCmn.frame_length );
- if( psEnc->sStereo.mid_only_flags[ psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded ] == 0 ) {
- /* Reset side channel encoder memory for first frame with side coding */
- if( psEnc->prev_decode_only_middle == 1 ) {
- silk_memset( &psEnc->state_Fxx[ 1 ].sShape, 0, sizeof( psEnc->state_Fxx[ 1 ].sShape ) );
- silk_memset( &psEnc->state_Fxx[ 1 ].sPrefilt, 0, sizeof( psEnc->state_Fxx[ 1 ].sPrefilt ) );
- silk_memset( &psEnc->state_Fxx[ 1 ].sCmn.sNSQ, 0, sizeof( psEnc->state_Fxx[ 1 ].sCmn.sNSQ ) );
- silk_memset( psEnc->state_Fxx[ 1 ].sCmn.prev_NLSFq_Q15, 0, sizeof( psEnc->state_Fxx[ 1 ].sCmn.prev_NLSFq_Q15 ) );
- silk_memset( &psEnc->state_Fxx[ 1 ].sCmn.sLP.In_LP_State, 0, sizeof( psEnc->state_Fxx[ 1 ].sCmn.sLP.In_LP_State ) );
- psEnc->state_Fxx[ 1 ].sCmn.prevLag = 100;
- psEnc->state_Fxx[ 1 ].sCmn.sNSQ.lagPrev = 100;
- psEnc->state_Fxx[ 1 ].sShape.LastGainIndex = 10;
- psEnc->state_Fxx[ 1 ].sCmn.prevSignalType = TYPE_NO_VOICE_ACTIVITY;
- psEnc->state_Fxx[ 1 ].sCmn.sNSQ.prev_gain_Q16 = 65536;
- psEnc->state_Fxx[ 1 ].sCmn.first_frame_after_reset = 1;
- }
- silk_encode_do_VAD_Fxx( &psEnc->state_Fxx[ 1 ] );
- } else {
- psEnc->state_Fxx[ 1 ].sCmn.VAD_flags[ psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded ] = 0;
- }
- if( !prefillFlag ) {
- silk_stereo_encode_pred( psRangeEnc, psEnc->sStereo.predIx[ psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded ] );
- if( psEnc->state_Fxx[ 1 ].sCmn.VAD_flags[ psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded ] == 0 ) {
- silk_stereo_encode_mid_only( psRangeEnc, psEnc->sStereo.mid_only_flags[ psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded ] );
- }
- }
- } else {
- /* Buffering */
- silk_memcpy( psEnc->state_Fxx[ 0 ].sCmn.inputBuf, psEnc->sStereo.sMid, 2 * sizeof( opus_int16 ) );
- silk_memcpy( psEnc->sStereo.sMid, &psEnc->state_Fxx[ 0 ].sCmn.inputBuf[ psEnc->state_Fxx[ 0 ].sCmn.frame_length ], 2 * sizeof( opus_int16 ) );
- }
- silk_encode_do_VAD_Fxx( &psEnc->state_Fxx[ 0 ] );
-
- /* Encode */
- for( n = 0; n < encControl->nChannelsInternal; n++ ) {
- opus_int maxBits, useCBR;
-
- /* Handling rate constraints */
- maxBits = encControl->maxBits;
- if( tot_blocks == 2 && curr_block == 0 ) {
- maxBits = maxBits * 3 / 5;
- } else if( tot_blocks == 3 ) {
- if( curr_block == 0 ) {
- maxBits = maxBits * 2 / 5;
- } else if( curr_block == 1 ) {
- maxBits = maxBits * 3 / 4;
- }
- }
- useCBR = encControl->useCBR && curr_block == tot_blocks - 1;
-
- if( encControl->nChannelsInternal == 1 ) {
- channelRate_bps = TargetRate_bps;
- } else {
- channelRate_bps = MStargetRates_bps[ n ];
- if( n == 0 && MStargetRates_bps[ 1 ] > 0 ) {
- useCBR = 0;
- /* Give mid up to 1/2 of the max bits for that frame */
- maxBits -= encControl->maxBits / ( tot_blocks * 2 );
- }
- }
-
- if( channelRate_bps > 0 ) {
- opus_int condCoding;
-
- silk_control_SNR( &psEnc->state_Fxx[ n ].sCmn, channelRate_bps );
-
- /* Use independent coding if no previous frame available */
- if( psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded - n <= 0 ) {
- condCoding = CODE_INDEPENDENTLY;
- } else if( n > 0 && psEnc->prev_decode_only_middle ) {
- /* If we skipped a side frame in this packet, we don't
- need LTP scaling; the LTP state is well-defined. */
- condCoding = CODE_INDEPENDENTLY_NO_LTP_SCALING;
- } else {
- condCoding = CODE_CONDITIONALLY;
- }
- if( ( ret = silk_encode_frame_Fxx( &psEnc->state_Fxx[ n ], nBytesOut, psRangeEnc, condCoding, maxBits, useCBR ) ) != 0 ) {
- silk_assert( 0 );
- }
- }
- psEnc->state_Fxx[ n ].sCmn.controlled_since_last_payload = 0;
- psEnc->state_Fxx[ n ].sCmn.inputBufIx = 0;
- psEnc->state_Fxx[ n ].sCmn.nFramesEncoded++;
- }
- psEnc->prev_decode_only_middle = psEnc->sStereo.mid_only_flags[ psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded - 1 ];
-
- /* Insert VAD and FEC flags at beginning of bitstream */
- if( *nBytesOut > 0 && psEnc->state_Fxx[ 0 ].sCmn.nFramesEncoded == psEnc->state_Fxx[ 0 ].sCmn.nFramesPerPacket) {
- flags = 0;
- for( n = 0; n < encControl->nChannelsInternal; n++ ) {
- for( i = 0; i < psEnc->state_Fxx[ n ].sCmn.nFramesPerPacket; i++ ) {
- flags = silk_LSHIFT( flags, 1 );
- flags |= psEnc->state_Fxx[ n ].sCmn.VAD_flags[ i ];
- }
- flags = silk_LSHIFT( flags, 1 );
- flags |= psEnc->state_Fxx[ n ].sCmn.LBRR_flag;
- }
- if( !prefillFlag ) {
- ec_enc_patch_initial_bits( psRangeEnc, flags, ( psEnc->state_Fxx[ 0 ].sCmn.nFramesPerPacket + 1 ) * encControl->nChannelsInternal );
- }
-
- /* Return zero bytes if all channels DTXed */
- if( psEnc->state_Fxx[ 0 ].sCmn.inDTX && ( encControl->nChannelsInternal == 1 || psEnc->state_Fxx[ 1 ].sCmn.inDTX ) ) {
- *nBytesOut = 0;
- }
-
- psEnc->nBitsExceeded += *nBytesOut * 8;
- psEnc->nBitsExceeded -= silk_DIV32_16( silk_MUL( encControl->bitRate, encControl->payloadSize_ms ), 1000 );
- psEnc->nBitsExceeded = silk_LIMIT( psEnc->nBitsExceeded, 0, 10000 );
-
- /* Update flag indicating if bandwidth switching is allowed */
- speech_act_thr_for_switch_Q8 = silk_SMLAWB( SILK_FIX_CONST( SPEECH_ACTIVITY_DTX_THRES, 8 ),
- SILK_FIX_CONST( ( 1 - SPEECH_ACTIVITY_DTX_THRES ) / MAX_BANDWIDTH_SWITCH_DELAY_MS, 16 + 8 ), psEnc->timeSinceSwitchAllowed_ms );
- if( psEnc->state_Fxx[ 0 ].sCmn.speech_activity_Q8 < speech_act_thr_for_switch_Q8 ) {
- psEnc->allowBandwidthSwitch = 1;
- psEnc->timeSinceSwitchAllowed_ms = 0;
- } else {
- psEnc->allowBandwidthSwitch = 0;
- psEnc->timeSinceSwitchAllowed_ms += encControl->payloadSize_ms;
- }
- }
-
- if( nSamplesIn == 0 ) {
- break;
- }
- } else {
- break;
- }
- curr_block++;
- }
-
- psEnc->nPrevChannelsInternal = encControl->nChannelsInternal;
-
- encControl->allowBandwidthSwitch = psEnc->allowBandwidthSwitch;
- encControl->inWBmodeWithoutVariableLP = psEnc->state_Fxx[ 0 ].sCmn.fs_kHz == 16 && psEnc->state_Fxx[ 0 ].sCmn.sLP.mode == 0;
- encControl->internalSampleRate = silk_SMULBB( psEnc->state_Fxx[ 0 ].sCmn.fs_kHz, 1000 );
- encControl->stereoWidth_Q14 = encControl->toMono ? 0 : psEnc->sStereo.smth_width_Q14;
- if( prefillFlag ) {
- encControl->payloadSize_ms = tmp_payloadSize_ms;
- encControl->complexity = tmp_complexity;
- for( n = 0; n < encControl->nChannelsInternal; n++ ) {
- psEnc->state_Fxx[ n ].sCmn.controlled_since_last_payload = 0;
- psEnc->state_Fxx[ n ].sCmn.prefillFlag = 0;
- }
- }
-
- RESTORE_STACK;
- return ret;
-}
-
diff --git a/drivers/opus/silk/encode_indices.c b/drivers/opus/silk/encode_indices.c
deleted file mode 100644
index 72fc6a80e8..0000000000
--- a/drivers/opus/silk/encode_indices.c
+++ /dev/null
@@ -1,178 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Encode side-information parameters to payload */
-void silk_encode_indices(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- ec_enc *psRangeEnc, /* I/O Compressor data structure */
- opus_int FrameIndex, /* I Frame number */
- opus_int encode_LBRR, /* I Flag indicating LBRR data is being encoded */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- opus_int i, k, typeOffset;
- opus_int encode_absolute_lagIndex, delta_lagIndex;
- opus_int16 ec_ix[ MAX_LPC_ORDER ];
- opus_uint8 pred_Q8[ MAX_LPC_ORDER ];
- const SideInfoIndices *psIndices;
-
- if( encode_LBRR ) {
- psIndices = &psEncC->indices_LBRR[ FrameIndex ];
- } else {
- psIndices = &psEncC->indices;
- }
-
- /*******************************************/
- /* Encode signal type and quantizer offset */
- /*******************************************/
- typeOffset = 2 * psIndices->signalType + psIndices->quantOffsetType;
- silk_assert( typeOffset >= 0 && typeOffset < 6 );
- silk_assert( encode_LBRR == 0 || typeOffset >= 2 );
- if( encode_LBRR || typeOffset >= 2 ) {
- ec_enc_icdf( psRangeEnc, typeOffset - 2, silk_type_offset_VAD_iCDF, 8 );
- } else {
- ec_enc_icdf( psRangeEnc, typeOffset, silk_type_offset_no_VAD_iCDF, 8 );
- }
-
- /****************/
- /* Encode gains */
- /****************/
- /* first subframe */
- if( condCoding == CODE_CONDITIONALLY ) {
- /* conditional coding */
- silk_assert( psIndices->GainsIndices[ 0 ] >= 0 && psIndices->GainsIndices[ 0 ] < MAX_DELTA_GAIN_QUANT - MIN_DELTA_GAIN_QUANT + 1 );
- ec_enc_icdf( psRangeEnc, psIndices->GainsIndices[ 0 ], silk_delta_gain_iCDF, 8 );
- } else {
- /* independent coding, in two stages: MSB bits followed by 3 LSBs */
- silk_assert( psIndices->GainsIndices[ 0 ] >= 0 && psIndices->GainsIndices[ 0 ] < N_LEVELS_QGAIN );
- ec_enc_icdf( psRangeEnc, silk_RSHIFT( psIndices->GainsIndices[ 0 ], 3 ), silk_gain_iCDF[ psIndices->signalType ], 8 );
- ec_enc_icdf( psRangeEnc, psIndices->GainsIndices[ 0 ] & 7, silk_uniform8_iCDF, 8 );
- }
-
- /* remaining subframes */
- for( i = 1; i < psEncC->nb_subfr; i++ ) {
- silk_assert( psIndices->GainsIndices[ i ] >= 0 && psIndices->GainsIndices[ i ] < MAX_DELTA_GAIN_QUANT - MIN_DELTA_GAIN_QUANT + 1 );
- ec_enc_icdf( psRangeEnc, psIndices->GainsIndices[ i ], silk_delta_gain_iCDF, 8 );
- }
-
- /****************/
- /* Encode NLSFs */
- /****************/
- ec_enc_icdf( psRangeEnc, psIndices->NLSFIndices[ 0 ], &psEncC->psNLSF_CB->CB1_iCDF[ ( psIndices->signalType >> 1 ) * psEncC->psNLSF_CB->nVectors ], 8 );
- silk_NLSF_unpack( ec_ix, pred_Q8, psEncC->psNLSF_CB, psIndices->NLSFIndices[ 0 ] );
- silk_assert( psEncC->psNLSF_CB->order == psEncC->predictLPCOrder );
- for( i = 0; i < psEncC->psNLSF_CB->order; i++ ) {
- if( psIndices->NLSFIndices[ i+1 ] >= NLSF_QUANT_MAX_AMPLITUDE ) {
- ec_enc_icdf( psRangeEnc, 2 * NLSF_QUANT_MAX_AMPLITUDE, &psEncC->psNLSF_CB->ec_iCDF[ ec_ix[ i ] ], 8 );
- ec_enc_icdf( psRangeEnc, psIndices->NLSFIndices[ i+1 ] - NLSF_QUANT_MAX_AMPLITUDE, silk_NLSF_EXT_iCDF, 8 );
- } else if( psIndices->NLSFIndices[ i+1 ] <= -NLSF_QUANT_MAX_AMPLITUDE ) {
- ec_enc_icdf( psRangeEnc, 0, &psEncC->psNLSF_CB->ec_iCDF[ ec_ix[ i ] ], 8 );
- ec_enc_icdf( psRangeEnc, -psIndices->NLSFIndices[ i+1 ] - NLSF_QUANT_MAX_AMPLITUDE, silk_NLSF_EXT_iCDF, 8 );
- } else {
- ec_enc_icdf( psRangeEnc, psIndices->NLSFIndices[ i+1 ] + NLSF_QUANT_MAX_AMPLITUDE, &psEncC->psNLSF_CB->ec_iCDF[ ec_ix[ i ] ], 8 );
- }
- }
-
- /* Encode NLSF interpolation factor */
- if( psEncC->nb_subfr == MAX_NB_SUBFR ) {
- silk_assert( psIndices->NLSFInterpCoef_Q2 >= 0 && psIndices->NLSFInterpCoef_Q2 < 5 );
- ec_enc_icdf( psRangeEnc, psIndices->NLSFInterpCoef_Q2, silk_NLSF_interpolation_factor_iCDF, 8 );
- }
-
- if( psIndices->signalType == TYPE_VOICED )
- {
- /*********************/
- /* Encode pitch lags */
- /*********************/
- /* lag index */
- encode_absolute_lagIndex = 1;
- if( condCoding == CODE_CONDITIONALLY && psEncC->ec_prevSignalType == TYPE_VOICED ) {
- /* Delta Encoding */
- delta_lagIndex = psIndices->lagIndex - psEncC->ec_prevLagIndex;
- if( delta_lagIndex < -8 || delta_lagIndex > 11 ) {
- delta_lagIndex = 0;
- } else {
- delta_lagIndex = delta_lagIndex + 9;
- encode_absolute_lagIndex = 0; /* Only use delta */
- }
- silk_assert( delta_lagIndex >= 0 && delta_lagIndex < 21 );
- ec_enc_icdf( psRangeEnc, delta_lagIndex, silk_pitch_delta_iCDF, 8 );
- }
- if( encode_absolute_lagIndex ) {
- /* Absolute encoding */
- opus_int32 pitch_high_bits, pitch_low_bits;
- pitch_high_bits = silk_DIV32_16( psIndices->lagIndex, silk_RSHIFT( psEncC->fs_kHz, 1 ) );
- pitch_low_bits = psIndices->lagIndex - silk_SMULBB( pitch_high_bits, silk_RSHIFT( psEncC->fs_kHz, 1 ) );
- silk_assert( pitch_low_bits < psEncC->fs_kHz / 2 );
- silk_assert( pitch_high_bits < 32 );
- ec_enc_icdf( psRangeEnc, pitch_high_bits, silk_pitch_lag_iCDF, 8 );
- ec_enc_icdf( psRangeEnc, pitch_low_bits, psEncC->pitch_lag_low_bits_iCDF, 8 );
- }
- psEncC->ec_prevLagIndex = psIndices->lagIndex;
-
- /* Countour index */
- silk_assert( psIndices->contourIndex >= 0 );
- silk_assert( ( psIndices->contourIndex < 34 && psEncC->fs_kHz > 8 && psEncC->nb_subfr == 4 ) ||
- ( psIndices->contourIndex < 11 && psEncC->fs_kHz == 8 && psEncC->nb_subfr == 4 ) ||
- ( psIndices->contourIndex < 12 && psEncC->fs_kHz > 8 && psEncC->nb_subfr == 2 ) ||
- ( psIndices->contourIndex < 3 && psEncC->fs_kHz == 8 && psEncC->nb_subfr == 2 ) );
- ec_enc_icdf( psRangeEnc, psIndices->contourIndex, psEncC->pitch_contour_iCDF, 8 );
-
- /********************/
- /* Encode LTP gains */
- /********************/
- /* PERIndex value */
- silk_assert( psIndices->PERIndex >= 0 && psIndices->PERIndex < 3 );
- ec_enc_icdf( psRangeEnc, psIndices->PERIndex, silk_LTP_per_index_iCDF, 8 );
-
- /* Codebook Indices */
- for( k = 0; k < psEncC->nb_subfr; k++ ) {
- silk_assert( psIndices->LTPIndex[ k ] >= 0 && psIndices->LTPIndex[ k ] < ( 8 << psIndices->PERIndex ) );
- ec_enc_icdf( psRangeEnc, psIndices->LTPIndex[ k ], silk_LTP_gain_iCDF_ptrs[ psIndices->PERIndex ], 8 );
- }
-
- /**********************/
- /* Encode LTP scaling */
- /**********************/
- if( condCoding == CODE_INDEPENDENTLY ) {
- silk_assert( psIndices->LTP_scaleIndex >= 0 && psIndices->LTP_scaleIndex < 3 );
- ec_enc_icdf( psRangeEnc, psIndices->LTP_scaleIndex, silk_LTPscale_iCDF, 8 );
- }
- silk_assert( !condCoding || psIndices->LTP_scaleIndex == 0 );
- }
-
- psEncC->ec_prevSignalType = psIndices->signalType;
-
- /***************/
- /* Encode seed */
- /***************/
- silk_assert( psIndices->Seed >= 0 && psIndices->Seed < 4 );
- ec_enc_icdf( psRangeEnc, psIndices->Seed, silk_uniform4_iCDF, 8 );
-}
diff --git a/drivers/opus/silk/encode_pulses.c b/drivers/opus/silk/encode_pulses.c
deleted file mode 100644
index 238eec1e42..0000000000
--- a/drivers/opus/silk/encode_pulses.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-
-/*********************************************/
-/* Encode quantization indices of excitation */
-/*********************************************/
-
-static OPUS_INLINE opus_int combine_and_check( /* return ok */
- opus_int *pulses_comb, /* O */
- const opus_int *pulses_in, /* I */
- opus_int max_pulses, /* I max value for sum of pulses */
- opus_int len /* I number of output values */
-)
-{
- opus_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 silk_encode_pulses(
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- const opus_int signalType, /* I Signal type */
- const opus_int quantOffsetType, /* I quantOffsetType */
- opus_int8 pulses[], /* I quantization indices */
- const opus_int frame_length /* I Frame length */
-)
-{
- opus_int i, k, j, iter, bit, nLS, scale_down, RateLevelIndex = 0;
- opus_int32 abs_q, minSumBits_Q5, sumBits_Q5;
- VARDECL( opus_int, abs_pulses );
- VARDECL( opus_int, sum_pulses );
- VARDECL( opus_int, nRshifts );
- opus_int pulses_comb[ 8 ];
- opus_int *abs_pulses_ptr;
- const opus_int8 *pulses_ptr;
- const opus_uint8 *cdf_ptr;
- const opus_uint8 *nBits_ptr;
- SAVE_STACK;
-
- silk_memset( pulses_comb, 0, 8 * sizeof( opus_int ) ); /* Fixing Valgrind reported problem*/
-
- /****************************/
- /* Prepare for shell coding */
- /****************************/
- /* Calculate number of shell blocks */
- silk_assert( 1 << LOG2_SHELL_CODEC_FRAME_LENGTH == SHELL_CODEC_FRAME_LENGTH );
- iter = silk_RSHIFT( frame_length, LOG2_SHELL_CODEC_FRAME_LENGTH );
- if( iter * SHELL_CODEC_FRAME_LENGTH < frame_length ) {
- silk_assert( frame_length == 12 * 10 ); /* Make sure only happens for 10 ms @ 12 kHz */
- iter++;
- silk_memset( &pulses[ frame_length ], 0, SHELL_CODEC_FRAME_LENGTH * sizeof(opus_int8));
- }
-
- /* Take the absolute value of the pulses */
- ALLOC( abs_pulses, iter * SHELL_CODEC_FRAME_LENGTH, opus_int );
- silk_assert( !( SHELL_CODEC_FRAME_LENGTH & 3 ) );
- for( i = 0; i < iter * SHELL_CODEC_FRAME_LENGTH; i+=4 ) {
- abs_pulses[i+0] = ( opus_int )silk_abs( pulses[ i + 0 ] );
- abs_pulses[i+1] = ( opus_int )silk_abs( pulses[ i + 1 ] );
- abs_pulses[i+2] = ( opus_int )silk_abs( pulses[ i + 2 ] );
- abs_pulses[i+3] = ( opus_int )silk_abs( pulses[ i + 3 ] );
- }
-
- /* Calc sum pulses per shell code frame */
- ALLOC( sum_pulses, iter, opus_int );
- ALLOC( nRshifts, iter, opus_int );
- 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, silk_max_pulses_table[ 0 ], 8 );
- /* 2+2 -> 4 */
- scale_down += combine_and_check( pulses_comb, pulses_comb, silk_max_pulses_table[ 1 ], 4 );
- /* 4+4 -> 8 */
- scale_down += combine_and_check( pulses_comb, pulses_comb, silk_max_pulses_table[ 2 ], 2 );
- /* 8+8 -> 16 */
- scale_down += combine_and_check( &sum_pulses[ i ], pulses_comb, silk_max_pulses_table[ 3 ], 1 );
-
- if( scale_down ) {
- /* We need to downscale the quantization signal */
- nRshifts[ i ]++;
- for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) {
- abs_pulses_ptr[ k ] = silk_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_Q5 = silk_int32_MAX;
- for( k = 0; k < N_RATE_LEVELS - 1; k++ ) {
- nBits_ptr = silk_pulses_per_block_BITS_Q5[ k ];
- sumBits_Q5 = silk_rate_levels_BITS_Q5[ signalType >> 1 ][ k ];
- for( i = 0; i < iter; i++ ) {
- if( nRshifts[ i ] > 0 ) {
- sumBits_Q5 += nBits_ptr[ SILK_MAX_PULSES + 1 ];
- } else {
- sumBits_Q5 += nBits_ptr[ sum_pulses[ i ] ];
- }
- }
- if( sumBits_Q5 < minSumBits_Q5 ) {
- minSumBits_Q5 = sumBits_Q5;
- RateLevelIndex = k;
- }
- }
- ec_enc_icdf( psRangeEnc, RateLevelIndex, silk_rate_levels_iCDF[ signalType >> 1 ], 8 );
-
- /***************************************************/
- /* Sum-Weighted-Pulses Encoding */
- /***************************************************/
- cdf_ptr = silk_pulses_per_block_iCDF[ RateLevelIndex ];
- for( i = 0; i < iter; i++ ) {
- if( nRshifts[ i ] == 0 ) {
- ec_enc_icdf( psRangeEnc, sum_pulses[ i ], cdf_ptr, 8 );
- } else {
- ec_enc_icdf( psRangeEnc, SILK_MAX_PULSES + 1, cdf_ptr, 8 );
- for( k = 0; k < nRshifts[ i ] - 1; k++ ) {
- ec_enc_icdf( psRangeEnc, SILK_MAX_PULSES + 1, silk_pulses_per_block_iCDF[ N_RATE_LEVELS - 1 ], 8 );
- }
- ec_enc_icdf( psRangeEnc, sum_pulses[ i ], silk_pulses_per_block_iCDF[ N_RATE_LEVELS - 1 ], 8 );
- }
- }
-
- /******************/
- /* Shell Encoding */
- /******************/
- for( i = 0; i < iter; i++ ) {
- if( sum_pulses[ i ] > 0 ) {
- silk_shell_encoder( psRangeEnc, &abs_pulses[ i * SHELL_CODEC_FRAME_LENGTH ] );
- }
- }
-
- /****************/
- /* LSB Encoding */
- /****************/
- for( i = 0; i < iter; i++ ) {
- if( nRshifts[ i ] > 0 ) {
- pulses_ptr = &pulses[ i * SHELL_CODEC_FRAME_LENGTH ];
- nLS = nRshifts[ i ] - 1;
- for( k = 0; k < SHELL_CODEC_FRAME_LENGTH; k++ ) {
- abs_q = (opus_int8)silk_abs( pulses_ptr[ k ] );
- for( j = nLS; j > 0; j-- ) {
- bit = silk_RSHIFT( abs_q, j ) & 1;
- ec_enc_icdf( psRangeEnc, bit, silk_lsb_iCDF, 8 );
- }
- bit = abs_q & 1;
- ec_enc_icdf( psRangeEnc, bit, silk_lsb_iCDF, 8 );
- }
- }
- }
-
- /****************/
- /* Encode signs */
- /****************/
- silk_encode_signs( psRangeEnc, pulses, frame_length, signalType, quantOffsetType, sum_pulses );
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/errors.h b/drivers/opus/silk/errors.h
deleted file mode 100644
index 45070800f2..0000000000
--- a/drivers/opus/silk/errors.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_ERRORS_H
-#define SILK_ERRORS_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/******************/
-/* Error messages */
-/******************/
-#define SILK_NO_ERROR 0
-
-/**************************/
-/* Encoder error messages */
-/**************************/
-
-/* Input length is not a multiple of 10 ms, or length is longer than the packet length */
-#define SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES -101
-
-/* Sampling frequency not 8000, 12000 or 16000 Hertz */
-#define SILK_ENC_FS_NOT_SUPPORTED -102
-
-/* Packet size not 10, 20, 40, or 60 ms */
-#define SILK_ENC_PACKET_SIZE_NOT_SUPPORTED -103
-
-/* Allocated payload buffer too short */
-#define SILK_ENC_PAYLOAD_BUF_TOO_SHORT -104
-
-/* Loss rate not between 0 and 100 percent */
-#define SILK_ENC_INVALID_LOSS_RATE -105
-
-/* Complexity setting not valid, use 0...10 */
-#define SILK_ENC_INVALID_COMPLEXITY_SETTING -106
-
-/* Inband FEC setting not valid, use 0 or 1 */
-#define SILK_ENC_INVALID_INBAND_FEC_SETTING -107
-
-/* DTX setting not valid, use 0 or 1 */
-#define SILK_ENC_INVALID_DTX_SETTING -108
-
-/* CBR setting not valid, use 0 or 1 */
-#define SILK_ENC_INVALID_CBR_SETTING -109
-
-/* Internal encoder error */
-#define SILK_ENC_INTERNAL_ERROR -110
-
-/* Internal encoder error */
-#define SILK_ENC_INVALID_NUMBER_OF_CHANNELS_ERROR -111
-
-/**************************/
-/* Decoder error messages */
-/**************************/
-
-/* Output sampling frequency lower than internal decoded sampling frequency */
-#define SILK_DEC_INVALID_SAMPLING_FREQUENCY -200
-
-/* Payload size exceeded the maximum allowed 1024 bytes */
-#define SILK_DEC_PAYLOAD_TOO_LARGE -201
-
-/* Payload has bit errors */
-#define SILK_DEC_PAYLOAD_ERROR -202
-
-/* Payload has bit errors */
-#define SILK_DEC_INVALID_FRAME_SIZE -203
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/drivers/opus/silk/fixed/LTP_analysis_filter_FIX.c b/drivers/opus/silk/fixed/LTP_analysis_filter_FIX.c
deleted file mode 100644
index 041e85f0b9..0000000000
--- a/drivers/opus/silk/fixed/LTP_analysis_filter_FIX.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-
-void silk_LTP_analysis_filter_FIX(
- opus_int16 *LTP_res, /* O LTP residual signal of length MAX_NB_SUBFR * ( pre_length + subfr_length ) */
- const opus_int16 *x, /* I Pointer to input signal with at least max( pitchL ) preceding samples */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],/* I LTP_ORDER LTP coefficients for each MAX_NB_SUBFR subframe */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lag, one for each subframe */
- const opus_int32 invGains_Q16[ MAX_NB_SUBFR ], /* I Inverse quantization gains, one for each subframe */
- const opus_int subfr_length, /* I Length of each subframe */
- const opus_int nb_subfr, /* I Number of subframes */
- const opus_int pre_length /* I Length of the preceding samples starting at &x[0] for each subframe */
-)
-{
- const opus_int16 *x_ptr, *x_lag_ptr;
- opus_int16 Btmp_Q14[ LTP_ORDER ];
- opus_int16 *LTP_res_ptr;
- opus_int k, i;
- opus_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 ];
-
- Btmp_Q14[ 0 ] = LTPCoef_Q14[ k * LTP_ORDER ];
- Btmp_Q14[ 1 ] = LTPCoef_Q14[ k * LTP_ORDER + 1 ];
- Btmp_Q14[ 2 ] = LTPCoef_Q14[ k * LTP_ORDER + 2 ];
- Btmp_Q14[ 3 ] = LTPCoef_Q14[ k * LTP_ORDER + 3 ];
- Btmp_Q14[ 4 ] = LTPCoef_Q14[ k * LTP_ORDER + 4 ];
-
- /* 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 = silk_SMULBB( x_lag_ptr[ LTP_ORDER / 2 ], Btmp_Q14[ 0 ] );
- LTP_est = silk_SMLABB_ovflw( LTP_est, x_lag_ptr[ 1 ], Btmp_Q14[ 1 ] );
- LTP_est = silk_SMLABB_ovflw( LTP_est, x_lag_ptr[ 0 ], Btmp_Q14[ 2 ] );
- LTP_est = silk_SMLABB_ovflw( LTP_est, x_lag_ptr[ -1 ], Btmp_Q14[ 3 ] );
- LTP_est = silk_SMLABB_ovflw( LTP_est, x_lag_ptr[ -2 ], Btmp_Q14[ 4 ] );
-
- LTP_est = silk_RSHIFT_ROUND( LTP_est, 14 ); /* round and -> Q0*/
-
- /* Subtract long-term prediction */
- LTP_res_ptr[ i ] = (opus_int16)silk_SAT16( (opus_int32)x_ptr[ i ] - LTP_est );
-
- /* Scale residual */
- LTP_res_ptr[ i ] = silk_SMULWB( invGains_Q16[ k ], LTP_res_ptr[ i ] );
-
- x_lag_ptr++;
- }
-
- /* Update pointers */
- LTP_res_ptr += subfr_length + pre_length;
- x_ptr += subfr_length;
- }
-}
-
diff --git a/drivers/opus/silk/fixed/LTP_scale_ctrl_FIX.c b/drivers/opus/silk/fixed/LTP_scale_ctrl_FIX.c
deleted file mode 100644
index dac1fbc08a..0000000000
--- a/drivers/opus/silk/fixed/LTP_scale_ctrl_FIX.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-
-/* Calculation of LTP state scaling */
-void silk_LTP_scale_ctrl_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O encoder state */
- silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- opus_int round_loss;
-
- if( condCoding == CODE_INDEPENDENTLY ) {
- /* Only scale if first frame in packet */
- round_loss = psEnc->sCmn.PacketLoss_perc + psEnc->sCmn.nFramesPerPacket;
- psEnc->sCmn.indices.LTP_scaleIndex = (opus_int8)silk_LIMIT(
- silk_SMULWB( silk_SMULBB( round_loss, psEncCtrl->LTPredCodGain_Q7 ), SILK_FIX_CONST( 0.1, 9 ) ), 0, 2 );
- } else {
- /* Default is minimum scaling */
- psEnc->sCmn.indices.LTP_scaleIndex = 0;
- }
- psEncCtrl->LTP_scale_Q14 = silk_LTPScales_table_Q14[ psEnc->sCmn.indices.LTP_scaleIndex ];
-}
diff --git a/drivers/opus/silk/fixed/apply_sine_window_FIX.c b/drivers/opus/silk/fixed/apply_sine_window_FIX.c
deleted file mode 100644
index 9d63e7bce2..0000000000
--- a/drivers/opus/silk/fixed/apply_sine_window_FIX.c
+++ /dev/null
@@ -1,98 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* Apply sine window to signal vector. */
-/* Window types: */
-/* 1 -> sine window from 0 to pi/2 */
-/* 2 -> sine window from pi/2 to pi */
-/* Every other sample is linearly interpolated, for speed. */
-/* Window length must be between 16 and 120 (incl) and a multiple of 4. */
-
-/* Matlab code for table:
- for k=16:9*4:16+2*9*4, fprintf(' %7.d,', -round(65536*pi ./ (k:4:k+8*4))); fprintf('\n'); end
-*/
-static const opus_int16 freq_table_Q16[ 27 ] = {
- 12111, 9804, 8235, 7100, 6239, 5565, 5022, 4575, 4202,
- 3885, 3612, 3375, 3167, 2984, 2820, 2674, 2542, 2422,
- 2313, 2214, 2123, 2038, 1961, 1889, 1822, 1760, 1702,
-};
-
-void silk_apply_sine_window(
- opus_int16 px_win[], /* O Pointer to windowed signal */
- const opus_int16 px[], /* I Pointer to input signal */
- const opus_int win_type, /* I Selects a window type */
- const opus_int length /* I Window length, multiple of 4 */
-)
-{
- opus_int k, f_Q16, c_Q16;
- opus_int32 S0_Q16, S1_Q16;
-
- silk_assert( win_type == 1 || win_type == 2 );
-
- /* Length must be in a range from 16 to 120 and a multiple of 4 */
- silk_assert( length >= 16 && length <= 120 );
- silk_assert( ( length & 3 ) == 0 );
-
- /* Frequency */
- k = ( length >> 2 ) - 4;
- silk_assert( k >= 0 && k <= 26 );
- f_Q16 = (opus_int)freq_table_Q16[ k ];
-
- /* Factor used for cosine approximation */
- c_Q16 = silk_SMULWB( (opus_int32)f_Q16, -f_Q16 );
- silk_assert( c_Q16 >= -32768 );
-
- /* initialize state */
- if( win_type == 1 ) {
- /* start from 0 */
- S0_Q16 = 0;
- /* approximation of sin(f) */
- S1_Q16 = f_Q16 + silk_RSHIFT( length, 3 );
- } else {
- /* start from 1 */
- S0_Q16 = ( (opus_int32)1 << 16 );
- /* approximation of cos(f) */
- S1_Q16 = ( (opus_int32)1 << 16 ) + silk_RSHIFT( c_Q16, 1 ) + silk_RSHIFT( length, 4 );
- }
-
- /* 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 ) {
- px_win[ k ] = (opus_int16)silk_SMULWB( silk_RSHIFT( S0_Q16 + S1_Q16, 1 ), px[ k ] );
- px_win[ k + 1 ] = (opus_int16)silk_SMULWB( S1_Q16, px[ k + 1] );
- S0_Q16 = silk_SMULWB( S1_Q16, c_Q16 ) + silk_LSHIFT( S1_Q16, 1 ) - S0_Q16 + 1;
- S0_Q16 = silk_min( S0_Q16, ( (opus_int32)1 << 16 ) );
-
- px_win[ k + 2 ] = (opus_int16)silk_SMULWB( silk_RSHIFT( S0_Q16 + S1_Q16, 1 ), px[ k + 2] );
- px_win[ k + 3 ] = (opus_int16)silk_SMULWB( S0_Q16, px[ k + 3 ] );
- S1_Q16 = silk_SMULWB( S0_Q16, c_Q16 ) + silk_LSHIFT( S0_Q16, 1 ) - S1_Q16;
- S1_Q16 = silk_min( S1_Q16, ( (opus_int32)1 << 16 ) );
- }
-}
diff --git a/drivers/opus/silk/fixed/autocorr_FIX.c b/drivers/opus/silk/fixed/autocorr_FIX.c
deleted file mode 100644
index db39a0335b..0000000000
--- a/drivers/opus/silk/fixed/autocorr_FIX.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/celt/celt_lpc.h"
-
-/* Compute autocorrelation */
-void silk_autocorr(
- opus_int32 *results, /* O Result (length correlationCount) */
- opus_int *scale, /* O Scaling of the correlation vector */
- const opus_int16 *inputData, /* I Input data to correlate */
- const opus_int inputDataSize, /* I Length of input */
- const opus_int correlationCount, /* I Number of correlation taps to compute */
- int arch /* I Run-time architecture */
-)
-{
- opus_int corrCount;
- corrCount = silk_min_int( inputDataSize, correlationCount );
- *scale = _celt_autocorr(inputData, results, NULL, 0, corrCount-1, inputDataSize, arch);
-}
diff --git a/drivers/opus/silk/fixed/burg_modified_FIX.c b/drivers/opus/silk/fixed/burg_modified_FIX.c
deleted file mode 100644
index 48d64eccc5..0000000000
--- a/drivers/opus/silk/fixed/burg_modified_FIX.c
+++ /dev/null
@@ -1,272 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/define.h"
-#include "opus/silk/tuning_parameters.h"
-#include "opus/celt/pitch.h"
-
-#define MAX_FRAME_SIZE 384 /* subfr_length * nb_subfr = ( 0.005 * 16000 + 16 ) * 4 = 384 */
-
-#define QA 25
-#define N_BITS_HEAD_ROOM 2
-#define MIN_RSHIFTS -16
-#define MAX_RSHIFTS (32 - QA)
-
-/* Compute reflection coefficients from input signal */
-void silk_burg_modified_c(
- opus_int32 *res_nrg, /* O Residual energy */
- opus_int *res_nrg_Q, /* O Residual energy Q value */
- opus_int32 A_Q16[], /* O Prediction coefficients (length order) */
- const opus_int16 x[], /* I Input signal, length: nb_subfr * ( D + subfr_length ) */
- const opus_int32 minInvGain_Q30, /* I Inverse of max prediction gain */
- const opus_int subfr_length, /* I Input signal subframe length (incl. D preceding samples) */
- const opus_int nb_subfr, /* I Number of subframes stacked in x */
- const opus_int D, /* I Order */
- int arch /* I Run-time architecture */
-)
-{
- opus_int k, n, s, lz, rshifts, reached_max_gain;
- opus_int32 C0, num, nrg, rc_Q31, invGain_Q30, Atmp_QA, Atmp1, tmp1, tmp2, x1, x2;
- const opus_int16 *x_ptr;
- opus_int32 C_first_row[ SILK_MAX_ORDER_LPC ];
- opus_int32 C_last_row[ SILK_MAX_ORDER_LPC ];
- opus_int32 Af_QA[ SILK_MAX_ORDER_LPC ];
- opus_int32 CAf[ SILK_MAX_ORDER_LPC + 1 ];
- opus_int32 CAb[ SILK_MAX_ORDER_LPC + 1 ];
- opus_int32 xcorr[ SILK_MAX_ORDER_LPC ];
- opus_int64 C0_64;
-
- silk_assert( subfr_length * nb_subfr <= MAX_FRAME_SIZE );
-
- /* Compute autocorrelations, added over subframes */
- C0_64 = silk_inner_prod16_aligned_64( x, x, subfr_length*nb_subfr, arch );
- lz = silk_CLZ64(C0_64);
- rshifts = 32 + 1 + N_BITS_HEAD_ROOM - lz;
- if (rshifts > MAX_RSHIFTS) rshifts = MAX_RSHIFTS;
- if (rshifts < MIN_RSHIFTS) rshifts = MIN_RSHIFTS;
-
- if (rshifts > 0) {
- C0 = (opus_int32)silk_RSHIFT64(C0_64, rshifts );
- } else {
- C0 = silk_LSHIFT32((opus_int32)C0_64, -rshifts );
- }
-
- CAb[ 0 ] = CAf[ 0 ] = C0 + silk_SMMUL( SILK_FIX_CONST( FIND_LPC_COND_FAC, 32 ), C0 ) + 1; /* Q(-rshifts) */
- silk_memset( C_first_row, 0, SILK_MAX_ORDER_LPC * sizeof( opus_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 ] += (opus_int32)silk_RSHIFT64(
- silk_inner_prod16_aligned_64( x_ptr, x_ptr + n, subfr_length - n, arch ), rshifts );
- }
- }
- } else {
- for( s = 0; s < nb_subfr; s++ ) {
- int i;
- opus_int32 d;
- x_ptr = x + s * subfr_length;
- celt_pitch_xcorr(x_ptr, x_ptr + 1, xcorr, subfr_length - D, D, arch );
- for( n = 1; n < D + 1; n++ ) {
- for ( i = n + subfr_length - D, d = 0; i < subfr_length; i++ )
- d = MAC16_16( d, x_ptr[ i ], x_ptr[ i - n ] );
- xcorr[ n - 1 ] += d;
- }
- for( n = 1; n < D + 1; n++ ) {
- C_first_row[ n - 1 ] += silk_LSHIFT32( xcorr[ n - 1 ], -rshifts );
- }
- }
- }
- silk_memcpy( C_last_row, C_first_row, SILK_MAX_ORDER_LPC * sizeof( opus_int32 ) );
-
- /* Initialize */
- CAb[ 0 ] = CAf[ 0 ] = C0 + silk_SMMUL( SILK_FIX_CONST( FIND_LPC_COND_FAC, 32 ), C0 ) + 1; /* Q(-rshifts) */
-
- invGain_Q30 = (opus_int32)1 << 30;
- reached_max_gain = 0;
- 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 = -silk_LSHIFT32( (opus_int32)x_ptr[ n ], 16 - rshifts ); /* Q(16-rshifts) */
- x2 = -silk_LSHIFT32( (opus_int32)x_ptr[ subfr_length - n - 1 ], 16 - rshifts ); /* Q(16-rshifts) */
- tmp1 = silk_LSHIFT32( (opus_int32)x_ptr[ n ], QA - 16 ); /* Q(QA-16) */
- tmp2 = silk_LSHIFT32( (opus_int32)x_ptr[ subfr_length - n - 1 ], QA - 16 ); /* Q(QA-16) */
- for( k = 0; k < n; k++ ) {
- C_first_row[ k ] = silk_SMLAWB( C_first_row[ k ], x1, x_ptr[ n - k - 1 ] ); /* Q( -rshifts ) */
- C_last_row[ k ] = silk_SMLAWB( C_last_row[ k ], x2, x_ptr[ subfr_length - n + k ] ); /* Q( -rshifts ) */
- Atmp_QA = Af_QA[ k ];
- tmp1 = silk_SMLAWB( tmp1, Atmp_QA, x_ptr[ n - k - 1 ] ); /* Q(QA-16) */
- tmp2 = silk_SMLAWB( tmp2, Atmp_QA, x_ptr[ subfr_length - n + k ] ); /* Q(QA-16) */
- }
- tmp1 = silk_LSHIFT32( -tmp1, 32 - QA - rshifts ); /* Q(16-rshifts) */
- tmp2 = silk_LSHIFT32( -tmp2, 32 - QA - rshifts ); /* Q(16-rshifts) */
- for( k = 0; k <= n; k++ ) {
- CAf[ k ] = silk_SMLAWB( CAf[ k ], tmp1, x_ptr[ n - k ] ); /* Q( -rshift ) */
- CAb[ k ] = silk_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 = -silk_LSHIFT32( (opus_int32)x_ptr[ n ], -rshifts ); /* Q( -rshifts ) */
- x2 = -silk_LSHIFT32( (opus_int32)x_ptr[ subfr_length - n - 1 ], -rshifts ); /* Q( -rshifts ) */
- tmp1 = silk_LSHIFT32( (opus_int32)x_ptr[ n ], 17 ); /* Q17 */
- tmp2 = silk_LSHIFT32( (opus_int32)x_ptr[ subfr_length - n - 1 ], 17 ); /* Q17 */
- for( k = 0; k < n; k++ ) {
- C_first_row[ k ] = silk_MLA( C_first_row[ k ], x1, x_ptr[ n - k - 1 ] ); /* Q( -rshifts ) */
- C_last_row[ k ] = silk_MLA( C_last_row[ k ], x2, x_ptr[ subfr_length - n + k ] ); /* Q( -rshifts ) */
- Atmp1 = silk_RSHIFT_ROUND( Af_QA[ k ], QA - 17 ); /* Q17 */
- tmp1 = silk_MLA( tmp1, x_ptr[ n - k - 1 ], Atmp1 ); /* Q17 */
- tmp2 = silk_MLA( tmp2, x_ptr[ subfr_length - n + k ], Atmp1 ); /* Q17 */
- }
- tmp1 = -tmp1; /* Q17 */
- tmp2 = -tmp2; /* Q17 */
- for( k = 0; k <= n; k++ ) {
- CAf[ k ] = silk_SMLAWW( CAf[ k ], tmp1,
- silk_LSHIFT32( (opus_int32)x_ptr[ n - k ], -rshifts - 1 ) ); /* Q( -rshift ) */
- CAb[ k ] = silk_SMLAWW( CAb[ k ], tmp2,
- silk_LSHIFT32( (opus_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 = silk_ADD32( CAb[ 0 ], CAf[ 0 ] ); /* Q( 1-rshifts ) */
- for( k = 0; k < n; k++ ) {
- Atmp_QA = Af_QA[ k ];
- lz = silk_CLZ32( silk_abs( Atmp_QA ) ) - 1;
- lz = silk_min( 32 - QA, lz );
- Atmp1 = silk_LSHIFT32( Atmp_QA, lz ); /* Q( QA + lz ) */
-
- tmp1 = silk_ADD_LSHIFT32( tmp1, silk_SMMUL( C_last_row[ n - k - 1 ], Atmp1 ), 32 - QA - lz ); /* Q( -rshifts ) */
- tmp2 = silk_ADD_LSHIFT32( tmp2, silk_SMMUL( C_first_row[ n - k - 1 ], Atmp1 ), 32 - QA - lz ); /* Q( -rshifts ) */
- num = silk_ADD_LSHIFT32( num, silk_SMMUL( CAb[ n - k ], Atmp1 ), 32 - QA - lz ); /* Q( -rshifts ) */
- nrg = silk_ADD_LSHIFT32( nrg, silk_SMMUL( silk_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 = silk_ADD32( num, tmp2 ); /* Q( -rshifts ) */
- num = silk_LSHIFT32( -num, 1 ); /* Q( 1-rshifts ) */
-
- /* Calculate the next order reflection (parcor) coefficient */
- if( silk_abs( num ) < nrg ) {
- rc_Q31 = silk_DIV32_varQ( num, nrg, 31 );
- } else {
- rc_Q31 = ( num > 0 ) ? silk_int32_MAX : silk_int32_MIN;
- }
-
- /* Update inverse prediction gain */
- tmp1 = ( (opus_int32)1 << 30 ) - silk_SMMUL( rc_Q31, rc_Q31 );
- tmp1 = silk_LSHIFT( silk_SMMUL( invGain_Q30, tmp1 ), 2 );
- if( tmp1 <= minInvGain_Q30 ) {
- /* Max prediction gain exceeded; set reflection coefficient such that max prediction gain is exactly hit */
- tmp2 = ( (opus_int32)1 << 30 ) - silk_DIV32_varQ( minInvGain_Q30, invGain_Q30, 30 ); /* Q30 */
- rc_Q31 = silk_SQRT_APPROX( tmp2 ); /* Q15 */
- /* Newton-Raphson iteration */
- rc_Q31 = silk_RSHIFT32( rc_Q31 + silk_DIV32( tmp2, rc_Q31 ), 1 ); /* Q15 */
- rc_Q31 = silk_LSHIFT32( rc_Q31, 16 ); /* Q31 */
- if( num < 0 ) {
- /* Ensure adjusted reflection coefficients has the original sign */
- rc_Q31 = -rc_Q31;
- }
- invGain_Q30 = minInvGain_Q30;
- reached_max_gain = 1;
- } else {
- invGain_Q30 = tmp1;
- }
-
- /* 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 ] = silk_ADD_LSHIFT32( tmp1, silk_SMMUL( tmp2, rc_Q31 ), 1 ); /* QA */
- Af_QA[ n - k - 1 ] = silk_ADD_LSHIFT32( tmp2, silk_SMMUL( tmp1, rc_Q31 ), 1 ); /* QA */
- }
- Af_QA[ n ] = silk_RSHIFT32( rc_Q31, 31 - QA ); /* QA */
-
- if( reached_max_gain ) {
- /* Reached max prediction gain; set remaining coefficients to zero and exit loop */
- for( k = n + 1; k < D; k++ ) {
- Af_QA[ k ] = 0;
- }
- break;
- }
-
- /* 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 ] = silk_ADD_LSHIFT32( tmp1, silk_SMMUL( tmp2, rc_Q31 ), 1 ); /* Q( -rshifts ) */
- CAb[ n - k + 1 ] = silk_ADD_LSHIFT32( tmp2, silk_SMMUL( tmp1, rc_Q31 ), 1 ); /* Q( -rshifts ) */
- }
- }
-
- if( reached_max_gain ) {
- for( k = 0; k < D; k++ ) {
- /* Scale coefficients */
- A_Q16[ k ] = -silk_RSHIFT_ROUND( Af_QA[ k ], QA - 16 );
- }
- /* Subtract energy of preceding samples from C0 */
- if( rshifts > 0 ) {
- for( s = 0; s < nb_subfr; s++ ) {
- x_ptr = x + s * subfr_length;
- C0 -= (opus_int32)silk_RSHIFT64( silk_inner_prod16_aligned_64( x_ptr, x_ptr, D, arch ), rshifts );
- }
- } else {
- for( s = 0; s < nb_subfr; s++ ) {
- x_ptr = x + s * subfr_length;
- C0 -= silk_LSHIFT32( silk_inner_prod_aligned( x_ptr, x_ptr, D, arch), -rshifts);
- }
- }
- /* Approximate residual energy */
- *res_nrg = silk_LSHIFT( silk_SMMUL( invGain_Q30, C0 ), 2 );
- *res_nrg_Q = -rshifts;
- } else {
- /* Return residual energy */
- nrg = CAf[ 0 ]; /* Q( -rshifts ) */
- tmp1 = (opus_int32)1 << 16; /* Q16 */
- for( k = 0; k < D; k++ ) {
- Atmp1 = silk_RSHIFT_ROUND( Af_QA[ k ], QA - 16 ); /* Q16 */
- nrg = silk_SMLAWW( nrg, CAf[ k + 1 ], Atmp1 ); /* Q( -rshifts ) */
- tmp1 = silk_SMLAWW( tmp1, Atmp1, Atmp1 ); /* Q16 */
- A_Q16[ k ] = -Atmp1;
- }
- *res_nrg = silk_SMLAWW( nrg, silk_SMMUL( SILK_FIX_CONST( FIND_LPC_COND_FAC, 32 ), C0 ), -tmp1 );/* Q( -rshifts ) */
- *res_nrg_Q = -rshifts;
- }
-}
diff --git a/drivers/opus/silk/fixed/corrMatrix_FIX.c b/drivers/opus/silk/fixed/corrMatrix_FIX.c
deleted file mode 100644
index ac5331fe57..0000000000
--- a/drivers/opus/silk/fixed/corrMatrix_FIX.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/**********************************************************************
- * Correlation Matrix Computations for LS estimate.
- **********************************************************************/
-
-#include "opus/silk/fixed/main_FIX.h"
-
-/* Calculates correlation vector X'*t */
-void silk_corrVector_FIX(
- const opus_int16 *x, /* I x vector [L + order - 1] used to form data matrix X */
- const opus_int16 *t, /* I Target vector [L] */
- const opus_int L, /* I Length of vectors */
- const opus_int order, /* I Max lag for correlation */
- opus_int32 *Xt, /* O Pointer to X'*t correlation vector [order] */
- const opus_int rshifts, /* I Right shifts of correlations */
- int arch /* I Run-time architecture */
-)
-{
- opus_int lag, i;
- const opus_int16 *ptr1, *ptr2;
- opus_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 += silk_RSHIFT32( silk_SMULBB( ptr1[ i ], ptr2[i] ), rshifts );
- }
- Xt[ lag ] = inner_prod; /* X[:,lag]'*t */
- ptr1--; /* Go to next column of X */
- }
- } else {
- silk_assert( rshifts == 0 );
- for( lag = 0; lag < order; lag++ ) {
- Xt[ lag ] = silk_inner_prod_aligned( ptr1, ptr2, L, arch ); /* X[:,lag]'*t */
- ptr1--; /* Go to next column of X */
- }
- }
-}
-
-/* Calculates correlation matrix X'*X */
-void silk_corrMatrix_FIX(
- const opus_int16 *x, /* I x vector [L + order - 1] used to form data matrix X */
- const opus_int L, /* I Length of vectors */
- const opus_int order, /* I Max lag for correlation */
- const opus_int head_room, /* I Desired headroom */
- opus_int32 *XX, /* O Pointer to X'*X correlation matrix [ order x order ] */
- opus_int *rshifts, /* I/O Right shifts of correlations */
- int arch /* I Run-time architecture */
-)
-{
- opus_int i, j, lag, rshifts_local, head_room_rshifts;
- opus_int32 energy;
- const opus_int16 *ptr1, *ptr2;
-
- /* Calculate energy to find shift used to fit in 32 bits */
- silk_sum_sqr_shift( &energy, &rshifts_local, x, L + order - 1 );
- /* Add shifts to get the desired head room */
- head_room_rshifts = silk_max( head_room - silk_CLZ32( energy ), 0 );
-
- energy = silk_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 -= silk_RSHIFT32( silk_SMULBB( x[ i ], x[ i ] ), rshifts_local );
- }
- if( rshifts_local < *rshifts ) {
- /* Adjust energy */
- energy = silk_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 = silk_SUB32( energy, silk_RSHIFT32( silk_SMULBB( ptr1[ L - j ], ptr1[ L - j ] ), rshifts_local ) );
- energy = silk_ADD32( energy, silk_RSHIFT32( silk_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 += silk_RSHIFT32( silk_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 = silk_SUB32( energy, silk_RSHIFT32( silk_SMULBB( ptr1[ L - j ], ptr2[ L - j ] ), rshifts_local ) );
- energy = silk_ADD32( energy, silk_RSHIFT32( silk_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 = silk_inner_prod_aligned( ptr1, ptr2, L, arch );
- 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 = silk_SUB32( energy, silk_SMULBB( ptr1[ L - j ], ptr2[ L - j ] ) );
- energy = silk_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;
-}
-
diff --git a/drivers/opus/silk/fixed/encode_frame_FIX.c b/drivers/opus/silk/fixed/encode_frame_FIX.c
deleted file mode 100644
index e4ead0afef..0000000000
--- a/drivers/opus/silk/fixed/encode_frame_FIX.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Low Bitrate Redundancy (LBRR) encoding. Reuse all parameters but encode with lower bitrate */
-static OPUS_INLINE void silk_LBRR_encode_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */
- silk_encoder_control_FIX *psEncCtrl, /* I/O Pointer to Silk FIX encoder control struct */
- const opus_int32 xfw_Q3[], /* I Input signal */
- opus_int condCoding /* I The type of conditional coding used so far for this frame */
-);
-
-void silk_encode_do_VAD_FIX(
- silk_encoder_state_FIX *psEnc /* I/O Pointer to Silk FIX encoder state */
-)
-{
- /****************************/
- /* Voice Activity Detection */
- /****************************/
- silk_VAD_GetSA_Q8( &psEnc->sCmn, psEnc->sCmn.inputBuf + 1, psEnc->sCmn.arch );
-
- /**************************************************/
- /* Convert speech activity into VAD and DTX flags */
- /**************************************************/
- if( psEnc->sCmn.speech_activity_Q8 < SILK_FIX_CONST( SPEECH_ACTIVITY_DTX_THRES, 8 ) ) {
- psEnc->sCmn.indices.signalType = TYPE_NO_VOICE_ACTIVITY;
- psEnc->sCmn.noSpeechCounter++;
- if( psEnc->sCmn.noSpeechCounter < NB_SPEECH_FRAMES_BEFORE_DTX ) {
- psEnc->sCmn.inDTX = 0;
- } else if( psEnc->sCmn.noSpeechCounter > MAX_CONSECUTIVE_DTX + NB_SPEECH_FRAMES_BEFORE_DTX ) {
- psEnc->sCmn.noSpeechCounter = NB_SPEECH_FRAMES_BEFORE_DTX;
- psEnc->sCmn.inDTX = 0;
- }
- psEnc->sCmn.VAD_flags[ psEnc->sCmn.nFramesEncoded ] = 0;
- } else {
- psEnc->sCmn.noSpeechCounter = 0;
- psEnc->sCmn.inDTX = 0;
- psEnc->sCmn.indices.signalType = TYPE_UNVOICED;
- psEnc->sCmn.VAD_flags[ psEnc->sCmn.nFramesEncoded ] = 1;
- }
-}
-
-/****************/
-/* Encode frame */
-/****************/
-opus_int silk_encode_frame_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */
- opus_int32 *pnBytesOut, /* O Pointer to number of payload bytes; */
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- opus_int condCoding, /* I The type of conditional coding to use */
- opus_int maxBits, /* I If > 0: maximum number of output bits */
- opus_int useCBR /* I Flag to force constant-bitrate operation */
-)
-{
- silk_encoder_control_FIX sEncCtrl;
- opus_int i, iter, maxIter, found_upper, found_lower, ret = 0;
- opus_int16 *x_frame;
- ec_enc sRangeEnc_copy, sRangeEnc_copy2;
- silk_nsq_state sNSQ_copy, sNSQ_copy2;
- opus_int32 seed_copy, nBits, nBits_lower, nBits_upper, gainMult_lower, gainMult_upper;
- opus_int32 gainsID, gainsID_lower, gainsID_upper;
- opus_int16 gainMult_Q8;
- opus_int16 ec_prevLagIndex_copy;
- opus_int ec_prevSignalType_copy;
- opus_int8 LastGainIndex_copy2;
- SAVE_STACK;
-
- /* This is totally unnecessary but many compilers (including gcc) are too dumb to realise it */
- LastGainIndex_copy2 = nBits_lower = nBits_upper = gainMult_lower = gainMult_upper = 0;
-
- psEnc->sCmn.indices.Seed = psEnc->sCmn.frameCounter++ & 3;
-
- /**************************************************************/
- /* Set up Input Pointers, and insert frame in input buffer */
- /*************************************************************/
- /* start of frame to encode */
- x_frame = psEnc->x_buf + psEnc->sCmn.ltp_mem_length;
-
- /***************************************/
- /* Ensure smooth bandwidth transitions */
- /***************************************/
- silk_LP_variable_cutoff( &psEnc->sCmn.sLP, psEnc->sCmn.inputBuf + 1, psEnc->sCmn.frame_length );
-
- /*******************************************/
- /* Copy new frame to front of input buffer */
- /*******************************************/
- silk_memcpy( x_frame + LA_SHAPE_MS * psEnc->sCmn.fs_kHz, psEnc->sCmn.inputBuf + 1, psEnc->sCmn.frame_length * sizeof( opus_int16 ) );
-
- if( !psEnc->sCmn.prefillFlag ) {
- VARDECL( opus_int32, xfw_Q3 );
- VARDECL( opus_int16, res_pitch );
- VARDECL( opus_uint8, ec_buf_copy );
- opus_int16 *res_pitch_frame;
-
- ALLOC( res_pitch,
- psEnc->sCmn.la_pitch + psEnc->sCmn.frame_length
- + psEnc->sCmn.ltp_mem_length, opus_int16 );
- /* start of pitch LPC residual frame */
- res_pitch_frame = res_pitch + psEnc->sCmn.ltp_mem_length;
-
- /*****************************************/
- /* Find pitch lags, initial LPC analysis */
- /*****************************************/
- silk_find_pitch_lags_FIX( psEnc, &sEncCtrl, res_pitch, x_frame, psEnc->sCmn.arch );
-
- /************************/
- /* Noise shape analysis */
- /************************/
- silk_noise_shape_analysis_FIX( psEnc, &sEncCtrl, res_pitch_frame, x_frame, psEnc->sCmn.arch );
-
- /***************************************************/
- /* Find linear prediction coefficients (LPC + LTP) */
- /***************************************************/
- silk_find_pred_coefs_FIX( psEnc, &sEncCtrl, res_pitch, x_frame, condCoding );
-
- /****************************************/
- /* Process gains */
- /****************************************/
- silk_process_gains_FIX( psEnc, &sEncCtrl, condCoding );
-
- /*****************************************/
- /* Prefiltering for noise shaper */
- /*****************************************/
- ALLOC( xfw_Q3, psEnc->sCmn.frame_length, opus_int32 );
- silk_prefilter_FIX( psEnc, &sEncCtrl, xfw_Q3, x_frame );
-
- /****************************************/
- /* Low Bitrate Redundant Encoding */
- /****************************************/
- silk_LBRR_encode_FIX( psEnc, &sEncCtrl, xfw_Q3, condCoding );
-
- /* Loop over quantizer and entropy coding to control bitrate */
- maxIter = 6;
- gainMult_Q8 = SILK_FIX_CONST( 1, 8 );
- found_lower = 0;
- found_upper = 0;
- gainsID = silk_gains_ID( psEnc->sCmn.indices.GainsIndices, psEnc->sCmn.nb_subfr );
- gainsID_lower = -1;
- gainsID_upper = -1;
- /* Copy part of the input state */
- silk_memcpy( &sRangeEnc_copy, psRangeEnc, sizeof( ec_enc ) );
- silk_memcpy( &sNSQ_copy, &psEnc->sCmn.sNSQ, sizeof( silk_nsq_state ) );
- seed_copy = psEnc->sCmn.indices.Seed;
- ec_prevLagIndex_copy = psEnc->sCmn.ec_prevLagIndex;
- ec_prevSignalType_copy = psEnc->sCmn.ec_prevSignalType;
- ALLOC( ec_buf_copy, 1275, opus_uint8 );
- for( iter = 0; ; iter++ ) {
- if( gainsID == gainsID_lower ) {
- nBits = nBits_lower;
- } else if( gainsID == gainsID_upper ) {
- nBits = nBits_upper;
- } else {
- /* Restore part of the input state */
- if( iter > 0 ) {
- silk_memcpy( psRangeEnc, &sRangeEnc_copy, sizeof( ec_enc ) );
- silk_memcpy( &psEnc->sCmn.sNSQ, &sNSQ_copy, sizeof( silk_nsq_state ) );
- psEnc->sCmn.indices.Seed = seed_copy;
- psEnc->sCmn.ec_prevLagIndex = ec_prevLagIndex_copy;
- psEnc->sCmn.ec_prevSignalType = ec_prevSignalType_copy;
- }
-
- /*****************************************/
- /* Noise shaping quantization */
- /*****************************************/
- if( psEnc->sCmn.nStatesDelayedDecision > 1 || psEnc->sCmn.warping_Q16 > 0 ) {
- silk_NSQ_del_dec( &psEnc->sCmn, &psEnc->sCmn.sNSQ, &psEnc->sCmn.indices, xfw_Q3, psEnc->sCmn.pulses,
- sEncCtrl.PredCoef_Q12[ 0 ], sEncCtrl.LTPCoef_Q14, sEncCtrl.AR2_Q13, sEncCtrl.HarmShapeGain_Q14,
- sEncCtrl.Tilt_Q14, sEncCtrl.LF_shp_Q14, sEncCtrl.Gains_Q16, sEncCtrl.pitchL, sEncCtrl.Lambda_Q10, sEncCtrl.LTP_scale_Q14,
- psEnc->sCmn.arch );
- } else {
- silk_NSQ( &psEnc->sCmn, &psEnc->sCmn.sNSQ, &psEnc->sCmn.indices, xfw_Q3, psEnc->sCmn.pulses,
- sEncCtrl.PredCoef_Q12[ 0 ], sEncCtrl.LTPCoef_Q14, sEncCtrl.AR2_Q13, sEncCtrl.HarmShapeGain_Q14,
- sEncCtrl.Tilt_Q14, sEncCtrl.LF_shp_Q14, sEncCtrl.Gains_Q16, sEncCtrl.pitchL, sEncCtrl.Lambda_Q10, sEncCtrl.LTP_scale_Q14,
- psEnc->sCmn.arch);
- }
-
- /****************************************/
- /* Encode Parameters */
- /****************************************/
- silk_encode_indices( &psEnc->sCmn, psRangeEnc, psEnc->sCmn.nFramesEncoded, 0, condCoding );
-
- /****************************************/
- /* Encode Excitation Signal */
- /****************************************/
- silk_encode_pulses( psRangeEnc, psEnc->sCmn.indices.signalType, psEnc->sCmn.indices.quantOffsetType,
- psEnc->sCmn.pulses, psEnc->sCmn.frame_length );
-
- nBits = ec_tell( psRangeEnc );
-
- if( useCBR == 0 && iter == 0 && nBits <= maxBits ) {
- break;
- }
- }
-
- if( iter == maxIter ) {
- if( found_lower && ( gainsID == gainsID_lower || nBits > maxBits ) ) {
- /* Restore output state from earlier iteration that did meet the bitrate budget */
- silk_memcpy( psRangeEnc, &sRangeEnc_copy2, sizeof( ec_enc ) );
- silk_assert( sRangeEnc_copy2.offs <= 1275 );
- silk_memcpy( psRangeEnc->buf, ec_buf_copy, sRangeEnc_copy2.offs );
- silk_memcpy( &psEnc->sCmn.sNSQ, &sNSQ_copy2, sizeof( silk_nsq_state ) );
- psEnc->sShape.LastGainIndex = LastGainIndex_copy2;
- }
- break;
- }
-
- if( nBits > maxBits ) {
- if( found_lower == 0 && iter >= 2 ) {
- /* Adjust the quantizer's rate/distortion tradeoff and discard previous "upper" results */
- sEncCtrl.Lambda_Q10 = silk_ADD_RSHIFT32( sEncCtrl.Lambda_Q10, sEncCtrl.Lambda_Q10, 1 );
- found_upper = 0;
- gainsID_upper = -1;
- } else {
- found_upper = 1;
- nBits_upper = nBits;
- gainMult_upper = gainMult_Q8;
- gainsID_upper = gainsID;
- }
- } else if( nBits < maxBits - 5 ) {
- found_lower = 1;
- nBits_lower = nBits;
- gainMult_lower = gainMult_Q8;
- if( gainsID != gainsID_lower ) {
- gainsID_lower = gainsID;
- /* Copy part of the output state */
- silk_memcpy( &sRangeEnc_copy2, psRangeEnc, sizeof( ec_enc ) );
- silk_assert( psRangeEnc->offs <= 1275 );
- silk_memcpy( ec_buf_copy, psRangeEnc->buf, psRangeEnc->offs );
- silk_memcpy( &sNSQ_copy2, &psEnc->sCmn.sNSQ, sizeof( silk_nsq_state ) );
- LastGainIndex_copy2 = psEnc->sShape.LastGainIndex;
- }
- } else {
- /* Within 5 bits of budget: close enough */
- break;
- }
-
- if( ( found_lower & found_upper ) == 0 ) {
- /* Adjust gain according to high-rate rate/distortion curve */
- opus_int32 gain_factor_Q16;
- gain_factor_Q16 = silk_log2lin( silk_LSHIFT( nBits - maxBits, 7 ) / psEnc->sCmn.frame_length + SILK_FIX_CONST( 16, 7 ) );
- gain_factor_Q16 = silk_min_32( gain_factor_Q16, SILK_FIX_CONST( 2, 16 ) );
- if( nBits > maxBits ) {
- gain_factor_Q16 = silk_max_32( gain_factor_Q16, SILK_FIX_CONST( 1.3, 16 ) );
- }
- gainMult_Q8 = silk_SMULWB( gain_factor_Q16, gainMult_Q8 );
- } else {
- /* Adjust gain by interpolating */
- gainMult_Q8 = gainMult_lower + silk_DIV32_16( silk_MUL( gainMult_upper - gainMult_lower, maxBits - nBits_lower ), nBits_upper - nBits_lower );
- /* New gain multplier must be between 25% and 75% of old range (note that gainMult_upper < gainMult_lower) */
- if( gainMult_Q8 > silk_ADD_RSHIFT32( gainMult_lower, gainMult_upper - gainMult_lower, 2 ) ) {
- gainMult_Q8 = silk_ADD_RSHIFT32( gainMult_lower, gainMult_upper - gainMult_lower, 2 );
- } else
- if( gainMult_Q8 < silk_SUB_RSHIFT32( gainMult_upper, gainMult_upper - gainMult_lower, 2 ) ) {
- gainMult_Q8 = silk_SUB_RSHIFT32( gainMult_upper, gainMult_upper - gainMult_lower, 2 );
- }
- }
-
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- sEncCtrl.Gains_Q16[ i ] = silk_LSHIFT_SAT32( silk_SMULWB( sEncCtrl.GainsUnq_Q16[ i ], gainMult_Q8 ), 8 );
- }
-
- /* Quantize gains */
- psEnc->sShape.LastGainIndex = sEncCtrl.lastGainIndexPrev;
- silk_gains_quant( psEnc->sCmn.indices.GainsIndices, sEncCtrl.Gains_Q16,
- &psEnc->sShape.LastGainIndex, condCoding == CODE_CONDITIONALLY, psEnc->sCmn.nb_subfr );
-
- /* Unique identifier of gains vector */
- gainsID = silk_gains_ID( psEnc->sCmn.indices.GainsIndices, psEnc->sCmn.nb_subfr );
- }
- }
-
- /* Update input buffer */
- silk_memmove( psEnc->x_buf, &psEnc->x_buf[ psEnc->sCmn.frame_length ],
- ( psEnc->sCmn.ltp_mem_length + LA_SHAPE_MS * psEnc->sCmn.fs_kHz ) * sizeof( opus_int16 ) );
-
- /* Exit without entropy coding */
- if( psEnc->sCmn.prefillFlag ) {
- /* No payload */
- *pnBytesOut = 0;
- RESTORE_STACK;
- return ret;
- }
-
- /* Parameters needed for next frame */
- psEnc->sCmn.prevLag = sEncCtrl.pitchL[ psEnc->sCmn.nb_subfr - 1 ];
- psEnc->sCmn.prevSignalType = psEnc->sCmn.indices.signalType;
-
- /****************************************/
- /* Finalize payload */
- /****************************************/
- psEnc->sCmn.first_frame_after_reset = 0;
- /* Payload size */
- *pnBytesOut = silk_RSHIFT( ec_tell( psRangeEnc ) + 7, 3 );
-
- RESTORE_STACK;
- return ret;
-}
-
-/* Low-Bitrate Redundancy (LBRR) encoding. Reuse all parameters but encode excitation at lower bitrate */
-static OPUS_INLINE void silk_LBRR_encode_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */
- silk_encoder_control_FIX *psEncCtrl, /* I/O Pointer to Silk FIX encoder control struct */
- const opus_int32 xfw_Q3[], /* I Input signal */
- opus_int condCoding /* I The type of conditional coding used so far for this frame */
-)
-{
- opus_int32 TempGains_Q16[ MAX_NB_SUBFR ];
- SideInfoIndices *psIndices_LBRR = &psEnc->sCmn.indices_LBRR[ psEnc->sCmn.nFramesEncoded ];
- silk_nsq_state sNSQ_LBRR;
-
- /*******************************************/
- /* Control use of inband LBRR */
- /*******************************************/
- if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.speech_activity_Q8 > SILK_FIX_CONST( LBRR_SPEECH_ACTIVITY_THRES, 8 ) ) {
- psEnc->sCmn.LBRR_flags[ psEnc->sCmn.nFramesEncoded ] = 1;
-
- /* Copy noise shaping quantizer state and quantization indices from regular encoding */
- silk_memcpy( &sNSQ_LBRR, &psEnc->sCmn.sNSQ, sizeof( silk_nsq_state ) );
- silk_memcpy( psIndices_LBRR, &psEnc->sCmn.indices, sizeof( SideInfoIndices ) );
-
- /* Save original gains */
- silk_memcpy( TempGains_Q16, psEncCtrl->Gains_Q16, psEnc->sCmn.nb_subfr * sizeof( opus_int32 ) );
-
- if( psEnc->sCmn.nFramesEncoded == 0 || psEnc->sCmn.LBRR_flags[ psEnc->sCmn.nFramesEncoded - 1 ] == 0 ) {
- /* First frame in packet or previous frame not LBRR coded */
- psEnc->sCmn.LBRRprevLastGainIndex = psEnc->sShape.LastGainIndex;
-
- /* Increase Gains to get target LBRR rate */
- psIndices_LBRR->GainsIndices[ 0 ] = psIndices_LBRR->GainsIndices[ 0 ] + psEnc->sCmn.LBRR_GainIncreases;
- psIndices_LBRR->GainsIndices[ 0 ] = silk_min_int( psIndices_LBRR->GainsIndices[ 0 ], N_LEVELS_QGAIN - 1 );
- }
-
- /* Decode to get gains in sync with decoder */
- /* Overwrite unquantized gains with quantized gains */
- silk_gains_dequant( psEncCtrl->Gains_Q16, psIndices_LBRR->GainsIndices,
- &psEnc->sCmn.LBRRprevLastGainIndex, condCoding == CODE_CONDITIONALLY, psEnc->sCmn.nb_subfr );
-
- /*****************************************/
- /* Noise shaping quantization */
- /*****************************************/
- if( psEnc->sCmn.nStatesDelayedDecision > 1 || psEnc->sCmn.warping_Q16 > 0 ) {
- silk_NSQ_del_dec( &psEnc->sCmn, &sNSQ_LBRR, psIndices_LBRR, xfw_Q3,
- psEnc->sCmn.pulses_LBRR[ psEnc->sCmn.nFramesEncoded ], psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->LTPCoef_Q14,
- psEncCtrl->AR2_Q13, psEncCtrl->HarmShapeGain_Q14, psEncCtrl->Tilt_Q14, psEncCtrl->LF_shp_Q14,
- psEncCtrl->Gains_Q16, psEncCtrl->pitchL, psEncCtrl->Lambda_Q10, psEncCtrl->LTP_scale_Q14, psEnc->sCmn.arch );
- } else {
- silk_NSQ( &psEnc->sCmn, &sNSQ_LBRR, psIndices_LBRR, xfw_Q3,
- psEnc->sCmn.pulses_LBRR[ psEnc->sCmn.nFramesEncoded ], psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->LTPCoef_Q14,
- psEncCtrl->AR2_Q13, psEncCtrl->HarmShapeGain_Q14, psEncCtrl->Tilt_Q14, psEncCtrl->LF_shp_Q14,
- psEncCtrl->Gains_Q16, psEncCtrl->pitchL, psEncCtrl->Lambda_Q10, psEncCtrl->LTP_scale_Q14, psEnc->sCmn.arch );
- }
-
- /* Restore original gains */
- silk_memcpy( psEncCtrl->Gains_Q16, TempGains_Q16, psEnc->sCmn.nb_subfr * sizeof( opus_int32 ) );
- }
-}
diff --git a/drivers/opus/silk/fixed/find_LPC_FIX.c b/drivers/opus/silk/fixed/find_LPC_FIX.c
deleted file mode 100644
index 5b56c41702..0000000000
--- a/drivers/opus/silk/fixed/find_LPC_FIX.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Finds LPC vector from correlations, and converts to NLSF */
-void silk_find_LPC_FIX(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- opus_int16 NLSF_Q15[], /* O NLSFs */
- const opus_int16 x[], /* I Input signal */
- const opus_int32 minInvGain_Q30 /* I Inverse of max prediction gain */
-)
-{
- opus_int k, subfr_length;
- opus_int32 a_Q16[ MAX_LPC_ORDER ];
- opus_int isInterpLower, shift;
- opus_int32 res_nrg0, res_nrg1;
- opus_int rshift0, rshift1;
-
- /* Used only for LSF interpolation */
- opus_int32 a_tmp_Q16[ MAX_LPC_ORDER ], res_nrg_interp, res_nrg, res_tmp_nrg;
- opus_int res_nrg_interp_Q, res_nrg_Q, res_tmp_nrg_Q;
- opus_int16 a_tmp_Q12[ MAX_LPC_ORDER ];
- opus_int16 NLSF0_Q15[ MAX_LPC_ORDER ];
- SAVE_STACK;
-
- subfr_length = psEncC->subfr_length + psEncC->predictLPCOrder;
-
- /* Default: no interpolation */
- psEncC->indices.NLSFInterpCoef_Q2 = 4;
-
- /* Burg AR analysis for the full frame */
- silk_burg_modified( &res_nrg, &res_nrg_Q, a_Q16, x, minInvGain_Q30, subfr_length, psEncC->nb_subfr, psEncC->predictLPCOrder, psEncC->arch );
-
- if( psEncC->useInterpolatedNLSFs && !psEncC->first_frame_after_reset && psEncC->nb_subfr == MAX_NB_SUBFR ) {
- VARDECL( opus_int16, LPC_res );
-
- /* Optimal solution for last 10 ms */
- silk_burg_modified( &res_tmp_nrg, &res_tmp_nrg_Q, a_tmp_Q16, x + 2 * subfr_length, minInvGain_Q30, subfr_length, 2, psEncC->predictLPCOrder, psEncC->arch );
-
- /* 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 - silk_RSHIFT( res_tmp_nrg, shift );
- }
- } else {
- silk_assert( shift > -32 );
- res_nrg = silk_RSHIFT( res_nrg, -shift ) - res_tmp_nrg;
- res_nrg_Q = res_tmp_nrg_Q;
- }
-
- /* Convert to NLSFs */
- silk_A2NLSF( NLSF_Q15, a_tmp_Q16, psEncC->predictLPCOrder );
-
- ALLOC( LPC_res, 2 * subfr_length, opus_int16 );
-
- /* Search over interpolation indices to find the one with lowest residual energy */
- for( k = 3; k >= 0; k-- ) {
- /* Interpolate NLSFs for first half */
- silk_interpolate( NLSF0_Q15, psEncC->prev_NLSFq_Q15, NLSF_Q15, k, psEncC->predictLPCOrder );
-
- /* Convert to LPC for residual energy evaluation */
- silk_NLSF2A( a_tmp_Q12, NLSF0_Q15, psEncC->predictLPCOrder );
-
- /* Calculate residual energy with NLSF interpolation */
- silk_LPC_analysis_filter( LPC_res, x, a_tmp_Q12, 2 * subfr_length, psEncC->predictLPCOrder, psEncC->arch );
-
- silk_sum_sqr_shift( &res_nrg0, &rshift0, LPC_res + psEncC->predictLPCOrder, subfr_length - psEncC->predictLPCOrder );
- silk_sum_sqr_shift( &res_nrg1, &rshift1, LPC_res + psEncC->predictLPCOrder + subfr_length, subfr_length - psEncC->predictLPCOrder );
-
- /* Add subframe energies from first half frame */
- shift = rshift0 - rshift1;
- if( shift >= 0 ) {
- res_nrg1 = silk_RSHIFT( res_nrg1, shift );
- res_nrg_interp_Q = -rshift0;
- } else {
- res_nrg0 = silk_RSHIFT( res_nrg0, -shift );
- res_nrg_interp_Q = -rshift1;
- }
- res_nrg_interp = silk_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( silk_RSHIFT( res_nrg_interp, shift ) < res_nrg ) {
- isInterpLower = silk_TRUE;
- } else {
- isInterpLower = silk_FALSE;
- }
- } else {
- if( -shift < 32 ) {
- if( res_nrg_interp < silk_RSHIFT( res_nrg, -shift ) ) {
- isInterpLower = silk_TRUE;
- } else {
- isInterpLower = silk_FALSE;
- }
- } else {
- isInterpLower = silk_FALSE;
- }
- }
-
- /* Determine whether current interpolated NLSFs are best so far */
- if( isInterpLower == silk_TRUE ) {
- /* Interpolation has lower residual energy */
- res_nrg = res_nrg_interp;
- res_nrg_Q = res_nrg_interp_Q;
- psEncC->indices.NLSFInterpCoef_Q2 = (opus_int8)k;
- }
- }
- }
-
- if( psEncC->indices.NLSFInterpCoef_Q2 == 4 ) {
- /* NLSF interpolation is currently inactive, calculate NLSFs from full frame AR coefficients */
- silk_A2NLSF( NLSF_Q15, a_Q16, psEncC->predictLPCOrder );
- }
-
- silk_assert( psEncC->indices.NLSFInterpCoef_Q2 == 4 || ( psEncC->useInterpolatedNLSFs && !psEncC->first_frame_after_reset && psEncC->nb_subfr == MAX_NB_SUBFR ) );
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/fixed/find_LTP_FIX.c b/drivers/opus/silk/fixed/find_LTP_FIX.c
deleted file mode 100644
index a5a253516d..0000000000
--- a/drivers/opus/silk/fixed/find_LTP_FIX.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Head room for correlations */
-#define LTP_CORRS_HEAD_ROOM 2
-
-void silk_fit_LTP(
- opus_int32 LTP_coefs_Q16[ LTP_ORDER ],
- opus_int16 LTP_coefs_Q14[ LTP_ORDER ]
-);
-
-void silk_find_LTP_FIX(
- opus_int16 b_Q14[ MAX_NB_SUBFR * LTP_ORDER ], /* O LTP coefs */
- opus_int32 WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */
- opus_int *LTPredCodGain_Q7, /* O LTP coding gain */
- const opus_int16 r_lpc[], /* I residual signal after LPC signal + state for first 10 ms */
- const opus_int lag[ MAX_NB_SUBFR ], /* I LTP lags */
- const opus_int32 Wght_Q15[ MAX_NB_SUBFR ], /* I weights */
- const opus_int subfr_length, /* I subframe length */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int mem_offset, /* I number of samples in LTP memory */
- opus_int corr_rshifts[ MAX_NB_SUBFR ], /* O right shifts applied to correlations */
- int arch /* I Run-time architecture */
-)
-{
- opus_int i, k, lshift;
- const opus_int16 *r_ptr, *lag_ptr;
- opus_int16 *b_Q14_ptr;
-
- opus_int32 regu;
- opus_int32 *WLTP_ptr;
- opus_int32 b_Q16[ LTP_ORDER ], delta_b_Q14[ LTP_ORDER ], d_Q14[ MAX_NB_SUBFR ], nrg[ MAX_NB_SUBFR ], g_Q26;
- opus_int32 w[ MAX_NB_SUBFR ], WLTP_max, max_abs_d_Q14, max_w_bits;
-
- opus_int32 temp32, denom32;
- opus_int extra_shifts;
- opus_int rr_shifts, maxRshifts, maxRshifts_wxtra, LZs;
- opus_int32 LPC_res_nrg, LPC_LTP_res_nrg, div_Q16;
- opus_int32 Rr[ LTP_ORDER ], rr[ MAX_NB_SUBFR ];
- opus_int32 wd, m_Q12;
-
- b_Q14_ptr = b_Q14;
- WLTP_ptr = WLTP;
- r_ptr = &r_lpc[ mem_offset ];
- for( k = 0; k < nb_subfr; k++ ) {
- lag_ptr = r_ptr - ( lag[ k ] + LTP_ORDER / 2 );
-
- silk_sum_sqr_shift( &rr[ k ], &rr_shifts, r_ptr, subfr_length ); /* rr[ k ] in Q( -rr_shifts ) */
-
- /* Assure headroom */
- LZs = silk_CLZ32( rr[k] );
- if( LZs < LTP_CORRS_HEAD_ROOM ) {
- rr[ k ] = silk_RSHIFT_ROUND( rr[ k ], LTP_CORRS_HEAD_ROOM - LZs );
- rr_shifts += ( LTP_CORRS_HEAD_ROOM - LZs );
- }
- corr_rshifts[ k ] = rr_shifts;
- silk_corrMatrix_FIX( lag_ptr, subfr_length, LTP_ORDER, LTP_CORRS_HEAD_ROOM, WLTP_ptr, &corr_rshifts[ k ], arch ); /* WLTP_fix_ptr in Q( -corr_rshifts[ k ] ) */
-
- /* The correlation vector always has lower max abs value than rr and/or RR so head room is assured */
- silk_corrVector_FIX( lag_ptr, r_ptr, subfr_length, LTP_ORDER, Rr, corr_rshifts[ k ], arch ); /* Rr_fix_ptr in Q( -corr_rshifts[ k ] ) */
- if( corr_rshifts[ k ] > rr_shifts ) {
- rr[ k ] = silk_RSHIFT( rr[ k ], corr_rshifts[ k ] - rr_shifts ); /* rr[ k ] in Q( -corr_rshifts[ k ] ) */
- }
- silk_assert( rr[ k ] >= 0 );
-
- regu = 1;
- regu = silk_SMLAWB( regu, rr[ k ], SILK_FIX_CONST( LTP_DAMPING/3, 16 ) );
- regu = silk_SMLAWB( regu, matrix_ptr( WLTP_ptr, 0, 0, LTP_ORDER ), SILK_FIX_CONST( LTP_DAMPING/3, 16 ) );
- regu = silk_SMLAWB( regu, matrix_ptr( WLTP_ptr, LTP_ORDER-1, LTP_ORDER-1, LTP_ORDER ), SILK_FIX_CONST( LTP_DAMPING/3, 16 ) );
- silk_regularize_correlations_FIX( WLTP_ptr, &rr[k], regu, LTP_ORDER );
-
- 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 */
- silk_fit_LTP( b_Q16, b_Q14_ptr );
-
- /* Calculate residual energy */
- nrg[ k ] = 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 = silk_min_int( corr_rshifts[ k ], LTP_CORRS_HEAD_ROOM );
- denom32 = silk_LSHIFT_SAT32( silk_SMULWB( nrg[ k ], Wght_Q15[ k ] ), 1 + extra_shifts ) + /* Q( -corr_rshifts[ k ] + extra_shifts ) */
- silk_RSHIFT( silk_SMULWB( (opus_int32)subfr_length, 655 ), corr_rshifts[ k ] - extra_shifts ); /* Q( -corr_rshifts[ k ] + extra_shifts ) */
- denom32 = silk_max( denom32, 1 );
- silk_assert( ((opus_int64)Wght_Q15[ k ] << 16 ) < silk_int32_MAX ); /* Wght always < 0.5 in Q0 */
- temp32 = silk_DIV32( silk_LSHIFT( (opus_int32)Wght_Q15[ k ], 16 ), denom32 ); /* Q( 15 + 16 + corr_rshifts[k] - extra_shifts ) */
- temp32 = silk_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 = silk_max( WLTP_ptr[ i ], WLTP_max );
- }
- lshift = silk_CLZ32( WLTP_max ) - 1 - 3; /* keep 3 bits free for vq_nearest_neighbor_fix */
- silk_assert( 26 - 18 + lshift >= 0 );
- if( 26 - 18 + lshift < 31 ) {
- temp32 = silk_min_32( temp32, silk_LSHIFT( (opus_int32)1, 26 - 18 + lshift ) );
- }
-
- 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/2, LTP_ORDER/2, LTP_ORDER ); /* w in Q( 18 - corr_rshifts[ k ] ) */
- silk_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 = silk_max_int( corr_rshifts[ k ], maxRshifts );
- }
-
- /* Compute LTP coding gain */
- if( LTPredCodGain_Q7 != NULL ) {
- LPC_LTP_res_nrg = 0;
- LPC_res_nrg = 0;
- silk_assert( LTP_CORRS_HEAD_ROOM >= 2 ); /* Check that no overflow will happen when adding */
- for( k = 0; k < nb_subfr; k++ ) {
- LPC_res_nrg = silk_ADD32( LPC_res_nrg, silk_RSHIFT( silk_ADD32( silk_SMULWB( rr[ k ], Wght_Q15[ k ] ), 1 ), 1 + ( maxRshifts - corr_rshifts[ k ] ) ) ); /* Q( -maxRshifts ) */
- LPC_LTP_res_nrg = silk_ADD32( LPC_LTP_res_nrg, silk_RSHIFT( silk_ADD32( silk_SMULWB( nrg[ k ], Wght_Q15[ k ] ), 1 ), 1 + ( maxRshifts - corr_rshifts[ k ] ) ) ); /* Q( -maxRshifts ) */
- }
- LPC_LTP_res_nrg = silk_max( LPC_LTP_res_nrg, 1 ); /* avoid division by zero */
-
- div_Q16 = silk_DIV32_varQ( LPC_res_nrg, LPC_LTP_res_nrg, 16 );
- *LTPredCodGain_Q7 = ( opus_int )silk_SMULBB( 3, silk_lin2log( div_Q16 ) - ( 16 << 7 ) );
-
- silk_assert( *LTPredCodGain_Q7 == ( opus_int )silk_SAT16( silk_MUL( 3, 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 = silk_max_32( max_abs_d_Q14, silk_abs( d_Q14[ k ] ) );
- /* w[ k ] is in Q( 18 - corr_rshifts[ k ] ) */
- /* Find bits needed in Q( 18 - maxRshifts ) */
- max_w_bits = silk_max_32( max_w_bits, 32 - silk_CLZ32( w[ k ] ) + corr_rshifts[ k ] - maxRshifts );
- }
-
- /* max_abs_d_Q14 = (5 << 15); worst case, i.e. LTP_ORDER * -silk_int16_MIN */
- silk_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 - 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 = silk_max_int( extra_shifts, 0 );
-
- maxRshifts_wxtra = maxRshifts + extra_shifts;
-
- temp32 = silk_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 = silk_ADD32( temp32, silk_RSHIFT( w[ k ], maxRshifts_wxtra - corr_rshifts[ k ] ) ); /* Q( 18 - maxRshifts_wxtra ) */
- wd = silk_ADD32( wd, silk_LSHIFT( silk_SMULWW( silk_RSHIFT( w[ k ], maxRshifts_wxtra - corr_rshifts[ k ] ), d_Q14[ k ] ), 2 ) ); /* Q( 18 - maxRshifts_wxtra ) */
- }
- m_Q12 = silk_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 = silk_RSHIFT( w[ k ], 2 - corr_rshifts[ k ] );
- } else {
- temp32 = silk_LSHIFT_SAT32( w[ k ], corr_rshifts[ k ] - 2 );
- }
-
- g_Q26 = silk_MUL(
- silk_DIV32(
- SILK_FIX_CONST( LTP_SMOOTHING, 26 ),
- silk_RSHIFT( SILK_FIX_CONST( LTP_SMOOTHING, 26 ), 10 ) + temp32 ), /* Q10 */
- silk_LSHIFT_SAT32( silk_SUB_SAT32( (opus_int32)m_Q12, silk_RSHIFT( d_Q14[ k ], 2 ) ), 4 ) ); /* Q16 */
-
- temp32 = 0;
- for( i = 0; i < LTP_ORDER; i++ ) {
- delta_b_Q14[ i ] = silk_max_16( b_Q14_ptr[ i ], 1638 ); /* 1638_Q14 = 0.1_Q0 */
- temp32 += delta_b_Q14[ i ]; /* Q14 */
- }
- temp32 = silk_DIV32( g_Q26, temp32 ); /* Q14 -> Q12 */
- for( i = 0; i < LTP_ORDER; i++ ) {
- b_Q14_ptr[ i ] = silk_LIMIT_32( (opus_int32)b_Q14_ptr[ i ] + silk_SMULWB( silk_LSHIFT_SAT32( temp32, 4 ), delta_b_Q14[ i ] ), -16000, 28000 );
- }
- b_Q14_ptr += LTP_ORDER;
- }
-}
-
-void silk_fit_LTP(
- opus_int32 LTP_coefs_Q16[ LTP_ORDER ],
- opus_int16 LTP_coefs_Q14[ LTP_ORDER ]
-)
-{
- opus_int i;
-
- for( i = 0; i < LTP_ORDER; i++ ) {
- LTP_coefs_Q14[ i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( LTP_coefs_Q16[ i ], 2 ) );
- }
-}
diff --git a/drivers/opus/silk/fixed/find_pitch_lags_FIX.c b/drivers/opus/silk/fixed/find_pitch_lags_FIX.c
deleted file mode 100644
index bfd2c1b2d2..0000000000
--- a/drivers/opus/silk/fixed/find_pitch_lags_FIX.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Find pitch lags */
-void silk_find_pitch_lags_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O encoder state */
- silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */
- opus_int16 res[], /* O residual */
- const opus_int16 x[], /* I Speech signal */
- int arch /* I Run-time architecture */
-)
-{
- opus_int buf_len, i, scale;
- opus_int32 thrhld_Q13, res_nrg;
- const opus_int16 *x_buf, *x_buf_ptr;
- VARDECL( opus_int16, Wsig );
- opus_int16 *Wsig_ptr;
- opus_int32 auto_corr[ MAX_FIND_PITCH_LPC_ORDER + 1 ];
- opus_int16 rc_Q15[ MAX_FIND_PITCH_LPC_ORDER ];
- opus_int32 A_Q24[ MAX_FIND_PITCH_LPC_ORDER ];
- opus_int16 A_Q12[ MAX_FIND_PITCH_LPC_ORDER ];
- SAVE_STACK;
-
- /******************************************/
- /* Set up buffer lengths etc based on Fs */
- /******************************************/
- buf_len = psEnc->sCmn.la_pitch + psEnc->sCmn.frame_length + psEnc->sCmn.ltp_mem_length;
-
- /* Safety check */
- silk_assert( buf_len >= psEnc->sCmn.pitch_LPC_win_length );
-
- x_buf = x - psEnc->sCmn.ltp_mem_length;
-
- /*************************************/
- /* Estimate LPC AR coefficients */
- /*************************************/
-
- /* Calculate windowed signal */
-
- ALLOC( Wsig, psEnc->sCmn.pitch_LPC_win_length, opus_int16 );
-
- /* First LA_LTP samples */
- x_buf_ptr = x_buf + buf_len - psEnc->sCmn.pitch_LPC_win_length;
- Wsig_ptr = Wsig;
- 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;
- silk_memcpy( Wsig_ptr, x_buf_ptr, ( psEnc->sCmn.pitch_LPC_win_length - silk_LSHIFT( psEnc->sCmn.la_pitch, 1 ) ) * sizeof( opus_int16 ) );
-
- /* Last LA_LTP samples */
- Wsig_ptr += psEnc->sCmn.pitch_LPC_win_length - silk_LSHIFT( psEnc->sCmn.la_pitch, 1 );
- x_buf_ptr += psEnc->sCmn.pitch_LPC_win_length - silk_LSHIFT( psEnc->sCmn.la_pitch, 1 );
- silk_apply_sine_window( Wsig_ptr, x_buf_ptr, 2, psEnc->sCmn.la_pitch );
-
- /* Calculate autocorrelation sequence */
- silk_autocorr( auto_corr, &scale, Wsig, psEnc->sCmn.pitch_LPC_win_length, psEnc->sCmn.pitchEstimationLPCOrder + 1, arch );
-
- /* Add white noise, as fraction of energy */
- auto_corr[ 0 ] = silk_SMLAWB( auto_corr[ 0 ], auto_corr[ 0 ], SILK_FIX_CONST( FIND_PITCH_WHITE_NOISE_FRACTION, 16 ) ) + 1;
-
- /* Calculate the reflection coefficients using schur */
- res_nrg = silk_schur( rc_Q15, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder );
-
- /* Prediction gain */
- psEncCtrl->predGain_Q16 = silk_DIV32_varQ( auto_corr[ 0 ], silk_max_int( res_nrg, 1 ), 16 );
-
- /* Convert reflection coefficients to prediction coefficients */
- 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 ] = (opus_int16)silk_SAT16( silk_RSHIFT( A_Q24[ i ], 12 ) );
- }
-
- /* Do BWE */
- silk_bwexpander( A_Q12, psEnc->sCmn.pitchEstimationLPCOrder, SILK_FIX_CONST( FIND_PITCH_BANDWIDTH_EXPANSION, 16 ) );
-
- /*****************************************/
- /* LPC analysis filtering */
- /*****************************************/
- silk_LPC_analysis_filter( res, x_buf, A_Q12, buf_len, psEnc->sCmn.pitchEstimationLPCOrder, psEnc->sCmn.arch );
-
- if( psEnc->sCmn.indices.signalType != TYPE_NO_VOICE_ACTIVITY && psEnc->sCmn.first_frame_after_reset == 0 ) {
- /* Threshold for pitch estimator */
- thrhld_Q13 = SILK_FIX_CONST( 0.6, 13 );
- thrhld_Q13 = silk_SMLABB( thrhld_Q13, SILK_FIX_CONST( -0.004, 13 ), psEnc->sCmn.pitchEstimationLPCOrder );
- thrhld_Q13 = silk_SMLAWB( thrhld_Q13, SILK_FIX_CONST( -0.1, 21 ), psEnc->sCmn.speech_activity_Q8 );
- thrhld_Q13 = silk_SMLABB( thrhld_Q13, SILK_FIX_CONST( -0.15, 13 ), silk_RSHIFT( psEnc->sCmn.prevSignalType, 1 ) );
- thrhld_Q13 = silk_SMLAWB( thrhld_Q13, SILK_FIX_CONST( -0.1, 14 ), psEnc->sCmn.input_tilt_Q15 );
- thrhld_Q13 = silk_SAT16( thrhld_Q13 );
-
- /*****************************************/
- /* Call pitch estimator */
- /*****************************************/
- if( silk_pitch_analysis_core( res, psEncCtrl->pitchL, &psEnc->sCmn.indices.lagIndex, &psEnc->sCmn.indices.contourIndex,
- &psEnc->LTPCorr_Q15, psEnc->sCmn.prevLag, psEnc->sCmn.pitchEstimationThreshold_Q16,
- (opus_int)thrhld_Q13, psEnc->sCmn.fs_kHz, psEnc->sCmn.pitchEstimationComplexity, psEnc->sCmn.nb_subfr,
- psEnc->sCmn.arch) == 0 )
- {
- psEnc->sCmn.indices.signalType = TYPE_VOICED;
- } else {
- psEnc->sCmn.indices.signalType = TYPE_UNVOICED;
- }
- } else {
- silk_memset( psEncCtrl->pitchL, 0, sizeof( psEncCtrl->pitchL ) );
- psEnc->sCmn.indices.lagIndex = 0;
- psEnc->sCmn.indices.contourIndex = 0;
- psEnc->LTPCorr_Q15 = 0;
- }
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/fixed/find_pred_coefs_FIX.c b/drivers/opus/silk/fixed/find_pred_coefs_FIX.c
deleted file mode 100644
index d0280963bd..0000000000
--- a/drivers/opus/silk/fixed/find_pred_coefs_FIX.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/celt/stack_alloc.h"
-
-void silk_find_pred_coefs_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O encoder state */
- silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */
- const opus_int16 res_pitch[], /* I Residual from pitch analysis */
- const opus_int16 x[], /* I Speech signal */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- opus_int i;
- opus_int32 invGains_Q16[ MAX_NB_SUBFR ], local_gains[ MAX_NB_SUBFR ], Wght_Q15[ MAX_NB_SUBFR ];
- opus_int16 NLSF_Q15[ MAX_LPC_ORDER ];
- const opus_int16 *x_ptr;
- opus_int16 *x_pre_ptr;
- VARDECL( opus_int16, LPC_in_pre );
- opus_int32 tmp, min_gain_Q16, minInvGain_Q30;
- opus_int LTP_corrs_rshift[ MAX_NB_SUBFR ];
- SAVE_STACK;
-
- /* weighting for weighted least squares */
- min_gain_Q16 = silk_int32_MAX >> 6;
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- min_gain_Q16 = silk_min( min_gain_Q16, psEncCtrl->Gains_Q16[ i ] );
- }
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- /* Divide to Q16 */
- silk_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 ] = silk_DIV32_varQ( min_gain_Q16, psEncCtrl->Gains_Q16[ i ], 16 - 2 );
-
- /* Ensure Wght_Q15 a minimum value 1 */
- invGains_Q16[ i ] = silk_max( invGains_Q16[ i ], 363 );
-
- /* Square the inverted gains */
- silk_assert( invGains_Q16[ i ] == silk_SAT16( invGains_Q16[ i ] ) );
- tmp = silk_SMULWB( invGains_Q16[ i ], invGains_Q16[ i ] );
- Wght_Q15[ i ] = silk_RSHIFT( tmp, 1 );
-
- /* Invert the inverted and normalized gains */
- local_gains[ i ] = silk_DIV32( ( (opus_int32)1 << 16 ), invGains_Q16[ i ] );
- }
-
- ALLOC( LPC_in_pre,
- psEnc->sCmn.nb_subfr * psEnc->sCmn.predictLPCOrder
- + psEnc->sCmn.frame_length, opus_int16 );
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- VARDECL( opus_int32, WLTP );
-
- /**********/
- /* VOICED */
- /**********/
- silk_assert( psEnc->sCmn.ltp_mem_length - psEnc->sCmn.predictLPCOrder >= psEncCtrl->pitchL[ 0 ] + LTP_ORDER / 2 );
-
- ALLOC( WLTP, psEnc->sCmn.nb_subfr * LTP_ORDER * LTP_ORDER, opus_int32 );
-
- /* LTP analysis */
- silk_find_LTP_FIX( psEncCtrl->LTPCoef_Q14, WLTP, &psEncCtrl->LTPredCodGain_Q7,
- res_pitch, psEncCtrl->pitchL, Wght_Q15, psEnc->sCmn.subfr_length,
- psEnc->sCmn.nb_subfr, psEnc->sCmn.ltp_mem_length, LTP_corrs_rshift, psEnc->sCmn.arch );
-
- /* Quantize LTP gain parameters */
- silk_quant_LTP_gains( psEncCtrl->LTPCoef_Q14, psEnc->sCmn.indices.LTPIndex, &psEnc->sCmn.indices.PERIndex,
- &psEnc->sCmn.sum_log_gain_Q7, WLTP, psEnc->sCmn.mu_LTP_Q9, psEnc->sCmn.LTPQuantLowComplexity, psEnc->sCmn.nb_subfr,
- psEnc->sCmn.arch);
-
- /* Control LTP scaling */
- silk_LTP_scale_ctrl_FIX( psEnc, psEncCtrl, condCoding );
-
- /* Create LTP residual */
- silk_LTP_analysis_filter_FIX( LPC_in_pre, x - psEnc->sCmn.predictLPCOrder, psEncCtrl->LTPCoef_Q14,
- psEncCtrl->pitchL, invGains_Q16, psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.predictLPCOrder );
-
- } else {
- /************/
- /* UNVOICED */
- /************/
- /* Create signal with prepended subframes, scaled by inverse gains */
- x_ptr = x - psEnc->sCmn.predictLPCOrder;
- x_pre_ptr = LPC_in_pre;
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- 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;
- }
-
- silk_memset( psEncCtrl->LTPCoef_Q14, 0, psEnc->sCmn.nb_subfr * LTP_ORDER * sizeof( opus_int16 ) );
- psEncCtrl->LTPredCodGain_Q7 = 0;
- psEnc->sCmn.sum_log_gain_Q7 = 0;
- }
-
- /* Limit on total predictive coding gain */
- if( psEnc->sCmn.first_frame_after_reset ) {
- minInvGain_Q30 = SILK_FIX_CONST( 1.0f / MAX_PREDICTION_POWER_GAIN_AFTER_RESET, 30 );
- } else {
- minInvGain_Q30 = silk_log2lin( silk_SMLAWB( 16 << 7, (opus_int32)psEncCtrl->LTPredCodGain_Q7, SILK_FIX_CONST( 1.0 / 3, 16 ) ) ); /* Q16 */
- minInvGain_Q30 = silk_DIV32_varQ( minInvGain_Q30,
- silk_SMULWW( SILK_FIX_CONST( MAX_PREDICTION_POWER_GAIN, 0 ),
- silk_SMLAWB( SILK_FIX_CONST( 0.25, 18 ), SILK_FIX_CONST( 0.75, 18 ), psEncCtrl->coding_quality_Q14 ) ), 14 );
- }
-
- /* LPC_in_pre contains the LTP-filtered input for voiced, and the unfiltered input for unvoiced */
- silk_find_LPC_FIX( &psEnc->sCmn, NLSF_Q15, LPC_in_pre, minInvGain_Q30 );
-
- /* Quantize LSFs */
- silk_process_NLSFs( &psEnc->sCmn, psEncCtrl->PredCoef_Q12, NLSF_Q15, psEnc->sCmn.prev_NLSFq_Q15 );
-
- /* Calculate residual energy using quantized LPC coefficients */
- silk_residual_energy_FIX( psEncCtrl->ResNrg, psEncCtrl->ResNrgQ, LPC_in_pre, psEncCtrl->PredCoef_Q12, local_gains,
- psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.predictLPCOrder, psEnc->sCmn.arch );
-
- /* Copy to prediction struct for use in next frame for interpolation */
- silk_memcpy( psEnc->sCmn.prev_NLSFq_Q15, NLSF_Q15, sizeof( psEnc->sCmn.prev_NLSFq_Q15 ) );
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/fixed/k2a_FIX.c b/drivers/opus/silk/fixed/k2a_FIX.c
deleted file mode 100644
index 64771f370c..0000000000
--- a/drivers/opus/silk/fixed/k2a_FIX.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* Step up function, converts reflection coefficients to prediction coefficients */
-void silk_k2a(
- opus_int32 *A_Q24, /* O Prediction coefficients [order] Q24 */
- const opus_int16 *rc_Q15, /* I Reflection coefficients [order] Q15 */
- const opus_int32 order /* I Prediction order */
-)
-{
- opus_int k, n;
- opus_int32 Atmp[ SILK_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 ] = silk_SMLAWB( A_Q24[ n ], silk_LSHIFT( Atmp[ k - n - 1 ], 1 ), rc_Q15[ k ] );
- }
- A_Q24[ k ] = -silk_LSHIFT( (opus_int32)rc_Q15[ k ], 9 );
- }
-}
diff --git a/drivers/opus/silk/fixed/k2a_Q16_FIX.c b/drivers/opus/silk/fixed/k2a_Q16_FIX.c
deleted file mode 100644
index 49d90a862e..0000000000
--- a/drivers/opus/silk/fixed/k2a_Q16_FIX.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* Step up function, converts reflection coefficients to prediction coefficients */
-void silk_k2a_Q16(
- opus_int32 *A_Q24, /* O Prediction coefficients [order] Q24 */
- const opus_int32 *rc_Q16, /* I Reflection coefficients [order] Q16 */
- const opus_int32 order /* I Prediction order */
-)
-{
- opus_int k, n;
- opus_int32 Atmp[ SILK_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 ] = silk_SMLAWW( A_Q24[ n ], Atmp[ k - n - 1 ], rc_Q16[ k ] );
- }
- A_Q24[ k ] = -silk_LSHIFT( rc_Q16[ k ], 8 );
- }
-}
diff --git a/drivers/opus/silk/fixed/main_FIX.h b/drivers/opus/silk/fixed/main_FIX.h
deleted file mode 100644
index f824c47653..0000000000
--- a/drivers/opus/silk/fixed/main_FIX.h
+++ /dev/null
@@ -1,272 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_MAIN_FIX_H
-#define SILK_MAIN_FIX_H
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/fixed/structs_FIX.h"
-#include "opus/silk/control.h"
-#include "opus/silk/main.h"
-#include "opus/silk/PLC.h"
-#include "opus/silk/debug.h"
-#include "opus/celt/entenc.h"
-
-#ifndef FORCE_CPP_BUILD
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-#endif
-
-#define silk_encoder_state_Fxx silk_encoder_state_FIX
-#define silk_encode_do_VAD_Fxx silk_encode_do_VAD_FIX
-#define silk_encode_frame_Fxx silk_encode_frame_FIX
-
-/*********************/
-/* Encoder Functions */
-/*********************/
-
-/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
-void silk_HP_variable_cutoff(
- silk_encoder_state_Fxx state_Fxx[] /* I/O Encoder states */
-);
-
-/* Encoder main function */
-void silk_encode_do_VAD_FIX(
- silk_encoder_state_FIX *psEnc /* I/O Pointer to Silk FIX encoder state */
-);
-
-/* Encoder main function */
-opus_int silk_encode_frame_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */
- opus_int32 *pnBytesOut, /* O Pointer to number of payload bytes; */
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- opus_int condCoding, /* I The type of conditional coding to use */
- opus_int maxBits, /* I If > 0: maximum number of output bits */
- opus_int useCBR /* I Flag to force constant-bitrate operation */
-);
-
-/* Initializes the Silk encoder state */
-opus_int silk_init_encoder(
- silk_encoder_state_Fxx *psEnc, /* I/O Pointer to Silk FIX encoder state */
- int arch /* I Run-time architecture */
-);
-
-/* Control the Silk encoder */
-opus_int silk_control_encoder(
- silk_encoder_state_Fxx *psEnc, /* I/O Pointer to Silk encoder state */
- silk_EncControlStruct *encControl, /* I Control structure */
- const opus_int32 TargetRate_bps, /* I Target max bitrate (bps) */
- const opus_int allow_bw_switch, /* I Flag to allow switching audio bandwidth */
- const opus_int channelNb, /* I Channel number */
- const opus_int force_fs_kHz
-);
-
-/****************/
-/* Prefiltering */
-/****************/
-void silk_prefilter_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Encoder state */
- const silk_encoder_control_FIX *psEncCtrl, /* I Encoder control */
- opus_int32 xw_Q10[], /* O Weighted signal */
- const opus_int16 x[] /* I Speech signal */
-);
-
-void silk_warped_LPC_analysis_filter_FIX_c(
- opus_int32 state[], /* I/O State [order + 1] */
- opus_int32 res_Q2[], /* O Residual signal [length] */
- const opus_int16 coef_Q13[], /* I Coefficients [order] */
- const opus_int16 input[], /* I Input signal [length] */
- const opus_int16 lambda_Q16, /* I Warping factor */
- const opus_int length, /* I Length of input signal */
- const opus_int order /* I Filter order (even) */
-);
-
-
-/**************************/
-/* Noise shaping analysis */
-/**************************/
-/* Compute noise shaping coefficients and initial gain values */
-void silk_noise_shape_analysis_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Encoder state FIX */
- silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control FIX */
- const opus_int16 *pitch_res, /* I LPC residual from pitch analysis */
- const opus_int16 *x, /* I Input signal [ frame_length + la_shape ] */
- int arch /* I Run-time architecture */
-);
-
-/* Autocorrelations for a warped frequency axis */
-void silk_warped_autocorrelation_FIX(
- opus_int32 *corr, /* O Result [order + 1] */
- opus_int *scale, /* O Scaling of the correlation vector */
- const opus_int16 *input, /* I Input data to correlate */
- const opus_int warping_Q16, /* I Warping coefficient */
- const opus_int length, /* I Length of input */
- const opus_int order /* I Correlation order (even) */
-);
-
-/* Calculation of LTP state scaling */
-void silk_LTP_scale_ctrl_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O encoder state */
- silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/**********************************************/
-/* Prediction Analysis */
-/**********************************************/
-/* Find pitch lags */
-void silk_find_pitch_lags_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O encoder state */
- silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */
- opus_int16 res[], /* O residual */
- const opus_int16 x[], /* I Speech signal */
- int arch /* I Run-time architecture */
-);
-
-/* Find LPC and LTP coefficients */
-void silk_find_pred_coefs_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O encoder state */
- silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */
- const opus_int16 res_pitch[], /* I Residual from pitch analysis */
- const opus_int16 x[], /* I Speech signal */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/* LPC analysis */
-void silk_find_LPC_FIX(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- opus_int16 NLSF_Q15[], /* O NLSFs */
- const opus_int16 x[], /* I Input signal */
- const opus_int32 minInvGain_Q30 /* I Inverse of max prediction gain */
-);
-
-/* LTP analysis */
-void silk_find_LTP_FIX(
- opus_int16 b_Q14[ MAX_NB_SUBFR * LTP_ORDER ], /* O LTP coefs */
- opus_int32 WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */
- opus_int *LTPredCodGain_Q7, /* O LTP coding gain */
- const opus_int16 r_lpc[], /* I residual signal after LPC signal + state for first 10 ms */
- const opus_int lag[ MAX_NB_SUBFR ], /* I LTP lags */
- const opus_int32 Wght_Q15[ MAX_NB_SUBFR ], /* I weights */
- const opus_int subfr_length, /* I subframe length */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int mem_offset, /* I number of samples in LTP memory */
- opus_int corr_rshifts[ MAX_NB_SUBFR ], /* O right shifts applied to correlations */
- int arch /* I Run-time architecture */
-);
-
-void silk_LTP_analysis_filter_FIX(
- opus_int16 *LTP_res, /* O LTP residual signal of length MAX_NB_SUBFR * ( pre_length + subfr_length ) */
- const opus_int16 *x, /* I Pointer to input signal with at least max( pitchL ) preceding samples */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],/* I LTP_ORDER LTP coefficients for each MAX_NB_SUBFR subframe */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lag, one for each subframe */
- const opus_int32 invGains_Q16[ MAX_NB_SUBFR ], /* I Inverse quantization gains, one for each subframe */
- const opus_int subfr_length, /* I Length of each subframe */
- const opus_int nb_subfr, /* I Number of subframes */
- const opus_int pre_length /* I Length of the preceding samples starting at &x[0] for each subframe */
-);
-
-/* Calculates residual energies of input subframes where all subframes have LPC_order */
-/* of preceding samples */
-void silk_residual_energy_FIX(
- opus_int32 nrgs[ MAX_NB_SUBFR ], /* O Residual energy per subframe */
- opus_int nrgsQ[ MAX_NB_SUBFR ], /* O Q value per subframe */
- const opus_int16 x[], /* I Input signal */
- opus_int16 a_Q12[ 2 ][ MAX_LPC_ORDER ], /* I AR coefs for each frame half */
- const opus_int32 gains[ MAX_NB_SUBFR ], /* I Quantization gains */
- const opus_int subfr_length, /* I Subframe length */
- const opus_int nb_subfr, /* I Number of subframes */
- const opus_int LPC_order, /* I LPC order */
- int arch /* I Run-time architecture */
-);
-
-/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
-opus_int32 silk_residual_energy16_covar_FIX(
- const opus_int16 *c, /* I Prediction vector */
- const opus_int32 *wXX, /* I Correlation matrix */
- const opus_int32 *wXx, /* I Correlation vector */
- opus_int32 wxx, /* I Signal energy */
- opus_int D, /* I Dimension */
- opus_int cQ /* I Q value for c vector 0 - 15 */
-);
-
-/* Processing of gains */
-void silk_process_gains_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Encoder state */
- silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/******************/
-/* Linear Algebra */
-/******************/
-/* Calculates correlation matrix X'*X */
-void silk_corrMatrix_FIX(
- const opus_int16 *x, /* I x vector [L + order - 1] used to form data matrix X */
- const opus_int L, /* I Length of vectors */
- const opus_int order, /* I Max lag for correlation */
- const opus_int head_room, /* I Desired headroom */
- opus_int32 *XX, /* O Pointer to X'*X correlation matrix [ order x order ] */
- opus_int *rshifts, /* I/O Right shifts of correlations */
- int arch /* I Run-time architecture */
-);
-
-/* Calculates correlation vector X'*t */
-void silk_corrVector_FIX(
- const opus_int16 *x, /* I x vector [L + order - 1] used to form data matrix X */
- const opus_int16 *t, /* I Target vector [L] */
- const opus_int L, /* I Length of vectors */
- const opus_int order, /* I Max lag for correlation */
- opus_int32 *Xt, /* O Pointer to X'*t correlation vector [order] */
- const opus_int rshifts, /* I Right shifts of correlations */
- int arch /* I Run-time architecture */
-);
-
-/* Add noise to matrix diagonal */
-void silk_regularize_correlations_FIX(
- opus_int32 *XX, /* I/O Correlation matrices */
- opus_int32 *xx, /* I/O Correlation values */
- opus_int32 noise, /* I Noise to add */
- opus_int D /* I Dimension of XX */
-);
-
-/* Solves Ax = b, assuming A is symmetric */
-void silk_solve_LDL_FIX(
- opus_int32 *A, /* I Pointer to symetric square matrix A */
- opus_int M, /* I Size of matrix */
- const opus_int32 *b, /* I Pointer to b vector */
- opus_int32 *x_Q16 /* O Pointer to x solution vector */
-);
-
-#ifndef FORCE_CPP_BUILD
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* FORCE_CPP_BUILD */
-#endif /* SILK_MAIN_FIX_H */
diff --git a/drivers/opus/silk/fixed/mips/noise_shape_analysis_FIX_mipsr1.h b/drivers/opus/silk/fixed/mips/noise_shape_analysis_FIX_mipsr1.h
deleted file mode 100644
index c30481e437..0000000000
--- a/drivers/opus/silk/fixed/mips/noise_shape_analysis_FIX_mipsr1.h
+++ /dev/null
@@ -1,336 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-
-/**************************************************************/
-/* Compute noise shaping coefficients and initial gain values */
-/**************************************************************/
-#define OVERRIDE_silk_noise_shape_analysis_FIX
-
-void silk_noise_shape_analysis_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Encoder state FIX */
- silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control FIX */
- const opus_int16 *pitch_res, /* I LPC residual from pitch analysis */
- const opus_int16 *x, /* I Input signal [ frame_length + la_shape ] */
- int arch /* I Run-time architecture */
-)
-{
- silk_shape_state_FIX *psShapeSt = &psEnc->sShape;
- opus_int k, i, nSamples, Qnrg, b_Q14, warping_Q16, scale = 0;
- opus_int32 SNR_adj_dB_Q7, HarmBoost_Q16, HarmShapeGain_Q16, Tilt_Q16, tmp32;
- opus_int32 nrg, pre_nrg_Q30, log_energy_Q7, log_energy_prev_Q7, energy_variation_Q7;
- opus_int32 delta_Q16, BWExp1_Q16, BWExp2_Q16, gain_mult_Q16, gain_add_Q16, strength_Q16, b_Q8;
- opus_int32 auto_corr[ MAX_SHAPE_LPC_ORDER + 1 ];
- opus_int32 refl_coef_Q16[ MAX_SHAPE_LPC_ORDER ];
- opus_int32 AR1_Q24[ MAX_SHAPE_LPC_ORDER ];
- opus_int32 AR2_Q24[ MAX_SHAPE_LPC_ORDER ];
- VARDECL( opus_int16, x_windowed );
- const opus_int16 *x_ptr, *pitch_res_ptr;
- SAVE_STACK;
-
- /* Point to start of first LPC analysis block */
- x_ptr = x - psEnc->sCmn.la_shape;
-
- /****************/
- /* GAIN CONTROL */
- /****************/
- SNR_adj_dB_Q7 = psEnc->sCmn.SNR_dB_Q7;
-
- /* Input quality is the average of the quality in the lowest two VAD bands */
- psEncCtrl->input_quality_Q14 = ( opus_int )silk_RSHIFT( (opus_int32)psEnc->sCmn.input_quality_bands_Q15[ 0 ]
- + psEnc->sCmn.input_quality_bands_Q15[ 1 ], 2 );
-
- /* Coding quality level, between 0.0_Q0 and 1.0_Q0, but in Q14 */
- psEncCtrl->coding_quality_Q14 = silk_RSHIFT( silk_sigm_Q15( silk_RSHIFT_ROUND( SNR_adj_dB_Q7 -
- SILK_FIX_CONST( 20.0, 7 ), 4 ) ), 1 );
-
- /* Reduce coding SNR during low speech activity */
- if( psEnc->sCmn.useCBR == 0 ) {
- b_Q8 = SILK_FIX_CONST( 1.0, 8 ) - psEnc->sCmn.speech_activity_Q8;
- b_Q8 = silk_SMULWB( silk_LSHIFT( b_Q8, 8 ), b_Q8 );
- SNR_adj_dB_Q7 = silk_SMLAWB( SNR_adj_dB_Q7,
- silk_SMULBB( SILK_FIX_CONST( -BG_SNR_DECR_dB, 7 ) >> ( 4 + 1 ), b_Q8 ), /* Q11*/
- silk_SMULWB( SILK_FIX_CONST( 1.0, 14 ) + psEncCtrl->input_quality_Q14, psEncCtrl->coding_quality_Q14 ) ); /* Q12*/
- }
-
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Reduce gains for periodic signals */
- SNR_adj_dB_Q7 = silk_SMLAWB( SNR_adj_dB_Q7, SILK_FIX_CONST( HARM_SNR_INCR_dB, 8 ), psEnc->LTPCorr_Q15 );
- } else {
- /* For unvoiced signals and low-quality input, adjust the quality slower than SNR_dB setting */
- SNR_adj_dB_Q7 = silk_SMLAWB( SNR_adj_dB_Q7,
- silk_SMLAWB( SILK_FIX_CONST( 6.0, 9 ), -SILK_FIX_CONST( 0.4, 18 ), psEnc->sCmn.SNR_dB_Q7 ),
- SILK_FIX_CONST( 1.0, 14 ) - psEncCtrl->input_quality_Q14 );
- }
-
- /*************************/
- /* SPARSENESS PROCESSING */
- /*************************/
- /* Set quantizer offset */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Initially set to 0; may be overruled in process_gains(..) */
- psEnc->sCmn.indices.quantOffsetType = 0;
- psEncCtrl->sparseness_Q8 = 0;
- } else {
- /* Sparseness measure, based on relative fluctuations of energy per 2 milliseconds */
- nSamples = silk_LSHIFT( psEnc->sCmn.fs_kHz, 1 );
- energy_variation_Q7 = 0;
- log_energy_prev_Q7 = 0;
- pitch_res_ptr = pitch_res;
- for( k = 0; k < silk_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) / 2; k++ ) {
- silk_sum_sqr_shift( &nrg, &scale, pitch_res_ptr, nSamples );
- nrg += silk_RSHIFT( nSamples, scale ); /* Q(-scale)*/
-
- log_energy_Q7 = silk_lin2log( nrg );
- if( k > 0 ) {
- energy_variation_Q7 += silk_abs( log_energy_Q7 - log_energy_prev_Q7 );
- }
- log_energy_prev_Q7 = log_energy_Q7;
- pitch_res_ptr += nSamples;
- }
-
- psEncCtrl->sparseness_Q8 = silk_RSHIFT( silk_sigm_Q15( silk_SMULWB( energy_variation_Q7 -
- SILK_FIX_CONST( 5.0, 7 ), SILK_FIX_CONST( 0.1, 16 ) ) ), 7 );
-
- /* Set quantization offset depending on sparseness measure */
- if( psEncCtrl->sparseness_Q8 > SILK_FIX_CONST( SPARSENESS_THRESHOLD_QNT_OFFSET, 8 ) ) {
- psEnc->sCmn.indices.quantOffsetType = 0;
- } else {
- psEnc->sCmn.indices.quantOffsetType = 1;
- }
-
- /* Increase coding SNR for sparse signals */
- SNR_adj_dB_Q7 = silk_SMLAWB( SNR_adj_dB_Q7, SILK_FIX_CONST( SPARSE_SNR_INCR_dB, 15 ), psEncCtrl->sparseness_Q8 - SILK_FIX_CONST( 0.5, 8 ) );
- }
-
- /*******************************/
- /* Control bandwidth expansion */
- /*******************************/
- /* More BWE for signals with high prediction gain */
- strength_Q16 = silk_SMULWB( psEncCtrl->predGain_Q16, SILK_FIX_CONST( FIND_PITCH_WHITE_NOISE_FRACTION, 16 ) );
- BWExp1_Q16 = BWExp2_Q16 = silk_DIV32_varQ( SILK_FIX_CONST( BANDWIDTH_EXPANSION, 16 ),
- silk_SMLAWW( SILK_FIX_CONST( 1.0, 16 ), strength_Q16, strength_Q16 ), 16 );
- delta_Q16 = silk_SMULWB( SILK_FIX_CONST( 1.0, 16 ) - silk_SMULBB( 3, psEncCtrl->coding_quality_Q14 ),
- SILK_FIX_CONST( LOW_RATE_BANDWIDTH_EXPANSION_DELTA, 16 ) );
- BWExp1_Q16 = silk_SUB32( BWExp1_Q16, delta_Q16 );
- BWExp2_Q16 = silk_ADD32( BWExp2_Q16, delta_Q16 );
- /* BWExp1 will be applied after BWExp2, so make it relative */
- BWExp1_Q16 = silk_DIV32_16( silk_LSHIFT( BWExp1_Q16, 14 ), silk_RSHIFT( BWExp2_Q16, 2 ) );
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Slightly more warping in analysis will move quantization noise up in frequency, where it's better masked */
- warping_Q16 = silk_SMLAWB( psEnc->sCmn.warping_Q16, (opus_int32)psEncCtrl->coding_quality_Q14, SILK_FIX_CONST( 0.01, 18 ) );
- } else {
- warping_Q16 = 0;
- }
-
- /********************************************/
- /* Compute noise shaping AR coefs and gains */
- /********************************************/
- ALLOC( x_windowed, psEnc->sCmn.shapeWinLength, opus_int16 );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- /* Apply window: sine slope followed by flat part followed by cosine slope */
- opus_int shift, slope_part, flat_part;
- flat_part = psEnc->sCmn.fs_kHz * 3;
- slope_part = silk_RSHIFT( psEnc->sCmn.shapeWinLength - flat_part, 1 );
-
- silk_apply_sine_window( x_windowed, x_ptr, 1, slope_part );
- shift = slope_part;
- silk_memcpy( x_windowed + shift, x_ptr + shift, flat_part * sizeof(opus_int16) );
- shift += flat_part;
- silk_apply_sine_window( x_windowed + shift, x_ptr + shift, 2, slope_part );
-
- /* Update pointer: next LPC analysis block */
- x_ptr += psEnc->sCmn.subfr_length;
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Calculate warped auto correlation */
- silk_warped_autocorrelation_FIX( auto_corr, &scale, x_windowed, warping_Q16, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder );
- } else {
- /* Calculate regular auto correlation */
- silk_autocorr( auto_corr, &scale, x_windowed, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder + 1, arch );
- }
-
- /* Add white noise, as a fraction of energy */
- auto_corr[0] = silk_ADD32( auto_corr[0], silk_max_32( silk_SMULWB( silk_RSHIFT( auto_corr[ 0 ], 4 ),
- SILK_FIX_CONST( SHAPE_WHITE_NOISE_FRACTION, 20 ) ), 1 ) );
-
- /* Calculate the reflection coefficients using schur */
- nrg = silk_schur64( refl_coef_Q16, auto_corr, psEnc->sCmn.shapingLPCOrder );
- silk_assert( nrg >= 0 );
-
- /* Convert reflection coefficients to prediction coefficients */
- silk_k2a_Q16( AR2_Q24, refl_coef_Q16, psEnc->sCmn.shapingLPCOrder );
-
- Qnrg = -scale; /* range: -12...30*/
- silk_assert( Qnrg >= -12 );
- silk_assert( Qnrg <= 30 );
-
- /* Make sure that Qnrg is an even number */
- if( Qnrg & 1 ) {
- Qnrg -= 1;
- nrg >>= 1;
- }
-
- tmp32 = silk_SQRT_APPROX( nrg );
- Qnrg >>= 1; /* range: -6...15*/
-
- psEncCtrl->Gains_Q16[ k ] = (silk_LSHIFT32( silk_LIMIT( (tmp32), silk_RSHIFT32( silk_int32_MIN, (16 - Qnrg) ), \
- silk_RSHIFT32( silk_int32_MAX, (16 - Qnrg) ) ), (16 - Qnrg) ));
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Adjust gain for warping */
- gain_mult_Q16 = warped_gain( AR2_Q24, warping_Q16, psEnc->sCmn.shapingLPCOrder );
- silk_assert( psEncCtrl->Gains_Q16[ k ] >= 0 );
- if ( silk_SMULWW( silk_RSHIFT_ROUND( psEncCtrl->Gains_Q16[ k ], 1 ), gain_mult_Q16 ) >= ( silk_int32_MAX >> 1 ) ) {
- psEncCtrl->Gains_Q16[ k ] = silk_int32_MAX;
- } else {
- psEncCtrl->Gains_Q16[ k ] = silk_SMULWW( psEncCtrl->Gains_Q16[ k ], gain_mult_Q16 );
- }
- }
-
- /* Bandwidth expansion for synthesis filter shaping */
- silk_bwexpander_32( AR2_Q24, psEnc->sCmn.shapingLPCOrder, BWExp2_Q16 );
-
- /* Compute noise shaping filter coefficients */
- silk_memcpy( AR1_Q24, AR2_Q24, psEnc->sCmn.shapingLPCOrder * sizeof( opus_int32 ) );
-
- /* Bandwidth expansion for analysis filter shaping */
- silk_assert( BWExp1_Q16 <= SILK_FIX_CONST( 1.0, 16 ) );
- silk_bwexpander_32( AR1_Q24, psEnc->sCmn.shapingLPCOrder, BWExp1_Q16 );
-
- /* Ratio of prediction gains, in energy domain */
- pre_nrg_Q30 = silk_LPC_inverse_pred_gain_Q24( AR2_Q24, psEnc->sCmn.shapingLPCOrder );
- nrg = silk_LPC_inverse_pred_gain_Q24( AR1_Q24, psEnc->sCmn.shapingLPCOrder );
-
- /*psEncCtrl->GainsPre[ k ] = 1.0f - 0.7f * ( 1.0f - pre_nrg / nrg ) = 0.3f + 0.7f * pre_nrg / nrg;*/
- pre_nrg_Q30 = silk_LSHIFT32( silk_SMULWB( pre_nrg_Q30, SILK_FIX_CONST( 0.7, 15 ) ), 1 );
- psEncCtrl->GainsPre_Q14[ k ] = ( opus_int ) SILK_FIX_CONST( 0.3, 14 ) + silk_DIV32_varQ( pre_nrg_Q30, nrg, 14 );
-
- /* Convert to monic warped prediction coefficients and limit absolute values */
- limit_warped_coefs( AR2_Q24, AR1_Q24, warping_Q16, SILK_FIX_CONST( 3.999, 24 ), psEnc->sCmn.shapingLPCOrder );
-
- /* Convert from Q24 to Q13 and store in int16 */
- for( i = 0; i < psEnc->sCmn.shapingLPCOrder; i++ ) {
- psEncCtrl->AR1_Q13[ k * MAX_SHAPE_LPC_ORDER + i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( AR1_Q24[ i ], 11 ) );
- psEncCtrl->AR2_Q13[ k * MAX_SHAPE_LPC_ORDER + i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( AR2_Q24[ i ], 11 ) );
- }
- }
-
- /*****************/
- /* Gain tweaking */
- /*****************/
- /* Increase gains during low speech activity and put lower limit on gains */
- gain_mult_Q16 = silk_log2lin( -silk_SMLAWB( -SILK_FIX_CONST( 16.0, 7 ), SNR_adj_dB_Q7, SILK_FIX_CONST( 0.16, 16 ) ) );
- gain_add_Q16 = silk_log2lin( silk_SMLAWB( SILK_FIX_CONST( 16.0, 7 ), SILK_FIX_CONST( MIN_QGAIN_DB, 7 ), SILK_FIX_CONST( 0.16, 16 ) ) );
- silk_assert( gain_mult_Q16 > 0 );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains_Q16[ k ] = silk_SMULWW( psEncCtrl->Gains_Q16[ k ], gain_mult_Q16 );
- silk_assert( psEncCtrl->Gains_Q16[ k ] >= 0 );
- psEncCtrl->Gains_Q16[ k ] = silk_ADD_POS_SAT32( psEncCtrl->Gains_Q16[ k ], gain_add_Q16 );
- }
-
- gain_mult_Q16 = SILK_FIX_CONST( 1.0, 16 ) + silk_RSHIFT_ROUND( silk_MLA( SILK_FIX_CONST( INPUT_TILT, 26 ),
- psEncCtrl->coding_quality_Q14, SILK_FIX_CONST( HIGH_RATE_INPUT_TILT, 12 ) ), 10 );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->GainsPre_Q14[ k ] = silk_SMULWB( gain_mult_Q16, psEncCtrl->GainsPre_Q14[ k ] );
- }
-
- /************************************************/
- /* Control low-frequency shaping and noise tilt */
- /************************************************/
- /* Less low frequency shaping for noisy inputs */
- strength_Q16 = silk_MUL( SILK_FIX_CONST( LOW_FREQ_SHAPING, 4 ), silk_SMLAWB( SILK_FIX_CONST( 1.0, 12 ),
- SILK_FIX_CONST( LOW_QUALITY_LOW_FREQ_SHAPING_DECR, 13 ), psEnc->sCmn.input_quality_bands_Q15[ 0 ] - SILK_FIX_CONST( 1.0, 15 ) ) );
- strength_Q16 = silk_RSHIFT( silk_MUL( strength_Q16, psEnc->sCmn.speech_activity_Q8 ), 8 );
- if( psEnc->sCmn.indices.signalType == 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])*/
- opus_int fs_kHz_inv = silk_DIV32_16( SILK_FIX_CONST( 0.2, 14 ), psEnc->sCmn.fs_kHz );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- b_Q14 = fs_kHz_inv + silk_DIV32_16( SILK_FIX_CONST( 3.0, 14 ), psEncCtrl->pitchL[ k ] );
- /* Pack two coefficients in one int32 */
- psEncCtrl->LF_shp_Q14[ k ] = silk_LSHIFT( SILK_FIX_CONST( 1.0, 14 ) - b_Q14 - silk_SMULWB( strength_Q16, b_Q14 ), 16 );
- psEncCtrl->LF_shp_Q14[ k ] |= (opus_uint16)( b_Q14 - SILK_FIX_CONST( 1.0, 14 ) );
- }
- silk_assert( SILK_FIX_CONST( HARM_HP_NOISE_COEF, 24 ) < SILK_FIX_CONST( 0.5, 24 ) ); /* Guarantees that second argument to SMULWB() is within range of an opus_int16*/
- Tilt_Q16 = - SILK_FIX_CONST( HP_NOISE_COEF, 16 ) -
- silk_SMULWB( SILK_FIX_CONST( 1.0, 16 ) - SILK_FIX_CONST( HP_NOISE_COEF, 16 ),
- silk_SMULWB( SILK_FIX_CONST( HARM_HP_NOISE_COEF, 24 ), psEnc->sCmn.speech_activity_Q8 ) );
- } else {
- b_Q14 = silk_DIV32_16( 21299, psEnc->sCmn.fs_kHz ); /* 1.3_Q0 = 21299_Q14*/
- /* Pack two coefficients in one int32 */
- psEncCtrl->LF_shp_Q14[ 0 ] = silk_LSHIFT( SILK_FIX_CONST( 1.0, 14 ) - b_Q14 -
- silk_SMULWB( strength_Q16, silk_SMULWB( SILK_FIX_CONST( 0.6, 16 ), b_Q14 ) ), 16 );
- psEncCtrl->LF_shp_Q14[ 0 ] |= (opus_uint16)( b_Q14 - SILK_FIX_CONST( 1.0, 14 ) );
- for( k = 1; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->LF_shp_Q14[ k ] = psEncCtrl->LF_shp_Q14[ 0 ];
- }
- Tilt_Q16 = -SILK_FIX_CONST( HP_NOISE_COEF, 16 );
- }
-
- /****************************/
- /* HARMONIC SHAPING CONTROL */
- /****************************/
- /* Control boosting of harmonic frequencies */
- HarmBoost_Q16 = silk_SMULWB( silk_SMULWB( SILK_FIX_CONST( 1.0, 17 ) - silk_LSHIFT( psEncCtrl->coding_quality_Q14, 3 ),
- psEnc->LTPCorr_Q15 ), SILK_FIX_CONST( LOW_RATE_HARMONIC_BOOST, 16 ) );
-
- /* More harmonic boost for noisy input signals */
- HarmBoost_Q16 = silk_SMLAWB( HarmBoost_Q16,
- SILK_FIX_CONST( 1.0, 16 ) - silk_LSHIFT( psEncCtrl->input_quality_Q14, 2 ), SILK_FIX_CONST( LOW_INPUT_QUALITY_HARMONIC_BOOST, 16 ) );
-
- if( USE_HARM_SHAPING && psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* More harmonic noise shaping for high bitrates or noisy input */
- HarmShapeGain_Q16 = silk_SMLAWB( SILK_FIX_CONST( HARMONIC_SHAPING, 16 ),
- SILK_FIX_CONST( 1.0, 16 ) - silk_SMULWB( SILK_FIX_CONST( 1.0, 18 ) - silk_LSHIFT( psEncCtrl->coding_quality_Q14, 4 ),
- psEncCtrl->input_quality_Q14 ), SILK_FIX_CONST( HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING, 16 ) );
-
- /* Less harmonic noise shaping for less periodic signals */
- HarmShapeGain_Q16 = silk_SMULWB( silk_LSHIFT( HarmShapeGain_Q16, 1 ),
- silk_SQRT_APPROX( silk_LSHIFT( psEnc->LTPCorr_Q15, 15 ) ) );
- } else {
- HarmShapeGain_Q16 = 0;
- }
-
- /*************************/
- /* Smooth over subframes */
- /*************************/
- for( k = 0; k < MAX_NB_SUBFR; k++ ) {
- psShapeSt->HarmBoost_smth_Q16 =
- silk_SMLAWB( psShapeSt->HarmBoost_smth_Q16, HarmBoost_Q16 - psShapeSt->HarmBoost_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) );
- psShapeSt->HarmShapeGain_smth_Q16 =
- silk_SMLAWB( psShapeSt->HarmShapeGain_smth_Q16, HarmShapeGain_Q16 - psShapeSt->HarmShapeGain_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) );
- psShapeSt->Tilt_smth_Q16 =
- silk_SMLAWB( psShapeSt->Tilt_smth_Q16, Tilt_Q16 - psShapeSt->Tilt_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) );
-
- psEncCtrl->HarmBoost_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psShapeSt->HarmBoost_smth_Q16, 2 );
- psEncCtrl->HarmShapeGain_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psShapeSt->HarmShapeGain_smth_Q16, 2 );
- psEncCtrl->Tilt_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psShapeSt->Tilt_smth_Q16, 2 );
- }
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/fixed/mips/prefilter_FIX_mipsr1.h b/drivers/opus/silk/fixed/mips/prefilter_FIX_mipsr1.h
deleted file mode 100644
index c7f04279a0..0000000000
--- a/drivers/opus/silk/fixed/mips/prefilter_FIX_mipsr1.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#ifndef __PREFILTER_FIX_MIPSR1_H__
-#define __PREFILTER_FIX_MIPSR1_H__
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/tuning_parameters.h"
-
-#define OVERRIDE_silk_warped_LPC_analysis_filter_FIX
-void silk_warped_LPC_analysis_filter_FIX(
- opus_int32 state[], /* I/O State [order + 1] */
- opus_int32 res_Q2[], /* O Residual signal [length] */
- const opus_int16 coef_Q13[], /* I Coefficients [order] */
- const opus_int16 input[], /* I Input signal [length] */
- const opus_int16 lambda_Q16, /* I Warping factor */
- const opus_int length, /* I Length of input signal */
- const opus_int order, /* I Filter order (even) */
- int arch
-)
-{
- opus_int n, i;
- opus_int32 acc_Q11, acc_Q22, tmp1, tmp2, tmp3, tmp4;
- opus_int32 state_cur, state_next;
-
- (void)arch;
-
- /* Order must be even */
- /* Length must be even */
-
- silk_assert( ( order & 1 ) == 0 );
- silk_assert( ( length & 1 ) == 0 );
-
- for( n = 0; n < length; n+=2 ) {
- /* Output of lowpass section */
- tmp2 = silk_SMLAWB( state[ 0 ], state[ 1 ], lambda_Q16 );
- state_cur = silk_LSHIFT( input[ n ], 14 );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( state[ 1 ], state[ 2 ] - tmp2, lambda_Q16 );
- state_next = tmp2;
- acc_Q11 = silk_RSHIFT( order, 1 );
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp2, coef_Q13[ 0 ] );
-
-
- /* Output of lowpass section */
- tmp4 = silk_SMLAWB( state_cur, state_next, lambda_Q16 );
- state[ 0 ] = silk_LSHIFT( input[ n+1 ], 14 );
- /* Output of allpass section */
- tmp3 = silk_SMLAWB( state_next, tmp1 - tmp4, lambda_Q16 );
- state[ 1 ] = tmp4;
- acc_Q22 = silk_RSHIFT( order, 1 );
- acc_Q22 = silk_SMLAWB( acc_Q22, tmp4, coef_Q13[ 0 ] );
-
- /* Loop over allpass sections */
- for( i = 2; i < order; i += 2 ) {
- /* Output of allpass section */
- tmp2 = silk_SMLAWB( state[ i ], state[ i + 1 ] - tmp1, lambda_Q16 );
- state_cur = tmp1;
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp1, coef_Q13[ i - 1 ] );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( state[ i + 1 ], state[ i + 2 ] - tmp2, lambda_Q16 );
- state_next = tmp2;
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp2, coef_Q13[ i ] );
-
-
- /* Output of allpass section */
- tmp4 = silk_SMLAWB( state_cur, state_next - tmp3, lambda_Q16 );
- state[ i ] = tmp3;
- acc_Q22 = silk_SMLAWB( acc_Q22, tmp3, coef_Q13[ i - 1 ] );
- /* Output of allpass section */
- tmp3 = silk_SMLAWB( state_next, tmp1 - tmp4, lambda_Q16 );
- state[ i + 1 ] = tmp4;
- acc_Q22 = silk_SMLAWB( acc_Q22, tmp4, coef_Q13[ i ] );
- }
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp1, coef_Q13[ order - 1 ] );
- res_Q2[ n ] = silk_LSHIFT( (opus_int32)input[ n ], 2 ) - silk_RSHIFT_ROUND( acc_Q11, 9 );
-
- state[ order ] = tmp3;
- acc_Q22 = silk_SMLAWB( acc_Q22, tmp3, coef_Q13[ order - 1 ] );
- res_Q2[ n+1 ] = silk_LSHIFT( (opus_int32)input[ n+1 ], 2 ) - silk_RSHIFT_ROUND( acc_Q22, 9 );
- }
-}
-
-
-
-/* Prefilter for finding Quantizer input signal */
-#define OVERRIDE_silk_prefilt_FIX
-static inline void silk_prefilt_FIX(
- silk_prefilter_state_FIX *P, /* I/O state */
- opus_int32 st_res_Q12[], /* I short term residual signal */
- opus_int32 xw_Q3[], /* O prefiltered signal */
- opus_int32 HarmShapeFIRPacked_Q12, /* I Harmonic shaping coeficients */
- opus_int Tilt_Q14, /* I Tilt shaping coeficient */
- opus_int32 LF_shp_Q14, /* I Low-frequancy shaping coeficients */
- opus_int lag, /* I Lag for harmonic shaping */
- opus_int length /* I Length of signals */
-)
-{
- opus_int i, idx, LTP_shp_buf_idx;
- opus_int32 n_LTP_Q12, n_Tilt_Q10, n_LF_Q10;
- opus_int32 sLF_MA_shp_Q12, sLF_AR_shp_Q12;
- opus_int16 *LTP_shp_buf;
-
- /* To speed up use temp variables instead of using the struct */
- LTP_shp_buf = P->sLTP_shp;
- LTP_shp_buf_idx = P->sLTP_shp_buf_idx;
- sLF_AR_shp_Q12 = P->sLF_AR_shp_Q12;
- sLF_MA_shp_Q12 = P->sLF_MA_shp_Q12;
-
- if( lag > 0 ) {
- for( i = 0; i < length; i++ ) {
- /* unrolled loop */
- silk_assert( HARM_SHAPE_FIR_TAPS == 3 );
- idx = lag + LTP_shp_buf_idx;
- n_LTP_Q12 = silk_SMULBB( LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 - 1) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
- n_LTP_Q12 = silk_SMLABT( n_LTP_Q12, LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 ) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
- n_LTP_Q12 = silk_SMLABB( n_LTP_Q12, LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 + 1) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
-
- n_Tilt_Q10 = silk_SMULWB( sLF_AR_shp_Q12, Tilt_Q14 );
- n_LF_Q10 = silk_SMLAWB( silk_SMULWT( sLF_AR_shp_Q12, LF_shp_Q14 ), sLF_MA_shp_Q12, LF_shp_Q14 );
-
- sLF_AR_shp_Q12 = silk_SUB32( st_res_Q12[ i ], silk_LSHIFT( n_Tilt_Q10, 2 ) );
- sLF_MA_shp_Q12 = silk_SUB32( sLF_AR_shp_Q12, silk_LSHIFT( n_LF_Q10, 2 ) );
-
- LTP_shp_buf_idx = ( LTP_shp_buf_idx - 1 ) & LTP_MASK;
- LTP_shp_buf[ LTP_shp_buf_idx ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( sLF_MA_shp_Q12, 12 ) );
-
- xw_Q3[i] = silk_RSHIFT_ROUND( silk_SUB32( sLF_MA_shp_Q12, n_LTP_Q12 ), 9 );
- }
- }
- else
- {
- for( i = 0; i < length; i++ ) {
-
- n_LTP_Q12 = 0;
-
- n_Tilt_Q10 = silk_SMULWB( sLF_AR_shp_Q12, Tilt_Q14 );
- n_LF_Q10 = silk_SMLAWB( silk_SMULWT( sLF_AR_shp_Q12, LF_shp_Q14 ), sLF_MA_shp_Q12, LF_shp_Q14 );
-
- sLF_AR_shp_Q12 = silk_SUB32( st_res_Q12[ i ], silk_LSHIFT( n_Tilt_Q10, 2 ) );
- sLF_MA_shp_Q12 = silk_SUB32( sLF_AR_shp_Q12, silk_LSHIFT( n_LF_Q10, 2 ) );
-
- LTP_shp_buf_idx = ( LTP_shp_buf_idx - 1 ) & LTP_MASK;
- LTP_shp_buf[ LTP_shp_buf_idx ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( sLF_MA_shp_Q12, 12 ) );
-
- xw_Q3[i] = silk_RSHIFT_ROUND( sLF_MA_shp_Q12, 9 );
- }
- }
-
- /* Copy temp variable back to state */
- P->sLF_AR_shp_Q12 = sLF_AR_shp_Q12;
- P->sLF_MA_shp_Q12 = sLF_MA_shp_Q12;
- P->sLTP_shp_buf_idx = LTP_shp_buf_idx;
-}
-
-#endif /* __PREFILTER_FIX_MIPSR1_H__ */
diff --git a/drivers/opus/silk/fixed/mips/warped_autocorrelation_FIX_mipsr1.h b/drivers/opus/silk/fixed/mips/warped_autocorrelation_FIX_mipsr1.h
deleted file mode 100644
index eba7711db7..0000000000
--- a/drivers/opus/silk/fixed/mips/warped_autocorrelation_FIX_mipsr1.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef __WARPED_AUTOCORRELATION_FIX_MIPSR1_H__
-#define __WARPED_AUTOCORRELATION_FIX_MIPSR1_H__
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-
-#undef QC
-#define QC 10
-
-#undef QS
-#define QS 14
-
-/* Autocorrelations for a warped frequency axis */
-#define OVERRIDE_silk_warped_autocorrelation_FIX
-void silk_warped_autocorrelation_FIX(
- opus_int32 *corr, /* O Result [order + 1] */
- opus_int *scale, /* O Scaling of the correlation vector */
- const opus_int16 *input, /* I Input data to correlate */
- const opus_int warping_Q16, /* I Warping coefficient */
- const opus_int length, /* I Length of input */
- const opus_int order /* I Correlation order (even) */
-)
-{
- opus_int n, i, lsh;
- opus_int32 tmp1_QS=0, tmp2_QS=0, tmp3_QS=0, tmp4_QS=0, tmp5_QS=0, tmp6_QS=0, tmp7_QS=0, tmp8_QS=0, start_1=0, start_2=0, start_3=0;
- opus_int32 state_QS[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 };
- opus_int64 corr_QC[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 };
- opus_int64 temp64;
-
- opus_int32 val;
- val = 2 * QS - QC;
-
- /* Order must be even */
- silk_assert( ( order & 1 ) == 0 );
- silk_assert( 2 * QS - QC >= 0 );
-
- /* Loop over samples */
- for( n = 0; n < length; n=n+4 ) {
-
- tmp1_QS = silk_LSHIFT32( (opus_int32)input[ n ], QS );
- start_1 = tmp1_QS;
- tmp3_QS = silk_LSHIFT32( (opus_int32)input[ n+1], QS );
- start_2 = tmp3_QS;
- tmp5_QS = silk_LSHIFT32( (opus_int32)input[ n+2], QS );
- start_3 = tmp5_QS;
- tmp7_QS = silk_LSHIFT32( (opus_int32)input[ n+3], QS );
-
- /* Loop over allpass sections */
- for( i = 0; i < order; i += 2 ) {
- /* Output of allpass section */
- tmp2_QS = silk_SMLAWB( state_QS[ i ], state_QS[ i + 1 ] - tmp1_QS, warping_Q16 );
- corr_QC[ i ] = __builtin_mips_madd( corr_QC[ i ], tmp1_QS, start_1);
-
- tmp4_QS = silk_SMLAWB( tmp1_QS, tmp2_QS - tmp3_QS, warping_Q16 );
- corr_QC[ i ] = __builtin_mips_madd( corr_QC[ i ], tmp3_QS, start_2);
-
- tmp6_QS = silk_SMLAWB( tmp3_QS, tmp4_QS - tmp5_QS, warping_Q16 );
- corr_QC[ i ] = __builtin_mips_madd( corr_QC[ i ], tmp5_QS, start_3);
-
- tmp8_QS = silk_SMLAWB( tmp5_QS, tmp6_QS - tmp7_QS, warping_Q16 );
- state_QS[ i ] = tmp7_QS;
- corr_QC[ i ] = __builtin_mips_madd( corr_QC[ i ], tmp7_QS, state_QS[0]);
-
- /* Output of allpass section */
- tmp1_QS = silk_SMLAWB( state_QS[ i + 1 ], state_QS[ i + 2 ] - tmp2_QS, warping_Q16 );
- corr_QC[ i+1 ] = __builtin_mips_madd( corr_QC[ i+1 ], tmp2_QS, start_1);
-
- tmp3_QS = silk_SMLAWB( tmp2_QS, tmp1_QS - tmp4_QS, warping_Q16 );
- corr_QC[ i+1 ] = __builtin_mips_madd( corr_QC[ i+1 ], tmp4_QS, start_2);
-
- tmp5_QS = silk_SMLAWB( tmp4_QS, tmp3_QS - tmp6_QS, warping_Q16 );
- corr_QC[ i+1 ] = __builtin_mips_madd( corr_QC[ i+1 ], tmp6_QS, start_3);
-
- tmp7_QS = silk_SMLAWB( tmp6_QS, tmp5_QS - tmp8_QS, warping_Q16 );
- state_QS[ i + 1 ] = tmp8_QS;
- corr_QC[ i+1 ] = __builtin_mips_madd( corr_QC[ i+1 ], tmp8_QS, state_QS[ 0 ]);
-
- }
- state_QS[ order ] = tmp7_QS;
-
- corr_QC[ order ] = __builtin_mips_madd( corr_QC[ order ], tmp1_QS, start_1);
- corr_QC[ order ] = __builtin_mips_madd( corr_QC[ order ], tmp3_QS, start_2);
- corr_QC[ order ] = __builtin_mips_madd( corr_QC[ order ], tmp5_QS, start_3);
- corr_QC[ order ] = __builtin_mips_madd( corr_QC[ order ], tmp7_QS, state_QS[ 0 ]);
- }
-
- for(;n< length; n++ ) {
-
- tmp1_QS = silk_LSHIFT32( (opus_int32)input[ n ], QS );
-
- /* Loop over allpass sections */
- for( i = 0; i < order; i += 2 ) {
-
- /* Output of allpass section */
- tmp2_QS = silk_SMLAWB( state_QS[ i ], state_QS[ i + 1 ] - tmp1_QS, warping_Q16 );
- state_QS[ i ] = tmp1_QS;
- corr_QC[ i ] = __builtin_mips_madd( corr_QC[ i ], tmp1_QS, state_QS[ 0 ]);
-
- /* Output of allpass section */
- tmp1_QS = silk_SMLAWB( state_QS[ i + 1 ], state_QS[ i + 2 ] - tmp2_QS, warping_Q16 );
- state_QS[ i + 1 ] = tmp2_QS;
- corr_QC[ i+1 ] = __builtin_mips_madd( corr_QC[ i+1 ], tmp2_QS, state_QS[ 0 ]);
- }
- state_QS[ order ] = tmp1_QS;
- corr_QC[ order ] = __builtin_mips_madd( corr_QC[ order ], tmp1_QS, state_QS[ 0 ]);
- }
-
- temp64 = corr_QC[ 0 ];
- temp64 = __builtin_mips_shilo(temp64, val);
-
- lsh = silk_CLZ64( temp64 ) - 35;
- lsh = silk_LIMIT( lsh, -12 - QC, 30 - QC );
- *scale = -( QC + lsh );
- silk_assert( *scale >= -30 && *scale <= 12 );
- if( lsh >= 0 ) {
- for( i = 0; i < order + 1; i++ ) {
- temp64 = corr_QC[ i ];
- //temp64 = __builtin_mips_shilo(temp64, val);
- temp64 = (val >= 0) ? (temp64 >> val) : (temp64 << -val);
- corr[ i ] = (opus_int32)silk_CHECK_FIT32( __builtin_mips_shilo( temp64, -lsh ) );
- }
- } else {
- for( i = 0; i < order + 1; i++ ) {
- temp64 = corr_QC[ i ];
- //temp64 = __builtin_mips_shilo(temp64, val);
- temp64 = (val >= 0) ? (temp64 >> val) : (temp64 << -val);
- corr[ i ] = (opus_int32)silk_CHECK_FIT32( __builtin_mips_shilo( temp64, -lsh ) );
- }
- }
-
- corr_QC[ 0 ] = __builtin_mips_shilo(corr_QC[ 0 ], val);
-
- silk_assert( corr_QC[ 0 ] >= 0 ); /* If breaking, decrease QC*/
-}
-#endif /* __WARPED_AUTOCORRELATION_FIX_MIPSR1_H__ */
diff --git a/drivers/opus/silk/fixed/noise_shape_analysis_FIX.c b/drivers/opus/silk/fixed/noise_shape_analysis_FIX.c
deleted file mode 100644
index 6f1dc3ddd5..0000000000
--- a/drivers/opus/silk/fixed/noise_shape_analysis_FIX.c
+++ /dev/null
@@ -1,448 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Compute gain to make warped filter coefficients have a zero mean log frequency response on a */
-/* non-warped frequency scale. (So that it can be implemented with a minimum-phase monic filter.) */
-/* Note: A monic filter is one with the first coefficient equal to 1.0. In Silk we omit the first */
-/* coefficient in an array of coefficients, for monic filters. */
-static OPUS_INLINE opus_int32 warped_gain( /* gain in Q16*/
- const opus_int32 *coefs_Q24,
- opus_int lambda_Q16,
- opus_int order
-) {
- opus_int i;
- opus_int32 gain_Q24;
-
- lambda_Q16 = -lambda_Q16;
- gain_Q24 = coefs_Q24[ order - 1 ];
- for( i = order - 2; i >= 0; i-- ) {
- gain_Q24 = silk_SMLAWB( coefs_Q24[ i ], gain_Q24, lambda_Q16 );
- }
- gain_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), gain_Q24, -lambda_Q16 );
- return silk_INVERSE32_varQ( gain_Q24, 40 );
-}
-
-/* Convert warped filter coefficients to monic pseudo-warped coefficients and limit maximum */
-/* amplitude of monic warped coefficients by using bandwidth expansion on the true coefficients */
-static OPUS_INLINE void limit_warped_coefs(
- opus_int32 *coefs_syn_Q24,
- opus_int32 *coefs_ana_Q24,
- opus_int lambda_Q16,
- opus_int32 limit_Q24,
- opus_int order
-) {
- opus_int i, iter, ind = 0;
- opus_int32 tmp, maxabs_Q24, chirp_Q16, gain_syn_Q16, gain_ana_Q16;
- opus_int32 nom_Q16, den_Q24;
-
- /* Convert to monic coefficients */
- lambda_Q16 = -lambda_Q16;
- for( i = order - 1; i > 0; i-- ) {
- coefs_syn_Q24[ i - 1 ] = silk_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 );
- coefs_ana_Q24[ i - 1 ] = silk_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 );
- }
- lambda_Q16 = -lambda_Q16;
- nom_Q16 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 16 ), -(opus_int32)lambda_Q16, lambda_Q16 );
- den_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), coefs_syn_Q24[ 0 ], lambda_Q16 );
- gain_syn_Q16 = silk_DIV32_varQ( nom_Q16, den_Q24, 24 );
- den_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), coefs_ana_Q24[ 0 ], lambda_Q16 );
- gain_ana_Q16 = silk_DIV32_varQ( nom_Q16, den_Q24, 24 );
- for( i = 0; i < order; i++ ) {
- coefs_syn_Q24[ i ] = silk_SMULWW( gain_syn_Q16, coefs_syn_Q24[ i ] );
- coefs_ana_Q24[ i ] = silk_SMULWW( gain_ana_Q16, coefs_ana_Q24[ i ] );
- }
-
- for( iter = 0; iter < 10; iter++ ) {
- /* Find maximum absolute value */
- maxabs_Q24 = -1;
- for( i = 0; i < order; i++ ) {
- tmp = silk_max( silk_abs_int32( coefs_syn_Q24[ i ] ), silk_abs_int32( coefs_ana_Q24[ i ] ) );
- if( tmp > maxabs_Q24 ) {
- maxabs_Q24 = tmp;
- ind = i;
- }
- }
- if( maxabs_Q24 <= limit_Q24 ) {
- /* Coefficients are within range - done */
- return;
- }
-
- /* Convert back to true warped coefficients */
- for( i = 1; i < order; i++ ) {
- coefs_syn_Q24[ i - 1 ] = silk_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 );
- coefs_ana_Q24[ i - 1 ] = silk_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 );
- }
- gain_syn_Q16 = silk_INVERSE32_varQ( gain_syn_Q16, 32 );
- gain_ana_Q16 = silk_INVERSE32_varQ( gain_ana_Q16, 32 );
- for( i = 0; i < order; i++ ) {
- coefs_syn_Q24[ i ] = silk_SMULWW( gain_syn_Q16, coefs_syn_Q24[ i ] );
- coefs_ana_Q24[ i ] = silk_SMULWW( gain_ana_Q16, coefs_ana_Q24[ i ] );
- }
-
- /* Apply bandwidth expansion */
- chirp_Q16 = SILK_FIX_CONST( 0.99, 16 ) - silk_DIV32_varQ(
- silk_SMULWB( maxabs_Q24 - limit_Q24, silk_SMLABB( SILK_FIX_CONST( 0.8, 10 ), SILK_FIX_CONST( 0.1, 10 ), iter ) ),
- silk_MUL( maxabs_Q24, ind + 1 ), 22 );
- silk_bwexpander_32( coefs_syn_Q24, order, chirp_Q16 );
- silk_bwexpander_32( coefs_ana_Q24, order, chirp_Q16 );
-
- /* Convert to monic warped coefficients */
- lambda_Q16 = -lambda_Q16;
- for( i = order - 1; i > 0; i-- ) {
- coefs_syn_Q24[ i - 1 ] = silk_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 );
- coefs_ana_Q24[ i - 1 ] = silk_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 );
- }
- lambda_Q16 = -lambda_Q16;
- nom_Q16 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 16 ), -(opus_int32)lambda_Q16, lambda_Q16 );
- den_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), coefs_syn_Q24[ 0 ], lambda_Q16 );
- gain_syn_Q16 = silk_DIV32_varQ( nom_Q16, den_Q24, 24 );
- den_Q24 = silk_SMLAWB( SILK_FIX_CONST( 1.0, 24 ), coefs_ana_Q24[ 0 ], lambda_Q16 );
- gain_ana_Q16 = silk_DIV32_varQ( nom_Q16, den_Q24, 24 );
- for( i = 0; i < order; i++ ) {
- coefs_syn_Q24[ i ] = silk_SMULWW( gain_syn_Q16, coefs_syn_Q24[ i ] );
- coefs_ana_Q24[ i ] = silk_SMULWW( gain_ana_Q16, coefs_ana_Q24[ i ] );
- }
- }
- silk_assert( 0 );
-}
-
-#if defined(MIPSr1_ASM)
-#include "opus/silk/fixed/mips/noise_shape_analysis_FIX_mipsr1.h"
-#endif
-
-/**************************************************************/
-/* Compute noise shaping coefficients and initial gain values */
-/**************************************************************/
-#ifndef OVERRIDE_silk_noise_shape_analysis_FIX
-void silk_noise_shape_analysis_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Encoder state FIX */
- silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control FIX */
- const opus_int16 *pitch_res, /* I LPC residual from pitch analysis */
- const opus_int16 *x, /* I Input signal [ frame_length + la_shape ] */
- int arch /* I Run-time architecture */
-)
-{
- silk_shape_state_FIX *psShapeSt = &psEnc->sShape;
- opus_int k, i, nSamples, Qnrg, b_Q14, warping_Q16, scale = 0;
- opus_int32 SNR_adj_dB_Q7, HarmBoost_Q16, HarmShapeGain_Q16, Tilt_Q16, tmp32;
- opus_int32 nrg, pre_nrg_Q30, log_energy_Q7, log_energy_prev_Q7, energy_variation_Q7;
- opus_int32 delta_Q16, BWExp1_Q16, BWExp2_Q16, gain_mult_Q16, gain_add_Q16, strength_Q16, b_Q8;
- opus_int32 auto_corr[ MAX_SHAPE_LPC_ORDER + 1 ];
- opus_int32 refl_coef_Q16[ MAX_SHAPE_LPC_ORDER ];
- opus_int32 AR1_Q24[ MAX_SHAPE_LPC_ORDER ];
- opus_int32 AR2_Q24[ MAX_SHAPE_LPC_ORDER ];
- VARDECL( opus_int16, x_windowed );
- const opus_int16 *x_ptr, *pitch_res_ptr;
- SAVE_STACK;
-
- /* Point to start of first LPC analysis block */
- x_ptr = x - psEnc->sCmn.la_shape;
-
- /****************/
- /* GAIN CONTROL */
- /****************/
- SNR_adj_dB_Q7 = psEnc->sCmn.SNR_dB_Q7;
-
- /* Input quality is the average of the quality in the lowest two VAD bands */
- psEncCtrl->input_quality_Q14 = ( opus_int )silk_RSHIFT( (opus_int32)psEnc->sCmn.input_quality_bands_Q15[ 0 ]
- + psEnc->sCmn.input_quality_bands_Q15[ 1 ], 2 );
-
- /* Coding quality level, between 0.0_Q0 and 1.0_Q0, but in Q14 */
- psEncCtrl->coding_quality_Q14 = silk_RSHIFT( silk_sigm_Q15( silk_RSHIFT_ROUND( SNR_adj_dB_Q7 -
- SILK_FIX_CONST( 20.0, 7 ), 4 ) ), 1 );
-
- /* Reduce coding SNR during low speech activity */
- if( psEnc->sCmn.useCBR == 0 ) {
- b_Q8 = SILK_FIX_CONST( 1.0, 8 ) - psEnc->sCmn.speech_activity_Q8;
- b_Q8 = silk_SMULWB( silk_LSHIFT( b_Q8, 8 ), b_Q8 );
- SNR_adj_dB_Q7 = silk_SMLAWB( SNR_adj_dB_Q7,
- silk_SMULBB( SILK_FIX_CONST( -BG_SNR_DECR_dB, 7 ) >> ( 4 + 1 ), b_Q8 ), /* Q11*/
- silk_SMULWB( SILK_FIX_CONST( 1.0, 14 ) + psEncCtrl->input_quality_Q14, psEncCtrl->coding_quality_Q14 ) ); /* Q12*/
- }
-
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Reduce gains for periodic signals */
- SNR_adj_dB_Q7 = silk_SMLAWB( SNR_adj_dB_Q7, SILK_FIX_CONST( HARM_SNR_INCR_dB, 8 ), psEnc->LTPCorr_Q15 );
- } else {
- /* For unvoiced signals and low-quality input, adjust the quality slower than SNR_dB setting */
- SNR_adj_dB_Q7 = silk_SMLAWB( SNR_adj_dB_Q7,
- silk_SMLAWB( SILK_FIX_CONST( 6.0, 9 ), -SILK_FIX_CONST( 0.4, 18 ), psEnc->sCmn.SNR_dB_Q7 ),
- SILK_FIX_CONST( 1.0, 14 ) - psEncCtrl->input_quality_Q14 );
- }
-
- /*************************/
- /* SPARSENESS PROCESSING */
- /*************************/
- /* Set quantizer offset */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Initially set to 0; may be overruled in process_gains(..) */
- psEnc->sCmn.indices.quantOffsetType = 0;
- psEncCtrl->sparseness_Q8 = 0;
- } else {
- /* Sparseness measure, based on relative fluctuations of energy per 2 milliseconds */
- nSamples = silk_LSHIFT( psEnc->sCmn.fs_kHz, 1 );
- energy_variation_Q7 = 0;
- log_energy_prev_Q7 = 0;
- pitch_res_ptr = pitch_res;
- for( k = 0; k < silk_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) / 2; k++ ) {
- silk_sum_sqr_shift( &nrg, &scale, pitch_res_ptr, nSamples );
- nrg += silk_RSHIFT( nSamples, scale ); /* Q(-scale)*/
-
- log_energy_Q7 = silk_lin2log( nrg );
- if( k > 0 ) {
- energy_variation_Q7 += silk_abs( log_energy_Q7 - log_energy_prev_Q7 );
- }
- log_energy_prev_Q7 = log_energy_Q7;
- pitch_res_ptr += nSamples;
- }
-
- psEncCtrl->sparseness_Q8 = silk_RSHIFT( silk_sigm_Q15( silk_SMULWB( energy_variation_Q7 -
- SILK_FIX_CONST( 5.0, 7 ), SILK_FIX_CONST( 0.1, 16 ) ) ), 7 );
-
- /* Set quantization offset depending on sparseness measure */
- if( psEncCtrl->sparseness_Q8 > SILK_FIX_CONST( SPARSENESS_THRESHOLD_QNT_OFFSET, 8 ) ) {
- psEnc->sCmn.indices.quantOffsetType = 0;
- } else {
- psEnc->sCmn.indices.quantOffsetType = 1;
- }
-
- /* Increase coding SNR for sparse signals */
- SNR_adj_dB_Q7 = silk_SMLAWB( SNR_adj_dB_Q7, SILK_FIX_CONST( SPARSE_SNR_INCR_dB, 15 ), psEncCtrl->sparseness_Q8 - SILK_FIX_CONST( 0.5, 8 ) );
- }
-
- /*******************************/
- /* Control bandwidth expansion */
- /*******************************/
- /* More BWE for signals with high prediction gain */
- strength_Q16 = silk_SMULWB( psEncCtrl->predGain_Q16, SILK_FIX_CONST( FIND_PITCH_WHITE_NOISE_FRACTION, 16 ) );
- BWExp1_Q16 = BWExp2_Q16 = silk_DIV32_varQ( SILK_FIX_CONST( BANDWIDTH_EXPANSION, 16 ),
- silk_SMLAWW( SILK_FIX_CONST( 1.0, 16 ), strength_Q16, strength_Q16 ), 16 );
- delta_Q16 = silk_SMULWB( SILK_FIX_CONST( 1.0, 16 ) - silk_SMULBB( 3, psEncCtrl->coding_quality_Q14 ),
- SILK_FIX_CONST( LOW_RATE_BANDWIDTH_EXPANSION_DELTA, 16 ) );
- BWExp1_Q16 = silk_SUB32( BWExp1_Q16, delta_Q16 );
- BWExp2_Q16 = silk_ADD32( BWExp2_Q16, delta_Q16 );
- /* BWExp1 will be applied after BWExp2, so make it relative */
- BWExp1_Q16 = silk_DIV32_16( silk_LSHIFT( BWExp1_Q16, 14 ), silk_RSHIFT( BWExp2_Q16, 2 ) );
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Slightly more warping in analysis will move quantization noise up in frequency, where it's better masked */
- warping_Q16 = silk_SMLAWB( psEnc->sCmn.warping_Q16, (opus_int32)psEncCtrl->coding_quality_Q14, SILK_FIX_CONST( 0.01, 18 ) );
- } else {
- warping_Q16 = 0;
- }
-
- /********************************************/
- /* Compute noise shaping AR coefs and gains */
- /********************************************/
- ALLOC( x_windowed, psEnc->sCmn.shapeWinLength, opus_int16 );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- /* Apply window: sine slope followed by flat part followed by cosine slope */
- opus_int shift, slope_part, flat_part;
- flat_part = psEnc->sCmn.fs_kHz * 3;
- slope_part = silk_RSHIFT( psEnc->sCmn.shapeWinLength - flat_part, 1 );
-
- silk_apply_sine_window( x_windowed, x_ptr, 1, slope_part );
- shift = slope_part;
- silk_memcpy( x_windowed + shift, x_ptr + shift, flat_part * sizeof(opus_int16) );
- shift += flat_part;
- silk_apply_sine_window( x_windowed + shift, x_ptr + shift, 2, slope_part );
-
- /* Update pointer: next LPC analysis block */
- x_ptr += psEnc->sCmn.subfr_length;
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Calculate warped auto correlation */
- silk_warped_autocorrelation_FIX( auto_corr, &scale, x_windowed, warping_Q16, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder );
- } else {
- /* Calculate regular auto correlation */
- silk_autocorr( auto_corr, &scale, x_windowed, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder + 1, arch );
- }
-
- /* Add white noise, as a fraction of energy */
- auto_corr[0] = silk_ADD32( auto_corr[0], silk_max_32( silk_SMULWB( silk_RSHIFT( auto_corr[ 0 ], 4 ),
- SILK_FIX_CONST( SHAPE_WHITE_NOISE_FRACTION, 20 ) ), 1 ) );
-
- /* Calculate the reflection coefficients using schur */
- nrg = silk_schur64( refl_coef_Q16, auto_corr, psEnc->sCmn.shapingLPCOrder );
- silk_assert( nrg >= 0 );
-
- /* Convert reflection coefficients to prediction coefficients */
- silk_k2a_Q16( AR2_Q24, refl_coef_Q16, psEnc->sCmn.shapingLPCOrder );
-
- Qnrg = -scale; /* range: -12...30*/
- silk_assert( Qnrg >= -12 );
- silk_assert( Qnrg <= 30 );
-
- /* Make sure that Qnrg is an even number */
- if( Qnrg & 1 ) {
- Qnrg -= 1;
- nrg >>= 1;
- }
-
- tmp32 = silk_SQRT_APPROX( nrg );
- Qnrg >>= 1; /* range: -6...15*/
-
- psEncCtrl->Gains_Q16[ k ] = silk_LSHIFT_SAT32( tmp32, 16 - Qnrg );
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Adjust gain for warping */
- gain_mult_Q16 = warped_gain( AR2_Q24, warping_Q16, psEnc->sCmn.shapingLPCOrder );
- silk_assert( psEncCtrl->Gains_Q16[ k ] >= 0 );
- if ( silk_SMULWW( silk_RSHIFT_ROUND( psEncCtrl->Gains_Q16[ k ], 1 ), gain_mult_Q16 ) >= ( silk_int32_MAX >> 1 ) ) {
- psEncCtrl->Gains_Q16[ k ] = silk_int32_MAX;
- } else {
- psEncCtrl->Gains_Q16[ k ] = silk_SMULWW( psEncCtrl->Gains_Q16[ k ], gain_mult_Q16 );
- }
- }
-
- /* Bandwidth expansion for synthesis filter shaping */
- silk_bwexpander_32( AR2_Q24, psEnc->sCmn.shapingLPCOrder, BWExp2_Q16 );
-
- /* Compute noise shaping filter coefficients */
- silk_memcpy( AR1_Q24, AR2_Q24, psEnc->sCmn.shapingLPCOrder * sizeof( opus_int32 ) );
-
- /* Bandwidth expansion for analysis filter shaping */
- silk_assert( BWExp1_Q16 <= SILK_FIX_CONST( 1.0, 16 ) );
- silk_bwexpander_32( AR1_Q24, psEnc->sCmn.shapingLPCOrder, BWExp1_Q16 );
-
- /* Ratio of prediction gains, in energy domain */
- pre_nrg_Q30 = silk_LPC_inverse_pred_gain_Q24( AR2_Q24, psEnc->sCmn.shapingLPCOrder );
- nrg = silk_LPC_inverse_pred_gain_Q24( AR1_Q24, psEnc->sCmn.shapingLPCOrder );
-
- /*psEncCtrl->GainsPre[ k ] = 1.0f - 0.7f * ( 1.0f - pre_nrg / nrg ) = 0.3f + 0.7f * pre_nrg / nrg;*/
- pre_nrg_Q30 = silk_LSHIFT32( silk_SMULWB( pre_nrg_Q30, SILK_FIX_CONST( 0.7, 15 ) ), 1 );
- psEncCtrl->GainsPre_Q14[ k ] = ( opus_int ) SILK_FIX_CONST( 0.3, 14 ) + silk_DIV32_varQ( pre_nrg_Q30, nrg, 14 );
-
- /* Convert to monic warped prediction coefficients and limit absolute values */
- limit_warped_coefs( AR2_Q24, AR1_Q24, warping_Q16, SILK_FIX_CONST( 3.999, 24 ), psEnc->sCmn.shapingLPCOrder );
-
- /* Convert from Q24 to Q13 and store in int16 */
- for( i = 0; i < psEnc->sCmn.shapingLPCOrder; i++ ) {
- psEncCtrl->AR1_Q13[ k * MAX_SHAPE_LPC_ORDER + i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( AR1_Q24[ i ], 11 ) );
- psEncCtrl->AR2_Q13[ k * MAX_SHAPE_LPC_ORDER + i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( AR2_Q24[ i ], 11 ) );
- }
- }
-
- /*****************/
- /* Gain tweaking */
- /*****************/
- /* Increase gains during low speech activity and put lower limit on gains */
- gain_mult_Q16 = silk_log2lin( -silk_SMLAWB( -SILK_FIX_CONST( 16.0, 7 ), SNR_adj_dB_Q7, SILK_FIX_CONST( 0.16, 16 ) ) );
- gain_add_Q16 = silk_log2lin( silk_SMLAWB( SILK_FIX_CONST( 16.0, 7 ), SILK_FIX_CONST( MIN_QGAIN_DB, 7 ), SILK_FIX_CONST( 0.16, 16 ) ) );
- silk_assert( gain_mult_Q16 > 0 );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains_Q16[ k ] = silk_SMULWW( psEncCtrl->Gains_Q16[ k ], gain_mult_Q16 );
- silk_assert( psEncCtrl->Gains_Q16[ k ] >= 0 );
- psEncCtrl->Gains_Q16[ k ] = silk_ADD_POS_SAT32( psEncCtrl->Gains_Q16[ k ], gain_add_Q16 );
- }
-
- gain_mult_Q16 = SILK_FIX_CONST( 1.0, 16 ) + silk_RSHIFT_ROUND( silk_MLA( SILK_FIX_CONST( INPUT_TILT, 26 ),
- psEncCtrl->coding_quality_Q14, SILK_FIX_CONST( HIGH_RATE_INPUT_TILT, 12 ) ), 10 );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->GainsPre_Q14[ k ] = silk_SMULWB( gain_mult_Q16, psEncCtrl->GainsPre_Q14[ k ] );
- }
-
- /************************************************/
- /* Control low-frequency shaping and noise tilt */
- /************************************************/
- /* Less low frequency shaping for noisy inputs */
- strength_Q16 = silk_MUL( SILK_FIX_CONST( LOW_FREQ_SHAPING, 4 ), silk_SMLAWB( SILK_FIX_CONST( 1.0, 12 ),
- SILK_FIX_CONST( LOW_QUALITY_LOW_FREQ_SHAPING_DECR, 13 ), psEnc->sCmn.input_quality_bands_Q15[ 0 ] - SILK_FIX_CONST( 1.0, 15 ) ) );
- strength_Q16 = silk_RSHIFT( silk_MUL( strength_Q16, psEnc->sCmn.speech_activity_Q8 ), 8 );
- if( psEnc->sCmn.indices.signalType == 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])*/
- opus_int fs_kHz_inv = silk_DIV32_16( SILK_FIX_CONST( 0.2, 14 ), psEnc->sCmn.fs_kHz );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- b_Q14 = fs_kHz_inv + silk_DIV32_16( SILK_FIX_CONST( 3.0, 14 ), psEncCtrl->pitchL[ k ] );
- /* Pack two coefficients in one int32 */
- psEncCtrl->LF_shp_Q14[ k ] = silk_LSHIFT( SILK_FIX_CONST( 1.0, 14 ) - b_Q14 - silk_SMULWB( strength_Q16, b_Q14 ), 16 );
- psEncCtrl->LF_shp_Q14[ k ] |= (opus_uint16)( b_Q14 - SILK_FIX_CONST( 1.0, 14 ) );
- }
- silk_assert( SILK_FIX_CONST( HARM_HP_NOISE_COEF, 24 ) < SILK_FIX_CONST( 0.5, 24 ) ); /* Guarantees that second argument to SMULWB() is within range of an opus_int16*/
- Tilt_Q16 = - SILK_FIX_CONST( HP_NOISE_COEF, 16 ) -
- silk_SMULWB( SILK_FIX_CONST( 1.0, 16 ) - SILK_FIX_CONST( HP_NOISE_COEF, 16 ),
- silk_SMULWB( SILK_FIX_CONST( HARM_HP_NOISE_COEF, 24 ), psEnc->sCmn.speech_activity_Q8 ) );
- } else {
- b_Q14 = silk_DIV32_16( 21299, psEnc->sCmn.fs_kHz ); /* 1.3_Q0 = 21299_Q14*/
- /* Pack two coefficients in one int32 */
- psEncCtrl->LF_shp_Q14[ 0 ] = silk_LSHIFT( SILK_FIX_CONST( 1.0, 14 ) - b_Q14 -
- silk_SMULWB( strength_Q16, silk_SMULWB( SILK_FIX_CONST( 0.6, 16 ), b_Q14 ) ), 16 );
- psEncCtrl->LF_shp_Q14[ 0 ] |= (opus_uint16)( b_Q14 - SILK_FIX_CONST( 1.0, 14 ) );
- for( k = 1; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->LF_shp_Q14[ k ] = psEncCtrl->LF_shp_Q14[ 0 ];
- }
- Tilt_Q16 = -SILK_FIX_CONST( HP_NOISE_COEF, 16 );
- }
-
- /****************************/
- /* HARMONIC SHAPING CONTROL */
- /****************************/
- /* Control boosting of harmonic frequencies */
- HarmBoost_Q16 = silk_SMULWB( silk_SMULWB( SILK_FIX_CONST( 1.0, 17 ) - silk_LSHIFT( psEncCtrl->coding_quality_Q14, 3 ),
- psEnc->LTPCorr_Q15 ), SILK_FIX_CONST( LOW_RATE_HARMONIC_BOOST, 16 ) );
-
- /* More harmonic boost for noisy input signals */
- HarmBoost_Q16 = silk_SMLAWB( HarmBoost_Q16,
- SILK_FIX_CONST( 1.0, 16 ) - silk_LSHIFT( psEncCtrl->input_quality_Q14, 2 ), SILK_FIX_CONST( LOW_INPUT_QUALITY_HARMONIC_BOOST, 16 ) );
-
- if( USE_HARM_SHAPING && psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* More harmonic noise shaping for high bitrates or noisy input */
- HarmShapeGain_Q16 = silk_SMLAWB( SILK_FIX_CONST( HARMONIC_SHAPING, 16 ),
- SILK_FIX_CONST( 1.0, 16 ) - silk_SMULWB( SILK_FIX_CONST( 1.0, 18 ) - silk_LSHIFT( psEncCtrl->coding_quality_Q14, 4 ),
- psEncCtrl->input_quality_Q14 ), SILK_FIX_CONST( HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING, 16 ) );
-
- /* Less harmonic noise shaping for less periodic signals */
- HarmShapeGain_Q16 = silk_SMULWB( silk_LSHIFT( HarmShapeGain_Q16, 1 ),
- silk_SQRT_APPROX( silk_LSHIFT( psEnc->LTPCorr_Q15, 15 ) ) );
- } else {
- HarmShapeGain_Q16 = 0;
- }
-
- /*************************/
- /* Smooth over subframes */
- /*************************/
- for( k = 0; k < MAX_NB_SUBFR; k++ ) {
- psShapeSt->HarmBoost_smth_Q16 =
- silk_SMLAWB( psShapeSt->HarmBoost_smth_Q16, HarmBoost_Q16 - psShapeSt->HarmBoost_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) );
- psShapeSt->HarmShapeGain_smth_Q16 =
- silk_SMLAWB( psShapeSt->HarmShapeGain_smth_Q16, HarmShapeGain_Q16 - psShapeSt->HarmShapeGain_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) );
- psShapeSt->Tilt_smth_Q16 =
- silk_SMLAWB( psShapeSt->Tilt_smth_Q16, Tilt_Q16 - psShapeSt->Tilt_smth_Q16, SILK_FIX_CONST( SUBFR_SMTH_COEF, 16 ) );
-
- psEncCtrl->HarmBoost_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psShapeSt->HarmBoost_smth_Q16, 2 );
- psEncCtrl->HarmShapeGain_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psShapeSt->HarmShapeGain_smth_Q16, 2 );
- psEncCtrl->Tilt_Q14[ k ] = ( opus_int )silk_RSHIFT_ROUND( psShapeSt->Tilt_smth_Q16, 2 );
- }
- RESTORE_STACK;
-}
-#endif /* OVERRIDE_silk_noise_shape_analysis_FIX */
diff --git a/drivers/opus/silk/fixed/pitch_analysis_core_FIX.c b/drivers/opus/silk/fixed/pitch_analysis_core_FIX.c
deleted file mode 100644
index cf421c9612..0000000000
--- a/drivers/opus/silk/fixed/pitch_analysis_core_FIX.c
+++ /dev/null
@@ -1,743 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/***********************************************************
-* Pitch analyser function
-********************************************************** */
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/pitch_est_defines.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/debug.h"
-#include "opus/celt/pitch.h"
-
-#define SCRATCH_SIZE 22
-#define SF_LENGTH_4KHZ ( PE_SUBFR_LENGTH_MS * 4 )
-#define SF_LENGTH_8KHZ ( PE_SUBFR_LENGTH_MS * 8 )
-#define MIN_LAG_4KHZ ( PE_MIN_LAG_MS * 4 )
-#define MIN_LAG_8KHZ ( PE_MIN_LAG_MS * 8 )
-#define MAX_LAG_4KHZ ( PE_MAX_LAG_MS * 4 )
-#define MAX_LAG_8KHZ ( PE_MAX_LAG_MS * 8 - 1 )
-#define CSTRIDE_4KHZ ( MAX_LAG_4KHZ + 1 - MIN_LAG_4KHZ )
-#define CSTRIDE_8KHZ ( MAX_LAG_8KHZ + 3 - ( MIN_LAG_8KHZ - 2 ) )
-#define D_COMP_MIN ( MIN_LAG_8KHZ - 3 )
-#define D_COMP_MAX ( MAX_LAG_8KHZ + 4 )
-#define D_COMP_STRIDE ( D_COMP_MAX - D_COMP_MIN )
-
-typedef opus_int32 silk_pe_stage3_vals[ PE_NB_STAGE3_LAGS ];
-
-/************************************************************/
-/* Internally used functions */
-/************************************************************/
-static void silk_P_Ana_calc_corr_st3(
- silk_pe_stage3_vals cross_corr_st3[], /* O 3 DIM correlation array */
- const opus_int16 frame[], /* I vector to correlate */
- opus_int start_lag, /* I lag offset to search around */
- opus_int sf_length, /* I length of a 5 ms subframe */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity, /* I Complexity setting */
- int arch /* I Run-time architecture */
-);
-
-static void silk_P_Ana_calc_energy_st3(
- silk_pe_stage3_vals energies_st3[], /* O 3 DIM energy array */
- const opus_int16 frame[], /* I vector to calc energy in */
- opus_int start_lag, /* I lag offset to search around */
- opus_int sf_length, /* I length of one 5 ms subframe */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity, /* I Complexity setting */
- int arch /* I Run-time architecture */
-);
-
-/*************************************************************/
-/* FIXED POINT CORE PITCH ANALYSIS FUNCTION */
-/*************************************************************/
-opus_int silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unvoiced */
- const opus_int16 *frame, /* I Signal of length PE_FRAME_LENGTH_MS*Fs_kHz */
- opus_int *pitch_out, /* O 4 pitch lag values */
- opus_int16 *lagIndex, /* O Lag Index */
- opus_int8 *contourIndex, /* O Pitch contour Index */
- opus_int *LTPCorr_Q15, /* I/O Normalized correlation; input: value from previous frame */
- opus_int prevLag, /* I Last lag of previous frame; set to zero is unvoiced */
- const opus_int32 search_thres1_Q16, /* I First stage threshold for lag candidates 0 - 1 */
- const opus_int search_thres2_Q13, /* I Final threshold for lag candidates 0 - 1 */
- const opus_int Fs_kHz, /* I Sample frequency (kHz) */
- const opus_int complexity, /* I Complexity setting, 0-2, where 2 is highest */
- const opus_int nb_subfr, /* I number of 5 ms subframes */
- int arch /* I Run-time architecture */
-)
-{
- VARDECL( opus_int16, frame_8kHz );
- VARDECL( opus_int16, frame_4kHz );
- opus_int32 filt_state[ 6 ];
- const opus_int16 *input_frame_ptr;
- opus_int i, k, d, j;
- VARDECL( opus_int16, C );
- VARDECL( opus_int32, xcorr32 );
- const opus_int16 *target_ptr, *basis_ptr;
- opus_int32 cross_corr, normalizer, energy, shift, energy_basis, energy_target;
- opus_int d_srch[ PE_D_SRCH_LENGTH ], Cmax, length_d_srch, length_d_comp;
- VARDECL( opus_int16, d_comp );
- opus_int32 sum, threshold, lag_counter;
- opus_int CBimax, CBimax_new, CBimax_old, lag, start_lag, end_lag, lag_new;
- opus_int32 CC[ PE_NB_CBKS_STAGE2_EXT ], CCmax, CCmax_b, CCmax_new_b, CCmax_new;
- VARDECL( silk_pe_stage3_vals, energies_st3 );
- VARDECL( silk_pe_stage3_vals, cross_corr_st3 );
- opus_int frame_length, frame_length_8kHz, frame_length_4kHz;
- opus_int sf_length;
- opus_int min_lag;
- opus_int max_lag;
- opus_int32 contour_bias_Q15, diff;
- opus_int nb_cbk_search, cbk_size;
- opus_int32 delta_lag_log2_sqr_Q7, lag_log2_Q7, prevLag_log2_Q7, prev_lag_bias_Q13;
- const opus_int8 *Lag_CB_ptr;
- SAVE_STACK;
- /* Check for valid sampling frequency */
- silk_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 );
-
- /* Check for valid complexity setting */
- silk_assert( complexity >= SILK_PE_MIN_COMPLEX );
- silk_assert( complexity <= SILK_PE_MAX_COMPLEX );
-
- silk_assert( search_thres1_Q16 >= 0 && search_thres1_Q16 <= (1<<16) );
- silk_assert( search_thres2_Q13 >= 0 && search_thres2_Q13 <= (1<<13) );
-
- /* Set up frame lengths max / min lag for the sampling frequency */
- frame_length = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * Fs_kHz;
- frame_length_4kHz = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * 4;
- frame_length_8kHz = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * 8;
- sf_length = PE_SUBFR_LENGTH_MS * Fs_kHz;
- min_lag = PE_MIN_LAG_MS * Fs_kHz;
- max_lag = PE_MAX_LAG_MS * Fs_kHz - 1;
-
- /* Resample from input sampled at Fs_kHz to 8 kHz */
- ALLOC( frame_8kHz, frame_length_8kHz, opus_int16 );
- if( Fs_kHz == 16 ) {
- silk_memset( filt_state, 0, 2 * sizeof( opus_int32 ) );
- silk_resampler_down2( filt_state, frame_8kHz, frame, frame_length );
- } else if( Fs_kHz == 12 ) {
- silk_memset( filt_state, 0, 6 * sizeof( opus_int32 ) );
- silk_resampler_down2_3( filt_state, frame_8kHz, frame, frame_length );
- } else {
- silk_assert( Fs_kHz == 8 );
- silk_memcpy( frame_8kHz, frame, frame_length_8kHz * sizeof(opus_int16) );
- }
-
- /* Decimate again to 4 kHz */
- silk_memset( filt_state, 0, 2 * sizeof( opus_int32 ) );/* Set state to zero */
- ALLOC( frame_4kHz, frame_length_4kHz, opus_int16 );
- silk_resampler_down2( filt_state, frame_4kHz, frame_8kHz, frame_length_8kHz );
-
- /* Low-pass filter */
- for( i = frame_length_4kHz - 1; i > 0; i-- ) {
- frame_4kHz[ i ] = silk_ADD_SAT16( frame_4kHz[ i ], frame_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 */
- silk_sum_sqr_shift( &energy, &shift, frame_4kHz, frame_length_4kHz );
- if( shift > 0 ) {
- shift = silk_RSHIFT( shift, 1 );
- for( i = 0; i < frame_length_4kHz; i++ ) {
- frame_4kHz[ i ] = silk_RSHIFT( frame_4kHz[ i ], shift );
- }
- }
-
- /******************************************************************************
- * FIRST STAGE, operating in 4 khz
- ******************************************************************************/
- ALLOC( C, nb_subfr * CSTRIDE_8KHZ, opus_int16 );
- ALLOC( xcorr32, MAX_LAG_4KHZ-MIN_LAG_4KHZ+1, opus_int32 );
- silk_memset( C, 0, (nb_subfr >> 1) * CSTRIDE_4KHZ * sizeof( opus_int16 ) );
- target_ptr = &frame_4kHz[ silk_LSHIFT( SF_LENGTH_4KHZ, 2 ) ];
- for( k = 0; k < nb_subfr >> 1; k++ ) {
- /* Check that we are within range of the array */
- silk_assert( target_ptr >= frame_4kHz );
- silk_assert( target_ptr + SF_LENGTH_8KHZ <= frame_4kHz + frame_length_4kHz );
-
- basis_ptr = target_ptr - MIN_LAG_4KHZ;
-
- /* Check that we are within range of the array */
- silk_assert( basis_ptr >= frame_4kHz );
- silk_assert( basis_ptr + SF_LENGTH_8KHZ <= frame_4kHz + frame_length_4kHz );
-
- celt_pitch_xcorr( target_ptr, target_ptr - MAX_LAG_4KHZ, xcorr32, SF_LENGTH_8KHZ, MAX_LAG_4KHZ - MIN_LAG_4KHZ + 1, arch );
-
- /* Calculate first vector products before loop */
- cross_corr = xcorr32[ MAX_LAG_4KHZ - MIN_LAG_4KHZ ];
- normalizer = silk_inner_prod_aligned( target_ptr, target_ptr, SF_LENGTH_8KHZ, arch );
- normalizer = silk_ADD32( normalizer, silk_inner_prod_aligned( basis_ptr, basis_ptr, SF_LENGTH_8KHZ, arch ) );
- normalizer = silk_ADD32( normalizer, silk_SMULBB( SF_LENGTH_8KHZ, 4000 ) );
-
- matrix_ptr( C, k, 0, CSTRIDE_4KHZ ) =
- (opus_int16)silk_DIV32_varQ( cross_corr, normalizer, 13 + 1 ); /* Q13 */
-
- /* 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 */
- silk_assert( basis_ptr >= frame_4kHz );
- silk_assert( basis_ptr + SF_LENGTH_8KHZ <= frame_4kHz + frame_length_4kHz );
-
- cross_corr = xcorr32[ MAX_LAG_4KHZ - d ];
-
- /* Add contribution of new sample and remove contribution from oldest sample */
- normalizer = silk_ADD32( normalizer,
- silk_SMULBB( basis_ptr[ 0 ], basis_ptr[ 0 ] ) -
- silk_SMULBB( basis_ptr[ SF_LENGTH_8KHZ ], basis_ptr[ SF_LENGTH_8KHZ ] ) );
-
- matrix_ptr( C, k, d - MIN_LAG_4KHZ, CSTRIDE_4KHZ) =
- (opus_int16)silk_DIV32_varQ( cross_corr, normalizer, 13 + 1 ); /* Q13 */
- }
- /* Update target pointer */
- target_ptr += SF_LENGTH_8KHZ;
- }
-
- /* Combine two subframes into single correlation measure and apply short-lag bias */
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- for( i = MAX_LAG_4KHZ; i >= MIN_LAG_4KHZ; i-- ) {
- sum = (opus_int32)matrix_ptr( C, 0, i - MIN_LAG_4KHZ, CSTRIDE_4KHZ )
- + (opus_int32)matrix_ptr( C, 1, i - MIN_LAG_4KHZ, CSTRIDE_4KHZ ); /* Q14 */
- sum = silk_SMLAWB( sum, sum, silk_LSHIFT( -i, 4 ) ); /* Q14 */
- C[ i - MIN_LAG_4KHZ ] = (opus_int16)sum; /* Q14 */
- }
- } else {
- /* Only short-lag bias */
- for( i = MAX_LAG_4KHZ; i >= MIN_LAG_4KHZ; i-- ) {
- sum = silk_LSHIFT( (opus_int32)C[ i - MIN_LAG_4KHZ ], 1 ); /* Q14 */
- sum = silk_SMLAWB( sum, sum, silk_LSHIFT( -i, 4 ) ); /* Q14 */
- C[ i - MIN_LAG_4KHZ ] = (opus_int16)sum; /* Q14 */
- }
- }
-
- /* Sort */
- length_d_srch = silk_ADD_LSHIFT32( 4, complexity, 1 );
- silk_assert( 3 * length_d_srch <= PE_D_SRCH_LENGTH );
- silk_insertion_sort_decreasing_int16( C, d_srch, CSTRIDE_4KHZ,
- length_d_srch );
-
- /* Escape if correlation is very low already here */
- Cmax = (opus_int)C[ 0 ]; /* Q14 */
- if( Cmax < SILK_FIX_CONST( 0.2, 14 ) ) {
- silk_memset( pitch_out, 0, nb_subfr * sizeof( opus_int ) );
- *LTPCorr_Q15 = 0;
- *lagIndex = 0;
- *contourIndex = 0;
- RESTORE_STACK;
- return 1;
- }
-
- threshold = silk_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[ i ] > threshold ) {
- d_srch[ i ] = silk_LSHIFT( d_srch[ i ] + MIN_LAG_4KHZ, 1 );
- } else {
- length_d_srch = i;
- break;
- }
- }
- silk_assert( length_d_srch > 0 );
-
- ALLOC( d_comp, D_COMP_STRIDE, opus_int16 );
- for( i = D_COMP_MIN; i < D_COMP_MAX; i++ ) {
- d_comp[ i - D_COMP_MIN ] = 0;
- }
- for( i = 0; i < length_d_srch; i++ ) {
- d_comp[ d_srch[ i ] - D_COMP_MIN ] = 1;
- }
-
- /* Convolution */
- for( i = D_COMP_MAX - 1; i >= MIN_LAG_8KHZ; i-- ) {
- d_comp[ i - D_COMP_MIN ] +=
- d_comp[ i - 1 - D_COMP_MIN ] + d_comp[ i - 2 - D_COMP_MIN ];
- }
-
- length_d_srch = 0;
- for( i = MIN_LAG_8KHZ; i < MAX_LAG_8KHZ + 1; i++ ) {
- if( d_comp[ i + 1 - D_COMP_MIN ] > 0 ) {
- d_srch[ length_d_srch ] = i;
- length_d_srch++;
- }
- }
-
- /* Convolution */
- for( i = D_COMP_MAX - 1; i >= MIN_LAG_8KHZ; i-- ) {
- d_comp[ i - D_COMP_MIN ] += d_comp[ i - 1 - D_COMP_MIN ]
- + d_comp[ i - 2 - D_COMP_MIN ] + d_comp[ i - 3 - D_COMP_MIN ];
- }
-
- length_d_comp = 0;
- for( i = MIN_LAG_8KHZ; i < D_COMP_MAX; i++ ) {
- if( d_comp[ i - D_COMP_MIN ] > 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 */
- silk_sum_sqr_shift( &energy, &shift, frame_8kHz, frame_length_8kHz );
- if( shift > 0 ) {
- shift = silk_RSHIFT( shift, 1 );
- for( i = 0; i < frame_length_8kHz; i++ ) {
- frame_8kHz[ i ] = silk_RSHIFT( frame_8kHz[ i ], shift );
- }
- }
-
- /*********************************************************************************
- * Find energy of each subframe projected onto its history, for a range of delays
- *********************************************************************************/
- silk_memset( C, 0, nb_subfr * CSTRIDE_8KHZ * sizeof( opus_int16 ) );
-
- target_ptr = &frame_8kHz[ PE_LTP_MEM_LENGTH_MS * 8 ];
- for( k = 0; k < nb_subfr; k++ ) {
-
- /* Check that we are within range of the array */
- silk_assert( target_ptr >= frame_8kHz );
- silk_assert( target_ptr + SF_LENGTH_8KHZ <= frame_8kHz + frame_length_8kHz );
-
- energy_target = silk_ADD32( silk_inner_prod_aligned( target_ptr, target_ptr, SF_LENGTH_8KHZ, arch ), 1 );
- 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 */
- silk_assert( basis_ptr >= frame_8kHz );
- silk_assert( basis_ptr + SF_LENGTH_8KHZ <= frame_8kHz + frame_length_8kHz );
-
- cross_corr = silk_inner_prod_aligned( target_ptr, basis_ptr, SF_LENGTH_8KHZ, arch );
- if( cross_corr > 0 ) {
- energy_basis = silk_inner_prod_aligned( basis_ptr, basis_ptr, SF_LENGTH_8KHZ, arch );
- matrix_ptr( C, k, d - ( MIN_LAG_8KHZ - 2 ), CSTRIDE_8KHZ ) =
- (opus_int16)silk_DIV32_varQ( cross_corr,
- silk_ADD32( energy_target,
- energy_basis ),
- 13 + 1 ); /* Q13 */
- } else {
- matrix_ptr( C, k, d - ( MIN_LAG_8KHZ - 2 ), CSTRIDE_8KHZ ) = 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 = silk_int32_MIN;
- CCmax_b = silk_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 = silk_DIV32_16( silk_LSHIFT( prevLag, 1 ), 3 );
- } else if( Fs_kHz == 16 ) {
- prevLag = silk_RSHIFT( prevLag, 1 );
- }
- prevLag_log2_Q7 = silk_lin2log( (opus_int32)prevLag );
- } else {
- prevLag_log2_Q7 = 0;
- }
- silk_assert( search_thres2_Q13 == silk_SAT16( search_thres2_Q13 ) );
- /* Set up stage 2 codebook based on number of subframes */
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- cbk_size = PE_NB_CBKS_STAGE2_EXT;
- Lag_CB_ptr = &silk_CB_lags_stage2[ 0 ][ 0 ];
- if( Fs_kHz == 8 && complexity > SILK_PE_MIN_COMPLEX ) {
- /* If input is 8 khz use a larger codebook here because it is last stage */
- nb_cbk_search = PE_NB_CBKS_STAGE2_EXT;
- } else {
- nb_cbk_search = PE_NB_CBKS_STAGE2;
- }
- } else {
- cbk_size = PE_NB_CBKS_STAGE2_10MS;
- Lag_CB_ptr = &silk_CB_lags_stage2_10_ms[ 0 ][ 0 ];
- nb_cbk_search = PE_NB_CBKS_STAGE2_10MS;
- }
-
- for( k = 0; k < length_d_srch; k++ ) {
- d = d_srch[ k ];
- for( j = 0; j < nb_cbk_search; j++ ) {
- CC[ j ] = 0;
- for( i = 0; i < nb_subfr; i++ ) {
- opus_int d_subfr;
- /* Try all codebooks */
- d_subfr = d + matrix_ptr( Lag_CB_ptr, i, j, cbk_size );
- CC[ j ] = CC[ j ]
- + (opus_int32)matrix_ptr( C, i,
- d_subfr - ( MIN_LAG_8KHZ - 2 ),
- CSTRIDE_8KHZ );
- }
- }
- /* Find best codebook */
- CCmax_new = silk_int32_MIN;
- CBimax_new = 0;
- for( i = 0; i < nb_cbk_search; i++ ) {
- if( CC[ i ] > CCmax_new ) {
- CCmax_new = CC[ i ];
- CBimax_new = i;
- }
- }
-
- /* Bias towards shorter lags */
- lag_log2_Q7 = silk_lin2log( d ); /* Q7 */
- silk_assert( lag_log2_Q7 == silk_SAT16( lag_log2_Q7 ) );
- silk_assert( nb_subfr * SILK_FIX_CONST( PE_SHORTLAG_BIAS, 13 ) == silk_SAT16( nb_subfr * SILK_FIX_CONST( PE_SHORTLAG_BIAS, 13 ) ) );
- CCmax_new_b = CCmax_new - silk_RSHIFT( silk_SMULBB( nb_subfr * SILK_FIX_CONST( PE_SHORTLAG_BIAS, 13 ), lag_log2_Q7 ), 7 ); /* Q13 */
-
- /* Bias towards previous lag */
- silk_assert( nb_subfr * SILK_FIX_CONST( PE_PREVLAG_BIAS, 13 ) == silk_SAT16( nb_subfr * SILK_FIX_CONST( PE_PREVLAG_BIAS, 13 ) ) );
- if( prevLag > 0 ) {
- delta_lag_log2_sqr_Q7 = lag_log2_Q7 - prevLag_log2_Q7;
- silk_assert( delta_lag_log2_sqr_Q7 == silk_SAT16( delta_lag_log2_sqr_Q7 ) );
- delta_lag_log2_sqr_Q7 = silk_RSHIFT( silk_SMULBB( delta_lag_log2_sqr_Q7, delta_lag_log2_sqr_Q7 ), 7 );
- prev_lag_bias_Q13 = silk_RSHIFT( silk_SMULBB( nb_subfr * SILK_FIX_CONST( PE_PREVLAG_BIAS, 13 ), *LTPCorr_Q15 ), 15 ); /* Q13 */
- prev_lag_bias_Q13 = silk_DIV32( silk_MUL( prev_lag_bias_Q13, delta_lag_log2_sqr_Q7 ), delta_lag_log2_sqr_Q7 + SILK_FIX_CONST( 0.5, 7 ) );
- CCmax_new_b -= prev_lag_bias_Q13; /* Q13 */
- }
-
- if( CCmax_new_b > CCmax_b && /* Find maximum biased correlation */
- CCmax_new > silk_SMULBB( nb_subfr, search_thres2_Q13 ) && /* Correlation needs to be high enough to be voiced */
- silk_CB_lags_stage2[ 0 ][ CBimax_new ] <= MIN_LAG_8KHZ /* Lag must be in range */
- ) {
- CCmax_b = CCmax_new_b;
- CCmax = CCmax_new;
- lag = d;
- CBimax = CBimax_new;
- }
- }
-
- if( lag == -1 ) {
- /* No suitable candidate found */
- silk_memset( pitch_out, 0, nb_subfr * sizeof( opus_int ) );
- *LTPCorr_Q15 = 0;
- *lagIndex = 0;
- *contourIndex = 0;
- RESTORE_STACK;
- return 1;
- }
-
- /* Output normalized correlation */
- *LTPCorr_Q15 = (opus_int)silk_LSHIFT( silk_DIV32_16( CCmax, nb_subfr ), 2 );
- silk_assert( *LTPCorr_Q15 >= 0 );
-
- if( Fs_kHz > 8 ) {
- VARDECL( opus_int16, scratch_mem );
- /***************************************************************************/
- /* Scale input signal down to avoid correlations measures from overflowing */
- /***************************************************************************/
- /* find scaling as max scaling for each subframe */
- silk_sum_sqr_shift( &energy, &shift, frame, frame_length );
- ALLOC( scratch_mem, shift > 0 ? frame_length : ALLOC_NONE, opus_int16 );
- if( shift > 0 ) {
- /* Move signal to scratch mem because the input signal should be unchanged */
- shift = silk_RSHIFT( shift, 1 );
- for( i = 0; i < frame_length; i++ ) {
- scratch_mem[ i ] = silk_RSHIFT( frame[ i ], shift );
- }
- input_frame_ptr = scratch_mem;
- } else {
- input_frame_ptr = frame;
- }
-
- /* Search in original signal */
-
- CBimax_old = CBimax;
- /* Compensate for decimation */
- silk_assert( lag == silk_SAT16( lag ) );
- if( Fs_kHz == 12 ) {
- lag = silk_RSHIFT( silk_SMULBB( lag, 3 ), 1 );
- } else if( Fs_kHz == 16 ) {
- lag = silk_LSHIFT( lag, 1 );
- } else {
- lag = silk_SMULBB( lag, 3 );
- }
-
- lag = silk_LIMIT_int( lag, min_lag, max_lag );
- start_lag = silk_max_int( lag - 2, min_lag );
- end_lag = silk_min_int( lag + 2, max_lag );
- lag_new = lag; /* to avoid undefined lag */
- CBimax = 0; /* to avoid undefined lag */
-
- CCmax = silk_int32_MIN;
- /* pitch lags according to second stage */
- for( k = 0; k < nb_subfr; k++ ) {
- pitch_out[ k ] = lag + 2 * silk_CB_lags_stage2[ k ][ CBimax_old ];
- }
-
- /* Set up codebook parameters according to complexity setting and frame length */
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- nb_cbk_search = (opus_int)silk_nb_cbk_searchs_stage3[ complexity ];
- cbk_size = PE_NB_CBKS_STAGE3_MAX;
- Lag_CB_ptr = &silk_CB_lags_stage3[ 0 ][ 0 ];
- } else {
- nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
- cbk_size = PE_NB_CBKS_STAGE3_10MS;
- Lag_CB_ptr = &silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
- }
-
- /* Calculate the correlations and energies needed in stage 3 */
- ALLOC( energies_st3, nb_subfr * nb_cbk_search, silk_pe_stage3_vals );
- ALLOC( cross_corr_st3, nb_subfr * nb_cbk_search, silk_pe_stage3_vals );
- silk_P_Ana_calc_corr_st3( cross_corr_st3, input_frame_ptr, start_lag, sf_length, nb_subfr, complexity, arch );
- silk_P_Ana_calc_energy_st3( energies_st3, input_frame_ptr, start_lag, sf_length, nb_subfr, complexity, arch );
-
- lag_counter = 0;
- silk_assert( lag == silk_SAT16( lag ) );
- contour_bias_Q15 = silk_DIV32_16( SILK_FIX_CONST( PE_FLATCONTOUR_BIAS, 15 ), lag );
-
- target_ptr = &input_frame_ptr[ PE_LTP_MEM_LENGTH_MS * Fs_kHz ];
- energy_target = silk_ADD32( silk_inner_prod_aligned( target_ptr, target_ptr, nb_subfr * sf_length, arch ), 1 );
- for( d = start_lag; d <= end_lag; d++ ) {
- for( j = 0; j < nb_cbk_search; j++ ) {
- cross_corr = 0;
- energy = energy_target;
- for( k = 0; k < nb_subfr; k++ ) {
- cross_corr = silk_ADD32( cross_corr,
- matrix_ptr( cross_corr_st3, k, j,
- nb_cbk_search )[ lag_counter ] );
- energy = silk_ADD32( energy,
- matrix_ptr( energies_st3, k, j,
- nb_cbk_search )[ lag_counter ] );
- silk_assert( energy >= 0 );
- }
- if( cross_corr > 0 ) {
- CCmax_new = silk_DIV32_varQ( cross_corr, energy, 13 + 1 ); /* Q13 */
- /* Reduce depending on flatness of contour */
- diff = silk_int16_MAX - silk_MUL( contour_bias_Q15, j ); /* Q15 */
- silk_assert( diff == silk_SAT16( diff ) );
- CCmax_new = silk_SMULWB( CCmax_new, diff ); /* Q14 */
- } else {
- CCmax_new = 0;
- }
-
- if( CCmax_new > CCmax && ( d + silk_CB_lags_stage3[ 0 ][ j ] ) <= max_lag ) {
- CCmax = CCmax_new;
- lag_new = d;
- CBimax = j;
- }
- }
- lag_counter++;
- }
-
- for( k = 0; k < nb_subfr; k++ ) {
- pitch_out[ k ] = lag_new + matrix_ptr( Lag_CB_ptr, k, CBimax, cbk_size );
- pitch_out[ k ] = silk_LIMIT( pitch_out[ k ], min_lag, PE_MAX_LAG_MS * Fs_kHz );
- }
- *lagIndex = (opus_int16)( lag_new - min_lag);
- *contourIndex = (opus_int8)CBimax;
- } else { /* Fs_kHz == 8 */
- /* Save Lags */
- for( k = 0; k < nb_subfr; k++ ) {
- pitch_out[ k ] = lag + matrix_ptr( Lag_CB_ptr, k, CBimax, cbk_size );
- pitch_out[ k ] = silk_LIMIT( pitch_out[ k ], MIN_LAG_8KHZ, PE_MAX_LAG_MS * 8 );
- }
- *lagIndex = (opus_int16)( lag - MIN_LAG_8KHZ );
- *contourIndex = (opus_int8)CBimax;
- }
- silk_assert( *lagIndex >= 0 );
- /* return as voiced */
- RESTORE_STACK;
- 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),
- * the following correlations are needed in each sub frame:
- *
- * sf1: lag range [-8,...,7] total 16 correlations
- * sf2: lag range [-4,...,4] total 9 correlations
- * sf3: lag range [-3,....4] total 8 correltions
- * sf4: lag range [-6,....8] total 15 correlations
- *
- * In total 48 correlations. The direct implementation computed in worst
- * case 4*12*5 = 240 correlations, but more likely around 120.
- ***********************************************************************/
-static void silk_P_Ana_calc_corr_st3(
- silk_pe_stage3_vals cross_corr_st3[], /* O 3 DIM correlation array */
- const opus_int16 frame[], /* I vector to correlate */
- opus_int start_lag, /* I lag offset to search around */
- opus_int sf_length, /* I length of a 5 ms subframe */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity, /* I Complexity setting */
- int arch /* I Run-time architecture */
-)
-{
- const opus_int16 *target_ptr;
- opus_int i, j, k, lag_counter, lag_low, lag_high;
- opus_int nb_cbk_search, delta, idx, cbk_size;
- VARDECL( opus_int32, scratch_mem );
- VARDECL( opus_int32, xcorr32 );
- const opus_int8 *Lag_range_ptr, *Lag_CB_ptr;
- SAVE_STACK;
-
- silk_assert( complexity >= SILK_PE_MIN_COMPLEX );
- silk_assert( complexity <= SILK_PE_MAX_COMPLEX );
-
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- Lag_range_ptr = &silk_Lag_range_stage3[ complexity ][ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3[ 0 ][ 0 ];
- nb_cbk_search = silk_nb_cbk_searchs_stage3[ complexity ];
- cbk_size = PE_NB_CBKS_STAGE3_MAX;
- } else {
- silk_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1);
- Lag_range_ptr = &silk_Lag_range_stage3_10_ms[ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
- nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
- cbk_size = PE_NB_CBKS_STAGE3_10MS;
- }
- ALLOC( scratch_mem, SCRATCH_SIZE, opus_int32 );
- ALLOC( xcorr32, SCRATCH_SIZE, opus_int32 );
-
- target_ptr = &frame[ silk_LSHIFT( sf_length, 2 ) ]; /* Pointer to middle of frame */
- for( k = 0; k < nb_subfr; k++ ) {
- lag_counter = 0;
-
- /* Calculate the correlations for each subframe */
- lag_low = matrix_ptr( Lag_range_ptr, k, 0, 2 );
- lag_high = matrix_ptr( Lag_range_ptr, k, 1, 2 );
- silk_assert(lag_high-lag_low+1 <= SCRATCH_SIZE);
- celt_pitch_xcorr( target_ptr, target_ptr - start_lag - lag_high, xcorr32, sf_length, lag_high - lag_low + 1, arch );
- for( j = lag_low; j <= lag_high; j++ ) {
- silk_assert( lag_counter < SCRATCH_SIZE );
- scratch_mem[ lag_counter ] = xcorr32[ lag_high - j ];
- lag_counter++;
- }
-
- delta = matrix_ptr( Lag_range_ptr, k, 0, 2 );
- for( i = 0; i < nb_cbk_search; i++ ) {
- /* Fill out the 3 dim array that stores the correlations for */
- /* each code_book vector for each start lag */
- idx = matrix_ptr( Lag_CB_ptr, k, i, cbk_size ) - delta;
- for( j = 0; j < PE_NB_STAGE3_LAGS; j++ ) {
- silk_assert( idx + j < SCRATCH_SIZE );
- silk_assert( idx + j < lag_counter );
- matrix_ptr( cross_corr_st3, k, i, nb_cbk_search )[ j ] =
- scratch_mem[ idx + j ];
- }
- }
- target_ptr += sf_length;
- }
- RESTORE_STACK;
-}
-
-/********************************************************************/
-/* Calculate the energies for first two subframes. The energies are */
-/* calculated recursively. */
-/********************************************************************/
-static void silk_P_Ana_calc_energy_st3(
- silk_pe_stage3_vals energies_st3[], /* O 3 DIM energy array */
- const opus_int16 frame[], /* I vector to calc energy in */
- opus_int start_lag, /* I lag offset to search around */
- opus_int sf_length, /* I length of one 5 ms subframe */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity, /* I Complexity setting */
- int arch /* I Run-time architecture */
-)
-{
- const opus_int16 *target_ptr, *basis_ptr;
- opus_int32 energy;
- opus_int k, i, j, lag_counter;
- opus_int nb_cbk_search, delta, idx, cbk_size, lag_diff;
- VARDECL( opus_int32, scratch_mem );
- const opus_int8 *Lag_range_ptr, *Lag_CB_ptr;
- SAVE_STACK;
-
- silk_assert( complexity >= SILK_PE_MIN_COMPLEX );
- silk_assert( complexity <= SILK_PE_MAX_COMPLEX );
-
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- Lag_range_ptr = &silk_Lag_range_stage3[ complexity ][ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3[ 0 ][ 0 ];
- nb_cbk_search = silk_nb_cbk_searchs_stage3[ complexity ];
- cbk_size = PE_NB_CBKS_STAGE3_MAX;
- } else {
- silk_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1);
- Lag_range_ptr = &silk_Lag_range_stage3_10_ms[ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
- nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
- cbk_size = PE_NB_CBKS_STAGE3_10MS;
- }
- ALLOC( scratch_mem, SCRATCH_SIZE, opus_int32 );
-
- target_ptr = &frame[ silk_LSHIFT( sf_length, 2 ) ];
- for( k = 0; k < nb_subfr; k++ ) {
- lag_counter = 0;
-
- /* Calculate the energy for first lag */
- basis_ptr = target_ptr - ( start_lag + matrix_ptr( Lag_range_ptr, k, 0, 2 ) );
- energy = silk_inner_prod_aligned( basis_ptr, basis_ptr, sf_length, arch );
- silk_assert( energy >= 0 );
- scratch_mem[ lag_counter ] = energy;
- lag_counter++;
-
- lag_diff = ( matrix_ptr( Lag_range_ptr, k, 1, 2 ) - matrix_ptr( Lag_range_ptr, k, 0, 2 ) + 1 );
- for( i = 1; i < lag_diff; i++ ) {
- /* remove part outside new window */
- energy -= silk_SMULBB( basis_ptr[ sf_length - i ], basis_ptr[ sf_length - i ] );
- silk_assert( energy >= 0 );
-
- /* add part that comes into window */
- energy = silk_ADD_SAT32( energy, silk_SMULBB( basis_ptr[ -i ], basis_ptr[ -i ] ) );
- silk_assert( energy >= 0 );
- silk_assert( lag_counter < SCRATCH_SIZE );
- scratch_mem[ lag_counter ] = energy;
- lag_counter++;
- }
-
- delta = matrix_ptr( Lag_range_ptr, k, 0, 2 );
- for( i = 0; i < nb_cbk_search; i++ ) {
- /* Fill out the 3 dim array that stores the correlations for */
- /* each code_book vector for each start lag */
- idx = matrix_ptr( Lag_CB_ptr, k, i, cbk_size ) - delta;
- for( j = 0; j < PE_NB_STAGE3_LAGS; j++ ) {
- silk_assert( idx + j < SCRATCH_SIZE );
- silk_assert( idx + j < lag_counter );
- matrix_ptr( energies_st3, k, i, nb_cbk_search )[ j ] =
- scratch_mem[ idx + j ];
- silk_assert(
- matrix_ptr( energies_st3, k, i, nb_cbk_search )[ j ] >= 0 );
- }
- }
- target_ptr += sf_length;
- }
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/fixed/prefilter_FIX.c b/drivers/opus/silk/fixed/prefilter_FIX.c
deleted file mode 100644
index 344be2badd..0000000000
--- a/drivers/opus/silk/fixed/prefilter_FIX.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/tuning_parameters.h"
-
-#if defined(MIPSr1_ASM)
-#include "opus/silk/fixed/mips/prefilter_FIX_mipsr1.h"
-#endif
-
-
-#if !defined(OVERRIDE_silk_warped_LPC_analysis_filter_FIX)
-#define silk_warped_LPC_analysis_filter_FIX(state, res_Q2, coef_Q13, input, lambda_Q16, length, order, arch) \
- ((void)(arch),silk_warped_LPC_analysis_filter_FIX_c(state, res_Q2, coef_Q13, input, lambda_Q16, length, order))
-#endif
-
-/* Prefilter for finding Quantizer input signal */
-static OPUS_INLINE void silk_prefilt_FIX(
- silk_prefilter_state_FIX *P, /* I/O state */
- opus_int32 st_res_Q12[], /* I short term residual signal */
- opus_int32 xw_Q3[], /* O prefiltered signal */
- opus_int32 HarmShapeFIRPacked_Q12, /* I Harmonic shaping coeficients */
- opus_int Tilt_Q14, /* I Tilt shaping coeficient */
- opus_int32 LF_shp_Q14, /* I Low-frequancy shaping coeficients */
- opus_int lag, /* I Lag for harmonic shaping */
- opus_int length /* I Length of signals */
-);
-
-void silk_warped_LPC_analysis_filter_FIX_c(
- opus_int32 state[], /* I/O State [order + 1] */
- opus_int32 res_Q2[], /* O Residual signal [length] */
- const opus_int16 coef_Q13[], /* I Coefficients [order] */
- const opus_int16 input[], /* I Input signal [length] */
- const opus_int16 lambda_Q16, /* I Warping factor */
- const opus_int length, /* I Length of input signal */
- const opus_int order /* I Filter order (even) */
-)
-{
- opus_int n, i;
- opus_int32 acc_Q11, tmp1, tmp2;
-
- /* Order must be even */
- silk_assert( ( order & 1 ) == 0 );
-
- for( n = 0; n < length; n++ ) {
- /* Output of lowpass section */
- tmp2 = silk_SMLAWB( state[ 0 ], state[ 1 ], lambda_Q16 );
- state[ 0 ] = silk_LSHIFT( input[ n ], 14 );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( state[ 1 ], state[ 2 ] - tmp2, lambda_Q16 );
- state[ 1 ] = tmp2;
- acc_Q11 = silk_RSHIFT( order, 1 );
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp2, coef_Q13[ 0 ] );
- /* Loop over allpass sections */
- for( i = 2; i < order; i += 2 ) {
- /* Output of allpass section */
- tmp2 = silk_SMLAWB( state[ i ], state[ i + 1 ] - tmp1, lambda_Q16 );
- state[ i ] = tmp1;
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp1, coef_Q13[ i - 1 ] );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( state[ i + 1 ], state[ i + 2 ] - tmp2, lambda_Q16 );
- state[ i + 1 ] = tmp2;
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp2, coef_Q13[ i ] );
- }
- state[ order ] = tmp1;
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp1, coef_Q13[ order - 1 ] );
- res_Q2[ n ] = silk_LSHIFT( (opus_int32)input[ n ], 2 ) - silk_RSHIFT_ROUND( acc_Q11, 9 );
- }
-}
-
-void silk_prefilter_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Encoder state */
- const silk_encoder_control_FIX *psEncCtrl, /* I Encoder control */
- opus_int32 xw_Q3[], /* O Weighted signal */
- const opus_int16 x[] /* I Speech signal */
-)
-{
- silk_prefilter_state_FIX *P = &psEnc->sPrefilt;
- opus_int j, k, lag;
- opus_int32 tmp_32;
- const opus_int16 *AR1_shp_Q13;
- const opus_int16 *px;
- opus_int32 *pxw_Q3;
- opus_int HarmShapeGain_Q12, Tilt_Q14;
- opus_int32 HarmShapeFIRPacked_Q12, LF_shp_Q14;
- VARDECL( opus_int32, x_filt_Q12 );
- VARDECL( opus_int32, st_res_Q2 );
- opus_int16 B_Q10[ 2 ];
- SAVE_STACK;
-
- /* Set up pointers */
- px = x;
- pxw_Q3 = xw_Q3;
- lag = P->lagPrev;
- ALLOC( x_filt_Q12, psEnc->sCmn.subfr_length, opus_int32 );
- ALLOC( st_res_Q2, psEnc->sCmn.subfr_length, opus_int32 );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- /* Update Variables that change per sub frame */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- lag = psEncCtrl->pitchL[ k ];
- }
-
- /* Noise shape parameters */
- HarmShapeGain_Q12 = silk_SMULWB( (opus_int32)psEncCtrl->HarmShapeGain_Q14[ k ], 16384 - psEncCtrl->HarmBoost_Q14[ k ] );
- silk_assert( HarmShapeGain_Q12 >= 0 );
- HarmShapeFIRPacked_Q12 = silk_RSHIFT( HarmShapeGain_Q12, 2 );
- HarmShapeFIRPacked_Q12 |= silk_LSHIFT( (opus_int32)silk_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 * MAX_SHAPE_LPC_ORDER ];
-
- /* Short term FIR filtering*/
- silk_warped_LPC_analysis_filter_FIX( P->sAR_shp, st_res_Q2, AR1_shp_Q13, px,
- psEnc->sCmn.warping_Q16, psEnc->sCmn.subfr_length, psEnc->sCmn.shapingLPCOrder, psEnc->sCmn.arch );
-
- /* Reduce (mainly) low frequencies during harmonic emphasis */
- B_Q10[ 0 ] = silk_RSHIFT_ROUND( psEncCtrl->GainsPre_Q14[ k ], 4 );
- tmp_32 = silk_SMLABB( SILK_FIX_CONST( INPUT_TILT, 26 ), psEncCtrl->HarmBoost_Q14[ k ], HarmShapeGain_Q12 ); /* Q26 */
- tmp_32 = silk_SMLABB( tmp_32, psEncCtrl->coding_quality_Q14, SILK_FIX_CONST( HIGH_RATE_INPUT_TILT, 12 ) ); /* Q26 */
- tmp_32 = silk_SMULWB( tmp_32, -psEncCtrl->GainsPre_Q14[ k ] ); /* Q24 */
- tmp_32 = silk_RSHIFT_ROUND( tmp_32, 14 ); /* Q10 */
- B_Q10[ 1 ]= silk_SAT16( tmp_32 );
- x_filt_Q12[ 0 ] = silk_MLA( silk_MUL( st_res_Q2[ 0 ], B_Q10[ 0 ] ), P->sHarmHP_Q2, B_Q10[ 1 ] );
- for( j = 1; j < psEnc->sCmn.subfr_length; j++ ) {
- x_filt_Q12[ j ] = silk_MLA( silk_MUL( st_res_Q2[ j ], B_Q10[ 0 ] ), st_res_Q2[ j - 1 ], B_Q10[ 1 ] );
- }
- P->sHarmHP_Q2 = st_res_Q2[ psEnc->sCmn.subfr_length - 1 ];
-
- silk_prefilt_FIX( P, x_filt_Q12, pxw_Q3, HarmShapeFIRPacked_Q12, Tilt_Q14, LF_shp_Q14, lag, psEnc->sCmn.subfr_length );
-
- px += psEnc->sCmn.subfr_length;
- pxw_Q3 += psEnc->sCmn.subfr_length;
- }
-
- P->lagPrev = psEncCtrl->pitchL[ psEnc->sCmn.nb_subfr - 1 ];
- RESTORE_STACK;
-}
-
-#ifndef OVERRIDE_silk_prefilt_FIX
-/* Prefilter for finding Quantizer input signal */
-static OPUS_INLINE void silk_prefilt_FIX(
- silk_prefilter_state_FIX *P, /* I/O state */
- opus_int32 st_res_Q12[], /* I short term residual signal */
- opus_int32 xw_Q3[], /* O prefiltered signal */
- opus_int32 HarmShapeFIRPacked_Q12, /* I Harmonic shaping coeficients */
- opus_int Tilt_Q14, /* I Tilt shaping coeficient */
- opus_int32 LF_shp_Q14, /* I Low-frequancy shaping coeficients */
- opus_int lag, /* I Lag for harmonic shaping */
- opus_int length /* I Length of signals */
-)
-{
- opus_int i, idx, LTP_shp_buf_idx;
- opus_int32 n_LTP_Q12, n_Tilt_Q10, n_LF_Q10;
- opus_int32 sLF_MA_shp_Q12, sLF_AR_shp_Q12;
- opus_int16 *LTP_shp_buf;
-
- /* To speed up use temp variables instead of using the struct */
- LTP_shp_buf = P->sLTP_shp;
- LTP_shp_buf_idx = P->sLTP_shp_buf_idx;
- sLF_AR_shp_Q12 = P->sLF_AR_shp_Q12;
- sLF_MA_shp_Q12 = P->sLF_MA_shp_Q12;
-
- for( i = 0; i < length; i++ ) {
- if( lag > 0 ) {
- /* unrolled loop */
- silk_assert( HARM_SHAPE_FIR_TAPS == 3 );
- idx = lag + LTP_shp_buf_idx;
- n_LTP_Q12 = silk_SMULBB( LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 - 1) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
- n_LTP_Q12 = silk_SMLABT( n_LTP_Q12, LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 ) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
- n_LTP_Q12 = silk_SMLABB( n_LTP_Q12, LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 + 1) & LTP_MASK ], HarmShapeFIRPacked_Q12 );
- } else {
- n_LTP_Q12 = 0;
- }
-
- n_Tilt_Q10 = silk_SMULWB( sLF_AR_shp_Q12, Tilt_Q14 );
- n_LF_Q10 = silk_SMLAWB( silk_SMULWT( sLF_AR_shp_Q12, LF_shp_Q14 ), sLF_MA_shp_Q12, LF_shp_Q14 );
-
- sLF_AR_shp_Q12 = silk_SUB32( st_res_Q12[ i ], silk_LSHIFT( n_Tilt_Q10, 2 ) );
- sLF_MA_shp_Q12 = silk_SUB32( sLF_AR_shp_Q12, silk_LSHIFT( n_LF_Q10, 2 ) );
-
- LTP_shp_buf_idx = ( LTP_shp_buf_idx - 1 ) & LTP_MASK;
- LTP_shp_buf[ LTP_shp_buf_idx ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( sLF_MA_shp_Q12, 12 ) );
-
- xw_Q3[i] = silk_RSHIFT_ROUND( silk_SUB32( sLF_MA_shp_Q12, n_LTP_Q12 ), 9 );
- }
-
- /* Copy temp variable back to state */
- P->sLF_AR_shp_Q12 = sLF_AR_shp_Q12;
- P->sLF_MA_shp_Q12 = sLF_MA_shp_Q12;
- P->sLTP_shp_buf_idx = LTP_shp_buf_idx;
-}
-#endif /* OVERRIDE_silk_prefilt_FIX */
diff --git a/drivers/opus/silk/fixed/process_gains_FIX.c b/drivers/opus/silk/fixed/process_gains_FIX.c
deleted file mode 100644
index c0d591210b..0000000000
--- a/drivers/opus/silk/fixed/process_gains_FIX.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Processing of gains */
-void silk_process_gains_FIX(
- silk_encoder_state_FIX *psEnc, /* I/O Encoder state */
- silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- silk_shape_state_FIX *psShapeSt = &psEnc->sShape;
- opus_int k;
- opus_int32 s_Q16, InvMaxSqrVal_Q16, gain, gain_squared, ResNrg, ResNrgPart, quant_offset_Q10;
-
- /* Gain reduction when LTP coding gain is high */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /*s = -0.5f * silk_sigmoid( 0.25f * ( psEncCtrl->LTPredCodGain - 12.0f ) ); */
- s_Q16 = -silk_sigm_Q15( silk_RSHIFT_ROUND( psEncCtrl->LTPredCodGain_Q7 - SILK_FIX_CONST( 12.0, 7 ), 4 ) );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains_Q16[ k ] = silk_SMLAWB( psEncCtrl->Gains_Q16[ k ], psEncCtrl->Gains_Q16[ k ], s_Q16 );
- }
- }
-
- /* Limit the quantized signal */
- /* InvMaxSqrVal = pow( 2.0f, 0.33f * ( 21.0f - SNR_dB ) ) / subfr_length; */
- InvMaxSqrVal_Q16 = silk_DIV32_16( silk_log2lin(
- silk_SMULWB( SILK_FIX_CONST( 21 + 16 / 0.33, 7 ) - psEnc->sCmn.SNR_dB_Q7, SILK_FIX_CONST( 0.33, 16 ) ) ), psEnc->sCmn.subfr_length );
-
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- /* Soft limit on ratio residual energy and squared gains */
- ResNrg = psEncCtrl->ResNrg[ k ];
- ResNrgPart = silk_SMULWW( ResNrg, InvMaxSqrVal_Q16 );
- if( psEncCtrl->ResNrgQ[ k ] > 0 ) {
- ResNrgPart = silk_RSHIFT_ROUND( ResNrgPart, psEncCtrl->ResNrgQ[ k ] );
- } else {
- if( ResNrgPart >= silk_RSHIFT( silk_int32_MAX, -psEncCtrl->ResNrgQ[ k ] ) ) {
- ResNrgPart = silk_int32_MAX;
- } else {
- ResNrgPart = silk_LSHIFT( ResNrgPart, -psEncCtrl->ResNrgQ[ k ] );
- }
- }
- gain = psEncCtrl->Gains_Q16[ k ];
- gain_squared = silk_ADD_SAT32( ResNrgPart, silk_SMMUL( gain, gain ) );
- if( gain_squared < silk_int16_MAX ) {
- /* recalculate with higher precision */
- gain_squared = silk_SMLAWW( silk_LSHIFT( ResNrgPart, 16 ), gain, gain );
- silk_assert( gain_squared > 0 );
- gain = silk_SQRT_APPROX( gain_squared ); /* Q8 */
- gain = silk_min( gain, silk_int32_MAX >> 8 );
- psEncCtrl->Gains_Q16[ k ] = silk_LSHIFT_SAT32( gain, 8 ); /* Q16 */
- } else {
- gain = silk_SQRT_APPROX( gain_squared ); /* Q0 */
- gain = silk_min( gain, silk_int32_MAX >> 16 );
- psEncCtrl->Gains_Q16[ k ] = silk_LSHIFT_SAT32( gain, 16 ); /* Q16 */
- }
- }
-
- /* Save unquantized gains and gain Index */
- silk_memcpy( psEncCtrl->GainsUnq_Q16, psEncCtrl->Gains_Q16, psEnc->sCmn.nb_subfr * sizeof( opus_int32 ) );
- psEncCtrl->lastGainIndexPrev = psShapeSt->LastGainIndex;
-
- /* Quantize gains */
- silk_gains_quant( psEnc->sCmn.indices.GainsIndices, psEncCtrl->Gains_Q16,
- &psShapeSt->LastGainIndex, condCoding == CODE_CONDITIONALLY, psEnc->sCmn.nb_subfr );
-
- /* Set quantizer offset for voiced signals. Larger offset when LTP coding gain is low or tilt is high (ie low-pass) */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- if( psEncCtrl->LTPredCodGain_Q7 + silk_RSHIFT( psEnc->sCmn.input_tilt_Q15, 8 ) > SILK_FIX_CONST( 1.0, 7 ) ) {
- psEnc->sCmn.indices.quantOffsetType = 0;
- } else {
- psEnc->sCmn.indices.quantOffsetType = 1;
- }
- }
-
- /* Quantizer boundary adjustment */
- quant_offset_Q10 = silk_Quantization_Offsets_Q10[ psEnc->sCmn.indices.signalType >> 1 ][ psEnc->sCmn.indices.quantOffsetType ];
- psEncCtrl->Lambda_Q10 = SILK_FIX_CONST( LAMBDA_OFFSET, 10 )
- + silk_SMULBB( SILK_FIX_CONST( LAMBDA_DELAYED_DECISIONS, 10 ), psEnc->sCmn.nStatesDelayedDecision )
- + silk_SMULWB( SILK_FIX_CONST( LAMBDA_SPEECH_ACT, 18 ), psEnc->sCmn.speech_activity_Q8 )
- + silk_SMULWB( SILK_FIX_CONST( LAMBDA_INPUT_QUALITY, 12 ), psEncCtrl->input_quality_Q14 )
- + silk_SMULWB( SILK_FIX_CONST( LAMBDA_CODING_QUALITY, 12 ), psEncCtrl->coding_quality_Q14 )
- + silk_SMULWB( SILK_FIX_CONST( LAMBDA_QUANT_OFFSET, 16 ), quant_offset_Q10 );
-
- silk_assert( psEncCtrl->Lambda_Q10 > 0 );
- silk_assert( psEncCtrl->Lambda_Q10 < SILK_FIX_CONST( 2, 10 ) );
-}
diff --git a/drivers/opus/silk/fixed/regularize_correlations_FIX.c b/drivers/opus/silk/fixed/regularize_correlations_FIX.c
deleted file mode 100644
index c38a5589b6..0000000000
--- a/drivers/opus/silk/fixed/regularize_correlations_FIX.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-
-/* Add noise to matrix diagonal */
-void silk_regularize_correlations_FIX(
- opus_int32 *XX, /* I/O Correlation matrices */
- opus_int32 *xx, /* I/O Correlation values */
- opus_int32 noise, /* I Noise to add */
- opus_int D /* I Dimension of XX */
-)
-{
- opus_int i;
- for( i = 0; i < D; i++ ) {
- matrix_ptr( &XX[ 0 ], i, i, D ) = silk_ADD32( matrix_ptr( &XX[ 0 ], i, i, D ), noise );
- }
- xx[ 0 ] += noise;
-}
diff --git a/drivers/opus/silk/fixed/residual_energy16_FIX.c b/drivers/opus/silk/fixed/residual_energy16_FIX.c
deleted file mode 100644
index 39bc96fd90..0000000000
--- a/drivers/opus/silk/fixed/residual_energy16_FIX.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-
-/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
-opus_int32 silk_residual_energy16_covar_FIX(
- const opus_int16 *c, /* I Prediction vector */
- const opus_int32 *wXX, /* I Correlation matrix */
- const opus_int32 *wXx, /* I Correlation vector */
- opus_int32 wxx, /* I Signal energy */
- opus_int D, /* I Dimension */
- opus_int cQ /* I Q value for c vector 0 - 15 */
-)
-{
- opus_int i, j, lshifts, Qxtra;
- opus_int32 c_max, w_max, tmp, tmp2, nrg;
- opus_int cn[ MAX_MATRIX_SIZE ];
- const opus_int32 *pRow;
-
- /* Safety checks */
- silk_assert( D >= 0 );
- silk_assert( D <= 16 );
- silk_assert( cQ > 0 );
- silk_assert( cQ < 16 );
-
- lshifts = 16 - cQ;
- Qxtra = lshifts;
-
- c_max = 0;
- for( i = 0; i < D; i++ ) {
- c_max = silk_max_32( c_max, silk_abs( (opus_int32)c[ i ] ) );
- }
- Qxtra = silk_min_int( Qxtra, silk_CLZ32( c_max ) - 17 );
-
- w_max = silk_max_32( wXX[ 0 ], wXX[ D * D - 1 ] );
- Qxtra = silk_min_int( Qxtra, silk_CLZ32( silk_MUL( D, silk_RSHIFT( silk_SMULWB( w_max, c_max ), 4 ) ) ) - 5 );
- Qxtra = silk_max_int( Qxtra, 0 );
- for( i = 0; i < D; i++ ) {
- cn[ i ] = silk_LSHIFT( ( opus_int )c[ i ], Qxtra );
- silk_assert( silk_abs(cn[i]) <= ( silk_int16_MAX + 1 ) ); /* Check that silk_SMLAWB can be used */
- }
- lshifts -= Qxtra;
-
- /* Compute wxx - 2 * wXx * c */
- tmp = 0;
- for( i = 0; i < D; i++ ) {
- tmp = silk_SMLAWB( tmp, wXx[ i ], cn[ i ] );
- }
- nrg = silk_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 = silk_SMLAWB( tmp, pRow[ j ], cn[ j ] );
- }
- tmp = silk_SMLAWB( tmp, silk_RSHIFT( pRow[ i ], 1 ), cn[ i ] );
- tmp2 = silk_SMLAWB( tmp2, tmp, cn[ i ] );
- }
- nrg = silk_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 > silk_RSHIFT( silk_int32_MAX, lshifts + 2 ) ) {
- nrg = silk_int32_MAX >> 1;
- } else {
- nrg = silk_LSHIFT( nrg, lshifts + 1 ); /* Q0 */
- }
- return nrg;
-
-}
diff --git a/drivers/opus/silk/fixed/residual_energy_FIX.c b/drivers/opus/silk/fixed/residual_energy_FIX.c
deleted file mode 100644
index 0e51f4baa1..0000000000
--- a/drivers/opus/silk/fixed/residual_energy_FIX.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/celt/stack_alloc.h"
-
-/* Calculates residual energies of input subframes where all subframes have LPC_order */
-/* of preceding samples */
-void silk_residual_energy_FIX(
- opus_int32 nrgs[ MAX_NB_SUBFR ], /* O Residual energy per subframe */
- opus_int nrgsQ[ MAX_NB_SUBFR ], /* O Q value per subframe */
- const opus_int16 x[], /* I Input signal */
- opus_int16 a_Q12[ 2 ][ MAX_LPC_ORDER ], /* I AR coefs for each frame half */
- const opus_int32 gains[ MAX_NB_SUBFR ], /* I Quantization gains */
- const opus_int subfr_length, /* I Subframe length */
- const opus_int nb_subfr, /* I Number of subframes */
- const opus_int LPC_order, /* I LPC order */
- int arch /* I Run-time architecture */
-)
-{
- opus_int offset, i, j, rshift, lz1, lz2;
- opus_int16 *LPC_res_ptr;
- VARDECL( opus_int16, LPC_res );
- const opus_int16 *x_ptr;
- opus_int32 tmp32;
- SAVE_STACK;
-
- x_ptr = x;
- offset = LPC_order + subfr_length;
-
- /* Filter input to create the LPC residual for each frame half, and measure subframe energies */
- ALLOC( LPC_res, ( MAX_NB_SUBFR >> 1 ) * offset, opus_int16 );
- silk_assert( ( nb_subfr >> 1 ) * ( MAX_NB_SUBFR >> 1 ) == nb_subfr );
- for( i = 0; i < nb_subfr >> 1; i++ ) {
- /* Calculate half frame LPC residual signal including preceding samples */
- silk_LPC_analysis_filter( LPC_res, x_ptr, a_Q12[ i ], ( MAX_NB_SUBFR >> 1 ) * offset, LPC_order, arch );
-
- /* Point to first subframe of the just calculated LPC residual signal */
- LPC_res_ptr = LPC_res + LPC_order;
- for( j = 0; j < ( MAX_NB_SUBFR >> 1 ); j++ ) {
- /* Measure subframe energy */
- silk_sum_sqr_shift( &nrgs[ i * ( MAX_NB_SUBFR >> 1 ) + j ], &rshift, LPC_res_ptr, subfr_length );
-
- /* Set Q values for the measured energy */
- nrgsQ[ i * ( MAX_NB_SUBFR >> 1 ) + j ] = -rshift;
-
- /* Move to next subframe */
- LPC_res_ptr += offset;
- }
- /* Move to next frame half */
- x_ptr += ( MAX_NB_SUBFR >> 1 ) * offset;
- }
-
- /* Apply the squared subframe gains */
- for( i = 0; i < nb_subfr; i++ ) {
- /* Fully upscale gains and energies */
- lz1 = silk_CLZ32( nrgs[ i ] ) - 1;
- lz2 = silk_CLZ32( gains[ i ] ) - 1;
-
- tmp32 = silk_LSHIFT32( gains[ i ], lz2 );
-
- /* Find squared gains */
- tmp32 = silk_SMMUL( tmp32, tmp32 ); /* Q( 2 * lz2 - 32 )*/
-
- /* Scale energies */
- nrgs[ i ] = silk_SMMUL( tmp32, silk_LSHIFT32( nrgs[ i ], lz1 ) ); /* Q( nrgsQ[ i ] + lz1 + 2 * lz2 - 32 - 32 )*/
- nrgsQ[ i ] += lz1 + 2 * lz2 - 32 - 32;
- }
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/fixed/schur64_FIX.c b/drivers/opus/silk/fixed/schur64_FIX.c
deleted file mode 100644
index 69ef76e028..0000000000
--- a/drivers/opus/silk/fixed/schur64_FIX.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* Slower than schur(), but more accurate. */
-/* Uses SMULL(), available on armv4 */
-opus_int32 silk_schur64( /* O returns residual energy */
- opus_int32 rc_Q16[], /* O Reflection coefficients [order] Q16 */
- const opus_int32 c[], /* I Correlations [order+1] */
- opus_int32 order /* I Prediction order */
-)
-{
- opus_int k, n;
- opus_int32 C[ SILK_MAX_ORDER_LPC + 1 ][ 2 ];
- opus_int32 Ctmp1_Q30, Ctmp2_Q30, rc_tmp_Q31;
-
- silk_assert( order==6||order==8||order==10||order==12||order==14||order==16 );
-
- /* Check for invalid input */
- if( c[ 0 ] <= 0 ) {
- silk_memset( rc_Q16, 0, order * sizeof( opus_int32 ) );
- return 0;
- }
-
- for( k = 0; k < order + 1; k++ ) {
- C[ k ][ 0 ] = C[ k ][ 1 ] = c[ k ];
- }
-
- for( k = 0; k < order; k++ ) {
- /* Check that we won't be getting an unstable rc, otherwise stop here. */
- if (silk_abs_int32(C[ k + 1 ][ 0 ]) >= C[ 0 ][ 1 ]) {
- if ( C[ k + 1 ][ 0 ] > 0 ) {
- rc_Q16[ k ] = -SILK_FIX_CONST( .99f, 16 );
- } else {
- rc_Q16[ k ] = SILK_FIX_CONST( .99f, 16 );
- }
- k++;
- break;
- }
-
- /* Get reflection coefficient: divide two Q30 values and get result in Q31 */
- rc_tmp_Q31 = silk_DIV32_varQ( -C[ k + 1 ][ 0 ], C[ 0 ][ 1 ], 31 );
-
- /* Save the output */
- rc_Q16[ k ] = silk_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 + silk_SMMUL( silk_LSHIFT( Ctmp2_Q30, 1 ), rc_tmp_Q31 );
- C[ n ][ 1 ] = Ctmp2_Q30 + silk_SMMUL( silk_LSHIFT( Ctmp1_Q30, 1 ), rc_tmp_Q31 );
- }
- }
-
- for(; k < order; k++ ) {
- rc_Q16[ k ] = 0;
- }
-
- return silk_max_32( 1, C[ 0 ][ 1 ] );
-}
diff --git a/drivers/opus/silk/fixed/schur_FIX.c b/drivers/opus/silk/fixed/schur_FIX.c
deleted file mode 100644
index 9effa59daf..0000000000
--- a/drivers/opus/silk/fixed/schur_FIX.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* Faster than schur64(), but much less accurate. */
-/* uses SMLAWB(), requiring armv5E and higher. */
-opus_int32 silk_schur( /* O Returns residual energy */
- opus_int16 *rc_Q15, /* O reflection coefficients [order] Q15 */
- const opus_int32 *c, /* I correlations [order+1] */
- const opus_int32 order /* I prediction order */
-)
-{
- opus_int k, n, lz;
- opus_int32 C[ SILK_MAX_ORDER_LPC + 1 ][ 2 ];
- opus_int32 Ctmp1, Ctmp2, rc_tmp_Q15;
-
- silk_assert( order==6||order==8||order==10||order==12||order==14||order==16 );
-
- /* Get number of leading zeros */
- lz = 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 ] = silk_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 ] = silk_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++ ) {
- /* Check that we won't be getting an unstable rc, otherwise stop here. */
- if (silk_abs_int32(C[ k + 1 ][ 0 ]) >= C[ 0 ][ 1 ]) {
- if ( C[ k + 1 ][ 0 ] > 0 ) {
- rc_Q15[ k ] = -SILK_FIX_CONST( .99f, 15 );
- } else {
- rc_Q15[ k ] = SILK_FIX_CONST( .99f, 15 );
- }
- k++;
- break;
- }
-
- /* Get reflection coefficient */
- rc_tmp_Q15 = -silk_DIV32_16( C[ k + 1 ][ 0 ], silk_max_32( silk_RSHIFT( C[ 0 ][ 1 ], 15 ), 1 ) );
-
- /* Clip (shouldn't happen for properly conditioned inputs) */
- rc_tmp_Q15 = silk_SAT16( rc_tmp_Q15 );
-
- /* Store */
- rc_Q15[ k ] = (opus_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 ] = silk_SMLAWB( Ctmp1, silk_LSHIFT( Ctmp2, 1 ), rc_tmp_Q15 );
- C[ n ][ 1 ] = silk_SMLAWB( Ctmp2, silk_LSHIFT( Ctmp1, 1 ), rc_tmp_Q15 );
- }
- }
-
- for(; k < order; k++ ) {
- rc_Q15[ k ] = 0;
- }
-
- /* return residual energy */
- return silk_max_32( 1, C[ 0 ][ 1 ] );
-}
diff --git a/drivers/opus/silk/fixed/solve_LS_FIX.c b/drivers/opus/silk/fixed/solve_LS_FIX.c
deleted file mode 100644
index 4ff97497be..0000000000
--- a/drivers/opus/silk/fixed/solve_LS_FIX.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-#include "opus/celt/stack_alloc.h"
-#include "opus/silk/tuning_parameters.h"
-
-/*****************************/
-/* Internal function headers */
-/*****************************/
-
-typedef struct {
- opus_int32 Q36_part;
- opus_int32 Q48_part;
-} inv_D_t;
-
-/* Factorize square matrix A into LDL form */
-static OPUS_INLINE void silk_LDL_factorize_FIX(
- opus_int32 *A, /* I/O Pointer to Symetric Square Matrix */
- opus_int M, /* I Size of Matrix */
- opus_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 */
-static OPUS_INLINE void silk_LS_SolveFirst_FIX(
- const opus_int32 *L_Q16, /* I Pointer to Lower Triangular Matrix */
- opus_int M, /* I Dim of Matrix equation */
- const opus_int32 *b, /* I b Vector */
- opus_int32 *x_Q16 /* O x Vector */
-);
-
-/* Solve L^t*x = b, where L is lower triangular with ones on the diagonal */
-static OPUS_INLINE void silk_LS_SolveLast_FIX(
- const opus_int32 *L_Q16, /* I Pointer to Lower Triangular Matrix */
- const opus_int M, /* I Dim of Matrix equation */
- const opus_int32 *b, /* I b Vector */
- opus_int32 *x_Q16 /* O x Vector */
-);
-
-static OPUS_INLINE void silk_LS_divide_Q16_FIX(
- opus_int32 T[], /* I/O Numenator vector */
- inv_D_t *inv_D, /* I 1 / D vector */
- opus_int M /* I dimension */
-);
-
-/* Solves Ax = b, assuming A is symmetric */
-void silk_solve_LDL_FIX(
- opus_int32 *A, /* I Pointer to symetric square matrix A */
- opus_int M, /* I Size of matrix */
- const opus_int32 *b, /* I Pointer to b vector */
- opus_int32 *x_Q16 /* O Pointer to x solution vector */
-)
-{
- VARDECL( opus_int32, L_Q16 );
- opus_int32 Y[ MAX_MATRIX_SIZE ];
- inv_D_t inv_D[ MAX_MATRIX_SIZE ];
- SAVE_STACK;
-
- silk_assert( M <= MAX_MATRIX_SIZE );
- ALLOC( L_Q16, M * M, opus_int32 );
-
- /***************************************************
- Factorize A by LDL such that A = L*D*L',
- where L is lower triangular with ones on diagonal
- ****************************************************/
- 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
- ******************************************************/
- 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
- ****************************************************/
- silk_LS_divide_Q16_FIX( Y, inv_D, M );
-
- /****************************************************
- x = inv(L') * inv(D) * Y
- *****************************************************/
- silk_LS_SolveLast_FIX( L_Q16, M, Y, x_Q16 );
- RESTORE_STACK;
-}
-
-static OPUS_INLINE void silk_LDL_factorize_FIX(
- opus_int32 *A, /* I/O Pointer to Symetric Square Matrix */
- opus_int M, /* I Size of Matrix */
- opus_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 */
-)
-{
- opus_int i, j, k, status, loop_count;
- const opus_int32 *ptr1, *ptr2;
- opus_int32 diag_min_value, tmp_32, err;
- opus_int32 v_Q0[ MAX_MATRIX_SIZE ], D_Q0[ MAX_MATRIX_SIZE ];
- opus_int32 one_div_diag_Q36, one_div_diag_Q40, one_div_diag_Q48;
-
- silk_assert( M <= MAX_MATRIX_SIZE );
-
- status = 1;
- diag_min_value = silk_max_32( silk_SMMUL( silk_ADD_SAT32( A[ 0 ], A[ silk_SMULBB( M, M ) - 1 ] ), SILK_FIX_CONST( FIND_LTP_COND_FAC, 31 ) ), 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 ] = silk_SMULWW( D_Q0[ i ], ptr1[ i ] ); /* Q0 */
- tmp_32 = silk_SMLAWW( tmp_32, v_Q0[ i ], ptr1[ i ] ); /* Q0 */
- }
- tmp_32 = silk_SUB32( matrix_ptr( A, j, j, M ), tmp_32 );
-
- if( tmp_32 < diag_min_value ) {
- tmp_32 = silk_SUB32( silk_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 ) = silk_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 = silk_INVERSE32_varQ( tmp_32, 36 ); /* Q36 */
- one_div_diag_Q40 = silk_LSHIFT( one_div_diag_Q36, 4 ); /* Q40 */
- err = silk_SUB32( (opus_int32)1 << 24, silk_SMULWW( tmp_32, one_div_diag_Q40 ) ); /* Q24 */
- one_div_diag_Q48 = silk_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 = silk_SMLAWW( tmp_32, v_Q0[ k ], ptr2[ k ] ); /* Q0 */
- }
- tmp_32 = silk_SUB32( ptr1[ i ], tmp_32 ); /* always < max(Correlation) */
-
- /* tmp_32 / D_Q0[j] : Divide to Q16 */
- matrix_ptr( L_Q16, i, j, M ) = silk_ADD32( silk_SMMUL( tmp_32, one_div_diag_Q48 ),
- silk_RSHIFT( silk_SMULWW( tmp_32, one_div_diag_Q36 ), 4 ) );
-
- /* go to next column */
- ptr2 += M;
- }
- }
- }
-
- silk_assert( status == 0 );
-}
-
-static OPUS_INLINE void silk_LS_divide_Q16_FIX(
- opus_int32 T[], /* I/O Numenator vector */
- inv_D_t *inv_D, /* I 1 / D vector */
- opus_int M /* I dimension */
-)
-{
- opus_int i;
- opus_int32 tmp_32;
- opus_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 ] = silk_ADD32( silk_SMMUL( tmp_32, one_div_diag_Q48 ), silk_RSHIFT( silk_SMULWW( tmp_32, one_div_diag_Q36 ), 4 ) );
- }
-}
-
-/* Solve Lx = b, when L is lower triangular and has ones on the diagonal */
-static OPUS_INLINE void silk_LS_SolveFirst_FIX(
- const opus_int32 *L_Q16, /* I Pointer to Lower Triangular Matrix */
- opus_int M, /* I Dim of Matrix equation */
- const opus_int32 *b, /* I b Vector */
- opus_int32 *x_Q16 /* O x Vector */
-)
-{
- opus_int i, j;
- const opus_int32 *ptr32;
- opus_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 = silk_SMLAWW( tmp_32, ptr32[ j ], x_Q16[ j ] );
- }
- x_Q16[ i ] = silk_SUB32( b[ i ], tmp_32 );
- }
-}
-
-/* Solve L^t*x = b, where L is lower triangular with ones on the diagonal */
-static OPUS_INLINE void silk_LS_SolveLast_FIX(
- const opus_int32 *L_Q16, /* I Pointer to Lower Triangular Matrix */
- const opus_int M, /* I Dim of Matrix equation */
- const opus_int32 *b, /* I b Vector */
- opus_int32 *x_Q16 /* O x Vector */
-)
-{
- opus_int i, j;
- const opus_int32 *ptr32;
- opus_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 = silk_SMLAWW( tmp_32, ptr32[ silk_SMULBB( j, M ) ], x_Q16[ j ] );
- }
- x_Q16[ i ] = silk_SUB32( b[ i ], tmp_32 );
- }
-}
diff --git a/drivers/opus/silk/fixed/structs_FIX.h b/drivers/opus/silk/fixed/structs_FIX.h
deleted file mode 100644
index 36ddff0a9e..0000000000
--- a/drivers/opus/silk/fixed/structs_FIX.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_STRUCTS_FIX_H
-#define SILK_STRUCTS_FIX_H
-
-#include "opus/silk/typedef.h"
-#include "opus/silk/main.h"
-#include "opus/silk/structs.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/********************************/
-/* Noise shaping analysis state */
-/********************************/
-typedef struct {
- opus_int8 LastGainIndex;
- opus_int32 HarmBoost_smth_Q16;
- opus_int32 HarmShapeGain_smth_Q16;
- opus_int32 Tilt_smth_Q16;
-} silk_shape_state_FIX;
-
-/********************************/
-/* Prefilter state */
-/********************************/
-typedef struct {
- opus_int16 sLTP_shp[ LTP_BUF_LENGTH ];
- opus_int32 sAR_shp[ MAX_SHAPE_LPC_ORDER + 1 ];
- opus_int sLTP_shp_buf_idx;
- opus_int32 sLF_AR_shp_Q12;
- opus_int32 sLF_MA_shp_Q12;
- opus_int32 sHarmHP_Q2;
- opus_int32 rand_seed;
- opus_int lagPrev;
-} silk_prefilter_state_FIX;
-
-/********************************/
-/* Encoder state FIX */
-/********************************/
-typedef struct {
- silk_encoder_state sCmn; /* Common struct, shared with floating-point code */
- silk_shape_state_FIX sShape; /* Shape state */
- silk_prefilter_state_FIX sPrefilt; /* Prefilter State */
-
- /* Buffer for find pitch and noise shape analysis */
- silk_DWORD_ALIGN opus_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ];/* Buffer for find pitch and noise shape analysis */
- opus_int LTPCorr_Q15; /* Normalized correlation from pitch lag estimator */
-} silk_encoder_state_FIX;
-
-/************************/
-/* Encoder control FIX */
-/************************/
-typedef struct {
- /* Prediction and coding parameters */
- opus_int32 Gains_Q16[ MAX_NB_SUBFR ];
- silk_DWORD_ALIGN opus_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ];
- opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ];
- opus_int LTP_scale_Q14;
- opus_int pitchL[ MAX_NB_SUBFR ];
-
- /* Noise shaping parameters */
- /* Testing */
- silk_DWORD_ALIGN opus_int16 AR1_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
- silk_DWORD_ALIGN opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
- opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ]; /* Packs two int16 coefficients per int32 value */
- opus_int GainsPre_Q14[ MAX_NB_SUBFR ];
- opus_int HarmBoost_Q14[ MAX_NB_SUBFR ];
- opus_int Tilt_Q14[ MAX_NB_SUBFR ];
- opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ];
- opus_int Lambda_Q10;
- opus_int input_quality_Q14;
- opus_int coding_quality_Q14;
-
- /* measures */
- opus_int sparseness_Q8;
- opus_int32 predGain_Q16;
- opus_int LTPredCodGain_Q7;
- opus_int32 ResNrg[ MAX_NB_SUBFR ]; /* Residual energy per subframe */
- opus_int ResNrgQ[ MAX_NB_SUBFR ]; /* Q domain for the residual energy > 0 */
-
- /* Parameters for CBR mode */
- opus_int32 GainsUnq_Q16[ MAX_NB_SUBFR ];
- opus_int8 lastGainIndexPrev;
-} silk_encoder_control_FIX;
-
-/************************/
-/* Encoder Super Struct */
-/************************/
-typedef struct {
- silk_encoder_state_FIX state_Fxx[ ENCODER_NUM_CHANNELS ];
- stereo_enc_state sStereo;
- opus_int32 nBitsUsedLBRR;
- opus_int32 nBitsExceeded;
- opus_int nChannelsAPI;
- opus_int nChannelsInternal;
- opus_int nPrevChannelsInternal;
- opus_int timeSinceSwitchAllowed_ms;
- opus_int allowBandwidthSwitch;
- opus_int prev_decode_only_middle;
-} silk_encoder;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/drivers/opus/silk/fixed/vector_ops_FIX.c b/drivers/opus/silk/fixed/vector_ops_FIX.c
deleted file mode 100644
index 1e8fdec0cb..0000000000
--- a/drivers/opus/silk/fixed/vector_ops_FIX.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/celt/pitch.h"
-
-/* Copy and multiply a vector by a constant */
-void silk_scale_copy_vector16(
- opus_int16 *data_out,
- const opus_int16 *data_in,
- opus_int32 gain_Q16, /* I Gain in Q16 */
- const opus_int dataSize /* I Length */
-)
-{
- opus_int i;
- opus_int32 tmp32;
-
- for( i = 0; i < dataSize; i++ ) {
- tmp32 = silk_SMULWB( gain_Q16, data_in[ i ] );
- data_out[ i ] = (opus_int16)silk_CHECK_FIT16( tmp32 );
- }
-}
-
-/* Multiply a vector by a constant */
-void silk_scale_vector32_Q26_lshift_18(
- opus_int32 *data1, /* I/O Q0/Q18 */
- opus_int32 gain_Q26, /* I Q26 */
- opus_int dataSize /* I length */
-)
-{
- opus_int i;
-
- for( i = 0; i < dataSize; i++ ) {
- data1[ i ] = (opus_int32)silk_CHECK_FIT32( silk_RSHIFT64( silk_SMULL( data1[ i ], gain_Q26 ), 8 ) ); /* OUTPUT: Q18 */
- }
-}
-
-/* sum = for(i=0;i<len;i++)inVec1[i]*inVec2[i]; --- inner product */
-/* Note for ARM asm: */
-/* * inVec1 and inVec2 should be at least 2 byte aligned. */
-/* * len should be positive 16bit integer. */
-/* * only when len>6, memory access can be reduced by half. */
-opus_int32 silk_inner_prod_aligned(
- const opus_int16 *const inVec1, /* I input vector 1 */
- const opus_int16 *const inVec2, /* I input vector 2 */
- const opus_int len, /* I vector lengths */
- int arch /* I Run-time architecture */
-)
-{
-#ifdef OPUS_FIXED_POINT
- return celt_inner_prod(inVec1, inVec2, len, arch);
-#else
- opus_int i;
- opus_int32 sum = 0;
- for( i = 0; i < len; i++ ) {
- sum = silk_SMLABB( sum, inVec1[ i ], inVec2[ i ] );
- }
- return sum;
-#endif
-}
-
-opus_int64 silk_inner_prod16_aligned_64_c(
- const opus_int16 *inVec1, /* I input vector 1 */
- const opus_int16 *inVec2, /* I input vector 2 */
- const opus_int len /* I vector lengths */
-)
-{
- opus_int i;
- opus_int64 sum = 0;
- for( i = 0; i < len; i++ ) {
- sum = silk_SMLALBB( sum, inVec1[ i ], inVec2[ i ] );
- }
- return sum;
-}
diff --git a/drivers/opus/silk/fixed/warped_autocorrelation_FIX.c b/drivers/opus/silk/fixed/warped_autocorrelation_FIX.c
deleted file mode 100644
index 3b8d52d5c6..0000000000
--- a/drivers/opus/silk/fixed/warped_autocorrelation_FIX.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/fixed/main_FIX.h"
-
-#define QC 10
-#define QS 14
-
-#if defined(MIPSr1_ASM)
-#include "opus/silk/fixed/mips/warped_autocorrelation_FIX_mipsr1.h"
-#endif
-
-
-#ifndef OVERRIDE_silk_warped_autocorrelation_FIX
-/* Autocorrelations for a warped frequency axis */
-void silk_warped_autocorrelation_FIX(
- opus_int32 *corr, /* O Result [order + 1] */
- opus_int *scale, /* O Scaling of the correlation vector */
- const opus_int16 *input, /* I Input data to correlate */
- const opus_int warping_Q16, /* I Warping coefficient */
- const opus_int length, /* I Length of input */
- const opus_int order /* I Correlation order (even) */
-)
-{
- opus_int n, i, lsh;
- opus_int32 tmp1_QS, tmp2_QS;
- opus_int32 state_QS[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 };
- opus_int64 corr_QC[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 };
-
- /* Order must be even */
- silk_assert( ( order & 1 ) == 0 );
- silk_assert( 2 * QS - QC >= 0 );
-
- /* Loop over samples */
- for( n = 0; n < length; n++ ) {
- tmp1_QS = silk_LSHIFT32( (opus_int32)input[ n ], QS );
- /* Loop over allpass sections */
- for( i = 0; i < order; i += 2 ) {
- /* Output of allpass section */
- tmp2_QS = silk_SMLAWB( state_QS[ i ], state_QS[ i + 1 ] - tmp1_QS, warping_Q16 );
- state_QS[ i ] = tmp1_QS;
- corr_QC[ i ] += silk_RSHIFT64( silk_SMULL( tmp1_QS, state_QS[ 0 ] ), 2 * QS - QC );
- /* Output of allpass section */
- tmp1_QS = silk_SMLAWB( state_QS[ i + 1 ], state_QS[ i + 2 ] - tmp2_QS, warping_Q16 );
- state_QS[ i + 1 ] = tmp2_QS;
- corr_QC[ i + 1 ] += silk_RSHIFT64( silk_SMULL( tmp2_QS, state_QS[ 0 ] ), 2 * QS - QC );
- }
- state_QS[ order ] = tmp1_QS;
- corr_QC[ order ] += silk_RSHIFT64( silk_SMULL( tmp1_QS, state_QS[ 0 ] ), 2 * QS - QC );
- }
-
- lsh = silk_CLZ64( corr_QC[ 0 ] ) - 35;
- lsh = silk_LIMIT( lsh, -12 - QC, 30 - QC );
- *scale = -( QC + lsh );
- silk_assert( *scale >= -30 && *scale <= 12 );
- if( lsh >= 0 ) {
- for( i = 0; i < order + 1; i++ ) {
- corr[ i ] = (opus_int32)silk_CHECK_FIT32( silk_LSHIFT64( corr_QC[ i ], lsh ) );
- }
- } else {
- for( i = 0; i < order + 1; i++ ) {
- corr[ i ] = (opus_int32)silk_CHECK_FIT32( silk_RSHIFT64( corr_QC[ i ], -lsh ) );
- }
- }
- silk_assert( corr_QC[ 0 ] >= 0 ); /* If breaking, decrease QC*/
-}
-#endif /* OVERRIDE_silk_warped_autocorrelation_FIX */
diff --git a/drivers/opus/silk/fixed/x86/burg_modified_FIX_sse.c b/drivers/opus/silk/fixed/x86/burg_modified_FIX_sse.c
deleted file mode 100644
index f7d46487df..0000000000
--- a/drivers/opus/silk/fixed/x86/burg_modified_FIX_sse.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-#include <smmintrin.h>
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/define.h"
-#include "opus/silk/tuning_parameters.h"
-#include "opus/celt/pitch.h"
-#include "opus/celt/x86/x86cpu.h"
-
-#define MAX_FRAME_SIZE 384 /* subfr_length * nb_subfr = ( 0.005 * 16000 + 16 ) * 4 = 384 */
-
-#define QA 25
-#define N_BITS_HEAD_ROOM 2
-#define MIN_RSHIFTS -16
-#define MAX_RSHIFTS (32 - QA)
-
-/* Compute reflection coefficients from input signal */
-void silk_burg_modified_sse4_1(
- opus_int32 *res_nrg, /* O Residual energy */
- opus_int *res_nrg_Q, /* O Residual energy Q value */
- opus_int32 A_Q16[], /* O Prediction coefficients (length order) */
- const opus_int16 x[], /* I Input signal, length: nb_subfr * ( D + subfr_length ) */
- const opus_int32 minInvGain_Q30, /* I Inverse of max prediction gain */
- const opus_int subfr_length, /* I Input signal subframe length (incl. D preceding samples) */
- const opus_int nb_subfr, /* I Number of subframes stacked in x */
- const opus_int D, /* I Order */
- int arch /* I Run-time architecture */
-)
-{
- opus_int k, n, s, lz, rshifts, rshifts_extra, reached_max_gain;
- opus_int32 C0, num, nrg, rc_Q31, invGain_Q30, Atmp_QA, Atmp1, tmp1, tmp2, x1, x2;
- const opus_int16 *x_ptr;
- opus_int32 C_first_row[ SILK_MAX_ORDER_LPC ];
- opus_int32 C_last_row[ SILK_MAX_ORDER_LPC ];
- opus_int32 Af_QA[ SILK_MAX_ORDER_LPC ];
- opus_int32 CAf[ SILK_MAX_ORDER_LPC + 1 ];
- opus_int32 CAb[ SILK_MAX_ORDER_LPC + 1 ];
- opus_int32 xcorr[ SILK_MAX_ORDER_LPC ];
-
- __m128i FIRST_3210, LAST_3210, ATMP_3210, TMP1_3210, TMP2_3210, T1_3210, T2_3210, PTR_3210, SUBFR_3210, X1_3210, X2_3210;
- __m128i CONST1 = _mm_set1_epi32(1);
-
- silk_assert( subfr_length * nb_subfr <= MAX_FRAME_SIZE );
-
- /* Compute autocorrelations, added over subframes */
- silk_sum_sqr_shift( &C0, &rshifts, x, nb_subfr * subfr_length );
- if( rshifts > MAX_RSHIFTS ) {
- C0 = silk_LSHIFT32( C0, rshifts - MAX_RSHIFTS );
- silk_assert( C0 > 0 );
- rshifts = MAX_RSHIFTS;
- } else {
- lz = silk_CLZ32( C0 ) - 1;
- rshifts_extra = N_BITS_HEAD_ROOM - lz;
- if( rshifts_extra > 0 ) {
- rshifts_extra = silk_min( rshifts_extra, MAX_RSHIFTS - rshifts );
- C0 = silk_RSHIFT32( C0, rshifts_extra );
- } else {
- rshifts_extra = silk_max( rshifts_extra, MIN_RSHIFTS - rshifts );
- C0 = silk_LSHIFT32( C0, -rshifts_extra );
- }
- rshifts += rshifts_extra;
- }
- CAb[ 0 ] = CAf[ 0 ] = C0 + silk_SMMUL( SILK_FIX_CONST( FIND_LPC_COND_FAC, 32 ), C0 ) + 1; /* Q(-rshifts) */
- silk_memset( C_first_row, 0, SILK_MAX_ORDER_LPC * sizeof( opus_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 ] += (opus_int32)silk_RSHIFT64(
- silk_inner_prod16_aligned_64( x_ptr, x_ptr + n, subfr_length - n, arch ), rshifts );
- }
- }
- } else {
- for( s = 0; s < nb_subfr; s++ ) {
- int i;
- opus_int32 d;
- x_ptr = x + s * subfr_length;
- celt_pitch_xcorr(x_ptr, x_ptr + 1, xcorr, subfr_length - D, D, arch );
- for( n = 1; n < D + 1; n++ ) {
- for ( i = n + subfr_length - D, d = 0; i < subfr_length; i++ )
- d = MAC16_16( d, x_ptr[ i ], x_ptr[ i - n ] );
- xcorr[ n - 1 ] += d;
- }
- for( n = 1; n < D + 1; n++ ) {
- C_first_row[ n - 1 ] += silk_LSHIFT32( xcorr[ n - 1 ], -rshifts );
- }
- }
- }
- silk_memcpy( C_last_row, C_first_row, SILK_MAX_ORDER_LPC * sizeof( opus_int32 ) );
-
- /* Initialize */
- CAb[ 0 ] = CAf[ 0 ] = C0 + silk_SMMUL( SILK_FIX_CONST( FIND_LPC_COND_FAC, 32 ), C0 ) + 1; /* Q(-rshifts) */
-
- invGain_Q30 = (opus_int32)1 << 30;
- reached_max_gain = 0;
- 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 = -silk_LSHIFT32( (opus_int32)x_ptr[ n ], 16 - rshifts ); /* Q(16-rshifts) */
- x2 = -silk_LSHIFT32( (opus_int32)x_ptr[ subfr_length - n - 1 ], 16 - rshifts ); /* Q(16-rshifts) */
- tmp1 = silk_LSHIFT32( (opus_int32)x_ptr[ n ], QA - 16 ); /* Q(QA-16) */
- tmp2 = silk_LSHIFT32( (opus_int32)x_ptr[ subfr_length - n - 1 ], QA - 16 ); /* Q(QA-16) */
- for( k = 0; k < n; k++ ) {
- C_first_row[ k ] = silk_SMLAWB( C_first_row[ k ], x1, x_ptr[ n - k - 1 ] ); /* Q( -rshifts ) */
- C_last_row[ k ] = silk_SMLAWB( C_last_row[ k ], x2, x_ptr[ subfr_length - n + k ] ); /* Q( -rshifts ) */
- Atmp_QA = Af_QA[ k ];
- tmp1 = silk_SMLAWB( tmp1, Atmp_QA, x_ptr[ n - k - 1 ] ); /* Q(QA-16) */
- tmp2 = silk_SMLAWB( tmp2, Atmp_QA, x_ptr[ subfr_length - n + k ] ); /* Q(QA-16) */
- }
- tmp1 = silk_LSHIFT32( -tmp1, 32 - QA - rshifts ); /* Q(16-rshifts) */
- tmp2 = silk_LSHIFT32( -tmp2, 32 - QA - rshifts ); /* Q(16-rshifts) */
- for( k = 0; k <= n; k++ ) {
- CAf[ k ] = silk_SMLAWB( CAf[ k ], tmp1, x_ptr[ n - k ] ); /* Q( -rshift ) */
- CAb[ k ] = silk_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 = -silk_LSHIFT32( (opus_int32)x_ptr[ n ], -rshifts ); /* Q( -rshifts ) */
- x2 = -silk_LSHIFT32( (opus_int32)x_ptr[ subfr_length - n - 1 ], -rshifts ); /* Q( -rshifts ) */
- tmp1 = silk_LSHIFT32( (opus_int32)x_ptr[ n ], 17 ); /* Q17 */
- tmp2 = silk_LSHIFT32( (opus_int32)x_ptr[ subfr_length - n - 1 ], 17 ); /* Q17 */
-
- X1_3210 = _mm_set1_epi32( x1 );
- X2_3210 = _mm_set1_epi32( x2 );
- TMP1_3210 = _mm_setzero_si128();
- TMP2_3210 = _mm_setzero_si128();
- for( k = 0; k < n - 3; k += 4 ) {
- PTR_3210 = OP_CVTEPI16_EPI32_M64( &x_ptr[ n - k - 1 - 3 ] );
- SUBFR_3210 = OP_CVTEPI16_EPI32_M64( &x_ptr[ subfr_length - n + k ] );
- FIRST_3210 = _mm_loadu_si128( (__m128i *)&C_first_row[ k ] );
- PTR_3210 = _mm_shuffle_epi32( PTR_3210, _MM_SHUFFLE( 0, 1, 2, 3 ) );
- LAST_3210 = _mm_loadu_si128( (__m128i *)&C_last_row[ k ] );
- ATMP_3210 = _mm_loadu_si128( (__m128i *)&Af_QA[ k ] );
-
- T1_3210 = _mm_mullo_epi32( PTR_3210, X1_3210 );
- T2_3210 = _mm_mullo_epi32( SUBFR_3210, X2_3210 );
-
- ATMP_3210 = _mm_srai_epi32( ATMP_3210, 7 );
- ATMP_3210 = _mm_add_epi32( ATMP_3210, CONST1 );
- ATMP_3210 = _mm_srai_epi32( ATMP_3210, 1 );
-
- FIRST_3210 = _mm_add_epi32( FIRST_3210, T1_3210 );
- LAST_3210 = _mm_add_epi32( LAST_3210, T2_3210 );
-
- PTR_3210 = _mm_mullo_epi32( ATMP_3210, PTR_3210 );
- SUBFR_3210 = _mm_mullo_epi32( ATMP_3210, SUBFR_3210 );
-
- _mm_storeu_si128( (__m128i *)&C_first_row[ k ], FIRST_3210 );
- _mm_storeu_si128( (__m128i *)&C_last_row[ k ], LAST_3210 );
-
- TMP1_3210 = _mm_add_epi32( TMP1_3210, PTR_3210 );
- TMP2_3210 = _mm_add_epi32( TMP2_3210, SUBFR_3210 );
- }
-
- TMP1_3210 = _mm_add_epi32( TMP1_3210, _mm_unpackhi_epi64(TMP1_3210, TMP1_3210 ) );
- TMP2_3210 = _mm_add_epi32( TMP2_3210, _mm_unpackhi_epi64(TMP2_3210, TMP2_3210 ) );
- TMP1_3210 = _mm_add_epi32( TMP1_3210, _mm_shufflelo_epi16(TMP1_3210, 0x0E ) );
- TMP2_3210 = _mm_add_epi32( TMP2_3210, _mm_shufflelo_epi16(TMP2_3210, 0x0E ) );
-
- tmp1 += _mm_cvtsi128_si32( TMP1_3210 );
- tmp2 += _mm_cvtsi128_si32( TMP2_3210 );
-
- for( ; k < n; k++ ) {
- C_first_row[ k ] = silk_MLA( C_first_row[ k ], x1, x_ptr[ n - k - 1 ] ); /* Q( -rshifts ) */
- C_last_row[ k ] = silk_MLA( C_last_row[ k ], x2, x_ptr[ subfr_length - n + k ] ); /* Q( -rshifts ) */
- Atmp1 = silk_RSHIFT_ROUND( Af_QA[ k ], QA - 17 ); /* Q17 */
- tmp1 = silk_MLA( tmp1, x_ptr[ n - k - 1 ], Atmp1 ); /* Q17 */
- tmp2 = silk_MLA( tmp2, x_ptr[ subfr_length - n + k ], Atmp1 ); /* Q17 */
- }
-
- tmp1 = -tmp1; /* Q17 */
- tmp2 = -tmp2; /* Q17 */
-
- {
- __m128i xmm_tmp1, xmm_tmp2;
- __m128i xmm_x_ptr_n_k_x2x0, xmm_x_ptr_n_k_x3x1;
- __m128i xmm_x_ptr_sub_x2x0, xmm_x_ptr_sub_x3x1;
-
- xmm_tmp1 = _mm_set1_epi32( tmp1 );
- xmm_tmp2 = _mm_set1_epi32( tmp2 );
-
- for( k = 0; k <= n - 3; k += 4 ) {
- xmm_x_ptr_n_k_x2x0 = OP_CVTEPI16_EPI32_M64( &x_ptr[ n - k - 3 ] );
- xmm_x_ptr_sub_x2x0 = OP_CVTEPI16_EPI32_M64( &x_ptr[ subfr_length - n + k - 1 ] );
-
- xmm_x_ptr_n_k_x2x0 = _mm_shuffle_epi32( xmm_x_ptr_n_k_x2x0, _MM_SHUFFLE( 0, 1, 2, 3 ) );
-
- xmm_x_ptr_n_k_x2x0 = _mm_slli_epi32( xmm_x_ptr_n_k_x2x0, -rshifts - 1 );
- xmm_x_ptr_sub_x2x0 = _mm_slli_epi32( xmm_x_ptr_sub_x2x0, -rshifts - 1 );
-
- /* equal shift right 4 bytes, xmm_x_ptr_n_k_x3x1 = _mm_srli_si128(xmm_x_ptr_n_k_x2x0, 4)*/
- xmm_x_ptr_n_k_x3x1 = _mm_shuffle_epi32( xmm_x_ptr_n_k_x2x0, _MM_SHUFFLE( 0, 3, 2, 1 ) );
- xmm_x_ptr_sub_x3x1 = _mm_shuffle_epi32( xmm_x_ptr_sub_x2x0, _MM_SHUFFLE( 0, 3, 2, 1 ) );
-
- xmm_x_ptr_n_k_x2x0 = _mm_mul_epi32( xmm_x_ptr_n_k_x2x0, xmm_tmp1 );
- xmm_x_ptr_n_k_x3x1 = _mm_mul_epi32( xmm_x_ptr_n_k_x3x1, xmm_tmp1 );
- xmm_x_ptr_sub_x2x0 = _mm_mul_epi32( xmm_x_ptr_sub_x2x0, xmm_tmp2 );
- xmm_x_ptr_sub_x3x1 = _mm_mul_epi32( xmm_x_ptr_sub_x3x1, xmm_tmp2 );
-
- xmm_x_ptr_n_k_x2x0 = _mm_srli_epi64( xmm_x_ptr_n_k_x2x0, 16 );
- xmm_x_ptr_n_k_x3x1 = _mm_slli_epi64( xmm_x_ptr_n_k_x3x1, 16 );
- xmm_x_ptr_sub_x2x0 = _mm_srli_epi64( xmm_x_ptr_sub_x2x0, 16 );
- xmm_x_ptr_sub_x3x1 = _mm_slli_epi64( xmm_x_ptr_sub_x3x1, 16 );
-
- xmm_x_ptr_n_k_x2x0 = _mm_blend_epi16( xmm_x_ptr_n_k_x2x0, xmm_x_ptr_n_k_x3x1, 0xCC );
- xmm_x_ptr_sub_x2x0 = _mm_blend_epi16( xmm_x_ptr_sub_x2x0, xmm_x_ptr_sub_x3x1, 0xCC );
-
- X1_3210 = _mm_loadu_si128( (__m128i *)&CAf[ k ] );
- PTR_3210 = _mm_loadu_si128( (__m128i *)&CAb[ k ] );
-
- X1_3210 = _mm_add_epi32( X1_3210, xmm_x_ptr_n_k_x2x0 );
- PTR_3210 = _mm_add_epi32( PTR_3210, xmm_x_ptr_sub_x2x0 );
-
- _mm_storeu_si128( (__m128i *)&CAf[ k ], X1_3210 );
- _mm_storeu_si128( (__m128i *)&CAb[ k ], PTR_3210 );
- }
-
- for( ; k <= n; k++ ) {
- CAf[ k ] = silk_SMLAWW( CAf[ k ], tmp1,
- silk_LSHIFT32( (opus_int32)x_ptr[ n - k ], -rshifts - 1 ) ); /* Q( -rshift ) */
- CAb[ k ] = silk_SMLAWW( CAb[ k ], tmp2,
- silk_LSHIFT32( (opus_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 = silk_ADD32( CAb[ 0 ], CAf[ 0 ] ); /* Q( 1-rshifts ) */
- for( k = 0; k < n; k++ ) {
- Atmp_QA = Af_QA[ k ];
- lz = silk_CLZ32( silk_abs( Atmp_QA ) ) - 1;
- lz = silk_min( 32 - QA, lz );
- Atmp1 = silk_LSHIFT32( Atmp_QA, lz ); /* Q( QA + lz ) */
-
- tmp1 = silk_ADD_LSHIFT32( tmp1, silk_SMMUL( C_last_row[ n - k - 1 ], Atmp1 ), 32 - QA - lz ); /* Q( -rshifts ) */
- tmp2 = silk_ADD_LSHIFT32( tmp2, silk_SMMUL( C_first_row[ n - k - 1 ], Atmp1 ), 32 - QA - lz ); /* Q( -rshifts ) */
- num = silk_ADD_LSHIFT32( num, silk_SMMUL( CAb[ n - k ], Atmp1 ), 32 - QA - lz ); /* Q( -rshifts ) */
- nrg = silk_ADD_LSHIFT32( nrg, silk_SMMUL( silk_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 = silk_ADD32( num, tmp2 ); /* Q( -rshifts ) */
- num = silk_LSHIFT32( -num, 1 ); /* Q( 1-rshifts ) */
-
- /* Calculate the next order reflection (parcor) coefficient */
- if( silk_abs( num ) < nrg ) {
- rc_Q31 = silk_DIV32_varQ( num, nrg, 31 );
- } else {
- rc_Q31 = ( num > 0 ) ? silk_int32_MAX : silk_int32_MIN;
- }
-
- /* Update inverse prediction gain */
- tmp1 = ( (opus_int32)1 << 30 ) - silk_SMMUL( rc_Q31, rc_Q31 );
- tmp1 = silk_LSHIFT( silk_SMMUL( invGain_Q30, tmp1 ), 2 );
- if( tmp1 <= minInvGain_Q30 ) {
- /* Max prediction gain exceeded; set reflection coefficient such that max prediction gain is exactly hit */
- tmp2 = ( (opus_int32)1 << 30 ) - silk_DIV32_varQ( minInvGain_Q30, invGain_Q30, 30 ); /* Q30 */
- rc_Q31 = silk_SQRT_APPROX( tmp2 ); /* Q15 */
- /* Newton-Raphson iteration */
- rc_Q31 = silk_RSHIFT32( rc_Q31 + silk_DIV32( tmp2, rc_Q31 ), 1 ); /* Q15 */
- rc_Q31 = silk_LSHIFT32( rc_Q31, 16 ); /* Q31 */
- if( num < 0 ) {
- /* Ensure adjusted reflection coefficients has the original sign */
- rc_Q31 = -rc_Q31;
- }
- invGain_Q30 = minInvGain_Q30;
- reached_max_gain = 1;
- } else {
- invGain_Q30 = tmp1;
- }
-
- /* 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 ] = silk_ADD_LSHIFT32( tmp1, silk_SMMUL( tmp2, rc_Q31 ), 1 ); /* QA */
- Af_QA[ n - k - 1 ] = silk_ADD_LSHIFT32( tmp2, silk_SMMUL( tmp1, rc_Q31 ), 1 ); /* QA */
- }
- Af_QA[ n ] = silk_RSHIFT32( rc_Q31, 31 - QA ); /* QA */
-
- if( reached_max_gain ) {
- /* Reached max prediction gain; set remaining coefficients to zero and exit loop */
- for( k = n + 1; k < D; k++ ) {
- Af_QA[ k ] = 0;
- }
- break;
- }
-
- /* 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 ] = silk_ADD_LSHIFT32( tmp1, silk_SMMUL( tmp2, rc_Q31 ), 1 ); /* Q( -rshifts ) */
- CAb[ n - k + 1 ] = silk_ADD_LSHIFT32( tmp2, silk_SMMUL( tmp1, rc_Q31 ), 1 ); /* Q( -rshifts ) */
- }
- }
-
- if( reached_max_gain ) {
- for( k = 0; k < D; k++ ) {
- /* Scale coefficients */
- A_Q16[ k ] = -silk_RSHIFT_ROUND( Af_QA[ k ], QA - 16 );
- }
- /* Subtract energy of preceding samples from C0 */
- if( rshifts > 0 ) {
- for( s = 0; s < nb_subfr; s++ ) {
- x_ptr = x + s * subfr_length;
- C0 -= (opus_int32)silk_RSHIFT64( silk_inner_prod16_aligned_64( x_ptr, x_ptr, D, arch ), rshifts );
- }
- } else {
- for( s = 0; s < nb_subfr; s++ ) {
- x_ptr = x + s * subfr_length;
- C0 -= silk_LSHIFT32( silk_inner_prod_aligned( x_ptr, x_ptr, D, arch ), -rshifts );
- }
- }
- /* Approximate residual energy */
- *res_nrg = silk_LSHIFT( silk_SMMUL( invGain_Q30, C0 ), 2 );
- *res_nrg_Q = -rshifts;
- } else {
- /* Return residual energy */
- nrg = CAf[ 0 ]; /* Q( -rshifts ) */
- tmp1 = (opus_int32)1 << 16; /* Q16 */
- for( k = 0; k < D; k++ ) {
- Atmp1 = silk_RSHIFT_ROUND( Af_QA[ k ], QA - 16 ); /* Q16 */
- nrg = silk_SMLAWW( nrg, CAf[ k + 1 ], Atmp1 ); /* Q( -rshifts ) */
- tmp1 = silk_SMLAWW( tmp1, Atmp1, Atmp1 ); /* Q16 */
- A_Q16[ k ] = -Atmp1;
- }
- *res_nrg = silk_SMLAWW( nrg, silk_SMMUL( SILK_FIX_CONST( FIND_LPC_COND_FAC, 32 ), C0 ), -tmp1 );/* Q( -rshifts ) */
- *res_nrg_Q = -rshifts;
- }
-}
diff --git a/drivers/opus/silk/fixed/x86/prefilter_FIX_sse.c b/drivers/opus/silk/fixed/x86/prefilter_FIX_sse.c
deleted file mode 100644
index febb105645..0000000000
--- a/drivers/opus/silk/fixed/x86/prefilter_FIX_sse.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-#include <smmintrin.h>
-#include "opus/silk/main.h"
-#include "opus/celt/x86/x86cpu.h"
-
-void silk_warped_LPC_analysis_filter_FIX_sse4_1(
- opus_int32 state[], /* I/O State [order + 1] */
- opus_int32 res_Q2[], /* O Residual signal [length] */
- const opus_int16 coef_Q13[], /* I Coefficients [order] */
- const opus_int16 input[], /* I Input signal [length] */
- const opus_int16 lambda_Q16, /* I Warping factor */
- const opus_int length, /* I Length of input signal */
- const opus_int order /* I Filter order (even) */
-)
-{
- opus_int n, i;
- opus_int32 acc_Q11, tmp1, tmp2;
-
- /* Order must be even */
- silk_assert( ( order & 1 ) == 0 );
-
- if (order == 10)
- {
- if (0 == lambda_Q16)
- {
- __m128i coef_Q13_3210, coef_Q13_7654;
- __m128i coef_Q13_0123, coef_Q13_4567;
- __m128i state_0123, state_4567;
- __m128i xmm_product1, xmm_product2;
- __m128i xmm_tempa, xmm_tempb;
-
- register opus_int32 sum;
- register opus_int32 state_8, state_9, state_a;
- register opus_int64 coef_Q13_8, coef_Q13_9;
-
- silk_assert( length > 0 );
-
- coef_Q13_3210 = OP_CVTEPI16_EPI32_M64( &coef_Q13[ 0 ] );
- coef_Q13_7654 = OP_CVTEPI16_EPI32_M64( &coef_Q13[ 4 ] );
-
- coef_Q13_0123 = _mm_shuffle_epi32( coef_Q13_3210, _MM_SHUFFLE( 0, 1, 2, 3 ) );
- coef_Q13_4567 = _mm_shuffle_epi32( coef_Q13_7654, _MM_SHUFFLE( 0, 1, 2, 3 ) );
-
- coef_Q13_8 = (opus_int64) coef_Q13[ 8 ];
- coef_Q13_9 = (opus_int64) coef_Q13[ 9 ];
-
- state_0123 = _mm_loadu_si128( (__m128i *)(&state[ 0 ] ) );
- state_4567 = _mm_loadu_si128( (__m128i *)(&state[ 4 ] ) );
-
- state_0123 = _mm_shuffle_epi32( state_0123, _MM_SHUFFLE( 0, 1, 2, 3 ) );
- state_4567 = _mm_shuffle_epi32( state_4567, _MM_SHUFFLE( 0, 1, 2, 3 ) );
-
- state_8 = state[ 8 ];
- state_9 = state[ 9 ];
- state_a = 0;
-
- for( n = 0; n < length; n++ )
- {
- xmm_product1 = _mm_mul_epi32( coef_Q13_0123, state_0123 ); /* 64-bit multiply, only 2 pairs */
- xmm_product2 = _mm_mul_epi32( coef_Q13_4567, state_4567 );
-
- xmm_tempa = _mm_shuffle_epi32( state_0123, _MM_SHUFFLE( 0, 1, 2, 3 ) );
- xmm_tempb = _mm_shuffle_epi32( state_4567, _MM_SHUFFLE( 0, 1, 2, 3 ) );
-
- xmm_product1 = _mm_srli_epi64( xmm_product1, 16 ); /* >> 16, zero extending works */
- xmm_product2 = _mm_srli_epi64( xmm_product2, 16 );
-
- xmm_tempa = _mm_mul_epi32( coef_Q13_3210, xmm_tempa );
- xmm_tempb = _mm_mul_epi32( coef_Q13_7654, xmm_tempb );
-
- xmm_tempa = _mm_srli_epi64( xmm_tempa, 16 );
- xmm_tempb = _mm_srli_epi64( xmm_tempb, 16 );
-
- xmm_tempa = _mm_add_epi32( xmm_tempa, xmm_product1 );
- xmm_tempb = _mm_add_epi32( xmm_tempb, xmm_product2 );
- xmm_tempa = _mm_add_epi32( xmm_tempa, xmm_tempb );
-
- sum = (coef_Q13_8 * state_8) >> 16;
- sum += (coef_Q13_9 * state_9) >> 16;
-
- xmm_tempa = _mm_add_epi32( xmm_tempa, _mm_shuffle_epi32( xmm_tempa, _MM_SHUFFLE( 0, 0, 0, 2 ) ) );
- sum += _mm_cvtsi128_si32( xmm_tempa);
- res_Q2[ n ] = silk_LSHIFT( (opus_int32)input[ n ], 2 ) - silk_RSHIFT_ROUND( ( 5 + sum ), 9);
-
- /* move right */
- state_a = state_9;
- state_9 = state_8;
- state_8 = _mm_cvtsi128_si32( state_4567 );
- state_4567 = _mm_alignr_epi8( state_0123, state_4567, 4 );
-
- state_0123 = _mm_alignr_epi8( _mm_cvtsi32_si128( silk_LSHIFT( input[ n ], 14 ) ), state_0123, 4 );
- }
-
- _mm_storeu_si128( (__m128i *)( &state[ 0 ] ), _mm_shuffle_epi32( state_0123, _MM_SHUFFLE( 0, 1, 2, 3 ) ) );
- _mm_storeu_si128( (__m128i *)( &state[ 4 ] ), _mm_shuffle_epi32( state_4567, _MM_SHUFFLE( 0, 1, 2, 3 ) ) );
- state[ 8 ] = state_8;
- state[ 9 ] = state_9;
- state[ 10 ] = state_a;
-
- return;
- }
- }
-
- for( n = 0; n < length; n++ ) {
- /* Output of lowpass section */
- tmp2 = silk_SMLAWB( state[ 0 ], state[ 1 ], lambda_Q16 );
- state[ 0 ] = silk_LSHIFT( input[ n ], 14 );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( state[ 1 ], state[ 2 ] - tmp2, lambda_Q16 );
- state[ 1 ] = tmp2;
- acc_Q11 = silk_RSHIFT( order, 1 );
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp2, coef_Q13[ 0 ] );
- /* Loop over allpass sections */
- for( i = 2; i < order; i += 2 ) {
- /* Output of allpass section */
- tmp2 = silk_SMLAWB( state[ i ], state[ i + 1 ] - tmp1, lambda_Q16 );
- state[ i ] = tmp1;
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp1, coef_Q13[ i - 1 ] );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( state[ i + 1 ], state[ i + 2 ] - tmp2, lambda_Q16 );
- state[ i + 1 ] = tmp2;
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp2, coef_Q13[ i ] );
- }
- state[ order ] = tmp1;
- acc_Q11 = silk_SMLAWB( acc_Q11, tmp1, coef_Q13[ order - 1 ] );
- res_Q2[ n ] = silk_LSHIFT( (opus_int32)input[ n ], 2 ) - silk_RSHIFT_ROUND( acc_Q11, 9 );
- }
-}
diff --git a/drivers/opus/silk/fixed/x86/vector_ops_FIX_sse.c b/drivers/opus/silk/fixed/x86/vector_ops_FIX_sse.c
deleted file mode 100644
index 920d58cebc..0000000000
--- a/drivers/opus/silk/fixed/x86/vector_ops_FIX_sse.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-#include <smmintrin.h>
-#include "opus/silk/main.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/celt/pitch.h"
-
-opus_int64 silk_inner_prod16_aligned_64_sse4_1(
- const opus_int16 *inVec1, /* I input vector 1 */
- const opus_int16 *inVec2, /* I input vector 2 */
- const opus_int len /* I vector lengths */
-)
-{
- opus_int i, dataSize8;
- opus_int64 sum;
-
- __m128i xmm_tempa;
- __m128i inVec1_76543210, acc1;
- __m128i inVec2_76543210, acc2;
-
- sum = 0;
- dataSize8 = len & ~7;
-
- acc1 = _mm_setzero_si128();
- acc2 = _mm_setzero_si128();
-
- for( i = 0; i < dataSize8; i += 8 ) {
- inVec1_76543210 = _mm_loadu_si128( (__m128i *)(&inVec1[i + 0] ) );
- inVec2_76543210 = _mm_loadu_si128( (__m128i *)(&inVec2[i + 0] ) );
-
- /* only when all 4 operands are -32768 (0x8000), this results in wrap around */
- inVec1_76543210 = _mm_madd_epi16( inVec1_76543210, inVec2_76543210 );
-
- xmm_tempa = _mm_cvtepi32_epi64( inVec1_76543210 );
- /* equal shift right 8 bytes */
- inVec1_76543210 = _mm_shuffle_epi32( inVec1_76543210, _MM_SHUFFLE( 0, 0, 3, 2 ) );
- inVec1_76543210 = _mm_cvtepi32_epi64( inVec1_76543210 );
-
- acc1 = _mm_add_epi64( acc1, xmm_tempa );
- acc2 = _mm_add_epi64( acc2, inVec1_76543210 );
- }
-
- acc1 = _mm_add_epi64( acc1, acc2 );
-
- /* equal shift right 8 bytes */
- acc2 = _mm_shuffle_epi32( acc1, _MM_SHUFFLE( 0, 0, 3, 2 ) );
- acc1 = _mm_add_epi64( acc1, acc2 );
-
- _mm_storel_epi64( (__m128i *)&sum, acc1 );
-
- for( ; i < len; i++ ) {
- sum = silk_SMLABB( sum, inVec1[ i ], inVec2[ i ] );
- }
-
- return sum;
-}
diff --git a/drivers/opus/silk/float/LPC_analysis_filter_FLP.c b/drivers/opus/silk/float/LPC_analysis_filter_FLP.c
deleted file mode 100644
index 344e52ade2..0000000000
--- a/drivers/opus/silk/float/LPC_analysis_filter_FLP.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include <stdlib.h>
-#include "opus/silk/float/main_FLP.h"
-
-/************************************************/
-/* LPC analysis filter */
-/* NB! State is kept internally and the */
-/* filter always starts with zero state */
-/* first Order output samples are set to zero */
-/************************************************/
-
-/* 16th order LPC analysis filter, does not write first 16 samples */
-static OPUS_INLINE void silk_LPC_analysis_filter16_FLP(
- silk_float r_LPC[], /* O LPC residual signal */
- const silk_float PredCoef[], /* I LPC coefficients */
- const silk_float s[], /* I Input signal */
- const opus_int length /* I Length of input signal */
-)
-{
- opus_int ix;
- silk_float LPC_pred;
- const silk_float *s_ptr;
-
- for( ix = 16; ix < length; ix++ ) {
- s_ptr = &s[ix - 1];
-
- /* short-term prediction */
- LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] +
- s_ptr[ -1 ] * PredCoef[ 1 ] +
- s_ptr[ -2 ] * PredCoef[ 2 ] +
- s_ptr[ -3 ] * PredCoef[ 3 ] +
- s_ptr[ -4 ] * PredCoef[ 4 ] +
- s_ptr[ -5 ] * PredCoef[ 5 ] +
- s_ptr[ -6 ] * PredCoef[ 6 ] +
- s_ptr[ -7 ] * PredCoef[ 7 ] +
- s_ptr[ -8 ] * PredCoef[ 8 ] +
- s_ptr[ -9 ] * PredCoef[ 9 ] +
- s_ptr[ -10 ] * PredCoef[ 10 ] +
- s_ptr[ -11 ] * PredCoef[ 11 ] +
- s_ptr[ -12 ] * PredCoef[ 12 ] +
- s_ptr[ -13 ] * PredCoef[ 13 ] +
- s_ptr[ -14 ] * PredCoef[ 14 ] +
- s_ptr[ -15 ] * PredCoef[ 15 ];
-
- /* prediction error */
- r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;
- }
-}
-
-/* 12th order LPC analysis filter, does not write first 12 samples */
-static OPUS_INLINE void silk_LPC_analysis_filter12_FLP(
- silk_float r_LPC[], /* O LPC residual signal */
- const silk_float PredCoef[], /* I LPC coefficients */
- const silk_float s[], /* I Input signal */
- const opus_int length /* I Length of input signal */
-)
-{
- opus_int ix;
- silk_float LPC_pred;
- const silk_float *s_ptr;
-
- for( ix = 12; ix < length; ix++ ) {
- s_ptr = &s[ix - 1];
-
- /* short-term prediction */
- LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] +
- s_ptr[ -1 ] * PredCoef[ 1 ] +
- s_ptr[ -2 ] * PredCoef[ 2 ] +
- s_ptr[ -3 ] * PredCoef[ 3 ] +
- s_ptr[ -4 ] * PredCoef[ 4 ] +
- s_ptr[ -5 ] * PredCoef[ 5 ] +
- s_ptr[ -6 ] * PredCoef[ 6 ] +
- s_ptr[ -7 ] * PredCoef[ 7 ] +
- s_ptr[ -8 ] * PredCoef[ 8 ] +
- s_ptr[ -9 ] * PredCoef[ 9 ] +
- s_ptr[ -10 ] * PredCoef[ 10 ] +
- s_ptr[ -11 ] * PredCoef[ 11 ];
-
- /* prediction error */
- r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;
- }
-}
-
-/* 10th order LPC analysis filter, does not write first 10 samples */
-static OPUS_INLINE void silk_LPC_analysis_filter10_FLP(
- silk_float r_LPC[], /* O LPC residual signal */
- const silk_float PredCoef[], /* I LPC coefficients */
- const silk_float s[], /* I Input signal */
- const opus_int length /* I Length of input signal */
-)
-{
- opus_int ix;
- silk_float LPC_pred;
- const silk_float *s_ptr;
-
- for( ix = 10; ix < length; ix++ ) {
- s_ptr = &s[ix - 1];
-
- /* short-term prediction */
- LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] +
- s_ptr[ -1 ] * PredCoef[ 1 ] +
- s_ptr[ -2 ] * PredCoef[ 2 ] +
- s_ptr[ -3 ] * PredCoef[ 3 ] +
- s_ptr[ -4 ] * PredCoef[ 4 ] +
- s_ptr[ -5 ] * PredCoef[ 5 ] +
- s_ptr[ -6 ] * PredCoef[ 6 ] +
- s_ptr[ -7 ] * PredCoef[ 7 ] +
- s_ptr[ -8 ] * PredCoef[ 8 ] +
- s_ptr[ -9 ] * PredCoef[ 9 ];
-
- /* prediction error */
- r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;
- }
-}
-
-/* 8th order LPC analysis filter, does not write first 8 samples */
-static OPUS_INLINE void silk_LPC_analysis_filter8_FLP(
- silk_float r_LPC[], /* O LPC residual signal */
- const silk_float PredCoef[], /* I LPC coefficients */
- const silk_float s[], /* I Input signal */
- const opus_int length /* I Length of input signal */
-)
-{
- opus_int ix;
- silk_float LPC_pred;
- const silk_float *s_ptr;
-
- for( ix = 8; ix < length; ix++ ) {
- s_ptr = &s[ix - 1];
-
- /* short-term prediction */
- LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] +
- s_ptr[ -1 ] * PredCoef[ 1 ] +
- s_ptr[ -2 ] * PredCoef[ 2 ] +
- s_ptr[ -3 ] * PredCoef[ 3 ] +
- s_ptr[ -4 ] * PredCoef[ 4 ] +
- s_ptr[ -5 ] * PredCoef[ 5 ] +
- s_ptr[ -6 ] * PredCoef[ 6 ] +
- s_ptr[ -7 ] * PredCoef[ 7 ];
-
- /* prediction error */
- r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;
- }
-}
-
-/* 6th order LPC analysis filter, does not write first 6 samples */
-static OPUS_INLINE void silk_LPC_analysis_filter6_FLP(
- silk_float r_LPC[], /* O LPC residual signal */
- const silk_float PredCoef[], /* I LPC coefficients */
- const silk_float s[], /* I Input signal */
- const opus_int length /* I Length of input signal */
-)
-{
- opus_int ix;
- silk_float LPC_pred;
- const silk_float *s_ptr;
-
- for( ix = 6; ix < length; ix++ ) {
- s_ptr = &s[ix - 1];
-
- /* short-term prediction */
- LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] +
- s_ptr[ -1 ] * PredCoef[ 1 ] +
- s_ptr[ -2 ] * PredCoef[ 2 ] +
- s_ptr[ -3 ] * PredCoef[ 3 ] +
- s_ptr[ -4 ] * PredCoef[ 4 ] +
- s_ptr[ -5 ] * PredCoef[ 5 ];
-
- /* prediction error */
- r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;
- }
-}
-
-/************************************************/
-/* LPC analysis filter */
-/* NB! State is kept internally and the */
-/* filter always starts with zero state */
-/* first Order output samples are set to zero */
-/************************************************/
-void silk_LPC_analysis_filter_FLP(
- silk_float r_LPC[], /* O LPC residual signal */
- const silk_float PredCoef[], /* I LPC coefficients */
- const silk_float s[], /* I Input signal */
- const opus_int length, /* I Length of input signal */
- const opus_int Order /* I LPC order */
-)
-{
- silk_assert( Order <= length );
-
- switch( Order ) {
- case 6:
- silk_LPC_analysis_filter6_FLP( r_LPC, PredCoef, s, length );
- break;
-
- case 8:
- silk_LPC_analysis_filter8_FLP( r_LPC, PredCoef, s, length );
- break;
-
- case 10:
- silk_LPC_analysis_filter10_FLP( r_LPC, PredCoef, s, length );
- break;
-
- case 12:
- silk_LPC_analysis_filter12_FLP( r_LPC, PredCoef, s, length );
- break;
-
- case 16:
- silk_LPC_analysis_filter16_FLP( r_LPC, PredCoef, s, length );
- break;
-
- default:
- silk_assert( 0 );
- break;
- }
-
- /* Set first Order output samples to zero */
- silk_memset( r_LPC, 0, Order * sizeof( silk_float ) );
-}
-
diff --git a/drivers/opus/silk/float/LPC_inv_pred_gain_FLP.c b/drivers/opus/silk/float/LPC_inv_pred_gain_FLP.c
deleted file mode 100644
index f99a427623..0000000000
--- a/drivers/opus/silk/float/LPC_inv_pred_gain_FLP.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/float/SigProc_FLP.h"
-
-#define RC_THRESHOLD 0.9999f
-
-/* compute inverse of LPC prediction gain, and */
-/* test if LPC coefficients are stable (all poles within unit circle) */
-/* this code is based on silk_a2k_FLP() */
-silk_float silk_LPC_inverse_pred_gain_FLP( /* O return inverse prediction gain, energy domain */
- const silk_float *A, /* I prediction coefficients [order] */
- opus_int32 order /* I prediction order */
-)
-{
- opus_int k, n;
- double invGain, rc, rc_mult1, rc_mult2;
- silk_float Atmp[ 2 ][ SILK_MAX_ORDER_LPC ];
- silk_float *Aold, *Anew;
-
- Anew = Atmp[ order & 1 ];
- silk_memcpy( Anew, A, order * sizeof(silk_float) );
-
- invGain = 1.0;
- for( k = order - 1; k > 0; k-- ) {
- rc = -Anew[ k ];
- if( rc > RC_THRESHOLD || rc < -RC_THRESHOLD ) {
- return 0.0f;
- }
- rc_mult1 = 1.0f - rc * rc;
- rc_mult2 = 1.0f / rc_mult1;
- invGain *= rc_mult1;
- /* swap pointers */
- Aold = Anew;
- Anew = Atmp[ k & 1 ];
- for( n = 0; n < k; n++ ) {
- Anew[ n ] = (silk_float)( ( Aold[ n ] - Aold[ k - n - 1 ] * rc ) * rc_mult2 );
- }
- }
- rc = -Anew[ 0 ];
- if( rc > RC_THRESHOLD || rc < -RC_THRESHOLD ) {
- return 0.0f;
- }
- rc_mult1 = 1.0f - rc * rc;
- invGain *= rc_mult1;
- return (silk_float)invGain;
-}
diff --git a/drivers/opus/silk/float/LTP_analysis_filter_FLP.c b/drivers/opus/silk/float/LTP_analysis_filter_FLP.c
deleted file mode 100644
index 853040d160..0000000000
--- a/drivers/opus/silk/float/LTP_analysis_filter_FLP.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-
-void silk_LTP_analysis_filter_FLP(
- silk_float *LTP_res, /* O LTP res MAX_NB_SUBFR*(pre_lgth+subfr_lngth) */
- const silk_float *x, /* I Input signal, with preceding samples */
- const silk_float B[ LTP_ORDER * MAX_NB_SUBFR ], /* I LTP coefficients for each subframe */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const silk_float invGains[ MAX_NB_SUBFR ], /* I Inverse quantization gains */
- const opus_int subfr_length, /* I Length of each subframe */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int pre_length /* I Preceding samples for each subframe */
-)
-{
- const silk_float *x_ptr, *x_lag_ptr;
- silk_float Btmp[ LTP_ORDER ];
- silk_float *LTP_res_ptr;
- silk_float inv_gain;
- opus_int k, i, j;
-
- x_ptr = x;
- LTP_res_ptr = LTP_res;
- for( k = 0; k < nb_subfr; k++ ) {
- x_lag_ptr = x_ptr - pitchL[ k ];
- inv_gain = invGains[ k ];
- for( i = 0; i < LTP_ORDER; i++ ) {
- Btmp[ i ] = B[ k * LTP_ORDER + i ];
- }
-
- /* LTP analysis FIR filter */
- for( i = 0; i < subfr_length + pre_length; i++ ) {
- LTP_res_ptr[ i ] = x_ptr[ i ];
- /* Subtract long-term prediction */
- for( j = 0; j < LTP_ORDER; j++ ) {
- LTP_res_ptr[ i ] -= Btmp[ j ] * x_lag_ptr[ LTP_ORDER / 2 - j ];
- }
- LTP_res_ptr[ i ] *= inv_gain;
- x_lag_ptr++;
- }
-
- /* Update pointers */
- LTP_res_ptr += subfr_length + pre_length;
- x_ptr += subfr_length;
- }
-}
diff --git a/drivers/opus/silk/float/LTP_scale_ctrl_FLP.c b/drivers/opus/silk/float/LTP_scale_ctrl_FLP.c
deleted file mode 100644
index 4219c14c5b..0000000000
--- a/drivers/opus/silk/float/LTP_scale_ctrl_FLP.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-
-void silk_LTP_scale_ctrl_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- opus_int round_loss;
-
- if( condCoding == CODE_INDEPENDENTLY ) {
- /* Only scale if first frame in packet */
- round_loss = psEnc->sCmn.PacketLoss_perc + psEnc->sCmn.nFramesPerPacket;
- psEnc->sCmn.indices.LTP_scaleIndex = (opus_int8)silk_LIMIT( round_loss * psEncCtrl->LTPredCodGain * 0.1f, 0.0f, 2.0f );
- } else {
- /* Default is minimum scaling */
- psEnc->sCmn.indices.LTP_scaleIndex = 0;
- }
-
- psEncCtrl->LTP_scale = (silk_float)silk_LTPScales_table_Q14[ psEnc->sCmn.indices.LTP_scaleIndex ] / 16384.0f;
-}
diff --git a/drivers/opus/silk/float/SigProc_FLP.h b/drivers/opus/silk/float/SigProc_FLP.h
deleted file mode 100644
index 9b14f24f21..0000000000
--- a/drivers/opus/silk/float/SigProc_FLP.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_SIGPROC_FLP_H
-#define SILK_SIGPROC_FLP_H
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/celt/float_cast.h"
-#include <math.h>
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/********************************************************************/
-/* SIGNAL PROCESSING FUNCTIONS */
-/********************************************************************/
-
-/* Chirp (bw expand) LP AR filter */
-void silk_bwexpander_FLP(
- silk_float *ar, /* I/O AR filter to be expanded (without leading 1) */
- const opus_int d, /* I length of ar */
- const silk_float chirp /* I chirp factor (typically in range (0..1) ) */
-);
-
-/* compute inverse of LPC prediction gain, and */
-/* test if LPC coefficients are stable (all poles within unit circle) */
-/* this code is based on silk_FLP_a2k() */
-silk_float silk_LPC_inverse_pred_gain_FLP( /* O return inverse prediction gain, energy domain */
- const silk_float *A, /* I prediction coefficients [order] */
- opus_int32 order /* I prediction order */
-);
-
-silk_float silk_schur_FLP( /* O returns residual energy */
- silk_float refl_coef[], /* O reflection coefficients (length order) */
- const silk_float auto_corr[], /* I autocorrelation sequence (length order+1) */
- opus_int order /* I order */
-);
-
-void silk_k2a_FLP(
- silk_float *A, /* O prediction coefficients [order] */
- const silk_float *rc, /* I reflection coefficients [order] */
- opus_int32 order /* I prediction order */
-);
-
-/* Solve the normal equations using the Levinson-Durbin recursion */
-silk_float silk_levinsondurbin_FLP( /* O prediction error energy */
- silk_float A[], /* O prediction coefficients [order] */
- const silk_float corr[], /* I input auto-correlations [order + 1] */
- const opus_int order /* I prediction order */
-);
-
-/* compute autocorrelation */
-void silk_autocorrelation_FLP(
- silk_float *results, /* O result (length correlationCount) */
- const silk_float *inputData, /* I input data to correlate */
- opus_int inputDataSize, /* I length of input */
- opus_int correlationCount /* I number of correlation taps to compute */
-);
-
-opus_int silk_pitch_analysis_core_FLP( /* O Voicing estimate: 0 voiced, 1 unvoiced */
- const silk_float *frame, /* I Signal of length PE_FRAME_LENGTH_MS*Fs_kHz */
- opus_int *pitch_out, /* O Pitch lag values [nb_subfr] */
- opus_int16 *lagIndex, /* O Lag Index */
- opus_int8 *contourIndex, /* O Pitch contour Index */
- silk_float *LTPCorr, /* I/O Normalized correlation; input: value from previous frame */
- opus_int prevLag, /* I Last lag of previous frame; set to zero is unvoiced */
- const silk_float search_thres1, /* I First stage threshold for lag candidates 0 - 1 */
- const silk_float search_thres2, /* I Final threshold for lag candidates 0 - 1 */
- const opus_int Fs_kHz, /* I sample frequency (kHz) */
- const opus_int complexity, /* I Complexity setting, 0-2, where 2 is highest */
- const opus_int nb_subfr, /* I Number of 5 ms subframes */
- int arch /* I Run-time architecture */
-);
-
-void silk_insertion_sort_decreasing_FLP(
- silk_float *a, /* I/O Unsorted / Sorted vector */
- opus_int *idx, /* O Index vector for the sorted elements */
- const opus_int L, /* I Vector length */
- const opus_int K /* I Number of correctly sorted positions */
-);
-
-/* Compute reflection coefficients from input signal */
-silk_float silk_burg_modified_FLP( /* O returns residual energy */
- silk_float A[], /* O prediction coefficients (length order) */
- const silk_float x[], /* I input signal, length: nb_subfr*(D+L_sub) */
- const silk_float minInvGain, /* I minimum inverse prediction gain */
- const opus_int subfr_length, /* I input signal subframe length (incl. D preceding samples) */
- const opus_int nb_subfr, /* I number of subframes stacked in x */
- const opus_int D /* I order */
-);
-
-/* multiply a vector by a constant */
-void silk_scale_vector_FLP(
- silk_float *data1,
- silk_float gain,
- opus_int dataSize
-);
-
-/* copy and multiply a vector by a constant */
-void silk_scale_copy_vector_FLP(
- silk_float *data_out,
- const silk_float *data_in,
- silk_float gain,
- opus_int dataSize
-);
-
-/* inner product of two silk_float arrays, with result as double */
-double silk_inner_product_FLP(
- const silk_float *data1,
- const silk_float *data2,
- opus_int dataSize
-);
-
-/* sum of squares of a silk_float array, with result as double */
-double silk_energy_FLP(
- const silk_float *data,
- opus_int dataSize
-);
-
-/********************************************************************/
-/* MACROS */
-/********************************************************************/
-
-#define PI (3.1415926536f)
-
-#define silk_min_float( a, b ) (((a) < (b)) ? (a) : (b))
-#define silk_max_float( a, b ) (((a) > (b)) ? (a) : (b))
-#define silk_abs_float( a ) ((silk_float)fabs(a))
-
-/* sigmoid function */
-static OPUS_INLINE silk_float silk_sigmoid( silk_float x )
-{
- return (silk_float)(1.0 / (1.0 + exp(-x)));
-}
-
-/* floating-point to integer conversion (rounding) */
-static OPUS_INLINE opus_int32 silk_float2int( silk_float x )
-{
- return (opus_int32)float2int( x );
-}
-
-/* floating-point to integer conversion (rounding) */
-static OPUS_INLINE void silk_float2short_array(
- opus_int16 *out,
- const silk_float *in,
- opus_int32 length
-)
-{
- opus_int32 k;
- for( k = length - 1; k >= 0; k-- ) {
- out[k] = silk_SAT16( (opus_int32)float2int( in[k] ) );
- }
-}
-
-/* integer to floating-point conversion */
-static OPUS_INLINE void silk_short2float_array(
- silk_float *out,
- const opus_int16 *in,
- opus_int32 length
-)
-{
- opus_int32 k;
- for( k = length - 1; k >= 0; k-- ) {
- out[k] = (silk_float)in[k];
- }
-}
-
-/* using log2() helps the fixed-point conversion */
-static OPUS_INLINE silk_float silk_log2( double x )
-{
- return ( silk_float )( 3.32192809488736 * log10( x ) );
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SILK_SIGPROC_FLP_H */
diff --git a/drivers/opus/silk/float/apply_sine_window_FLP.c b/drivers/opus/silk/float/apply_sine_window_FLP.c
deleted file mode 100644
index 0d9c894cd8..0000000000
--- a/drivers/opus/silk/float/apply_sine_window_FLP.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-
-/* Apply sine window to signal vector */
-/* Window types: */
-/* 1 -> sine window from 0 to pi/2 */
-/* 2 -> sine window from pi/2 to pi */
-void silk_apply_sine_window_FLP(
- silk_float px_win[], /* O Pointer to windowed signal */
- const silk_float px[], /* I Pointer to input signal */
- const opus_int win_type, /* I Selects a window type */
- const opus_int length /* I Window length, multiple of 4 */
-)
-{
- opus_int k;
- silk_float freq, c, S0, S1;
-
- silk_assert( win_type == 1 || win_type == 2 );
-
- /* Length must be multiple of 4 */
- silk_assert( ( length & 3 ) == 0 );
-
- freq = PI / ( length + 1 );
-
- /* Approximation of 2 * cos(f) */
- c = 2.0f - freq * freq;
-
- /* Initialize state */
- if( win_type < 2 ) {
- /* Start from 0 */
- S0 = 0.0f;
- /* Approximation of sin(f) */
- S1 = freq;
- } else {
- /* Start from 1 */
- S0 = 1.0f;
- /* Approximation of cos(f) */
- S1 = 0.5f * c;
- }
-
- /* 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 ) {
- px_win[ k + 0 ] = px[ k + 0 ] * 0.5f * ( S0 + S1 );
- px_win[ k + 1 ] = px[ k + 1 ] * S1;
- S0 = c * S1 - S0;
- px_win[ k + 2 ] = px[ k + 2 ] * 0.5f * ( S1 + S0 );
- px_win[ k + 3 ] = px[ k + 3 ] * S0;
- S1 = c * S0 - S1;
- }
-}
diff --git a/drivers/opus/silk/float/autocorrelation_FLP.c b/drivers/opus/silk/float/autocorrelation_FLP.c
deleted file mode 100644
index 0b78b0230d..0000000000
--- a/drivers/opus/silk/float/autocorrelation_FLP.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/typedef.h"
-#include "opus/silk/float/SigProc_FLP.h"
-
-/* compute autocorrelation */
-void silk_autocorrelation_FLP(
- silk_float *results, /* O result (length correlationCount) */
- const silk_float *inputData, /* I input data to correlate */
- opus_int inputDataSize, /* I length of input */
- opus_int correlationCount /* I number of correlation taps to compute */
-)
-{
- opus_int i;
-
- if( correlationCount > inputDataSize ) {
- correlationCount = inputDataSize;
- }
-
- for( i = 0; i < correlationCount; i++ ) {
- results[ i ] = (silk_float)silk_inner_product_FLP( inputData, inputData + i, inputDataSize - i );
- }
-}
diff --git a/drivers/opus/silk/float/burg_modified_FLP.c b/drivers/opus/silk/float/burg_modified_FLP.c
deleted file mode 100644
index 567990b850..0000000000
--- a/drivers/opus/silk/float/burg_modified_FLP.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/SigProc_FLP.h"
-#include "opus/silk/tuning_parameters.h"
-#include "opus/silk/define.h"
-
-#define MAX_FRAME_SIZE 384 /* subfr_length * nb_subfr = ( 0.005 * 16000 + 16 ) * 4 = 384*/
-
-/* Compute reflection coefficients from input signal */
-silk_float silk_burg_modified_FLP( /* O returns residual energy */
- silk_float A[], /* O prediction coefficients (length order) */
- const silk_float x[], /* I input signal, length: nb_subfr*(D+L_sub) */
- const silk_float minInvGain, /* I minimum inverse prediction gain */
- const opus_int subfr_length, /* I input signal subframe length (incl. D preceding samples) */
- const opus_int nb_subfr, /* I number of subframes stacked in x */
- const opus_int D /* I order */
-)
-{
- opus_int k, n, s, reached_max_gain;
- double C0, invGain, num, nrg_f, nrg_b, rc, Atmp, tmp1, tmp2;
- const silk_float *x_ptr;
- double C_first_row[ SILK_MAX_ORDER_LPC ], C_last_row[ SILK_MAX_ORDER_LPC ];
- double CAf[ SILK_MAX_ORDER_LPC + 1 ], CAb[ SILK_MAX_ORDER_LPC + 1 ];
- double Af[ SILK_MAX_ORDER_LPC ];
-
- silk_assert( subfr_length * nb_subfr <= MAX_FRAME_SIZE );
-
- /* Compute autocorrelations, added over subframes */
- C0 = silk_energy_FLP( x, nb_subfr * subfr_length );
- silk_memset( C_first_row, 0, SILK_MAX_ORDER_LPC * sizeof( double ) );
- 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 ] += silk_inner_product_FLP( x_ptr, x_ptr + n, subfr_length - n );
- }
- }
- silk_memcpy( C_last_row, C_first_row, SILK_MAX_ORDER_LPC * sizeof( double ) );
-
- /* Initialize */
- CAb[ 0 ] = CAf[ 0 ] = C0 + FIND_LPC_COND_FAC * C0 + 1e-9f;
- invGain = 1.0f;
- reached_max_gain = 0;
- 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) */
- for( s = 0; s < nb_subfr; s++ ) {
- x_ptr = x + s * subfr_length;
- tmp1 = x_ptr[ n ];
- tmp2 = x_ptr[ subfr_length - n - 1 ];
- for( k = 0; k < n; k++ ) {
- C_first_row[ k ] -= x_ptr[ n ] * x_ptr[ n - k - 1 ];
- C_last_row[ k ] -= x_ptr[ subfr_length - n - 1 ] * x_ptr[ subfr_length - n + k ];
- Atmp = Af[ k ];
- tmp1 += x_ptr[ n - k - 1 ] * Atmp;
- tmp2 += x_ptr[ subfr_length - n + k ] * Atmp;
- }
- for( k = 0; k <= n; k++ ) {
- CAf[ k ] -= tmp1 * x_ptr[ n - k ];
- CAb[ k ] -= tmp2 * x_ptr[ subfr_length - n + k - 1 ];
- }
- }
- tmp1 = C_first_row[ n ];
- tmp2 = C_last_row[ n ];
- for( k = 0; k < n; k++ ) {
- Atmp = Af[ k ];
- tmp1 += C_last_row[ n - k - 1 ] * Atmp;
- tmp2 += C_first_row[ n - k - 1 ] * Atmp;
- }
- CAf[ n + 1 ] = tmp1;
- CAb[ n + 1 ] = tmp2;
-
- /* Calculate nominator and denominator for the next order reflection (parcor) coefficient */
- num = CAb[ n + 1 ];
- nrg_b = CAb[ 0 ];
- nrg_f = CAf[ 0 ];
- for( k = 0; k < n; k++ ) {
- Atmp = Af[ k ];
- num += CAb[ n - k ] * Atmp;
- nrg_b += CAb[ k + 1 ] * Atmp;
- nrg_f += CAf[ k + 1 ] * Atmp;
- }
- silk_assert( nrg_f > 0.0 );
- silk_assert( nrg_b > 0.0 );
-
- /* Calculate the next order reflection (parcor) coefficient */
- rc = -2.0 * num / ( nrg_f + nrg_b );
- silk_assert( rc > -1.0 && rc < 1.0 );
-
- /* Update inverse prediction gain */
- tmp1 = invGain * ( 1.0 - rc * rc );
- if( tmp1 <= minInvGain ) {
- /* Max prediction gain exceeded; set reflection coefficient such that max prediction gain is exactly hit */
- rc = sqrt( 1.0 - minInvGain / invGain );
- if( num > 0 ) {
- /* Ensure adjusted reflection coefficients has the original sign */
- rc = -rc;
- }
- invGain = minInvGain;
- reached_max_gain = 1;
- } else {
- invGain = tmp1;
- }
-
- /* Update the AR coefficients */
- for( k = 0; k < (n + 1) >> 1; k++ ) {
- tmp1 = Af[ k ];
- tmp2 = Af[ n - k - 1 ];
- Af[ k ] = tmp1 + rc * tmp2;
- Af[ n - k - 1 ] = tmp2 + rc * tmp1;
- }
- Af[ n ] = rc;
-
- if( reached_max_gain ) {
- /* Reached max prediction gain; set remaining coefficients to zero and exit loop */
- for( k = n + 1; k < D; k++ ) {
- Af[ k ] = 0.0;
- }
- break;
- }
-
- /* Update C * Af and C * Ab */
- for( k = 0; k <= n + 1; k++ ) {
- tmp1 = CAf[ k ];
- CAf[ k ] += rc * CAb[ n - k + 1 ];
- CAb[ n - k + 1 ] += rc * tmp1;
- }
- }
-
- if( reached_max_gain ) {
- /* Convert to silk_float */
- for( k = 0; k < D; k++ ) {
- A[ k ] = (silk_float)( -Af[ k ] );
- }
- /* Subtract energy of preceding samples from C0 */
- for( s = 0; s < nb_subfr; s++ ) {
- C0 -= silk_energy_FLP( x + s * subfr_length, D );
- }
- /* Approximate residual energy */
- nrg_f = C0 * invGain;
- } else {
- /* Compute residual energy and store coefficients as silk_float */
- nrg_f = CAf[ 0 ];
- tmp1 = 1.0;
- for( k = 0; k < D; k++ ) {
- Atmp = Af[ k ];
- nrg_f += CAf[ k + 1 ] * Atmp;
- tmp1 += Atmp * Atmp;
- A[ k ] = (silk_float)(-Atmp);
- }
- nrg_f -= FIND_LPC_COND_FAC * C0 * tmp1;
- }
-
- /* Return residual energy */
- return (silk_float)nrg_f;
-}
diff --git a/drivers/opus/silk/float/bwexpander_FLP.c b/drivers/opus/silk/float/bwexpander_FLP.c
deleted file mode 100644
index c47bfa9433..0000000000
--- a/drivers/opus/silk/float/bwexpander_FLP.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/SigProc_FLP.h"
-
-/* Chirp (bw expand) LP AR filter */
-void silk_bwexpander_FLP(
- silk_float *ar, /* I/O AR filter to be expanded (without leading 1) */
- const opus_int d, /* I length of ar */
- const silk_float chirp /* I chirp factor (typically in range (0..1) ) */
-)
-{
- opus_int i;
- silk_float cfac = chirp;
-
- for( i = 0; i < d - 1; i++ ) {
- ar[ i ] *= cfac;
- cfac *= chirp;
- }
- ar[ d - 1 ] *= cfac;
-}
diff --git a/drivers/opus/silk/float/corrMatrix_FLP.c b/drivers/opus/silk/float/corrMatrix_FLP.c
deleted file mode 100644
index e34b42b541..0000000000
--- a/drivers/opus/silk/float/corrMatrix_FLP.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/**********************************************************************
- * Correlation matrix computations for LS estimate.
- **********************************************************************/
-
-#include "opus/silk/float/main_FLP.h"
-
-/* Calculates correlation vector X'*t */
-void silk_corrVector_FLP(
- const silk_float *x, /* I x vector [L+order-1] used to create X */
- const silk_float *t, /* I Target vector [L] */
- const opus_int L, /* I Length of vecors */
- const opus_int Order, /* I Max lag for correlation */
- silk_float *Xt /* O X'*t correlation vector [order] */
-)
-{
- opus_int lag;
- const silk_float *ptr1;
-
- ptr1 = &x[ Order - 1 ]; /* Points to first sample of column 0 of X: X[:,0] */
- for( lag = 0; lag < Order; lag++ ) {
- /* Calculate X[:,lag]'*t */
- Xt[ lag ] = (silk_float)silk_inner_product_FLP( ptr1, t, L );
- ptr1--; /* Next column of X */
- }
-}
-
-/* Calculates correlation matrix X'*X */
-void silk_corrMatrix_FLP(
- const silk_float *x, /* I x vector [ L+order-1 ] used to create X */
- const opus_int L, /* I Length of vectors */
- const opus_int Order, /* I Max lag for correlation */
- silk_float *XX /* O X'*X correlation matrix [order x order] */
-)
-{
- opus_int j, lag;
- double energy;
- const silk_float *ptr1, *ptr2;
-
- ptr1 = &x[ Order - 1 ]; /* First sample of column 0 of X */
- energy = silk_energy_FLP( ptr1, L ); /* X[:,0]'*X[:,0] */
- matrix_ptr( XX, 0, 0, Order ) = ( silk_float )energy;
- for( j = 1; j < Order; j++ ) {
- /* Calculate X[:,j]'*X[:,j] */
- energy += ptr1[ -j ] * ptr1[ -j ] - ptr1[ L - j ] * ptr1[ L - j ];
- matrix_ptr( XX, j, j, Order ) = ( silk_float )energy;
- }
-
- ptr2 = &x[ Order - 2 ]; /* First sample of column 1 of X */
- for( lag = 1; lag < Order; lag++ ) {
- /* Calculate X[:,0]'*X[:,lag] */
- energy = silk_inner_product_FLP( ptr1, ptr2, L );
- matrix_ptr( XX, lag, 0, Order ) = ( silk_float )energy;
- matrix_ptr( XX, 0, lag, Order ) = ( silk_float )energy;
- /* Calculate X[:,j]'*X[:,j + lag] */
- for( j = 1; j < ( Order - lag ); j++ ) {
- energy += ptr1[ -j ] * ptr2[ -j ] - ptr1[ L - j ] * ptr2[ L - j ];
- matrix_ptr( XX, lag + j, j, Order ) = ( silk_float )energy;
- matrix_ptr( XX, j, lag + j, Order ) = ( silk_float )energy;
- }
- ptr2--; /* Next column of X */
- }
-}
diff --git a/drivers/opus/silk/float/encode_frame_FLP.c b/drivers/opus/silk/float/encode_frame_FLP.c
deleted file mode 100644
index 4e46a52ee8..0000000000
--- a/drivers/opus/silk/float/encode_frame_FLP.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Low Bitrate Redundancy (LBRR) encoding. Reuse all parameters but encode with lower bitrate */
-static OPUS_INLINE void silk_LBRR_encode_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float xfw[], /* I Input signal */
- opus_int condCoding /* I The type of conditional coding used so far for this frame */
-);
-
-void silk_encode_do_VAD_FLP(
- silk_encoder_state_FLP *psEnc /* I/O Encoder state FLP */
-)
-{
- /****************************/
- /* Voice Activity Detection */
- /****************************/
- silk_VAD_GetSA_Q8( &psEnc->sCmn, psEnc->sCmn.inputBuf + 1, psEnc->sCmn.arch );
-
- /**************************************************/
- /* Convert speech activity into VAD and DTX flags */
- /**************************************************/
- if( psEnc->sCmn.speech_activity_Q8 < SILK_FIX_CONST( SPEECH_ACTIVITY_DTX_THRES, 8 ) ) {
- psEnc->sCmn.indices.signalType = TYPE_NO_VOICE_ACTIVITY;
- psEnc->sCmn.noSpeechCounter++;
- if( psEnc->sCmn.noSpeechCounter < NB_SPEECH_FRAMES_BEFORE_DTX ) {
- psEnc->sCmn.inDTX = 0;
- } else if( psEnc->sCmn.noSpeechCounter > MAX_CONSECUTIVE_DTX + NB_SPEECH_FRAMES_BEFORE_DTX ) {
- psEnc->sCmn.noSpeechCounter = NB_SPEECH_FRAMES_BEFORE_DTX;
- psEnc->sCmn.inDTX = 0;
- }
- psEnc->sCmn.VAD_flags[ psEnc->sCmn.nFramesEncoded ] = 0;
- } else {
- psEnc->sCmn.noSpeechCounter = 0;
- psEnc->sCmn.inDTX = 0;
- psEnc->sCmn.indices.signalType = TYPE_UNVOICED;
- psEnc->sCmn.VAD_flags[ psEnc->sCmn.nFramesEncoded ] = 1;
- }
-}
-
-/****************/
-/* Encode frame */
-/****************/
-opus_int silk_encode_frame_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- opus_int32 *pnBytesOut, /* O Number of payload bytes; */
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- opus_int condCoding, /* I The type of conditional coding to use */
- opus_int maxBits, /* I If > 0: maximum number of output bits */
- opus_int useCBR /* I Flag to force constant-bitrate operation */
-)
-{
- silk_encoder_control_FLP sEncCtrl;
- opus_int i, iter, maxIter, found_upper, found_lower, ret = 0;
- silk_float *x_frame, *res_pitch_frame;
- silk_float xfw[ MAX_FRAME_LENGTH ];
- silk_float res_pitch[ 2 * MAX_FRAME_LENGTH + LA_PITCH_MAX ];
- ec_enc sRangeEnc_copy, sRangeEnc_copy2;
- silk_nsq_state sNSQ_copy, sNSQ_copy2;
- opus_int32 seed_copy, nBits, nBits_lower, nBits_upper, gainMult_lower, gainMult_upper;
- opus_int32 gainsID, gainsID_lower, gainsID_upper;
- opus_int16 gainMult_Q8;
- opus_int16 ec_prevLagIndex_copy;
- opus_int ec_prevSignalType_copy;
- opus_int8 LastGainIndex_copy2;
- opus_int32 pGains_Q16[ MAX_NB_SUBFR ];
- opus_uint8 ec_buf_copy[ 1275 ];
-
- /* This is totally unnecessary but many compilers (including gcc) are too dumb to realise it */
- LastGainIndex_copy2 = nBits_lower = nBits_upper = gainMult_lower = gainMult_upper = 0;
-
- psEnc->sCmn.indices.Seed = psEnc->sCmn.frameCounter++ & 3;
-
- /**************************************************************/
- /* Set up Input Pointers, and insert frame in input buffer */
- /**************************************************************/
- /* pointers aligned with start of frame to encode */
- x_frame = psEnc->x_buf + psEnc->sCmn.ltp_mem_length; /* start of frame to encode */
- res_pitch_frame = res_pitch + psEnc->sCmn.ltp_mem_length; /* start of pitch LPC residual frame */
-
- /***************************************/
- /* Ensure smooth bandwidth transitions */
- /***************************************/
- silk_LP_variable_cutoff( &psEnc->sCmn.sLP, psEnc->sCmn.inputBuf + 1, psEnc->sCmn.frame_length );
-
- /*******************************************/
- /* Copy new frame to front of input buffer */
- /*******************************************/
- silk_short2float_array( x_frame + LA_SHAPE_MS * psEnc->sCmn.fs_kHz, psEnc->sCmn.inputBuf + 1, psEnc->sCmn.frame_length );
-
- /* Add tiny signal to avoid high CPU load from denormalized floating point numbers */
- for( i = 0; i < 8; i++ ) {
- x_frame[ LA_SHAPE_MS * psEnc->sCmn.fs_kHz + i * ( psEnc->sCmn.frame_length >> 3 ) ] += ( 1 - ( i & 2 ) ) * 1e-6f;
- }
-
- if( !psEnc->sCmn.prefillFlag ) {
- /*****************************************/
- /* Find pitch lags, initial LPC analysis */
- /*****************************************/
- silk_find_pitch_lags_FLP( psEnc, &sEncCtrl, res_pitch, x_frame, psEnc->sCmn.arch );
-
- /************************/
- /* Noise shape analysis */
- /************************/
- silk_noise_shape_analysis_FLP( psEnc, &sEncCtrl, res_pitch_frame, x_frame );
-
- /***************************************************/
- /* Find linear prediction coefficients (LPC + LTP) */
- /***************************************************/
- silk_find_pred_coefs_FLP( psEnc, &sEncCtrl, res_pitch, x_frame, condCoding );
-
- /****************************************/
- /* Process gains */
- /****************************************/
- silk_process_gains_FLP( psEnc, &sEncCtrl, condCoding );
-
- /*****************************************/
- /* Prefiltering for noise shaper */
- /*****************************************/
- silk_prefilter_FLP( psEnc, &sEncCtrl, xfw, x_frame );
-
- /****************************************/
- /* Low Bitrate Redundant Encoding */
- /****************************************/
- silk_LBRR_encode_FLP( psEnc, &sEncCtrl, xfw, condCoding );
-
- /* Loop over quantizer and entroy coding to control bitrate */
- maxIter = 6;
- gainMult_Q8 = SILK_FIX_CONST( 1, 8 );
- found_lower = 0;
- found_upper = 0;
- gainsID = silk_gains_ID( psEnc->sCmn.indices.GainsIndices, psEnc->sCmn.nb_subfr );
- gainsID_lower = -1;
- gainsID_upper = -1;
- /* Copy part of the input state */
- silk_memcpy( &sRangeEnc_copy, psRangeEnc, sizeof( ec_enc ) );
- silk_memcpy( &sNSQ_copy, &psEnc->sCmn.sNSQ, sizeof( silk_nsq_state ) );
- seed_copy = psEnc->sCmn.indices.Seed;
- ec_prevLagIndex_copy = psEnc->sCmn.ec_prevLagIndex;
- ec_prevSignalType_copy = psEnc->sCmn.ec_prevSignalType;
- for( iter = 0; ; iter++ ) {
- if( gainsID == gainsID_lower ) {
- nBits = nBits_lower;
- } else if( gainsID == gainsID_upper ) {
- nBits = nBits_upper;
- } else {
- /* Restore part of the input state */
- if( iter > 0 ) {
- silk_memcpy( psRangeEnc, &sRangeEnc_copy, sizeof( ec_enc ) );
- silk_memcpy( &psEnc->sCmn.sNSQ, &sNSQ_copy, sizeof( silk_nsq_state ) );
- psEnc->sCmn.indices.Seed = seed_copy;
- psEnc->sCmn.ec_prevLagIndex = ec_prevLagIndex_copy;
- psEnc->sCmn.ec_prevSignalType = ec_prevSignalType_copy;
- }
-
- /*****************************************/
- /* Noise shaping quantization */
- /*****************************************/
- silk_NSQ_wrapper_FLP( psEnc, &sEncCtrl, &psEnc->sCmn.indices, &psEnc->sCmn.sNSQ, psEnc->sCmn.pulses, xfw );
-
- /****************************************/
- /* Encode Parameters */
- /****************************************/
- silk_encode_indices( &psEnc->sCmn, psRangeEnc, psEnc->sCmn.nFramesEncoded, 0, condCoding );
-
- /****************************************/
- /* Encode Excitation Signal */
- /****************************************/
- silk_encode_pulses( psRangeEnc, psEnc->sCmn.indices.signalType, psEnc->sCmn.indices.quantOffsetType,
- psEnc->sCmn.pulses, psEnc->sCmn.frame_length );
-
- nBits = ec_tell( psRangeEnc );
-
- if( useCBR == 0 && iter == 0 && nBits <= maxBits ) {
- break;
- }
- }
-
- if( iter == maxIter ) {
- if( found_lower && ( gainsID == gainsID_lower || nBits > maxBits ) ) {
- /* Restore output state from earlier iteration that did meet the bitrate budget */
- silk_memcpy( psRangeEnc, &sRangeEnc_copy2, sizeof( ec_enc ) );
- silk_assert( sRangeEnc_copy2.offs <= 1275 );
- silk_memcpy( psRangeEnc->buf, ec_buf_copy, sRangeEnc_copy2.offs );
- silk_memcpy( &psEnc->sCmn.sNSQ, &sNSQ_copy2, sizeof( silk_nsq_state ) );
- psEnc->sShape.LastGainIndex = LastGainIndex_copy2;
- }
- break;
- }
-
- if( nBits > maxBits ) {
- if( found_lower == 0 && iter >= 2 ) {
- /* Adjust the quantizer's rate/distortion tradeoff and discard previous "upper" results */
- sEncCtrl.Lambda *= 1.5f;
- found_upper = 0;
- gainsID_upper = -1;
- } else {
- found_upper = 1;
- nBits_upper = nBits;
- gainMult_upper = gainMult_Q8;
- gainsID_upper = gainsID;
- }
- } else if( nBits < maxBits - 5 ) {
- found_lower = 1;
- nBits_lower = nBits;
- gainMult_lower = gainMult_Q8;
- if( gainsID != gainsID_lower ) {
- gainsID_lower = gainsID;
- /* Copy part of the output state */
- silk_memcpy( &sRangeEnc_copy2, psRangeEnc, sizeof( ec_enc ) );
- silk_assert( psRangeEnc->offs <= 1275 );
- silk_memcpy( ec_buf_copy, psRangeEnc->buf, psRangeEnc->offs );
- silk_memcpy( &sNSQ_copy2, &psEnc->sCmn.sNSQ, sizeof( silk_nsq_state ) );
- LastGainIndex_copy2 = psEnc->sShape.LastGainIndex;
- }
- } else {
- /* Within 5 bits of budget: close enough */
- break;
- }
-
- if( ( found_lower & found_upper ) == 0 ) {
- /* Adjust gain according to high-rate rate/distortion curve */
- opus_int32 gain_factor_Q16;
- gain_factor_Q16 = silk_log2lin( silk_LSHIFT( nBits - maxBits, 7 ) / psEnc->sCmn.frame_length + SILK_FIX_CONST( 16, 7 ) );
- gain_factor_Q16 = silk_min_32( gain_factor_Q16, SILK_FIX_CONST( 2, 16 ) );
- if( nBits > maxBits ) {
- gain_factor_Q16 = silk_max_32( gain_factor_Q16, SILK_FIX_CONST( 1.3, 16 ) );
- }
- gainMult_Q8 = silk_SMULWB( gain_factor_Q16, gainMult_Q8 );
- } else {
- /* Adjust gain by interpolating */
- gainMult_Q8 = gainMult_lower + ( ( gainMult_upper - gainMult_lower ) * ( maxBits - nBits_lower ) ) / ( nBits_upper - nBits_lower );
- /* New gain multplier must be between 25% and 75% of old range (note that gainMult_upper < gainMult_lower) */
- if( gainMult_Q8 > silk_ADD_RSHIFT32( gainMult_lower, gainMult_upper - gainMult_lower, 2 ) ) {
- gainMult_Q8 = silk_ADD_RSHIFT32( gainMult_lower, gainMult_upper - gainMult_lower, 2 );
- } else
- if( gainMult_Q8 < silk_SUB_RSHIFT32( gainMult_upper, gainMult_upper - gainMult_lower, 2 ) ) {
- gainMult_Q8 = silk_SUB_RSHIFT32( gainMult_upper, gainMult_upper - gainMult_lower, 2 );
- }
- }
-
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- pGains_Q16[ i ] = silk_LSHIFT_SAT32( silk_SMULWB( sEncCtrl.GainsUnq_Q16[ i ], gainMult_Q8 ), 8 );
- }
-
- /* Quantize gains */
- psEnc->sShape.LastGainIndex = sEncCtrl.lastGainIndexPrev;
- silk_gains_quant( psEnc->sCmn.indices.GainsIndices, pGains_Q16,
- &psEnc->sShape.LastGainIndex, condCoding == CODE_CONDITIONALLY, psEnc->sCmn.nb_subfr );
-
- /* Unique identifier of gains vector */
- gainsID = silk_gains_ID( psEnc->sCmn.indices.GainsIndices, psEnc->sCmn.nb_subfr );
-
- /* Overwrite unquantized gains with quantized gains and convert back to Q0 from Q16 */
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- sEncCtrl.Gains[ i ] = pGains_Q16[ i ] / 65536.0f;
- }
- }
- }
-
- /* Update input buffer */
- silk_memmove( psEnc->x_buf, &psEnc->x_buf[ psEnc->sCmn.frame_length ],
- ( psEnc->sCmn.ltp_mem_length + LA_SHAPE_MS * psEnc->sCmn.fs_kHz ) * sizeof( silk_float ) );
-
- /* Exit without entropy coding */
- if( psEnc->sCmn.prefillFlag ) {
- /* No payload */
- *pnBytesOut = 0;
- return ret;
- }
-
- /* Parameters needed for next frame */
- psEnc->sCmn.prevLag = sEncCtrl.pitchL[ psEnc->sCmn.nb_subfr - 1 ];
- psEnc->sCmn.prevSignalType = psEnc->sCmn.indices.signalType;
-
- /****************************************/
- /* Finalize payload */
- /****************************************/
- psEnc->sCmn.first_frame_after_reset = 0;
- /* Payload size */
- *pnBytesOut = silk_RSHIFT( ec_tell( psRangeEnc ) + 7, 3 );
-
- return ret;
-}
-
-/* Low-Bitrate Redundancy (LBRR) encoding. Reuse all parameters but encode excitation at lower bitrate */
-static OPUS_INLINE void silk_LBRR_encode_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float xfw[], /* I Input signal */
- opus_int condCoding /* I The type of conditional coding used so far for this frame */
-)
-{
- opus_int k;
- opus_int32 Gains_Q16[ MAX_NB_SUBFR ];
- silk_float TempGains[ MAX_NB_SUBFR ];
- SideInfoIndices *psIndices_LBRR = &psEnc->sCmn.indices_LBRR[ psEnc->sCmn.nFramesEncoded ];
- silk_nsq_state sNSQ_LBRR;
-
- /*******************************************/
- /* Control use of inband LBRR */
- /*******************************************/
- if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.speech_activity_Q8 > SILK_FIX_CONST( LBRR_SPEECH_ACTIVITY_THRES, 8 ) ) {
- psEnc->sCmn.LBRR_flags[ psEnc->sCmn.nFramesEncoded ] = 1;
-
- /* Copy noise shaping quantizer state and quantization indices from regular encoding */
- silk_memcpy( &sNSQ_LBRR, &psEnc->sCmn.sNSQ, sizeof( silk_nsq_state ) );
- silk_memcpy( psIndices_LBRR, &psEnc->sCmn.indices, sizeof( SideInfoIndices ) );
-
- /* Save original gains */
- silk_memcpy( TempGains, psEncCtrl->Gains, psEnc->sCmn.nb_subfr * sizeof( silk_float ) );
-
- if( psEnc->sCmn.nFramesEncoded == 0 || psEnc->sCmn.LBRR_flags[ psEnc->sCmn.nFramesEncoded - 1 ] == 0 ) {
- /* First frame in packet or previous frame not LBRR coded */
- psEnc->sCmn.LBRRprevLastGainIndex = psEnc->sShape.LastGainIndex;
-
- /* Increase Gains to get target LBRR rate */
- psIndices_LBRR->GainsIndices[ 0 ] += psEnc->sCmn.LBRR_GainIncreases;
- psIndices_LBRR->GainsIndices[ 0 ] = silk_min_int( psIndices_LBRR->GainsIndices[ 0 ], N_LEVELS_QGAIN - 1 );
- }
-
- /* Decode to get gains in sync with decoder */
- silk_gains_dequant( Gains_Q16, psIndices_LBRR->GainsIndices,
- &psEnc->sCmn.LBRRprevLastGainIndex, condCoding == CODE_CONDITIONALLY, psEnc->sCmn.nb_subfr );
-
- /* Overwrite unquantized gains with quantized gains and convert back to Q0 from Q16 */
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains[ k ] = Gains_Q16[ k ] * ( 1.0f / 65536.0f );
- }
-
- /*****************************************/
- /* Noise shaping quantization */
- /*****************************************/
- silk_NSQ_wrapper_FLP( psEnc, psEncCtrl, psIndices_LBRR, &sNSQ_LBRR,
- psEnc->sCmn.pulses_LBRR[ psEnc->sCmn.nFramesEncoded ], xfw );
-
- /* Restore original gains */
- silk_memcpy( psEncCtrl->Gains, TempGains, psEnc->sCmn.nb_subfr * sizeof( silk_float ) );
- }
-}
diff --git a/drivers/opus/silk/float/energy_FLP.c b/drivers/opus/silk/float/energy_FLP.c
deleted file mode 100644
index 443f52bb16..0000000000
--- a/drivers/opus/silk/float/energy_FLP.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/SigProc_FLP.h"
-
-/* sum of squares of a silk_float array, with result as double */
-double silk_energy_FLP(
- const silk_float *data,
- opus_int dataSize
-)
-{
- opus_int i, dataSize4;
- double result;
-
- /* 4x unrolled loop */
- result = 0.0;
- dataSize4 = dataSize & 0xFFFC;
- for( i = 0; i < dataSize4; i += 4 ) {
- result += data[ i + 0 ] * (double)data[ i + 0 ] +
- data[ i + 1 ] * (double)data[ i + 1 ] +
- data[ i + 2 ] * (double)data[ i + 2 ] +
- data[ i + 3 ] * (double)data[ i + 3 ];
- }
-
- /* add any remaining products */
- for( ; i < dataSize; i++ ) {
- result += data[ i ] * (double)data[ i ];
- }
-
- silk_assert( result >= 0.0 );
- return result;
-}
diff --git a/drivers/opus/silk/float/find_LPC_FLP.c b/drivers/opus/silk/float/find_LPC_FLP.c
deleted file mode 100644
index 162a490d1d..0000000000
--- a/drivers/opus/silk/float/find_LPC_FLP.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/define.h"
-#include "opus/silk/float/main_FLP.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* LPC analysis */
-void silk_find_LPC_FLP(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- opus_int16 NLSF_Q15[], /* O NLSFs */
- const silk_float x[], /* I Input signal */
- const silk_float minInvGain /* I Inverse of max prediction gain */
-)
-{
- opus_int k, subfr_length;
- silk_float a[ MAX_LPC_ORDER ];
-
- /* Used only for NLSF interpolation */
- silk_float res_nrg, res_nrg_2nd, res_nrg_interp;
- opus_int16 NLSF0_Q15[ MAX_LPC_ORDER ];
- silk_float a_tmp[ MAX_LPC_ORDER ];
- silk_float LPC_res[ MAX_FRAME_LENGTH + MAX_NB_SUBFR * MAX_LPC_ORDER ];
-
- subfr_length = psEncC->subfr_length + psEncC->predictLPCOrder;
-
- /* Default: No interpolation */
- psEncC->indices.NLSFInterpCoef_Q2 = 4;
-
- /* Burg AR analysis for the full frame */
- res_nrg = silk_burg_modified_FLP( a, x, minInvGain, subfr_length, psEncC->nb_subfr, psEncC->predictLPCOrder );
-
- if( psEncC->useInterpolatedNLSFs && !psEncC->first_frame_after_reset && psEncC->nb_subfr == MAX_NB_SUBFR ) {
- /* Optimal solution for last 10 ms; 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 */
- res_nrg -= silk_burg_modified_FLP( a_tmp, x + ( MAX_NB_SUBFR / 2 ) * subfr_length, minInvGain, subfr_length, MAX_NB_SUBFR / 2, psEncC->predictLPCOrder );
-
- /* Convert to NLSFs */
- silk_A2NLSF_FLP( NLSF_Q15, a_tmp, psEncC->predictLPCOrder );
-
- /* Search over interpolation indices to find the one with lowest residual energy */
- res_nrg_2nd = silk_float_MAX;
- for( k = 3; k >= 0; k-- ) {
- /* Interpolate NLSFs for first half */
- silk_interpolate( NLSF0_Q15, psEncC->prev_NLSFq_Q15, NLSF_Q15, k, psEncC->predictLPCOrder );
-
- /* Convert to LPC for residual energy evaluation */
- silk_NLSF2A_FLP( a_tmp, NLSF0_Q15, psEncC->predictLPCOrder );
-
- /* Calculate residual energy with LSF interpolation */
- silk_LPC_analysis_filter_FLP( LPC_res, a_tmp, x, 2 * subfr_length, psEncC->predictLPCOrder );
- res_nrg_interp = (silk_float)(
- silk_energy_FLP( LPC_res + psEncC->predictLPCOrder, subfr_length - psEncC->predictLPCOrder ) +
- silk_energy_FLP( LPC_res + psEncC->predictLPCOrder + subfr_length, subfr_length - psEncC->predictLPCOrder ) );
-
- /* Determine whether current interpolated NLSFs are best so far */
- if( res_nrg_interp < res_nrg ) {
- /* Interpolation has lower residual energy */
- res_nrg = res_nrg_interp;
- psEncC->indices.NLSFInterpCoef_Q2 = (opus_int8)k;
- } else if( res_nrg_interp > res_nrg_2nd ) {
- /* No reason to continue iterating - residual energies will continue to climb */
- break;
- }
- res_nrg_2nd = res_nrg_interp;
- }
- }
-
- if( psEncC->indices.NLSFInterpCoef_Q2 == 4 ) {
- /* NLSF interpolation is currently inactive, calculate NLSFs from full frame AR coefficients */
- silk_A2NLSF_FLP( NLSF_Q15, a, psEncC->predictLPCOrder );
- }
-
- silk_assert( psEncC->indices.NLSFInterpCoef_Q2 == 4 ||
- ( psEncC->useInterpolatedNLSFs && !psEncC->first_frame_after_reset && psEncC->nb_subfr == MAX_NB_SUBFR ) );
-}
diff --git a/drivers/opus/silk/float/find_LTP_FLP.c b/drivers/opus/silk/float/find_LTP_FLP.c
deleted file mode 100644
index 9c03eeb6a7..0000000000
--- a/drivers/opus/silk/float/find_LTP_FLP.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-#include "opus/silk/tuning_parameters.h"
-
-void silk_find_LTP_FLP(
- silk_float b[ MAX_NB_SUBFR * LTP_ORDER ], /* O LTP coefs */
- silk_float WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */
- silk_float *LTPredCodGain, /* O LTP coding gain */
- const silk_float r_lpc[], /* I LPC residual */
- const opus_int lag[ MAX_NB_SUBFR ], /* I LTP lags */
- const silk_float Wght[ MAX_NB_SUBFR ], /* I Weights */
- const opus_int subfr_length, /* I Subframe length */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int mem_offset /* I Number of samples in LTP memory */
-)
-{
- opus_int i, k;
- silk_float *b_ptr, temp, *WLTP_ptr;
- silk_float LPC_res_nrg, LPC_LTP_res_nrg;
- silk_float d[ MAX_NB_SUBFR ], m, g, delta_b[ LTP_ORDER ];
- silk_float w[ MAX_NB_SUBFR ], nrg[ MAX_NB_SUBFR ], regu;
- silk_float Rr[ LTP_ORDER ], rr[ MAX_NB_SUBFR ];
- const silk_float *r_ptr, *lag_ptr;
-
- b_ptr = b;
- WLTP_ptr = WLTP;
- r_ptr = &r_lpc[ mem_offset ];
- for( k = 0; k < nb_subfr; k++ ) {
- lag_ptr = r_ptr - ( lag[ k ] + LTP_ORDER / 2 );
-
- silk_corrMatrix_FLP( lag_ptr, subfr_length, LTP_ORDER, WLTP_ptr );
- silk_corrVector_FLP( lag_ptr, r_ptr, subfr_length, LTP_ORDER, Rr );
-
- rr[ k ] = ( silk_float )silk_energy_FLP( r_ptr, subfr_length );
- regu = 1.0f + rr[ k ] +
- matrix_ptr( WLTP_ptr, 0, 0, LTP_ORDER ) +
- matrix_ptr( WLTP_ptr, LTP_ORDER-1, LTP_ORDER-1, LTP_ORDER );
- regu *= LTP_DAMPING / 3;
- silk_regularize_correlations_FLP( WLTP_ptr, &rr[ k ], regu, LTP_ORDER );
- silk_solve_LDL_FLP( WLTP_ptr, LTP_ORDER, Rr, b_ptr );
-
- /* Calculate residual energy */
- nrg[ k ] = silk_residual_energy_covar_FLP( b_ptr, WLTP_ptr, Rr, rr[ k ], LTP_ORDER );
-
- temp = Wght[ k ] / ( nrg[ k ] * Wght[ k ] + 0.01f * subfr_length );
- silk_scale_vector_FLP( WLTP_ptr, temp, LTP_ORDER * LTP_ORDER );
- w[ k ] = matrix_ptr( WLTP_ptr, LTP_ORDER / 2, LTP_ORDER / 2, LTP_ORDER );
-
- r_ptr += subfr_length;
- b_ptr += LTP_ORDER;
- WLTP_ptr += LTP_ORDER * LTP_ORDER;
- }
-
- /* Compute LTP coding gain */
- if( LTPredCodGain != NULL ) {
- LPC_LTP_res_nrg = 1e-6f;
- LPC_res_nrg = 0.0f;
- for( k = 0; k < nb_subfr; k++ ) {
- LPC_res_nrg += rr[ k ] * Wght[ k ];
- LPC_LTP_res_nrg += nrg[ k ] * Wght[ k ];
- }
-
- silk_assert( LPC_LTP_res_nrg > 0 );
- *LTPredCodGain = 3.0f * silk_log2( LPC_res_nrg / LPC_LTP_res_nrg );
- }
-
- /* Smoothing */
- /* d = sum( B, 1 ); */
- b_ptr = b;
- for( k = 0; k < nb_subfr; k++ ) {
- d[ k ] = 0;
- for( i = 0; i < LTP_ORDER; i++ ) {
- d[ k ] += b_ptr[ i ];
- }
- b_ptr += LTP_ORDER;
- }
- /* m = ( w * d' ) / ( sum( w ) + 1e-3 ); */
- temp = 1e-3f;
- for( k = 0; k < nb_subfr; k++ ) {
- temp += w[ k ];
- }
- m = 0;
- for( k = 0; k < nb_subfr; k++ ) {
- m += d[ k ] * w[ k ];
- }
- m = m / temp;
-
- b_ptr = b;
- for( k = 0; k < nb_subfr; k++ ) {
- g = LTP_SMOOTHING / ( LTP_SMOOTHING + w[ k ] ) * ( m - d[ k ] );
- temp = 0;
- for( i = 0; i < LTP_ORDER; i++ ) {
- delta_b[ i ] = silk_max_float( b_ptr[ i ], 0.1f );
- temp += delta_b[ i ];
- }
- temp = g / temp;
- for( i = 0; i < LTP_ORDER; i++ ) {
- b_ptr[ i ] = b_ptr[ i ] + delta_b[ i ] * temp;
- }
- b_ptr += LTP_ORDER;
- }
-}
diff --git a/drivers/opus/silk/float/find_pitch_lags_FLP.c b/drivers/opus/silk/float/find_pitch_lags_FLP.c
deleted file mode 100644
index bb7ef8ec2e..0000000000
--- a/drivers/opus/silk/float/find_pitch_lags_FLP.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include <stdlib.h>
-#include "opus/silk/float/main_FLP.h"
-#include "opus/silk/tuning_parameters.h"
-
-void silk_find_pitch_lags_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- silk_float res[], /* O Residual */
- const silk_float x[], /* I Speech signal */
- int arch /* I Run-time architecture */
-)
-{
- opus_int buf_len;
- silk_float thrhld, res_nrg;
- const silk_float *x_buf_ptr, *x_buf;
- silk_float auto_corr[ MAX_FIND_PITCH_LPC_ORDER + 1 ];
- silk_float A[ MAX_FIND_PITCH_LPC_ORDER ];
- silk_float refl_coef[ MAX_FIND_PITCH_LPC_ORDER ];
- silk_float Wsig[ FIND_PITCH_LPC_WIN_MAX ];
- silk_float *Wsig_ptr;
-
- /******************************************/
- /* Set up buffer lengths etc based on Fs */
- /******************************************/
- buf_len = psEnc->sCmn.la_pitch + psEnc->sCmn.frame_length + psEnc->sCmn.ltp_mem_length;
-
- /* Safety check */
- silk_assert( buf_len >= psEnc->sCmn.pitch_LPC_win_length );
-
- x_buf = x - psEnc->sCmn.ltp_mem_length;
-
- /******************************************/
- /* Estimate LPC AR coeficients */
- /******************************************/
-
- /* Calculate windowed signal */
-
- /* First LA_LTP samples */
- x_buf_ptr = x_buf + buf_len - psEnc->sCmn.pitch_LPC_win_length;
- Wsig_ptr = Wsig;
- silk_apply_sine_window_FLP( Wsig_ptr, x_buf_ptr, 1, psEnc->sCmn.la_pitch );
-
- /* Middle non-windowed samples */
- Wsig_ptr += psEnc->sCmn.la_pitch;
- x_buf_ptr += psEnc->sCmn.la_pitch;
- silk_memcpy( Wsig_ptr, x_buf_ptr, ( psEnc->sCmn.pitch_LPC_win_length - ( psEnc->sCmn.la_pitch << 1 ) ) * sizeof( silk_float ) );
-
- /* Last LA_LTP samples */
- Wsig_ptr += psEnc->sCmn.pitch_LPC_win_length - ( psEnc->sCmn.la_pitch << 1 );
- x_buf_ptr += psEnc->sCmn.pitch_LPC_win_length - ( psEnc->sCmn.la_pitch << 1 );
- silk_apply_sine_window_FLP( Wsig_ptr, x_buf_ptr, 2, psEnc->sCmn.la_pitch );
-
- /* Calculate autocorrelation sequence */
- silk_autocorrelation_FLP( auto_corr, Wsig, psEnc->sCmn.pitch_LPC_win_length, psEnc->sCmn.pitchEstimationLPCOrder + 1 );
-
- /* Add white noise, as a fraction of the energy */
- auto_corr[ 0 ] += auto_corr[ 0 ] * FIND_PITCH_WHITE_NOISE_FRACTION + 1;
-
- /* Calculate the reflection coefficients using Schur */
- res_nrg = silk_schur_FLP( refl_coef, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder );
-
- /* Prediction gain */
- psEncCtrl->predGain = auto_corr[ 0 ] / silk_max_float( res_nrg, 1.0f );
-
- /* Convert reflection coefficients to prediction coefficients */
- silk_k2a_FLP( A, refl_coef, psEnc->sCmn.pitchEstimationLPCOrder );
-
- /* Bandwidth expansion */
- silk_bwexpander_FLP( A, psEnc->sCmn.pitchEstimationLPCOrder, FIND_PITCH_BANDWIDTH_EXPANSION );
-
- /*****************************************/
- /* LPC analysis filtering */
- /*****************************************/
- silk_LPC_analysis_filter_FLP( res, A, x_buf, buf_len, psEnc->sCmn.pitchEstimationLPCOrder );
-
- if( psEnc->sCmn.indices.signalType != TYPE_NO_VOICE_ACTIVITY && psEnc->sCmn.first_frame_after_reset == 0 ) {
- /* Threshold for pitch estimator */
- thrhld = 0.6f;
- thrhld -= 0.004f * psEnc->sCmn.pitchEstimationLPCOrder;
- thrhld -= 0.1f * psEnc->sCmn.speech_activity_Q8 * ( 1.0f / 256.0f );
- thrhld -= 0.15f * (psEnc->sCmn.prevSignalType >> 1);
- thrhld -= 0.1f * psEnc->sCmn.input_tilt_Q15 * ( 1.0f / 32768.0f );
-
- /*****************************************/
- /* Call Pitch estimator */
- /*****************************************/
- if( silk_pitch_analysis_core_FLP( res, psEncCtrl->pitchL, &psEnc->sCmn.indices.lagIndex,
- &psEnc->sCmn.indices.contourIndex, &psEnc->LTPCorr, psEnc->sCmn.prevLag, psEnc->sCmn.pitchEstimationThreshold_Q16 / 65536.0f,
- thrhld, psEnc->sCmn.fs_kHz, psEnc->sCmn.pitchEstimationComplexity, psEnc->sCmn.nb_subfr, arch ) == 0 )
- {
- psEnc->sCmn.indices.signalType = TYPE_VOICED;
- } else {
- psEnc->sCmn.indices.signalType = TYPE_UNVOICED;
- }
- } else {
- silk_memset( psEncCtrl->pitchL, 0, sizeof( psEncCtrl->pitchL ) );
- psEnc->sCmn.indices.lagIndex = 0;
- psEnc->sCmn.indices.contourIndex = 0;
- psEnc->LTPCorr = 0;
- }
-}
diff --git a/drivers/opus/silk/float/find_pred_coefs_FLP.c b/drivers/opus/silk/float/find_pred_coefs_FLP.c
deleted file mode 100644
index c0496ff1b5..0000000000
--- a/drivers/opus/silk/float/find_pred_coefs_FLP.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-
-/* Find LPC and LTP coefficients */
-void silk_find_pred_coefs_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float res_pitch[], /* I Residual from pitch analysis */
- const silk_float x[], /* I Speech signal */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- opus_int i;
- silk_float WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ];
- silk_float invGains[ MAX_NB_SUBFR ], Wght[ MAX_NB_SUBFR ];
- opus_int16 NLSF_Q15[ MAX_LPC_ORDER ];
- const silk_float *x_ptr;
- silk_float *x_pre_ptr, LPC_in_pre[ MAX_NB_SUBFR * MAX_LPC_ORDER + MAX_FRAME_LENGTH ];
- silk_float minInvGain;
-
- /* Weighting for weighted least squares */
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- silk_assert( psEncCtrl->Gains[ i ] > 0.0f );
- invGains[ i ] = 1.0f / psEncCtrl->Gains[ i ];
- Wght[ i ] = invGains[ i ] * invGains[ i ];
- }
-
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /**********/
- /* VOICED */
- /**********/
- silk_assert( psEnc->sCmn.ltp_mem_length - psEnc->sCmn.predictLPCOrder >= psEncCtrl->pitchL[ 0 ] + LTP_ORDER / 2 );
-
- /* LTP analysis */
- silk_find_LTP_FLP( psEncCtrl->LTPCoef, WLTP, &psEncCtrl->LTPredCodGain, res_pitch,
- psEncCtrl->pitchL, Wght, psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.ltp_mem_length );
-
- /* Quantize LTP gain parameters */
- silk_quant_LTP_gains_FLP( psEncCtrl->LTPCoef, psEnc->sCmn.indices.LTPIndex, &psEnc->sCmn.indices.PERIndex,
- &psEnc->sCmn.sum_log_gain_Q7, WLTP, psEnc->sCmn.mu_LTP_Q9, psEnc->sCmn.LTPQuantLowComplexity, psEnc->sCmn.nb_subfr,
- psEnc->sCmn.arch );
-
- /* Control LTP scaling */
- silk_LTP_scale_ctrl_FLP( psEnc, psEncCtrl, condCoding );
-
- /* Create LTP residual */
- silk_LTP_analysis_filter_FLP( LPC_in_pre, x - psEnc->sCmn.predictLPCOrder, psEncCtrl->LTPCoef,
- psEncCtrl->pitchL, invGains, psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.predictLPCOrder );
- } else {
- /************/
- /* UNVOICED */
- /************/
- /* Create signal with prepended subframes, scaled by inverse gains */
- x_ptr = x - psEnc->sCmn.predictLPCOrder;
- x_pre_ptr = LPC_in_pre;
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- silk_scale_copy_vector_FLP( x_pre_ptr, x_ptr, invGains[ i ],
- psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder );
- x_pre_ptr += psEnc->sCmn.subfr_length + psEnc->sCmn.predictLPCOrder;
- x_ptr += psEnc->sCmn.subfr_length;
- }
- silk_memset( psEncCtrl->LTPCoef, 0, psEnc->sCmn.nb_subfr * LTP_ORDER * sizeof( silk_float ) );
- psEncCtrl->LTPredCodGain = 0.0f;
- psEnc->sCmn.sum_log_gain_Q7 = 0;
- }
-
- /* Limit on total predictive coding gain */
- if( psEnc->sCmn.first_frame_after_reset ) {
- minInvGain = 1.0f / MAX_PREDICTION_POWER_GAIN_AFTER_RESET;
- } else {
- minInvGain = (silk_float)pow( 2, psEncCtrl->LTPredCodGain / 3 ) / MAX_PREDICTION_POWER_GAIN;
- minInvGain /= 0.25f + 0.75f * psEncCtrl->coding_quality;
- }
-
- /* LPC_in_pre contains the LTP-filtered input for voiced, and the unfiltered input for unvoiced */
- silk_find_LPC_FLP( &psEnc->sCmn, NLSF_Q15, LPC_in_pre, minInvGain );
-
- /* Quantize LSFs */
- silk_process_NLSFs_FLP( &psEnc->sCmn, psEncCtrl->PredCoef, NLSF_Q15, psEnc->sCmn.prev_NLSFq_Q15 );
-
- /* Calculate residual energy using quantized LPC coefficients */
- silk_residual_energy_FLP( psEncCtrl->ResNrg, LPC_in_pre, psEncCtrl->PredCoef, psEncCtrl->Gains,
- psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr, psEnc->sCmn.predictLPCOrder );
-
- /* Copy to prediction struct for use in next frame for interpolation */
- silk_memcpy( psEnc->sCmn.prev_NLSFq_Q15, NLSF_Q15, sizeof( psEnc->sCmn.prev_NLSFq_Q15 ) );
-}
-
diff --git a/drivers/opus/silk/float/inner_product_FLP.c b/drivers/opus/silk/float/inner_product_FLP.c
deleted file mode 100644
index 0586c4d7fb..0000000000
--- a/drivers/opus/silk/float/inner_product_FLP.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/SigProc_FLP.h"
-
-/* inner product of two silk_float arrays, with result as double */
-double silk_inner_product_FLP(
- const silk_float *data1,
- const silk_float *data2,
- opus_int dataSize
-)
-{
- opus_int i, dataSize4;
- double result;
-
- /* 4x unrolled loop */
- result = 0.0;
- dataSize4 = dataSize & 0xFFFC;
- for( i = 0; i < dataSize4; i += 4 ) {
- result += data1[ i + 0 ] * (double)data2[ i + 0 ] +
- data1[ i + 1 ] * (double)data2[ i + 1 ] +
- data1[ i + 2 ] * (double)data2[ i + 2 ] +
- data1[ i + 3 ] * (double)data2[ i + 3 ];
- }
-
- /* add any remaining products */
- for( ; i < dataSize; i++ ) {
- result += data1[ i ] * (double)data2[ i ];
- }
-
- return result;
-}
diff --git a/drivers/opus/silk/float/k2a_FLP.c b/drivers/opus/silk/float/k2a_FLP.c
deleted file mode 100644
index 26ba94e610..0000000000
--- a/drivers/opus/silk/float/k2a_FLP.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/SigProc_FLP.h"
-
-/* step up function, converts reflection coefficients to prediction coefficients */
-void silk_k2a_FLP(
- silk_float *A, /* O prediction coefficients [order] */
- const silk_float *rc, /* I reflection coefficients [order] */
- opus_int32 order /* I prediction order */
-)
-{
- opus_int k, n;
- silk_float Atmp[ SILK_MAX_ORDER_LPC ];
-
- for( k = 0; k < order; k++ ) {
- for( n = 0; n < k; n++ ) {
- Atmp[ n ] = A[ n ];
- }
- for( n = 0; n < k; n++ ) {
- A[ n ] += Atmp[ k - n - 1 ] * rc[ k ];
- }
- A[ k ] = -rc[ k ];
- }
-}
diff --git a/drivers/opus/silk/float/levinsondurbin_FLP.c b/drivers/opus/silk/float/levinsondurbin_FLP.c
deleted file mode 100644
index 7e3c9d6531..0000000000
--- a/drivers/opus/silk/float/levinsondurbin_FLP.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/SigProc_FLP.h"
-
-/* Solve the normal equations using the Levinson-Durbin recursion */
-silk_float silk_levinsondurbin_FLP( /* O prediction error energy */
- silk_float A[], /* O prediction coefficients [order] */
- const silk_float corr[], /* I input auto-correlations [order + 1] */
- const opus_int order /* I prediction order */
-)
-{
- opus_int i, mHalf, m;
- silk_float min_nrg, nrg, t, km, Atmp1, Atmp2;
-
- min_nrg = 1e-12f * corr[ 0 ] + 1e-9f;
- nrg = corr[ 0 ];
- nrg = silk_max_float(min_nrg, nrg);
- A[ 0 ] = corr[ 1 ] / nrg;
- nrg -= A[ 0 ] * corr[ 1 ];
- nrg = silk_max_float(min_nrg, nrg);
-
- for( m = 1; m < order; m++ )
- {
- t = corr[ m + 1 ];
- for( i = 0; i < m; i++ ) {
- t -= A[ i ] * corr[ m - i ];
- }
-
- /* reflection coefficient */
- km = t / nrg;
-
- /* residual energy */
- nrg -= km * t;
- nrg = silk_max_float(min_nrg, nrg);
-
- mHalf = m >> 1;
- for( i = 0; i < mHalf; i++ ) {
- Atmp1 = A[ i ];
- Atmp2 = A[ m - i - 1 ];
- A[ m - i - 1 ] -= km * Atmp1;
- A[ i ] -= km * Atmp2;
- }
- if( m & 1 ) {
- A[ mHalf ] -= km * A[ mHalf ];
- }
- A[ m ] = km;
- }
-
- /* return the residual energy */
- return nrg;
-}
-
diff --git a/drivers/opus/silk/float/main_FLP.h b/drivers/opus/silk/float/main_FLP.h
deleted file mode 100644
index 8f35177549..0000000000
--- a/drivers/opus/silk/float/main_FLP.h
+++ /dev/null
@@ -1,313 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_MAIN_FLP_H
-#define SILK_MAIN_FLP_H
-
-#include "opus/silk/float/SigProc_FLP.h"
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/float/structs_FLP.h"
-#include "opus/silk/main.h"
-#include "opus/silk/define.h"
-#include "opus/silk/debug.h"
-#include "opus/celt/entenc.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#define silk_encoder_state_Fxx silk_encoder_state_FLP
-#define silk_encode_do_VAD_Fxx silk_encode_do_VAD_FLP
-#define silk_encode_frame_Fxx silk_encode_frame_FLP
-
-/*********************/
-/* Encoder Functions */
-/*********************/
-
-/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
-void silk_HP_variable_cutoff(
- silk_encoder_state_Fxx state_Fxx[] /* I/O Encoder states */
-);
-
-/* Encoder main function */
-void silk_encode_do_VAD_FLP(
- silk_encoder_state_FLP *psEnc /* I/O Encoder state FLP */
-);
-
-/* Encoder main function */
-opus_int silk_encode_frame_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- opus_int32 *pnBytesOut, /* O Number of payload bytes; */
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- opus_int condCoding, /* I The type of conditional coding to use */
- opus_int maxBits, /* I If > 0: maximum number of output bits */
- opus_int useCBR /* I Flag to force constant-bitrate operation */
-);
-
-/* Initializes the Silk encoder state */
-opus_int silk_init_encoder(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- int arch /* I Run-tim architecture */
-);
-
-/* Control the Silk encoder */
-opus_int silk_control_encoder(
- silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */
- silk_EncControlStruct *encControl, /* I Control structure */
- const opus_int32 TargetRate_bps, /* I Target max bitrate (bps) */
- const opus_int allow_bw_switch, /* I Flag to allow switching audio bandwidth */
- const opus_int channelNb, /* I Channel number */
- const opus_int force_fs_kHz
-);
-
-/****************/
-/* Prefiltering */
-/****************/
-void silk_prefilter_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- const silk_encoder_control_FLP *psEncCtrl, /* I Encoder control FLP */
- silk_float xw[], /* O Weighted signal */
- const silk_float x[] /* I Speech signal */
-);
-
-/**************************/
-/* Noise shaping analysis */
-/**************************/
-/* Compute noise shaping coefficients and initial gain values */
-void silk_noise_shape_analysis_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float *pitch_res, /* I LPC residual from pitch analysis */
- const silk_float *x /* I Input signal [frame_length + la_shape] */
-);
-
-/* Autocorrelations for a warped frequency axis */
-void silk_warped_autocorrelation_FLP(
- silk_float *corr, /* O Result [order + 1] */
- const silk_float *input, /* I Input data to correlate */
- const silk_float warping, /* I Warping coefficient */
- const opus_int length, /* I Length of input */
- const opus_int order /* I Correlation order (even) */
-);
-
-/* Calculation of LTP state scaling */
-void silk_LTP_scale_ctrl_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/**********************************************/
-/* Prediction Analysis */
-/**********************************************/
-/* Find pitch lags */
-void silk_find_pitch_lags_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- silk_float res[], /* O Residual */
- const silk_float x[], /* I Speech signal */
- int arch /* I Run-time architecture */
-);
-
-/* Find LPC and LTP coefficients */
-void silk_find_pred_coefs_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float res_pitch[], /* I Residual from pitch analysis */
- const silk_float x[], /* I Speech signal */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/* LPC analysis */
-void silk_find_LPC_FLP(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- opus_int16 NLSF_Q15[], /* O NLSFs */
- const silk_float x[], /* I Input signal */
- const silk_float minInvGain /* I Prediction gain from LTP (dB) */
-);
-
-/* LTP analysis */
-void silk_find_LTP_FLP(
- silk_float b[ MAX_NB_SUBFR * LTP_ORDER ], /* O LTP coefs */
- silk_float WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */
- silk_float *LTPredCodGain, /* O LTP coding gain */
- const silk_float r_lpc[], /* I LPC residual */
- const opus_int lag[ MAX_NB_SUBFR ], /* I LTP lags */
- const silk_float Wght[ MAX_NB_SUBFR ], /* I Weights */
- const opus_int subfr_length, /* I Subframe length */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int mem_offset /* I Number of samples in LTP memory */
-);
-
-void silk_LTP_analysis_filter_FLP(
- silk_float *LTP_res, /* O LTP res MAX_NB_SUBFR*(pre_lgth+subfr_lngth) */
- const silk_float *x, /* I Input signal, with preceding samples */
- const silk_float B[ LTP_ORDER * MAX_NB_SUBFR ], /* I LTP coefficients for each subframe */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const silk_float invGains[ MAX_NB_SUBFR ], /* I Inverse quantization gains */
- const opus_int subfr_length, /* I Length of each subframe */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int pre_length /* I Preceding samples for each subframe */
-);
-
-/* Calculates residual energies of input subframes where all subframes have LPC_order */
-/* of preceding samples */
-void silk_residual_energy_FLP(
- silk_float nrgs[ MAX_NB_SUBFR ], /* O Residual energy per subframe */
- const silk_float x[], /* I Input signal */
- silk_float a[ 2 ][ MAX_LPC_ORDER ], /* I AR coefs for each frame half */
- const silk_float gains[], /* I Quantization gains */
- const opus_int subfr_length, /* I Subframe length */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int LPC_order /* I LPC order */
-);
-
-/* 16th order LPC analysis filter */
-void silk_LPC_analysis_filter_FLP(
- silk_float r_LPC[], /* O LPC residual signal */
- const silk_float PredCoef[], /* I LPC coefficients */
- const silk_float s[], /* I Input signal */
- const opus_int length, /* I Length of input signal */
- const opus_int Order /* I LPC order */
-);
-
-/* LTP tap quantizer */
-void silk_quant_LTP_gains_FLP(
- silk_float B[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (Un-)quantized LTP gains */
- opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook index */
- opus_int8 *periodicity_index, /* O Periodicity index */
- opus_int32 *sum_log_gain_Q7, /* I/O Cumulative max prediction gain */
- const silk_float W[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* I Error weights */
- const opus_int mu_Q10, /* I Mu value (R/D tradeoff) */
- const opus_int lowComplexity, /* I Flag for low complexity */
- const opus_int nb_subfr, /* I number of subframes */
- int arch /* I Run-time architecture */
-);
-
-/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
-silk_float silk_residual_energy_covar_FLP( /* O Weighted residual energy */
- const silk_float *c, /* I Filter coefficients */
- silk_float *wXX, /* I/O Weighted correlation matrix, reg. out */
- const silk_float *wXx, /* I Weighted correlation vector */
- const silk_float wxx, /* I Weighted correlation value */
- const opus_int D /* I Dimension */
-);
-
-/* Processing of gains */
-void silk_process_gains_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/******************/
-/* Linear Algebra */
-/******************/
-/* Calculates correlation matrix X'*X */
-void silk_corrMatrix_FLP(
- const silk_float *x, /* I x vector [ L+order-1 ] used to create X */
- const opus_int L, /* I Length of vectors */
- const opus_int Order, /* I Max lag for correlation */
- silk_float *XX /* O X'*X correlation matrix [order x order] */
-);
-
-/* Calculates correlation vector X'*t */
-void silk_corrVector_FLP(
- const silk_float *x, /* I x vector [L+order-1] used to create X */
- const silk_float *t, /* I Target vector [L] */
- const opus_int L, /* I Length of vecors */
- const opus_int Order, /* I Max lag for correlation */
- silk_float *Xt /* O X'*t correlation vector [order] */
-);
-
-/* Add noise to matrix diagonal */
-void silk_regularize_correlations_FLP(
- silk_float *XX, /* I/O Correlation matrices */
- silk_float *xx, /* I/O Correlation values */
- const silk_float noise, /* I Noise energy to add */
- const opus_int D /* I Dimension of XX */
-);
-
-/* Function to solve linear equation Ax = b, where A is an MxM symmetric matrix */
-void silk_solve_LDL_FLP(
- silk_float *A, /* I/O Symmetric square matrix, out: reg. */
- const opus_int M, /* I Size of matrix */
- const silk_float *b, /* I Pointer to b vector */
- silk_float *x /* O Pointer to x solution vector */
-);
-
-/* Apply sine window to signal vector. */
-/* Window types: */
-/* 1 -> sine window from 0 to pi/2 */
-/* 2 -> sine window from pi/2 to pi */
-void silk_apply_sine_window_FLP(
- silk_float px_win[], /* O Pointer to windowed signal */
- const silk_float px[], /* I Pointer to input signal */
- const opus_int win_type, /* I Selects a window type */
- const opus_int length /* I Window length, multiple of 4 */
-);
-
-/* Wrapper functions. Call flp / fix code */
-
-/* Convert AR filter coefficients to NLSF parameters */
-void silk_A2NLSF_FLP(
- opus_int16 *NLSF_Q15, /* O NLSF vector [ LPC_order ] */
- const silk_float *pAR, /* I LPC coefficients [ LPC_order ] */
- const opus_int LPC_order /* I LPC order */
-);
-
-/* Convert NLSF parameters to AR prediction filter coefficients */
-void silk_NLSF2A_FLP(
- silk_float *pAR, /* O LPC coefficients [ LPC_order ] */
- const opus_int16 *NLSF_Q15, /* I NLSF vector [ LPC_order ] */
- const opus_int LPC_order /* I LPC order */
-);
-
-/* Limit, stabilize, and quantize NLSFs */
-void silk_process_NLSFs_FLP(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- silk_float PredCoef[ 2 ][ MAX_LPC_ORDER ], /* O Prediction coefficients */
- opus_int16 NLSF_Q15[ MAX_LPC_ORDER ], /* I/O Normalized LSFs (quant out) (0 - (2^15-1)) */
- const opus_int16 prev_NLSF_Q15[ MAX_LPC_ORDER ] /* I Previous Normalized LSFs (0 - (2^15-1)) */
-);
-
-/* Floating-point Silk NSQ wrapper */
-void silk_NSQ_wrapper_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- SideInfoIndices *psIndices, /* I/O Quantization indices */
- silk_nsq_state *psNSQ, /* I/O Noise Shaping Quantzation state */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const silk_float x[] /* I Prefiltered input signal */
-);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/drivers/opus/silk/float/noise_shape_analysis_FLP.c b/drivers/opus/silk/float/noise_shape_analysis_FLP.c
deleted file mode 100644
index cbb8ba4470..0000000000
--- a/drivers/opus/silk/float/noise_shape_analysis_FLP.c
+++ /dev/null
@@ -1,362 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Compute gain to make warped filter coefficients have a zero mean log frequency response on a */
-/* non-warped frequency scale. (So that it can be implemented with a minimum-phase monic filter.) */
-/* Note: A monic filter is one with the first coefficient equal to 1.0. In Silk we omit the first */
-/* coefficient in an array of coefficients, for monic filters. */
-static OPUS_INLINE silk_float warped_gain(
- const silk_float *coefs,
- silk_float lambda,
- opus_int order
-) {
- opus_int i;
- silk_float gain;
-
- lambda = -lambda;
- gain = coefs[ order - 1 ];
- for( i = order - 2; i >= 0; i-- ) {
- gain = lambda * gain + coefs[ i ];
- }
- return (silk_float)( 1.0f / ( 1.0f - lambda * gain ) );
-}
-
-/* Convert warped filter coefficients to monic pseudo-warped coefficients and limit maximum */
-/* amplitude of monic warped coefficients by using bandwidth expansion on the true coefficients */
-static OPUS_INLINE void warped_true2monic_coefs(
- silk_float *coefs_syn,
- silk_float *coefs_ana,
- silk_float lambda,
- silk_float limit,
- opus_int order
-) {
- opus_int i, iter, ind = 0;
- silk_float tmp, maxabs, chirp, gain_syn, gain_ana;
-
- /* Convert to monic coefficients */
- for( i = order - 1; i > 0; i-- ) {
- coefs_syn[ i - 1 ] -= lambda * coefs_syn[ i ];
- coefs_ana[ i - 1 ] -= lambda * coefs_ana[ i ];
- }
- gain_syn = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_syn[ 0 ] );
- gain_ana = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_ana[ 0 ] );
- for( i = 0; i < order; i++ ) {
- coefs_syn[ i ] *= gain_syn;
- coefs_ana[ i ] *= gain_ana;
- }
-
- /* Limit */
- for( iter = 0; iter < 10; iter++ ) {
- /* Find maximum absolute value */
- maxabs = -1.0f;
- for( i = 0; i < order; i++ ) {
- tmp = silk_max( silk_abs_float( coefs_syn[ i ] ), silk_abs_float( coefs_ana[ i ] ) );
- if( tmp > maxabs ) {
- maxabs = tmp;
- ind = i;
- }
- }
- if( maxabs <= limit ) {
- /* Coefficients are within range - done */
- return;
- }
-
- /* Convert back to true warped coefficients */
- for( i = 1; i < order; i++ ) {
- coefs_syn[ i - 1 ] += lambda * coefs_syn[ i ];
- coefs_ana[ i - 1 ] += lambda * coefs_ana[ i ];
- }
- gain_syn = 1.0f / gain_syn;
- gain_ana = 1.0f / gain_ana;
- for( i = 0; i < order; i++ ) {
- coefs_syn[ i ] *= gain_syn;
- coefs_ana[ i ] *= gain_ana;
- }
-
- /* Apply bandwidth expansion */
- chirp = 0.99f - ( 0.8f + 0.1f * iter ) * ( maxabs - limit ) / ( maxabs * ( ind + 1 ) );
- silk_bwexpander_FLP( coefs_syn, order, chirp );
- silk_bwexpander_FLP( coefs_ana, order, chirp );
-
- /* Convert to monic warped coefficients */
- for( i = order - 1; i > 0; i-- ) {
- coefs_syn[ i - 1 ] -= lambda * coefs_syn[ i ];
- coefs_ana[ i - 1 ] -= lambda * coefs_ana[ i ];
- }
- gain_syn = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_syn[ 0 ] );
- gain_ana = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_ana[ 0 ] );
- for( i = 0; i < order; i++ ) {
- coefs_syn[ i ] *= gain_syn;
- coefs_ana[ i ] *= gain_ana;
- }
- }
- silk_assert( 0 );
-}
-
-/* Compute noise shaping coefficients and initial gain values */
-void silk_noise_shape_analysis_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- const silk_float *pitch_res, /* I LPC residual from pitch analysis */
- const silk_float *x /* I Input signal [frame_length + la_shape] */
-)
-{
- silk_shape_state_FLP *psShapeSt = &psEnc->sShape;
- opus_int k, nSamples;
- silk_float SNR_adj_dB, HarmBoost, HarmShapeGain, Tilt;
- silk_float nrg, pre_nrg, log_energy, log_energy_prev, energy_variation;
- silk_float delta, BWExp1, BWExp2, gain_mult, gain_add, strength, b, warping;
- silk_float x_windowed[ SHAPE_LPC_WIN_MAX ];
- silk_float auto_corr[ MAX_SHAPE_LPC_ORDER + 1 ];
- const silk_float *x_ptr, *pitch_res_ptr;
-
- /* Point to start of first LPC analysis block */
- x_ptr = x - psEnc->sCmn.la_shape;
-
- /****************/
- /* GAIN CONTROL */
- /****************/
- SNR_adj_dB = psEnc->sCmn.SNR_dB_Q7 * ( 1 / 128.0f );
-
- /* Input quality is the average of the quality in the lowest two VAD bands */
- psEncCtrl->input_quality = 0.5f * ( psEnc->sCmn.input_quality_bands_Q15[ 0 ] + psEnc->sCmn.input_quality_bands_Q15[ 1 ] ) * ( 1.0f / 32768.0f );
-
- /* Coding quality level, between 0.0 and 1.0 */
- psEncCtrl->coding_quality = silk_sigmoid( 0.25f * ( SNR_adj_dB - 20.0f ) );
-
- if( psEnc->sCmn.useCBR == 0 ) {
- /* Reduce coding SNR during low speech activity */
- b = 1.0f - psEnc->sCmn.speech_activity_Q8 * ( 1.0f / 256.0f );
- SNR_adj_dB -= BG_SNR_DECR_dB * psEncCtrl->coding_quality * ( 0.5f + 0.5f * psEncCtrl->input_quality ) * b * b;
- }
-
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Reduce gains for periodic signals */
- SNR_adj_dB += HARM_SNR_INCR_dB * psEnc->LTPCorr;
- } else {
- /* For unvoiced signals and low-quality input, adjust the quality slower than SNR_dB setting */
- SNR_adj_dB += ( -0.4f * psEnc->sCmn.SNR_dB_Q7 * ( 1 / 128.0f ) + 6.0f ) * ( 1.0f - psEncCtrl->input_quality );
- }
-
- /*************************/
- /* SPARSENESS PROCESSING */
- /*************************/
- /* Set quantizer offset */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Initially set to 0; may be overruled in process_gains(..) */
- psEnc->sCmn.indices.quantOffsetType = 0;
- psEncCtrl->sparseness = 0.0f;
- } else {
- /* Sparseness measure, based on relative fluctuations of energy per 2 milliseconds */
- nSamples = 2 * psEnc->sCmn.fs_kHz;
- energy_variation = 0.0f;
- log_energy_prev = 0.0f;
- pitch_res_ptr = pitch_res;
- for( k = 0; k < silk_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) / 2; k++ ) {
- nrg = ( silk_float )nSamples + ( silk_float )silk_energy_FLP( pitch_res_ptr, nSamples );
- log_energy = silk_log2( nrg );
- if( k > 0 ) {
- energy_variation += silk_abs_float( log_energy - log_energy_prev );
- }
- log_energy_prev = log_energy;
- pitch_res_ptr += nSamples;
- }
- psEncCtrl->sparseness = silk_sigmoid( 0.4f * ( energy_variation - 5.0f ) );
-
- /* Set quantization offset depending on sparseness measure */
- if( psEncCtrl->sparseness > SPARSENESS_THRESHOLD_QNT_OFFSET ) {
- psEnc->sCmn.indices.quantOffsetType = 0;
- } else {
- psEnc->sCmn.indices.quantOffsetType = 1;
- }
-
- /* Increase coding SNR for sparse signals */
- SNR_adj_dB += SPARSE_SNR_INCR_dB * ( psEncCtrl->sparseness - 0.5f );
- }
-
- /*******************************/
- /* Control bandwidth expansion */
- /*******************************/
- /* More BWE for signals with high prediction gain */
- strength = FIND_PITCH_WHITE_NOISE_FRACTION * psEncCtrl->predGain; /* between 0.0 and 1.0 */
- BWExp1 = BWExp2 = BANDWIDTH_EXPANSION / ( 1.0f + strength * strength );
- delta = LOW_RATE_BANDWIDTH_EXPANSION_DELTA * ( 1.0f - 0.75f * psEncCtrl->coding_quality );
- BWExp1 -= delta;
- BWExp2 += delta;
- /* BWExp1 will be applied after BWExp2, so make it relative */
- BWExp1 /= BWExp2;
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Slightly more warping in analysis will move quantization noise up in frequency, where it's better masked */
- warping = (silk_float)psEnc->sCmn.warping_Q16 / 65536.0f + 0.01f * psEncCtrl->coding_quality;
- } else {
- warping = 0.0f;
- }
-
- /********************************************/
- /* Compute noise shaping AR coefs and gains */
- /********************************************/
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- /* Apply window: sine slope followed by flat part followed by cosine slope */
- opus_int shift, slope_part, flat_part;
- flat_part = psEnc->sCmn.fs_kHz * 3;
- slope_part = ( psEnc->sCmn.shapeWinLength - flat_part ) / 2;
-
- silk_apply_sine_window_FLP( x_windowed, x_ptr, 1, slope_part );
- shift = slope_part;
- silk_memcpy( x_windowed + shift, x_ptr + shift, flat_part * sizeof(silk_float) );
- shift += flat_part;
- silk_apply_sine_window_FLP( x_windowed + shift, x_ptr + shift, 2, slope_part );
-
- /* Update pointer: next LPC analysis block */
- x_ptr += psEnc->sCmn.subfr_length;
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Calculate warped auto correlation */
- silk_warped_autocorrelation_FLP( auto_corr, x_windowed, warping,
- psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder );
- } else {
- /* Calculate regular auto correlation */
- silk_autocorrelation_FLP( auto_corr, x_windowed, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder + 1 );
- }
-
- /* Add white noise, as a fraction of energy */
- auto_corr[ 0 ] += auto_corr[ 0 ] * SHAPE_WHITE_NOISE_FRACTION;
-
- /* Convert correlations to prediction coefficients, and compute residual energy */
- nrg = silk_levinsondurbin_FLP( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], auto_corr, psEnc->sCmn.shapingLPCOrder );
- psEncCtrl->Gains[ k ] = ( silk_float )sqrt( nrg );
-
- if( psEnc->sCmn.warping_Q16 > 0 ) {
- /* Adjust gain for warping */
- psEncCtrl->Gains[ k ] *= warped_gain( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], warping, psEnc->sCmn.shapingLPCOrder );
- }
-
- /* Bandwidth expansion for synthesis filter shaping */
- silk_bwexpander_FLP( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder, BWExp2 );
-
- /* Compute noise shaping filter coefficients */
- silk_memcpy(
- &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ],
- &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ],
- psEnc->sCmn.shapingLPCOrder * sizeof( silk_float ) );
-
- /* Bandwidth expansion for analysis filter shaping */
- silk_bwexpander_FLP( &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder, BWExp1 );
-
- /* Ratio of prediction gains, in energy domain */
- pre_nrg = silk_LPC_inverse_pred_gain_FLP( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder );
- nrg = silk_LPC_inverse_pred_gain_FLP( &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder );
- psEncCtrl->GainsPre[ k ] = 1.0f - 0.7f * ( 1.0f - pre_nrg / nrg );
-
- /* Convert to monic warped prediction coefficients and limit absolute values */
- warped_true2monic_coefs( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ],
- warping, 3.999f, psEnc->sCmn.shapingLPCOrder );
- }
-
- /*****************/
- /* Gain tweaking */
- /*****************/
- /* Increase gains during low speech activity */
- gain_mult = (silk_float)pow( 2.0f, -0.16f * SNR_adj_dB );
- gain_add = (silk_float)pow( 2.0f, 0.16f * MIN_QGAIN_DB );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains[ k ] *= gain_mult;
- psEncCtrl->Gains[ k ] += gain_add;
- }
-
- gain_mult = 1.0f + INPUT_TILT + psEncCtrl->coding_quality * HIGH_RATE_INPUT_TILT;
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->GainsPre[ k ] *= gain_mult;
- }
-
- /************************************************/
- /* Control low-frequency shaping and noise tilt */
- /************************************************/
- /* Less low frequency shaping for noisy inputs */
- strength = LOW_FREQ_SHAPING * ( 1.0f + LOW_QUALITY_LOW_FREQ_SHAPING_DECR * ( psEnc->sCmn.input_quality_bands_Q15[ 0 ] * ( 1.0f / 32768.0f ) - 1.0f ) );
- strength *= psEnc->sCmn.speech_activity_Q8 * ( 1.0f / 256.0f );
- if( psEnc->sCmn.indices.signalType == 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])*/
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- b = 0.2f / psEnc->sCmn.fs_kHz + 3.0f / psEncCtrl->pitchL[ k ];
- psEncCtrl->LF_MA_shp[ k ] = -1.0f + b;
- psEncCtrl->LF_AR_shp[ k ] = 1.0f - b - b * strength;
- }
- Tilt = - HP_NOISE_COEF -
- (1 - HP_NOISE_COEF) * HARM_HP_NOISE_COEF * psEnc->sCmn.speech_activity_Q8 * ( 1.0f / 256.0f );
- } else {
- b = 1.3f / psEnc->sCmn.fs_kHz;
- psEncCtrl->LF_MA_shp[ 0 ] = -1.0f + b;
- psEncCtrl->LF_AR_shp[ 0 ] = 1.0f - b - b * strength * 0.6f;
- for( k = 1; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->LF_MA_shp[ k ] = psEncCtrl->LF_MA_shp[ 0 ];
- psEncCtrl->LF_AR_shp[ k ] = psEncCtrl->LF_AR_shp[ 0 ];
- }
- Tilt = -HP_NOISE_COEF;
- }
-
- /****************************/
- /* HARMONIC SHAPING CONTROL */
- /****************************/
- /* Control boosting of harmonic frequencies */
- HarmBoost = LOW_RATE_HARMONIC_BOOST * ( 1.0f - psEncCtrl->coding_quality ) * psEnc->LTPCorr;
-
- /* More harmonic boost for noisy input signals */
- HarmBoost += LOW_INPUT_QUALITY_HARMONIC_BOOST * ( 1.0f - psEncCtrl->input_quality );
-
- if( USE_HARM_SHAPING && psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- /* Harmonic noise shaping */
- HarmShapeGain = HARMONIC_SHAPING;
-
- /* More harmonic noise shaping for high bitrates or noisy input */
- HarmShapeGain += HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING *
- ( 1.0f - ( 1.0f - psEncCtrl->coding_quality ) * psEncCtrl->input_quality );
-
- /* Less harmonic noise shaping for less periodic signals */
- HarmShapeGain *= ( silk_float )sqrt( psEnc->LTPCorr );
- } else {
- HarmShapeGain = 0.0f;
- }
-
- /*************************/
- /* Smooth over subframes */
- /*************************/
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psShapeSt->HarmBoost_smth += SUBFR_SMTH_COEF * ( HarmBoost - psShapeSt->HarmBoost_smth );
- psEncCtrl->HarmBoost[ k ] = psShapeSt->HarmBoost_smth;
- psShapeSt->HarmShapeGain_smth += SUBFR_SMTH_COEF * ( HarmShapeGain - psShapeSt->HarmShapeGain_smth );
- psEncCtrl->HarmShapeGain[ k ] = psShapeSt->HarmShapeGain_smth;
- psShapeSt->Tilt_smth += SUBFR_SMTH_COEF * ( Tilt - psShapeSt->Tilt_smth );
- psEncCtrl->Tilt[ k ] = psShapeSt->Tilt_smth;
- }
-}
diff --git a/drivers/opus/silk/float/pitch_analysis_core_FLP.c b/drivers/opus/silk/float/pitch_analysis_core_FLP.c
deleted file mode 100644
index 6a48ae498c..0000000000
--- a/drivers/opus/silk/float/pitch_analysis_core_FLP.c
+++ /dev/null
@@ -1,627 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/*****************************************************************************
-* Pitch analyser function
-******************************************************************************/
-#include "opus/silk/float/SigProc_FLP.h"
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/pitch_est_defines.h"
-#include "opus/celt/pitch.h"
-
-#define SCRATCH_SIZE 22
-
-/************************************************************/
-/* Internally used functions */
-/************************************************************/
-static void silk_P_Ana_calc_corr_st3(
- silk_float cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
- const silk_float frame[], /* I vector to correlate */
- opus_int start_lag, /* I start lag */
- opus_int sf_length, /* I sub frame length */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity, /* I Complexity setting */
- int arch /* I Run-time architecture */
-);
-
-static void silk_P_Ana_calc_energy_st3(
- silk_float energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
- const silk_float frame[], /* I vector to correlate */
- opus_int start_lag, /* I start lag */
- opus_int sf_length, /* I sub frame length */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity /* I Complexity setting */
-);
-
-/************************************************************/
-/* CORE PITCH ANALYSIS FUNCTION */
-/************************************************************/
-opus_int silk_pitch_analysis_core_FLP( /* O Voicing estimate: 0 voiced, 1 unvoiced */
- const silk_float *frame, /* I Signal of length PE_FRAME_LENGTH_MS*Fs_kHz */
- opus_int *pitch_out, /* O Pitch lag values [nb_subfr] */
- opus_int16 *lagIndex, /* O Lag Index */
- opus_int8 *contourIndex, /* O Pitch contour Index */
- silk_float *LTPCorr, /* I/O Normalized correlation; input: value from previous frame */
- opus_int prevLag, /* I Last lag of previous frame; set to zero is unvoiced */
- const silk_float search_thres1, /* I First stage threshold for lag candidates 0 - 1 */
- const silk_float search_thres2, /* I Final threshold for lag candidates 0 - 1 */
- const opus_int Fs_kHz, /* I sample frequency (kHz) */
- const opus_int complexity, /* I Complexity setting, 0-2, where 2 is highest */
- const opus_int nb_subfr, /* I Number of 5 ms subframes */
- int arch /* I Run-time architecture */
-)
-{
- opus_int i, k, d, j;
- silk_float frame_8kHz[ PE_MAX_FRAME_LENGTH_MS * 8 ];
- silk_float frame_4kHz[ PE_MAX_FRAME_LENGTH_MS * 4 ];
- opus_int16 frame_8_FIX[ PE_MAX_FRAME_LENGTH_MS * 8 ];
- opus_int16 frame_4_FIX[ PE_MAX_FRAME_LENGTH_MS * 4 ];
- opus_int32 filt_state[ 6 ];
- silk_float threshold, contour_bias;
- silk_float C[ PE_MAX_NB_SUBFR][ (PE_MAX_LAG >> 1) + 5 ];
- opus_val32 xcorr[ PE_MAX_LAG_MS * 4 - PE_MIN_LAG_MS * 4 + 1 ];
- silk_float CC[ PE_NB_CBKS_STAGE2_EXT ];
- const silk_float *target_ptr, *basis_ptr;
- double cross_corr, normalizer, energy, energy_tmp;
- opus_int d_srch[ PE_D_SRCH_LENGTH ];
- opus_int16 d_comp[ (PE_MAX_LAG >> 1) + 5 ];
- opus_int length_d_srch, length_d_comp;
- silk_float Cmax, CCmax, CCmax_b, CCmax_new_b, CCmax_new;
- opus_int CBimax, CBimax_new, lag, start_lag, end_lag, lag_new;
- opus_int cbk_size;
- silk_float lag_log2, prevLag_log2, delta_lag_log2_sqr;
- silk_float energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ];
- silk_float cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ];
- opus_int lag_counter;
- opus_int frame_length, frame_length_8kHz, frame_length_4kHz;
- opus_int sf_length, sf_length_8kHz, sf_length_4kHz;
- opus_int min_lag, min_lag_8kHz, min_lag_4kHz;
- opus_int max_lag, max_lag_8kHz, max_lag_4kHz;
- opus_int nb_cbk_search;
- const opus_int8 *Lag_CB_ptr;
-
- /* Check for valid sampling frequency */
- silk_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 );
-
- /* Check for valid complexity setting */
- silk_assert( complexity >= SILK_PE_MIN_COMPLEX );
- silk_assert( complexity <= SILK_PE_MAX_COMPLEX );
-
- silk_assert( search_thres1 >= 0.0f && search_thres1 <= 1.0f );
- silk_assert( search_thres2 >= 0.0f && search_thres2 <= 1.0f );
-
- /* Set up frame lengths max / min lag for the sampling frequency */
- frame_length = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * Fs_kHz;
- frame_length_4kHz = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * 4;
- frame_length_8kHz = ( PE_LTP_MEM_LENGTH_MS + nb_subfr * PE_SUBFR_LENGTH_MS ) * 8;
- sf_length = PE_SUBFR_LENGTH_MS * Fs_kHz;
- sf_length_4kHz = PE_SUBFR_LENGTH_MS * 4;
- sf_length_8kHz = PE_SUBFR_LENGTH_MS * 8;
- min_lag = PE_MIN_LAG_MS * Fs_kHz;
- min_lag_4kHz = PE_MIN_LAG_MS * 4;
- min_lag_8kHz = PE_MIN_LAG_MS * 8;
- max_lag = PE_MAX_LAG_MS * Fs_kHz - 1;
- max_lag_4kHz = PE_MAX_LAG_MS * 4;
- max_lag_8kHz = PE_MAX_LAG_MS * 8 - 1;
-
- /* Resample from input sampled at Fs_kHz to 8 kHz */
- if( Fs_kHz == 16 ) {
- /* Resample to 16 -> 8 khz */
- opus_int16 frame_16_FIX[ 16 * PE_MAX_FRAME_LENGTH_MS ];
- silk_float2short_array( frame_16_FIX, frame, frame_length );
- silk_memset( filt_state, 0, 2 * sizeof( opus_int32 ) );
- silk_resampler_down2( filt_state, frame_8_FIX, frame_16_FIX, frame_length );
- silk_short2float_array( frame_8kHz, frame_8_FIX, frame_length_8kHz );
- } else if( Fs_kHz == 12 ) {
- /* Resample to 12 -> 8 khz */
- opus_int16 frame_12_FIX[ 12 * PE_MAX_FRAME_LENGTH_MS ];
- silk_float2short_array( frame_12_FIX, frame, frame_length );
- silk_memset( filt_state, 0, 6 * sizeof( opus_int32 ) );
- silk_resampler_down2_3( filt_state, frame_8_FIX, frame_12_FIX, frame_length );
- silk_short2float_array( frame_8kHz, frame_8_FIX, frame_length_8kHz );
- } else {
- silk_assert( Fs_kHz == 8 );
- silk_float2short_array( frame_8_FIX, frame, frame_length_8kHz );
- }
-
- /* Decimate again to 4 kHz */
- silk_memset( filt_state, 0, 2 * sizeof( opus_int32 ) );
- silk_resampler_down2( filt_state, frame_4_FIX, frame_8_FIX, frame_length_8kHz );
- silk_short2float_array( frame_4kHz, frame_4_FIX, frame_length_4kHz );
-
- /* Low-pass filter */
- for( i = frame_length_4kHz - 1; i > 0; i-- ) {
- frame_4kHz[ i ] += frame_4kHz[ i - 1 ];
- }
-
- /******************************************************************************
- * FIRST STAGE, operating in 4 khz
- ******************************************************************************/
- silk_memset(C, 0, sizeof(silk_float) * nb_subfr * ((PE_MAX_LAG >> 1) + 5));
- target_ptr = &frame_4kHz[ silk_LSHIFT( sf_length_4kHz, 2 ) ];
- for( k = 0; k < nb_subfr >> 1; k++ ) {
- /* Check that we are within range of the array */
- silk_assert( target_ptr >= frame_4kHz );
- silk_assert( target_ptr + sf_length_8kHz <= frame_4kHz + frame_length_4kHz );
-
- basis_ptr = target_ptr - min_lag_4kHz;
-
- /* Check that we are within range of the array */
- silk_assert( basis_ptr >= frame_4kHz );
- silk_assert( basis_ptr + sf_length_8kHz <= frame_4kHz + frame_length_4kHz );
-
- celt_pitch_xcorr( target_ptr, target_ptr-max_lag_4kHz, xcorr, sf_length_8kHz, max_lag_4kHz - min_lag_4kHz + 1, arch );
-
- /* Calculate first vector products before loop */
- cross_corr = xcorr[ max_lag_4kHz - min_lag_4kHz ];
- normalizer = silk_energy_FLP( target_ptr, sf_length_8kHz ) +
- silk_energy_FLP( basis_ptr, sf_length_8kHz ) +
- sf_length_8kHz * 4000.0f;
-
- C[ 0 ][ min_lag_4kHz ] += (silk_float)( 2 * cross_corr / normalizer );
-
- /* 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 */
- silk_assert( basis_ptr >= frame_4kHz );
- silk_assert( basis_ptr + sf_length_8kHz <= frame_4kHz + frame_length_4kHz );
-
- cross_corr = xcorr[ max_lag_4kHz - d ];
-
- /* Add contribution of new sample and remove contribution from oldest sample */
- normalizer +=
- basis_ptr[ 0 ] * (double)basis_ptr[ 0 ] -
- basis_ptr[ sf_length_8kHz ] * (double)basis_ptr[ sf_length_8kHz ];
- C[ 0 ][ d ] += (silk_float)( 2 * cross_corr / normalizer );
- }
- /* Update target pointer */
- target_ptr += sf_length_8kHz;
- }
-
- /* Apply short-lag bias */
- for( i = max_lag_4kHz; i >= min_lag_4kHz; i-- ) {
- C[ 0 ][ i ] -= C[ 0 ][ i ] * i / 4096.0f;
- }
-
- /* Sort */
- length_d_srch = 4 + 2 * complexity;
- silk_assert( 3 * length_d_srch <= PE_D_SRCH_LENGTH );
- silk_insertion_sort_decreasing_FLP( &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 */
- Cmax = C[ 0 ][ min_lag_4kHz ];
- if( Cmax < 0.2f ) {
- silk_memset( pitch_out, 0, nb_subfr * sizeof( opus_int ) );
- *LTPCorr = 0.0f;
- *lagIndex = 0;
- *contourIndex = 0;
- return 1;
- }
-
- threshold = search_thres1 * 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 ] = silk_LSHIFT( d_srch[ i ] + min_lag_4kHz, 1 );
- } else {
- length_d_srch = i;
- break;
- }
- }
- silk_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 ] = (opus_int16)( i - 2 );
- length_d_comp++;
- }
- }
-
- /**********************************************************************************
- ** SECOND STAGE, operating at 8 kHz, on lag sections with high correlation
- *************************************************************************************/
- /*********************************************************************************
- * Find energy of each subframe projected onto its history, for a range of delays
- *********************************************************************************/
- silk_memset( C, 0, PE_MAX_NB_SUBFR*((PE_MAX_LAG >> 1) + 5) * sizeof(silk_float));
-
- if( Fs_kHz == 8 ) {
- target_ptr = &frame[ PE_LTP_MEM_LENGTH_MS * 8 ];
- } else {
- target_ptr = &frame_8kHz[ PE_LTP_MEM_LENGTH_MS * 8 ];
- }
- for( k = 0; k < nb_subfr; k++ ) {
- energy_tmp = silk_energy_FLP( target_ptr, sf_length_8kHz ) + 1.0;
- for( j = 0; j < length_d_comp; j++ ) {
- d = d_comp[ j ];
- basis_ptr = target_ptr - d;
- cross_corr = silk_inner_product_FLP( basis_ptr, target_ptr, sf_length_8kHz );
- if( cross_corr > 0.0f ) {
- energy = silk_energy_FLP( basis_ptr, sf_length_8kHz );
- C[ k ][ d ] = (silk_float)( 2 * cross_corr / ( energy + energy_tmp ) );
- } else {
- C[ k ][ d ] = 0.0f;
- }
- }
- target_ptr += sf_length_8kHz;
- }
-
- /* search over lag range and lags codebook */
- /* scale factor for lag codebook, as a function of center lag */
-
- CCmax = 0.0f; /* This value doesn't matter */
- CCmax_b = -1000.0f;
-
- 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 = silk_LSHIFT( prevLag, 1 ) / 3;
- } else if( Fs_kHz == 16 ) {
- prevLag = silk_RSHIFT( prevLag, 1 );
- }
- prevLag_log2 = silk_log2( (silk_float)prevLag );
- } else {
- prevLag_log2 = 0;
- }
-
- /* Set up stage 2 codebook based on number of subframes */
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- cbk_size = PE_NB_CBKS_STAGE2_EXT;
- Lag_CB_ptr = &silk_CB_lags_stage2[ 0 ][ 0 ];
- if( Fs_kHz == 8 && complexity > SILK_PE_MIN_COMPLEX ) {
- /* If input is 8 khz use a larger codebook here because it is last stage */
- nb_cbk_search = PE_NB_CBKS_STAGE2_EXT;
- } else {
- nb_cbk_search = PE_NB_CBKS_STAGE2;
- }
- } else {
- cbk_size = PE_NB_CBKS_STAGE2_10MS;
- Lag_CB_ptr = &silk_CB_lags_stage2_10_ms[ 0 ][ 0 ];
- nb_cbk_search = PE_NB_CBKS_STAGE2_10MS;
- }
-
- for( k = 0; k < length_d_srch; k++ ) {
- d = d_srch[ k ];
- for( j = 0; j < nb_cbk_search; j++ ) {
- CC[j] = 0.0f;
- for( i = 0; i < nb_subfr; i++ ) {
- /* Try all codebooks */
- CC[ j ] += C[ i ][ d + matrix_ptr( Lag_CB_ptr, i, j, cbk_size )];
- }
- }
- /* Find best codebook */
- CCmax_new = -1000.0f;
- CBimax_new = 0;
- for( i = 0; i < nb_cbk_search; i++ ) {
- if( CC[ i ] > CCmax_new ) {
- CCmax_new = CC[ i ];
- CBimax_new = i;
- }
- }
-
- /* Bias towards shorter lags */
- lag_log2 = silk_log2( (silk_float)d );
- CCmax_new_b = CCmax_new - PE_SHORTLAG_BIAS * nb_subfr * lag_log2;
-
- /* Bias towards previous lag */
- if( prevLag > 0 ) {
- delta_lag_log2_sqr = lag_log2 - prevLag_log2;
- delta_lag_log2_sqr *= delta_lag_log2_sqr;
- CCmax_new_b -= PE_PREVLAG_BIAS * nb_subfr * (*LTPCorr) * delta_lag_log2_sqr / ( delta_lag_log2_sqr + 0.5f );
- }
-
- if( CCmax_new_b > CCmax_b && /* Find maximum biased correlation */
- CCmax_new > nb_subfr * search_thres2 /* Correlation needs to be high enough to be voiced */
- ) {
- CCmax_b = CCmax_new_b;
- CCmax = CCmax_new;
- lag = d;
- CBimax = CBimax_new;
- }
- }
-
- if( lag == -1 ) {
- /* No suitable candidate found */
- silk_memset( pitch_out, 0, PE_MAX_NB_SUBFR * sizeof(opus_int) );
- *LTPCorr = 0.0f;
- *lagIndex = 0;
- *contourIndex = 0;
- return 1;
- }
-
- /* Output normalized correlation */
- *LTPCorr = (silk_float)( CCmax / nb_subfr );
- silk_assert( *LTPCorr >= 0.0f );
-
- if( Fs_kHz > 8 ) {
- /* Search in original signal */
-
- /* Compensate for decimation */
- silk_assert( lag == silk_SAT16( lag ) );
- if( Fs_kHz == 12 ) {
- lag = silk_RSHIFT_ROUND( silk_SMULBB( lag, 3 ), 1 );
- } else { /* Fs_kHz == 16 */
- lag = silk_LSHIFT( lag, 1 );
- }
-
- lag = silk_LIMIT_int( lag, min_lag, max_lag );
- start_lag = silk_max_int( lag - 2, min_lag );
- end_lag = silk_min_int( lag + 2, max_lag );
- lag_new = lag; /* to avoid undefined lag */
- CBimax = 0; /* to avoid undefined lag */
-
- CCmax = -1000.0f;
-
- /* Calculate the correlations and energies needed in stage 3 */
- silk_P_Ana_calc_corr_st3( cross_corr_st3, frame, start_lag, sf_length, nb_subfr, complexity, arch );
- silk_P_Ana_calc_energy_st3( energies_st3, frame, start_lag, sf_length, nb_subfr, complexity );
-
- lag_counter = 0;
- silk_assert( lag == silk_SAT16( lag ) );
- contour_bias = PE_FLATCONTOUR_BIAS / lag;
-
- /* Set up cbk parameters according to complexity setting and frame length */
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- nb_cbk_search = (opus_int)silk_nb_cbk_searchs_stage3[ complexity ];
- cbk_size = PE_NB_CBKS_STAGE3_MAX;
- Lag_CB_ptr = &silk_CB_lags_stage3[ 0 ][ 0 ];
- } else {
- nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
- cbk_size = PE_NB_CBKS_STAGE3_10MS;
- Lag_CB_ptr = &silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
- }
-
- target_ptr = &frame[ PE_LTP_MEM_LENGTH_MS * Fs_kHz ];
- energy_tmp = silk_energy_FLP( target_ptr, nb_subfr * sf_length ) + 1.0;
- for( d = start_lag; d <= end_lag; d++ ) {
- for( j = 0; j < nb_cbk_search; j++ ) {
- cross_corr = 0.0;
- energy = energy_tmp;
- for( k = 0; k < nb_subfr; k++ ) {
- cross_corr += cross_corr_st3[ k ][ j ][ lag_counter ];
- energy += energies_st3[ k ][ j ][ lag_counter ];
- }
- if( cross_corr > 0.0 ) {
- CCmax_new = (silk_float)( 2 * cross_corr / energy );
- /* Reduce depending on flatness of contour */
- CCmax_new *= 1.0f - contour_bias * j;
- } else {
- CCmax_new = 0.0f;
- }
-
- if( CCmax_new > CCmax && ( d + (opus_int)silk_CB_lags_stage3[ 0 ][ j ] ) <= max_lag ) {
- CCmax = CCmax_new;
- lag_new = d;
- CBimax = j;
- }
- }
- lag_counter++;
- }
-
- for( k = 0; k < nb_subfr; k++ ) {
- pitch_out[ k ] = lag_new + matrix_ptr( Lag_CB_ptr, k, CBimax, cbk_size );
- pitch_out[ k ] = silk_LIMIT( pitch_out[ k ], min_lag, PE_MAX_LAG_MS * Fs_kHz );
- }
- *lagIndex = (opus_int16)( lag_new - min_lag );
- *contourIndex = (opus_int8)CBimax;
- } else { /* Fs_kHz == 8 */
- /* Save Lags */
- for( k = 0; k < nb_subfr; k++ ) {
- pitch_out[ k ] = lag + matrix_ptr( Lag_CB_ptr, k, CBimax, cbk_size );
- pitch_out[ k ] = silk_LIMIT( pitch_out[ k ], min_lag_8kHz, PE_MAX_LAG_MS * 8 );
- }
- *lagIndex = (opus_int16)( lag - min_lag_8kHz );
- *contourIndex = (opus_int8)CBimax;
- }
- silk_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),
- * the following correlations are needed in each sub frame:
- *
- * sf1: lag range [-8,...,7] total 16 correlations
- * sf2: lag range [-4,...,4] total 9 correlations
- * sf3: lag range [-3,....4] total 8 correltions
- * sf4: lag range [-6,....8] total 15 correlations
- *
- * In total 48 correlations. The direct implementation computed in worst
- * case 4*12*5 = 240 correlations, but more likely around 120.
- ***********************************************************************/
-static void silk_P_Ana_calc_corr_st3(
- silk_float cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
- const silk_float frame[], /* I vector to correlate */
- opus_int start_lag, /* I start lag */
- opus_int sf_length, /* I sub frame length */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity, /* I Complexity setting */
- int arch /* I Run-time architecture */
-)
-{
- const silk_float *target_ptr;
- opus_int i, j, k, lag_counter, lag_low, lag_high;
- opus_int nb_cbk_search, delta, idx, cbk_size;
- silk_float scratch_mem[ SCRATCH_SIZE ];
- opus_val32 xcorr[ SCRATCH_SIZE ];
- const opus_int8 *Lag_range_ptr, *Lag_CB_ptr;
-
- silk_assert( complexity >= SILK_PE_MIN_COMPLEX );
- silk_assert( complexity <= SILK_PE_MAX_COMPLEX );
-
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- Lag_range_ptr = &silk_Lag_range_stage3[ complexity ][ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3[ 0 ][ 0 ];
- nb_cbk_search = silk_nb_cbk_searchs_stage3[ complexity ];
- cbk_size = PE_NB_CBKS_STAGE3_MAX;
- } else {
- silk_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1);
- Lag_range_ptr = &silk_Lag_range_stage3_10_ms[ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
- nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
- cbk_size = PE_NB_CBKS_STAGE3_10MS;
- }
-
- target_ptr = &frame[ silk_LSHIFT( sf_length, 2 ) ]; /* Pointer to middle of frame */
- for( k = 0; k < nb_subfr; k++ ) {
- lag_counter = 0;
-
- /* Calculate the correlations for each subframe */
- lag_low = matrix_ptr( Lag_range_ptr, k, 0, 2 );
- lag_high = matrix_ptr( Lag_range_ptr, k, 1, 2 );
- silk_assert(lag_high-lag_low+1 <= SCRATCH_SIZE);
- celt_pitch_xcorr( target_ptr, target_ptr - start_lag - lag_high, xcorr, sf_length, lag_high - lag_low + 1, arch );
- for( j = lag_low; j <= lag_high; j++ ) {
- silk_assert( lag_counter < SCRATCH_SIZE );
- scratch_mem[ lag_counter ] = xcorr[ lag_high - j ];
- lag_counter++;
- }
-
- delta = matrix_ptr( Lag_range_ptr, k, 0, 2 );
- for( i = 0; i < nb_cbk_search; i++ ) {
- /* Fill out the 3 dim array that stores the correlations for */
- /* each code_book vector for each start lag */
- idx = matrix_ptr( Lag_CB_ptr, k, i, cbk_size ) - delta;
- for( j = 0; j < PE_NB_STAGE3_LAGS; j++ ) {
- silk_assert( idx + j < SCRATCH_SIZE );
- silk_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. */
-/********************************************************************/
-static void silk_P_Ana_calc_energy_st3(
- silk_float energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ], /* O 3 DIM correlation array */
- const silk_float frame[], /* I vector to correlate */
- opus_int start_lag, /* I start lag */
- opus_int sf_length, /* I sub frame length */
- opus_int nb_subfr, /* I number of subframes */
- opus_int complexity /* I Complexity setting */
-)
-{
- const silk_float *target_ptr, *basis_ptr;
- double energy;
- opus_int k, i, j, lag_counter;
- opus_int nb_cbk_search, delta, idx, cbk_size, lag_diff;
- silk_float scratch_mem[ SCRATCH_SIZE ];
- const opus_int8 *Lag_range_ptr, *Lag_CB_ptr;
-
- silk_assert( complexity >= SILK_PE_MIN_COMPLEX );
- silk_assert( complexity <= SILK_PE_MAX_COMPLEX );
-
- if( nb_subfr == PE_MAX_NB_SUBFR ) {
- Lag_range_ptr = &silk_Lag_range_stage3[ complexity ][ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3[ 0 ][ 0 ];
- nb_cbk_search = silk_nb_cbk_searchs_stage3[ complexity ];
- cbk_size = PE_NB_CBKS_STAGE3_MAX;
- } else {
- silk_assert( nb_subfr == PE_MAX_NB_SUBFR >> 1);
- Lag_range_ptr = &silk_Lag_range_stage3_10_ms[ 0 ][ 0 ];
- Lag_CB_ptr = &silk_CB_lags_stage3_10_ms[ 0 ][ 0 ];
- nb_cbk_search = PE_NB_CBKS_STAGE3_10MS;
- cbk_size = PE_NB_CBKS_STAGE3_10MS;
- }
-
- target_ptr = &frame[ silk_LSHIFT( sf_length, 2 ) ];
- for( k = 0; k < nb_subfr; k++ ) {
- lag_counter = 0;
-
- /* Calculate the energy for first lag */
- basis_ptr = target_ptr - ( start_lag + matrix_ptr( Lag_range_ptr, k, 0, 2 ) );
- energy = silk_energy_FLP( basis_ptr, sf_length ) + 1e-3;
- silk_assert( energy >= 0.0 );
- scratch_mem[lag_counter] = (silk_float)energy;
- lag_counter++;
-
- lag_diff = ( matrix_ptr( Lag_range_ptr, k, 1, 2 ) - matrix_ptr( Lag_range_ptr, k, 0, 2 ) + 1 );
- for( i = 1; i < lag_diff; i++ ) {
- /* remove part outside new window */
- energy -= basis_ptr[sf_length - i] * (double)basis_ptr[sf_length - i];
- silk_assert( energy >= 0.0 );
-
- /* add part that comes into window */
- energy += basis_ptr[ -i ] * (double)basis_ptr[ -i ];
- silk_assert( energy >= 0.0 );
- silk_assert( lag_counter < SCRATCH_SIZE );
- scratch_mem[lag_counter] = (silk_float)energy;
- lag_counter++;
- }
-
- delta = matrix_ptr( Lag_range_ptr, k, 0, 2 );
- for( i = 0; i < nb_cbk_search; i++ ) {
- /* Fill out the 3 dim array that stores the correlations for */
- /* each code_book vector for each start lag */
- idx = matrix_ptr( Lag_CB_ptr, k, i, cbk_size ) - delta;
- for( j = 0; j < PE_NB_STAGE3_LAGS; j++ ) {
- silk_assert( idx + j < SCRATCH_SIZE );
- silk_assert( idx + j < lag_counter );
- energies_st3[ k ][ i ][ j ] = scratch_mem[ idx + j ];
- silk_assert( energies_st3[ k ][ i ][ j ] >= 0.0f );
- }
- }
- target_ptr += sf_length;
- }
-}
diff --git a/drivers/opus/silk/float/prefilter_FLP.c b/drivers/opus/silk/float/prefilter_FLP.c
deleted file mode 100644
index 0857888b91..0000000000
--- a/drivers/opus/silk/float/prefilter_FLP.c
+++ /dev/null
@@ -1,203 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-#include "opus/silk/tuning_parameters.h"
-
-/*
-* Prefilter for finding Quantizer input signal
-*/
-static OPUS_INLINE void silk_prefilt_FLP(
- silk_prefilter_state_FLP *P, /* I/O state */
- silk_float st_res[], /* I */
- silk_float xw[], /* O */
- silk_float *HarmShapeFIR, /* I */
- silk_float Tilt, /* I */
- silk_float LF_MA_shp, /* I */
- silk_float LF_AR_shp, /* I */
- opus_int lag, /* I */
- opus_int length /* I */
-);
-
-static void silk_warped_LPC_analysis_filter_FLP(
- silk_float state[], /* I/O State [order + 1] */
- silk_float res[], /* O Residual signal [length] */
- const silk_float coef[], /* I Coefficients [order] */
- const silk_float input[], /* I Input signal [length] */
- const silk_float lambda, /* I Warping factor */
- const opus_int length, /* I Length of input signal */
- const opus_int order /* I Filter order (even) */
-)
-{
- opus_int n, i;
- silk_float acc, tmp1, tmp2;
-
- /* Order must be even */
- silk_assert( ( order & 1 ) == 0 );
-
- for( n = 0; n < length; n++ ) {
- /* Output of lowpass section */
- tmp2 = state[ 0 ] + lambda * state[ 1 ];
- state[ 0 ] = input[ n ];
- /* Output of allpass section */
- tmp1 = state[ 1 ] + lambda * ( state[ 2 ] - tmp2 );
- state[ 1 ] = tmp2;
- acc = coef[ 0 ] * tmp2;
- /* Loop over allpass sections */
- for( i = 2; i < order; i += 2 ) {
- /* Output of allpass section */
- tmp2 = state[ i ] + lambda * ( state[ i + 1 ] - tmp1 );
- state[ i ] = tmp1;
- acc += coef[ i - 1 ] * tmp1;
- /* Output of allpass section */
- tmp1 = state[ i + 1 ] + lambda * ( state[ i + 2 ] - tmp2 );
- state[ i + 1 ] = tmp2;
- acc += coef[ i ] * tmp2;
- }
- state[ order ] = tmp1;
- acc += coef[ order - 1 ] * tmp1;
- res[ n ] = input[ n ] - acc;
- }
-}
-
-/*
-* silk_prefilter. Main prefilter function
-*/
-void silk_prefilter_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- const silk_encoder_control_FLP *psEncCtrl, /* I Encoder control FLP */
- silk_float xw[], /* O Weighted signal */
- const silk_float x[] /* I Speech signal */
-)
-{
- silk_prefilter_state_FLP *P = &psEnc->sPrefilt;
- opus_int j, k, lag;
- silk_float HarmShapeGain, Tilt, LF_MA_shp, LF_AR_shp;
- silk_float B[ 2 ];
- const silk_float *AR1_shp;
- const silk_float *px;
- silk_float *pxw;
- silk_float HarmShapeFIR[ 3 ];
- silk_float st_res[ MAX_SUB_FRAME_LENGTH + MAX_LPC_ORDER ];
-
- /* Set up pointers */
- px = x;
- pxw = xw;
- lag = P->lagPrev;
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- /* Update Variables that change per sub frame */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- lag = psEncCtrl->pitchL[ k ];
- }
-
- /* Noise shape parameters */
- HarmShapeGain = psEncCtrl->HarmShapeGain[ k ] * ( 1.0f - psEncCtrl->HarmBoost[ k ] );
- HarmShapeFIR[ 0 ] = 0.25f * HarmShapeGain;
- HarmShapeFIR[ 1 ] = 32767.0f / 65536.0f * HarmShapeGain;
- HarmShapeFIR[ 2 ] = 0.25f * HarmShapeGain;
- Tilt = psEncCtrl->Tilt[ k ];
- LF_MA_shp = psEncCtrl->LF_MA_shp[ k ];
- LF_AR_shp = psEncCtrl->LF_AR_shp[ k ];
- AR1_shp = &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ];
-
- /* Short term FIR filtering */
- silk_warped_LPC_analysis_filter_FLP( P->sAR_shp, st_res, AR1_shp, px,
- (silk_float)psEnc->sCmn.warping_Q16 / 65536.0f, psEnc->sCmn.subfr_length, psEnc->sCmn.shapingLPCOrder );
-
- /* Reduce (mainly) low frequencies during harmonic emphasis */
- B[ 0 ] = psEncCtrl->GainsPre[ k ];
- B[ 1 ] = -psEncCtrl->GainsPre[ k ] *
- ( psEncCtrl->HarmBoost[ k ] * HarmShapeGain + INPUT_TILT + psEncCtrl->coding_quality * HIGH_RATE_INPUT_TILT );
- pxw[ 0 ] = B[ 0 ] * st_res[ 0 ] + B[ 1 ] * P->sHarmHP;
- for( j = 1; j < psEnc->sCmn.subfr_length; j++ ) {
- pxw[ j ] = B[ 0 ] * st_res[ j ] + B[ 1 ] * st_res[ j - 1 ];
- }
- P->sHarmHP = st_res[ psEnc->sCmn.subfr_length - 1 ];
-
- silk_prefilt_FLP( P, pxw, pxw, HarmShapeFIR, Tilt, LF_MA_shp, LF_AR_shp, lag, psEnc->sCmn.subfr_length );
-
- px += psEnc->sCmn.subfr_length;
- pxw += psEnc->sCmn.subfr_length;
- }
- P->lagPrev = psEncCtrl->pitchL[ psEnc->sCmn.nb_subfr - 1 ];
-}
-
-/*
-* Prefilter for finding Quantizer input signal
-*/
-static OPUS_INLINE void silk_prefilt_FLP(
- silk_prefilter_state_FLP *P, /* I/O state */
- silk_float st_res[], /* I */
- silk_float xw[], /* O */
- silk_float *HarmShapeFIR, /* I */
- silk_float Tilt, /* I */
- silk_float LF_MA_shp, /* I */
- silk_float LF_AR_shp, /* I */
- opus_int lag, /* I */
- opus_int length /* I */
-)
-{
- opus_int i;
- opus_int idx, LTP_shp_buf_idx;
- silk_float n_Tilt, n_LF, n_LTP;
- silk_float sLF_AR_shp, sLF_MA_shp;
- silk_float *LTP_shp_buf;
-
- /* To speed up use temp variables instead of using the struct */
- LTP_shp_buf = P->sLTP_shp;
- LTP_shp_buf_idx = P->sLTP_shp_buf_idx;
- sLF_AR_shp = P->sLF_AR_shp;
- sLF_MA_shp = P->sLF_MA_shp;
-
- for( i = 0; i < length; i++ ) {
- if( lag > 0 ) {
- silk_assert( HARM_SHAPE_FIR_TAPS == 3 );
- idx = lag + LTP_shp_buf_idx;
- n_LTP = LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 - 1) & LTP_MASK ] * HarmShapeFIR[ 0 ];
- n_LTP += LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 ) & LTP_MASK ] * HarmShapeFIR[ 1 ];
- n_LTP += LTP_shp_buf[ ( idx - HARM_SHAPE_FIR_TAPS / 2 + 1) & LTP_MASK ] * HarmShapeFIR[ 2 ];
- } else {
- n_LTP = 0;
- }
-
- n_Tilt = sLF_AR_shp * Tilt;
- n_LF = sLF_AR_shp * LF_AR_shp + sLF_MA_shp * LF_MA_shp;
-
- sLF_AR_shp = st_res[ i ] - n_Tilt;
- sLF_MA_shp = sLF_AR_shp - n_LF;
-
- LTP_shp_buf_idx = ( LTP_shp_buf_idx - 1 ) & LTP_MASK;
- LTP_shp_buf[ LTP_shp_buf_idx ] = sLF_MA_shp;
-
- xw[ i ] = sLF_MA_shp - n_LTP;
- }
- /* Copy temp variable back to state */
- P->sLF_AR_shp = sLF_AR_shp;
- P->sLF_MA_shp = sLF_MA_shp;
- P->sLTP_shp_buf_idx = LTP_shp_buf_idx;
-}
diff --git a/drivers/opus/silk/float/process_gains_FLP.c b/drivers/opus/silk/float/process_gains_FLP.c
deleted file mode 100644
index 3a1e46f096..0000000000
--- a/drivers/opus/silk/float/process_gains_FLP.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-#include "opus/silk/tuning_parameters.h"
-
-/* Processing of gains */
-void silk_process_gains_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- opus_int condCoding /* I The type of conditional coding to use */
-)
-{
- silk_shape_state_FLP *psShapeSt = &psEnc->sShape;
- opus_int k;
- opus_int32 pGains_Q16[ MAX_NB_SUBFR ];
- silk_float s, InvMaxSqrVal, gain, quant_offset;
-
- /* Gain reduction when LTP coding gain is high */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- s = 1.0f - 0.5f * silk_sigmoid( 0.25f * ( psEncCtrl->LTPredCodGain - 12.0f ) );
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains[ k ] *= s;
- }
- }
-
- /* Limit the quantized signal */
- InvMaxSqrVal = ( silk_float )( pow( 2.0f, 0.33f * ( 21.0f - psEnc->sCmn.SNR_dB_Q7 * ( 1 / 128.0f ) ) ) / psEnc->sCmn.subfr_length );
-
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- /* Soft limit on ratio residual energy and squared gains */
- gain = psEncCtrl->Gains[ k ];
- gain = ( silk_float )sqrt( gain * gain + psEncCtrl->ResNrg[ k ] * InvMaxSqrVal );
- psEncCtrl->Gains[ k ] = silk_min_float( gain, 32767.0f );
- }
-
- /* Prepare gains for noise shaping quantization */
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- pGains_Q16[ k ] = (opus_int32)( psEncCtrl->Gains[ k ] * 65536.0f );
- }
-
- /* Save unquantized gains and gain Index */
- silk_memcpy( psEncCtrl->GainsUnq_Q16, pGains_Q16, psEnc->sCmn.nb_subfr * sizeof( opus_int32 ) );
- psEncCtrl->lastGainIndexPrev = psShapeSt->LastGainIndex;
-
- /* Quantize gains */
- silk_gains_quant( psEnc->sCmn.indices.GainsIndices, pGains_Q16,
- &psShapeSt->LastGainIndex, condCoding == CODE_CONDITIONALLY, psEnc->sCmn.nb_subfr );
-
- /* Overwrite unquantized gains with quantized gains and convert back to Q0 from Q16 */
- for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) {
- psEncCtrl->Gains[ k ] = pGains_Q16[ k ] / 65536.0f;
- }
-
- /* Set quantizer offset for voiced signals. Larger offset when LTP coding gain is low or tilt is high (ie low-pass) */
- if( psEnc->sCmn.indices.signalType == TYPE_VOICED ) {
- if( psEncCtrl->LTPredCodGain + psEnc->sCmn.input_tilt_Q15 * ( 1.0f / 32768.0f ) > 1.0f ) {
- psEnc->sCmn.indices.quantOffsetType = 0;
- } else {
- psEnc->sCmn.indices.quantOffsetType = 1;
- }
- }
-
- /* Quantizer boundary adjustment */
- quant_offset = silk_Quantization_Offsets_Q10[ psEnc->sCmn.indices.signalType >> 1 ][ psEnc->sCmn.indices.quantOffsetType ] / 1024.0f;
- psEncCtrl->Lambda = LAMBDA_OFFSET
- + LAMBDA_DELAYED_DECISIONS * psEnc->sCmn.nStatesDelayedDecision
- + LAMBDA_SPEECH_ACT * psEnc->sCmn.speech_activity_Q8 * ( 1.0f / 256.0f )
- + LAMBDA_INPUT_QUALITY * psEncCtrl->input_quality
- + LAMBDA_CODING_QUALITY * psEncCtrl->coding_quality
- + LAMBDA_QUANT_OFFSET * quant_offset;
-
- silk_assert( psEncCtrl->Lambda > 0.0f );
- silk_assert( psEncCtrl->Lambda < 2.0f );
-}
diff --git a/drivers/opus/silk/float/regularize_correlations_FLP.c b/drivers/opus/silk/float/regularize_correlations_FLP.c
deleted file mode 100644
index 20e9074a0b..0000000000
--- a/drivers/opus/silk/float/regularize_correlations_FLP.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-
-/* Add noise to matrix diagonal */
-void silk_regularize_correlations_FLP(
- silk_float *XX, /* I/O Correlation matrices */
- silk_float *xx, /* I/O Correlation values */
- const silk_float noise, /* I Noise energy to add */
- const opus_int D /* I Dimension of XX */
-)
-{
- opus_int i;
-
- for( i = 0; i < D; i++ ) {
- matrix_ptr( &XX[ 0 ], i, i, D ) += noise;
- }
- xx[ 0 ] += noise;
-}
diff --git a/drivers/opus/silk/float/residual_energy_FLP.c b/drivers/opus/silk/float/residual_energy_FLP.c
deleted file mode 100644
index cc462a9e54..0000000000
--- a/drivers/opus/silk/float/residual_energy_FLP.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-
-#define MAX_ITERATIONS_RESIDUAL_NRG 10
-#define REGULARIZATION_FACTOR 1e-8f
-
-/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
-silk_float silk_residual_energy_covar_FLP( /* O Weighted residual energy */
- const silk_float *c, /* I Filter coefficients */
- silk_float *wXX, /* I/O Weighted correlation matrix, reg. out */
- const silk_float *wXx, /* I Weighted correlation vector */
- const silk_float wxx, /* I Weighted correlation value */
- const opus_int D /* I Dimension */
-)
-{
- opus_int i, j, k;
- silk_float tmp, nrg = 0.0f, regularization;
-
- /* Safety checks */
- silk_assert( D >= 0 );
-
- regularization = REGULARIZATION_FACTOR * ( wXX[ 0 ] + wXX[ D * D - 1 ] );
- for( k = 0; k < MAX_ITERATIONS_RESIDUAL_NRG; k++ ) {
- nrg = wxx;
-
- tmp = 0.0f;
- for( i = 0; i < D; i++ ) {
- tmp += wXx[ i ] * c[ i ];
- }
- nrg -= 2.0f * tmp;
-
- /* compute c' * wXX * c, assuming wXX is symmetric */
- for( i = 0; i < D; i++ ) {
- tmp = 0.0f;
- for( j = i + 1; j < D; j++ ) {
- tmp += matrix_c_ptr( wXX, i, j, D ) * c[ j ];
- }
- nrg += c[ i ] * ( 2.0f * tmp + matrix_c_ptr( wXX, i, i, D ) * c[ i ] );
- }
- if( nrg > 0 ) {
- break;
- } else {
- /* Add white noise */
- for( i = 0; i < D; i++ ) {
- matrix_c_ptr( wXX, i, i, D ) += regularization;
- }
- /* Increase noise for next run */
- regularization *= 2.0f;
- }
- }
- if( k == MAX_ITERATIONS_RESIDUAL_NRG ) {
- silk_assert( nrg == 0 );
- nrg = 1.0f;
- }
-
- return nrg;
-}
-
-/* Calculates residual energies of input subframes where all subframes have LPC_order */
-/* of preceding samples */
-void silk_residual_energy_FLP(
- silk_float nrgs[ MAX_NB_SUBFR ], /* O Residual energy per subframe */
- const silk_float x[], /* I Input signal */
- silk_float a[ 2 ][ MAX_LPC_ORDER ], /* I AR coefs for each frame half */
- const silk_float gains[], /* I Quantization gains */
- const opus_int subfr_length, /* I Subframe length */
- const opus_int nb_subfr, /* I number of subframes */
- const opus_int LPC_order /* I LPC order */
-)
-{
- opus_int shift;
- silk_float *LPC_res_ptr, LPC_res[ ( MAX_FRAME_LENGTH + MAX_NB_SUBFR * MAX_LPC_ORDER ) / 2 ];
-
- LPC_res_ptr = LPC_res + LPC_order;
- shift = LPC_order + subfr_length;
-
- /* Filter input to create the LPC residual for each frame half, and measure subframe energies */
- silk_LPC_analysis_filter_FLP( LPC_res, a[ 0 ], x + 0 * shift, 2 * shift, LPC_order );
- nrgs[ 0 ] = ( silk_float )( gains[ 0 ] * gains[ 0 ] * silk_energy_FLP( LPC_res_ptr + 0 * shift, subfr_length ) );
- nrgs[ 1 ] = ( silk_float )( gains[ 1 ] * gains[ 1 ] * silk_energy_FLP( LPC_res_ptr + 1 * shift, subfr_length ) );
-
- if( nb_subfr == MAX_NB_SUBFR ) {
- silk_LPC_analysis_filter_FLP( LPC_res, a[ 1 ], x + 2 * shift, 2 * shift, LPC_order );
- nrgs[ 2 ] = ( silk_float )( gains[ 2 ] * gains[ 2 ] * silk_energy_FLP( LPC_res_ptr + 0 * shift, subfr_length ) );
- nrgs[ 3 ] = ( silk_float )( gains[ 3 ] * gains[ 3 ] * silk_energy_FLP( LPC_res_ptr + 1 * shift, subfr_length ) );
- }
-}
diff --git a/drivers/opus/silk/float/scale_copy_vector_FLP.c b/drivers/opus/silk/float/scale_copy_vector_FLP.c
deleted file mode 100644
index 2656963e88..0000000000
--- a/drivers/opus/silk/float/scale_copy_vector_FLP.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/SigProc_FLP.h"
-
-/* copy and multiply a vector by a constant */
-void silk_scale_copy_vector_FLP(
- silk_float *data_out,
- const silk_float *data_in,
- silk_float gain,
- opus_int dataSize
-)
-{
- opus_int i, dataSize4;
-
- /* 4x unrolled loop */
- dataSize4 = dataSize & 0xFFFC;
- for( i = 0; i < dataSize4; i += 4 ) {
- data_out[ i + 0 ] = gain * data_in[ i + 0 ];
- data_out[ i + 1 ] = gain * data_in[ i + 1 ];
- data_out[ i + 2 ] = gain * data_in[ i + 2 ];
- data_out[ i + 3 ] = gain * data_in[ i + 3 ];
- }
-
- /* any remaining elements */
- for( ; i < dataSize; i++ ) {
- data_out[ i ] = gain * data_in[ i ];
- }
-}
diff --git a/drivers/opus/silk/float/scale_vector_FLP.c b/drivers/opus/silk/float/scale_vector_FLP.c
deleted file mode 100644
index ea2aa0e330..0000000000
--- a/drivers/opus/silk/float/scale_vector_FLP.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/SigProc_FLP.h"
-
-/* multiply a vector by a constant */
-void silk_scale_vector_FLP(
- silk_float *data1,
- silk_float gain,
- opus_int dataSize
-)
-{
- opus_int i, dataSize4;
-
- /* 4x unrolled loop */
- dataSize4 = dataSize & 0xFFFC;
- for( i = 0; i < dataSize4; i += 4 ) {
- data1[ i + 0 ] *= gain;
- data1[ i + 1 ] *= gain;
- data1[ i + 2 ] *= gain;
- data1[ i + 3 ] *= gain;
- }
-
- /* any remaining elements */
- for( ; i < dataSize; i++ ) {
- data1[ i ] *= gain;
- }
-}
diff --git a/drivers/opus/silk/float/schur_FLP.c b/drivers/opus/silk/float/schur_FLP.c
deleted file mode 100644
index f2071db214..0000000000
--- a/drivers/opus/silk/float/schur_FLP.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/SigProc_FLP.h"
-
-silk_float silk_schur_FLP( /* O returns residual energy */
- silk_float refl_coef[], /* O reflection coefficients (length order) */
- const silk_float auto_corr[], /* I autocorrelation sequence (length order+1) */
- opus_int order /* I order */
-)
-{
- opus_int k, n;
- silk_float C[ SILK_MAX_ORDER_LPC + 1 ][ 2 ];
- silk_float Ctmp1, Ctmp2, rc_tmp;
-
- silk_assert( order==6||order==8||order==10||order==12||order==14||order==16 );
-
- /* Copy correlations */
- for( k = 0; k < order+1; k++ ) {
- C[ k ][ 0 ] = C[ k ][ 1 ] = auto_corr[ k ];
- }
-
- for( k = 0; k < order; k++ ) {
- /* Get reflection coefficient */
- rc_tmp = -C[ k + 1 ][ 0 ] / silk_max_float( C[ 0 ][ 1 ], 1e-9f );
-
- /* Save the output */
- refl_coef[ k ] = rc_tmp;
-
- /* Update correlations */
- for( n = 0; n < order - k; n++ ) {
- Ctmp1 = C[ n + k + 1 ][ 0 ];
- Ctmp2 = C[ n ][ 1 ];
- C[ n + k + 1 ][ 0 ] = Ctmp1 + Ctmp2 * rc_tmp;
- C[ n ][ 1 ] = Ctmp2 + Ctmp1 * rc_tmp;
- }
- }
-
- /* Return residual energy */
- return C[ 0 ][ 1 ];
-}
-
diff --git a/drivers/opus/silk/float/solve_LS_FLP.c b/drivers/opus/silk/float/solve_LS_FLP.c
deleted file mode 100644
index 9d625c695d..0000000000
--- a/drivers/opus/silk/float/solve_LS_FLP.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-#include "opus/silk/tuning_parameters.h"
-
-/**********************************************************************
- * LDL Factorisation. Finds the upper triangular matrix L and the diagonal
- * Matrix D (only the diagonal elements returned in a vector)such that
- * the symmetric matric A is given by A = L*D*L'.
- **********************************************************************/
-static OPUS_INLINE void silk_LDL_FLP(
- silk_float *A, /* I/O Pointer to Symetric Square Matrix */
- opus_int M, /* I Size of Matrix */
- silk_float *L, /* I/O Pointer to Square Upper triangular Matrix */
- silk_float *Dinv /* I/O Pointer to vector holding the inverse diagonal elements of D */
-);
-
-/**********************************************************************
- * Function to solve linear equation Ax = b, when A is a MxM lower
- * triangular matrix, with ones on the diagonal.
- **********************************************************************/
-static OPUS_INLINE void silk_SolveWithLowerTriangularWdiagOnes_FLP(
- const silk_float *L, /* I Pointer to Lower Triangular Matrix */
- opus_int M, /* I Dim of Matrix equation */
- const silk_float *b, /* I b Vector */
- silk_float *x /* O x Vector */
-);
-
-/**********************************************************************
- * Function to solve linear equation (A^T)x = b, when A is a MxM lower
- * triangular, with ones on the diagonal. (ie then A^T is upper triangular)
- **********************************************************************/
-static OPUS_INLINE void silk_SolveWithUpperTriangularFromLowerWdiagOnes_FLP(
- const silk_float *L, /* I Pointer to Lower Triangular Matrix */
- opus_int M, /* I Dim of Matrix equation */
- const silk_float *b, /* I b Vector */
- silk_float *x /* O x Vector */
-);
-
-/**********************************************************************
- * Function to solve linear equation Ax = b, when A is a MxM
- * symmetric square matrix - using LDL factorisation
- **********************************************************************/
-void silk_solve_LDL_FLP(
- silk_float *A, /* I/O Symmetric square matrix, out: reg. */
- const opus_int M, /* I Size of matrix */
- const silk_float *b, /* I Pointer to b vector */
- silk_float *x /* O Pointer to x solution vector */
-)
-{
- opus_int i;
- silk_float L[ MAX_MATRIX_SIZE ][ MAX_MATRIX_SIZE ];
- silk_float T[ MAX_MATRIX_SIZE ];
- silk_float Dinv[ MAX_MATRIX_SIZE ]; /* inverse diagonal elements of D*/
-
- silk_assert( M <= MAX_MATRIX_SIZE );
-
- /***************************************************
- Factorize A by LDL such that A = L*D*(L^T),
- where L is lower triangular with ones on diagonal
- ****************************************************/
- silk_LDL_FLP( A, M, &L[ 0 ][ 0 ], Dinv );
-
- /****************************************************
- * substitute D*(L^T) = T. ie:
- L*D*(L^T)*x = b => L*T = b <=> T = inv(L)*b
- ******************************************************/
- silk_SolveWithLowerTriangularWdiagOnes_FLP( &L[ 0 ][ 0 ], M, b, T );
-
- /****************************************************
- D*(L^T)*x = T <=> (L^T)*x = inv(D)*T, because D is
- diagonal just multiply with 1/d_i
- ****************************************************/
- for( i = 0; i < M; i++ ) {
- T[ i ] = T[ i ] * Dinv[ i ];
- }
- /****************************************************
- x = inv(L') * inv(D) * T
- *****************************************************/
- silk_SolveWithUpperTriangularFromLowerWdiagOnes_FLP( &L[ 0 ][ 0 ], M, T, x );
-}
-
-static OPUS_INLINE void silk_SolveWithUpperTriangularFromLowerWdiagOnes_FLP(
- const silk_float *L, /* I Pointer to Lower Triangular Matrix */
- opus_int M, /* I Dim of Matrix equation */
- const silk_float *b, /* I b Vector */
- silk_float *x /* O x Vector */
-)
-{
- opus_int i, j;
- silk_float temp;
- const silk_float *ptr1;
-
- for( i = M - 1; i >= 0; i-- ) {
- ptr1 = matrix_adr( L, 0, i, M );
- temp = 0;
- for( j = M - 1; j > i ; j-- ) {
- temp += ptr1[ j * M ] * x[ j ];
- }
- temp = b[ i ] - temp;
- x[ i ] = temp;
- }
-}
-
-static OPUS_INLINE void silk_SolveWithLowerTriangularWdiagOnes_FLP(
- const silk_float *L, /* I Pointer to Lower Triangular Matrix */
- opus_int M, /* I Dim of Matrix equation */
- const silk_float *b, /* I b Vector */
- silk_float *x /* O x Vector */
-)
-{
- opus_int i, j;
- silk_float temp;
- const silk_float *ptr1;
-
- for( i = 0; i < M; i++ ) {
- ptr1 = matrix_adr( L, i, 0, M );
- temp = 0;
- for( j = 0; j < i; j++ ) {
- temp += ptr1[ j ] * x[ j ];
- }
- temp = b[ i ] - temp;
- x[ i ] = temp;
- }
-}
-
-static OPUS_INLINE void silk_LDL_FLP(
- silk_float *A, /* I/O Pointer to Symetric Square Matrix */
- opus_int M, /* I Size of Matrix */
- silk_float *L, /* I/O Pointer to Square Upper triangular Matrix */
- silk_float *Dinv /* I/O Pointer to vector holding the inverse diagonal elements of D */
-)
-{
- opus_int i, j, k, loop_count, err = 1;
- silk_float *ptr1, *ptr2;
- double temp, diag_min_value;
- silk_float v[ MAX_MATRIX_SIZE ], D[ MAX_MATRIX_SIZE ]; /* temp arrays*/
-
- silk_assert( M <= MAX_MATRIX_SIZE );
-
- diag_min_value = FIND_LTP_COND_FAC * 0.5f * ( A[ 0 ] + A[ M * M - 1 ] );
- for( loop_count = 0; loop_count < M && err == 1; loop_count++ ) {
- err = 0;
- for( j = 0; j < M; j++ ) {
- ptr1 = matrix_adr( L, j, 0, M );
- temp = matrix_ptr( A, j, j, M ); /* element in row j column j*/
- for( i = 0; i < j; i++ ) {
- v[ i ] = ptr1[ i ] * D[ i ];
- temp -= ptr1[ i ] * v[ i ];
- }
- if( temp < diag_min_value ) {
- /* Badly conditioned matrix: add white noise and run again */
- temp = ( loop_count + 1 ) * diag_min_value - temp;
- for( i = 0; i < M; i++ ) {
- matrix_ptr( A, i, i, M ) += ( silk_float )temp;
- }
- err = 1;
- break;
- }
- D[ j ] = ( silk_float )temp;
- Dinv[ j ] = ( silk_float )( 1.0f / temp );
- matrix_ptr( L, j, j, M ) = 1.0f;
-
- ptr1 = matrix_adr( A, j, 0, M );
- ptr2 = matrix_adr( L, j + 1, 0, M);
- for( i = j + 1; i < M; i++ ) {
- temp = 0.0;
- for( k = 0; k < j; k++ ) {
- temp += ptr2[ k ] * v[ k ];
- }
- matrix_ptr( L, i, j, M ) = ( silk_float )( ( ptr1[ i ] - temp ) * Dinv[ j ] );
- ptr2 += M; /* go to next column*/
- }
- }
- }
- silk_assert( err == 0 );
-}
-
diff --git a/drivers/opus/silk/float/sort_FLP.c b/drivers/opus/silk/float/sort_FLP.c
deleted file mode 100644
index ed212c63c9..0000000000
--- a/drivers/opus/silk/float/sort_FLP.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/* 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 */
-
-#include "opus/silk/typedef.h"
-#include "opus/silk/float/SigProc_FLP.h"
-
-void silk_insertion_sort_decreasing_FLP(
- silk_float *a, /* I/O Unsorted / Sorted vector */
- opus_int *idx, /* O Index vector for the sorted elements */
- const opus_int L, /* I Vector length */
- const opus_int K /* I Number of correctly sorted positions */
-)
-{
- silk_float value;
- opus_int i, j;
-
- /* Safety checks */
- silk_assert( K > 0 );
- silk_assert( L > 0 );
- silk_assert( L >= K );
-
- /* Write start indices in index vector */
- for( i = 0; i < K; i++ ) {
- idx[ 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 */
- idx[ j + 1 ] = idx[ j ]; /* Shift index */
- }
- a[ j + 1 ] = value; /* Write value */
- idx[ 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 */
- idx[ j + 1 ] = idx[ j ]; /* Shift index */
- }
- a[ j + 1 ] = value; /* Write value */
- idx[ j + 1 ] = i; /* Write index */
- }
- }
-}
diff --git a/drivers/opus/silk/float/structs_FLP.h b/drivers/opus/silk/float/structs_FLP.h
deleted file mode 100644
index 9eb5eb05eb..0000000000
--- a/drivers/opus/silk/float/structs_FLP.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_STRUCTS_FLP_H
-#define SILK_STRUCTS_FLP_H
-
-#include "opus/silk/typedef.h"
-#include "opus/silk/main.h"
-#include "opus/silk/structs.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/********************************/
-/* Noise shaping analysis state */
-/********************************/
-typedef struct {
- opus_int8 LastGainIndex;
- silk_float HarmBoost_smth;
- silk_float HarmShapeGain_smth;
- silk_float Tilt_smth;
-} silk_shape_state_FLP;
-
-/********************************/
-/* Prefilter state */
-/********************************/
-typedef struct {
- silk_float sLTP_shp[ LTP_BUF_LENGTH ];
- silk_float sAR_shp[ MAX_SHAPE_LPC_ORDER + 1 ];
- opus_int sLTP_shp_buf_idx;
- silk_float sLF_AR_shp;
- silk_float sLF_MA_shp;
- silk_float sHarmHP;
- opus_int32 rand_seed;
- opus_int lagPrev;
-} silk_prefilter_state_FLP;
-
-/********************************/
-/* Encoder state FLP */
-/********************************/
-typedef struct {
- silk_encoder_state sCmn; /* Common struct, shared with fixed-point code */
- silk_shape_state_FLP sShape; /* Noise shaping state */
- silk_prefilter_state_FLP sPrefilt; /* Prefilter State */
-
- /* Buffer for find pitch and noise shape analysis */
- silk_float x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ];/* Buffer for find pitch and noise shape analysis */
- silk_float LTPCorr; /* Normalized correlation from pitch lag estimator */
-} silk_encoder_state_FLP;
-
-/************************/
-/* Encoder control FLP */
-/************************/
-typedef struct {
- /* Prediction and coding parameters */
- silk_float Gains[ MAX_NB_SUBFR ];
- silk_float PredCoef[ 2 ][ MAX_LPC_ORDER ]; /* holds interpolated and final coefficients */
- silk_float LTPCoef[LTP_ORDER * MAX_NB_SUBFR];
- silk_float LTP_scale;
- opus_int pitchL[ MAX_NB_SUBFR ];
-
- /* Noise shaping parameters */
- silk_float AR1[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
- silk_float AR2[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
- silk_float LF_MA_shp[ MAX_NB_SUBFR ];
- silk_float LF_AR_shp[ MAX_NB_SUBFR ];
- silk_float GainsPre[ MAX_NB_SUBFR ];
- silk_float HarmBoost[ MAX_NB_SUBFR ];
- silk_float Tilt[ MAX_NB_SUBFR ];
- silk_float HarmShapeGain[ MAX_NB_SUBFR ];
- silk_float Lambda;
- silk_float input_quality;
- silk_float coding_quality;
-
- /* Measures */
- silk_float sparseness;
- silk_float predGain;
- silk_float LTPredCodGain;
- silk_float ResNrg[ MAX_NB_SUBFR ]; /* Residual energy per subframe */
-
- /* Parameters for CBR mode */
- opus_int32 GainsUnq_Q16[ MAX_NB_SUBFR ];
- opus_int8 lastGainIndexPrev;
-} silk_encoder_control_FLP;
-
-/************************/
-/* Encoder Super Struct */
-/************************/
-typedef struct {
- silk_encoder_state_FLP state_Fxx[ ENCODER_NUM_CHANNELS ];
- stereo_enc_state sStereo;
- opus_int32 nBitsUsedLBRR;
- opus_int32 nBitsExceeded;
- opus_int nChannelsAPI;
- opus_int nChannelsInternal;
- opus_int nPrevChannelsInternal;
- opus_int timeSinceSwitchAllowed_ms;
- opus_int allowBandwidthSwitch;
- opus_int prev_decode_only_middle;
-} silk_encoder;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/drivers/opus/silk/float/warped_autocorrelation_FLP.c b/drivers/opus/silk/float/warped_autocorrelation_FLP.c
deleted file mode 100644
index b814661b92..0000000000
--- a/drivers/opus/silk/float/warped_autocorrelation_FLP.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-
-/* Autocorrelations for a warped frequency axis */
-void silk_warped_autocorrelation_FLP(
- silk_float *corr, /* O Result [order + 1] */
- const silk_float *input, /* I Input data to correlate */
- const silk_float warping, /* I Warping coefficient */
- const opus_int length, /* I Length of input */
- const opus_int order /* I Correlation order (even) */
-)
-{
- opus_int n, i;
- double tmp1, tmp2;
- double state[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
- double C[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
-
- /* Order must be even */
- silk_assert( ( order & 1 ) == 0 );
-
- /* Loop over samples */
- for( n = 0; n < length; n++ ) {
- tmp1 = input[ n ];
- /* Loop over allpass sections */
- for( i = 0; i < order; i += 2 ) {
- /* Output of allpass section */
- tmp2 = state[ i ] + warping * ( state[ i + 1 ] - tmp1 );
- state[ i ] = tmp1;
- C[ i ] += state[ 0 ] * tmp1;
- /* Output of allpass section */
- tmp1 = state[ i + 1 ] + warping * ( state[ i + 2 ] - tmp2 );
- state[ i + 1 ] = tmp2;
- C[ i + 1 ] += state[ 0 ] * tmp2;
- }
- state[ order ] = tmp1;
- C[ order ] += state[ 0 ] * tmp1;
- }
-
- /* Copy correlations in silk_float output format */
- for( i = 0; i < order + 1; i++ ) {
- corr[ i ] = ( silk_float )C[ i ];
- }
-}
diff --git a/drivers/opus/silk/float/wrappers_FLP.c b/drivers/opus/silk/float/wrappers_FLP.c
deleted file mode 100644
index c80c618a92..0000000000
--- a/drivers/opus/silk/float/wrappers_FLP.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/float/main_FLP.h"
-
-/* Wrappers. Calls flp / fix code */
-
-/* Convert AR filter coefficients to NLSF parameters */
-void silk_A2NLSF_FLP(
- opus_int16 *NLSF_Q15, /* O NLSF vector [ LPC_order ] */
- const silk_float *pAR, /* I LPC coefficients [ LPC_order ] */
- const opus_int LPC_order /* I LPC order */
-)
-{
- opus_int i;
- opus_int32 a_fix_Q16[ MAX_LPC_ORDER ];
-
- for( i = 0; i < LPC_order; i++ ) {
- a_fix_Q16[ i ] = silk_float2int( pAR[ i ] * 65536.0f );
- }
-
- silk_A2NLSF( NLSF_Q15, a_fix_Q16, LPC_order );
-}
-
-/* Convert LSF parameters to AR prediction filter coefficients */
-void silk_NLSF2A_FLP(
- silk_float *pAR, /* O LPC coefficients [ LPC_order ] */
- const opus_int16 *NLSF_Q15, /* I NLSF vector [ LPC_order ] */
- const opus_int LPC_order /* I LPC order */
-)
-{
- opus_int i;
- opus_int16 a_fix_Q12[ MAX_LPC_ORDER ];
-
- silk_NLSF2A( a_fix_Q12, NLSF_Q15, LPC_order );
-
- for( i = 0; i < LPC_order; i++ ) {
- pAR[ i ] = ( silk_float )a_fix_Q12[ i ] * ( 1.0f / 4096.0f );
- }
-}
-
-/******************************************/
-/* Floating-point NLSF processing wrapper */
-/******************************************/
-void silk_process_NLSFs_FLP(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- silk_float PredCoef[ 2 ][ MAX_LPC_ORDER ], /* O Prediction coefficients */
- opus_int16 NLSF_Q15[ MAX_LPC_ORDER ], /* I/O Normalized LSFs (quant out) (0 - (2^15-1)) */
- const opus_int16 prev_NLSF_Q15[ MAX_LPC_ORDER ] /* I Previous Normalized LSFs (0 - (2^15-1)) */
-)
-{
- opus_int i, j;
- opus_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ];
-
- silk_process_NLSFs( psEncC, PredCoef_Q12, NLSF_Q15, prev_NLSF_Q15);
-
- for( j = 0; j < 2; j++ ) {
- for( i = 0; i < psEncC->predictLPCOrder; i++ ) {
- PredCoef[ j ][ i ] = ( silk_float )PredCoef_Q12[ j ][ i ] * ( 1.0f / 4096.0f );
- }
- }
-}
-
-/****************************************/
-/* Floating-point Silk NSQ wrapper */
-/****************************************/
-void silk_NSQ_wrapper_FLP(
- silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
- silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
- SideInfoIndices *psIndices, /* I/O Quantization indices */
- silk_nsq_state *psNSQ, /* I/O Noise Shaping Quantzation state */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const silk_float x[] /* I Prefiltered input signal */
-)
-{
- opus_int i, j;
- opus_int32 x_Q3[ MAX_FRAME_LENGTH ];
- opus_int32 Gains_Q16[ MAX_NB_SUBFR ];
- silk_DWORD_ALIGN opus_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ];
- opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ];
- opus_int LTP_scale_Q14;
-
- /* Noise shaping parameters */
- opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ];
- opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ]; /* Packs two int16 coefficients per int32 value */
- opus_int Lambda_Q10;
- opus_int Tilt_Q14[ MAX_NB_SUBFR ];
- opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ];
-
- /* Convert control struct to fix control struct */
- /* Noise shape parameters */
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- for( j = 0; j < psEnc->sCmn.shapingLPCOrder; j++ ) {
- AR2_Q13[ i * MAX_SHAPE_LPC_ORDER + j ] = silk_float2int( psEncCtrl->AR2[ i * MAX_SHAPE_LPC_ORDER + j ] * 8192.0f );
- }
- }
-
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- LF_shp_Q14[ i ] = silk_LSHIFT32( silk_float2int( psEncCtrl->LF_AR_shp[ i ] * 16384.0f ), 16 ) |
- (opus_uint16)silk_float2int( psEncCtrl->LF_MA_shp[ i ] * 16384.0f );
- Tilt_Q14[ i ] = (opus_int)silk_float2int( psEncCtrl->Tilt[ i ] * 16384.0f );
- HarmShapeGain_Q14[ i ] = (opus_int)silk_float2int( psEncCtrl->HarmShapeGain[ i ] * 16384.0f );
- }
- Lambda_Q10 = ( opus_int )silk_float2int( psEncCtrl->Lambda * 1024.0f );
-
- /* prediction and coding parameters */
- for( i = 0; i < psEnc->sCmn.nb_subfr * LTP_ORDER; i++ ) {
- LTPCoef_Q14[ i ] = (opus_int16)silk_float2int( psEncCtrl->LTPCoef[ i ] * 16384.0f );
- }
-
- for( j = 0; j < 2; j++ ) {
- for( i = 0; i < psEnc->sCmn.predictLPCOrder; i++ ) {
- PredCoef_Q12[ j ][ i ] = (opus_int16)silk_float2int( psEncCtrl->PredCoef[ j ][ i ] * 4096.0f );
- }
- }
-
- for( i = 0; i < psEnc->sCmn.nb_subfr; i++ ) {
- Gains_Q16[ i ] = silk_float2int( psEncCtrl->Gains[ i ] * 65536.0f );
- silk_assert( Gains_Q16[ i ] > 0 );
- }
-
- if( psIndices->signalType == TYPE_VOICED ) {
- LTP_scale_Q14 = silk_LTPScales_table_Q14[ psIndices->LTP_scaleIndex ];
- } else {
- LTP_scale_Q14 = 0;
- }
-
- /* Convert input to fix */
- for( i = 0; i < psEnc->sCmn.frame_length; i++ ) {
- x_Q3[ i ] = silk_float2int( 8.0f * x[ i ] );
- }
-
- /* Call NSQ */
- if( psEnc->sCmn.nStatesDelayedDecision > 1 || psEnc->sCmn.warping_Q16 > 0 ) {
- silk_NSQ_del_dec( &psEnc->sCmn, psNSQ, psIndices, x_Q3, pulses, PredCoef_Q12[ 0 ], LTPCoef_Q14,
- AR2_Q13, HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, psEncCtrl->pitchL, Lambda_Q10, LTP_scale_Q14, psEnc->sCmn.arch );
- } else {
- silk_NSQ( &psEnc->sCmn, psNSQ, psIndices, x_Q3, pulses, PredCoef_Q12[ 0 ], LTPCoef_Q14,
- AR2_Q13, HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, psEncCtrl->pitchL, Lambda_Q10, LTP_scale_Q14, psEnc->sCmn.arch );
- }
-}
-
-/***********************************************/
-/* Floating-point Silk LTP quantiation wrapper */
-/***********************************************/
-void silk_quant_LTP_gains_FLP(
- silk_float B[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (Un-)quantized LTP gains */
- opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook index */
- opus_int8 *periodicity_index, /* O Periodicity index */
- opus_int32 *sum_log_gain_Q7, /* I/O Cumulative max prediction gain */
- const silk_float W[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* I Error weights */
- const opus_int mu_Q10, /* I Mu value (R/D tradeoff) */
- const opus_int lowComplexity, /* I Flag for low complexity */
- const opus_int nb_subfr, /* I number of subframes */
- int arch /* I Run-time architecture */
-)
-{
- opus_int i;
- opus_int16 B_Q14[ MAX_NB_SUBFR * LTP_ORDER ];
- opus_int32 W_Q18[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ];
-
- for( i = 0; i < nb_subfr * LTP_ORDER; i++ ) {
- B_Q14[ i ] = (opus_int16)silk_float2int( B[ i ] * 16384.0f );
- }
- for( i = 0; i < nb_subfr * LTP_ORDER * LTP_ORDER; i++ ) {
- W_Q18[ i ] = (opus_int32)silk_float2int( W[ i ] * 262144.0f );
- }
-
- silk_quant_LTP_gains( B_Q14, cbk_index, periodicity_index, sum_log_gain_Q7, W_Q18, mu_Q10, lowComplexity, nb_subfr, arch );
-
- for( i = 0; i < nb_subfr * LTP_ORDER; i++ ) {
- B[ i ] = (silk_float)B_Q14[ i ] * ( 1.0f / 16384.0f );
- }
-}
diff --git a/drivers/opus/silk/gain_quant.c b/drivers/opus/silk/gain_quant.c
deleted file mode 100644
index 7b7a65d674..0000000000
--- a/drivers/opus/silk/gain_quant.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/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 silk_gains_quant(
- opus_int8 ind[ MAX_NB_SUBFR ], /* O gain indices */
- opus_int32 gain_Q16[ MAX_NB_SUBFR ], /* I/O gains (quantized out) */
- opus_int8 *prev_ind, /* I/O last index in previous frame */
- const opus_int conditional, /* I first gain is delta coded if 1 */
- const opus_int nb_subfr /* I number of subframes */
-)
-{
- opus_int k, double_step_size_threshold;
-
- for( k = 0; k < nb_subfr; k++ ) {
- /* Convert to log scale, scale, floor() */
- ind[ k ] = silk_SMULWB( SCALE_Q16, silk_lin2log( gain_Q16[ k ] ) - OFFSET );
-
- /* Round towards previous quantized gain (hysteresis) */
- if( ind[ k ] < *prev_ind ) {
- ind[ k ]++;
- }
- ind[ k ] = silk_LIMIT_int( ind[ k ], 0, N_LEVELS_QGAIN - 1 );
-
- /* Compute delta indices and limit */
- if( k == 0 && conditional == 0 ) {
- /* Full index */
- ind[ k ] = silk_LIMIT_int( ind[ k ], *prev_ind + MIN_DELTA_GAIN_QUANT, N_LEVELS_QGAIN - 1 );
- *prev_ind = ind[ k ];
- } else {
- /* Delta index */
- ind[ k ] = ind[ k ] - *prev_ind;
-
- /* Double the quantization step size for large gain increases, so that the max gain level can be reached */
- double_step_size_threshold = 2 * MAX_DELTA_GAIN_QUANT - N_LEVELS_QGAIN + *prev_ind;
- if( ind[ k ] > double_step_size_threshold ) {
- ind[ k ] = double_step_size_threshold + silk_RSHIFT( ind[ k ] - double_step_size_threshold + 1, 1 );
- }
-
- ind[ k ] = silk_LIMIT_int( ind[ k ], MIN_DELTA_GAIN_QUANT, MAX_DELTA_GAIN_QUANT );
-
- /* Accumulate deltas */
- if( ind[ k ] > double_step_size_threshold ) {
- *prev_ind += silk_LSHIFT( ind[ k ], 1 ) - double_step_size_threshold;
- } else {
- *prev_ind += ind[ k ];
- }
-
- /* Shift to make non-negative */
- ind[ k ] -= MIN_DELTA_GAIN_QUANT;
- }
-
- /* Scale and convert to linear scale */
- gain_Q16[ k ] = silk_log2lin( silk_min_32( silk_SMULWB( INV_SCALE_Q16, *prev_ind ) + OFFSET, 3967 ) ); /* 3967 = 31 in Q7 */
- }
-}
-
-/* Gains scalar dequantization, uniform on log scale */
-void silk_gains_dequant(
- opus_int32 gain_Q16[ MAX_NB_SUBFR ], /* O quantized gains */
- const opus_int8 ind[ MAX_NB_SUBFR ], /* I gain indices */
- opus_int8 *prev_ind, /* I/O last index in previous frame */
- const opus_int conditional, /* I first gain is delta coded if 1 */
- const opus_int nb_subfr /* I number of subframes */
-)
-{
- opus_int k, ind_tmp, double_step_size_threshold;
-
- for( k = 0; k < nb_subfr; k++ ) {
- if( k == 0 && conditional == 0 ) {
- /* Gain index is not allowed to go down more than 16 steps (~21.8 dB) */
- *prev_ind = silk_max_int( ind[ k ], *prev_ind - 16 );
- } else {
- /* Delta index */
- ind_tmp = ind[ k ] + MIN_DELTA_GAIN_QUANT;
-
- /* Accumulate deltas */
- double_step_size_threshold = 2 * MAX_DELTA_GAIN_QUANT - N_LEVELS_QGAIN + *prev_ind;
- if( ind_tmp > double_step_size_threshold ) {
- *prev_ind += silk_LSHIFT( ind_tmp, 1 ) - double_step_size_threshold;
- } else {
- *prev_ind += ind_tmp;
- }
- }
- *prev_ind = silk_LIMIT_int( *prev_ind, 0, N_LEVELS_QGAIN - 1 );
-
- /* Scale and convert to linear scale */
- gain_Q16[ k ] = silk_log2lin( silk_min_32( silk_SMULWB( INV_SCALE_Q16, *prev_ind ) + OFFSET, 3967 ) ); /* 3967 = 31 in Q7 */
- }
-}
-
-/* Compute unique identifier of gain indices vector */
-opus_int32 silk_gains_ID( /* O returns unique identifier of gains */
- const opus_int8 ind[ MAX_NB_SUBFR ], /* I gain indices */
- const opus_int nb_subfr /* I number of subframes */
-)
-{
- opus_int k;
- opus_int32 gainsID;
-
- gainsID = 0;
- for( k = 0; k < nb_subfr; k++ ) {
- gainsID = silk_ADD_LSHIFT32( ind[ k ], gainsID, 8 );
- }
-
- return gainsID;
-}
diff --git a/drivers/opus/silk/init_decoder.c b/drivers/opus/silk/init_decoder.c
deleted file mode 100644
index c8f694c9d7..0000000000
--- a/drivers/opus/silk/init_decoder.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/************************/
-/* Init Decoder State */
-/************************/
-opus_int silk_init_decoder(
- silk_decoder_state *psDec /* I/O Decoder state pointer */
-)
-{
- /* Clear the entire encoder state, except anything copied */
- silk_memset( psDec, 0, sizeof( silk_decoder_state ) );
-
- /* Used to deactivate LSF interpolation */
- psDec->first_frame_after_reset = 1;
- psDec->prev_gain_Q16 = 65536;
-
- /* Reset CNG state */
- silk_CNG_Reset( psDec );
-
- /* Reset PLC state */
- silk_PLC_Reset( psDec );
-
- return(0);
-}
-
diff --git a/drivers/opus/silk/init_encoder.c b/drivers/opus/silk/init_encoder.c
deleted file mode 100644
index 1c63edb4b8..0000000000
--- a/drivers/opus/silk/init_encoder.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-#ifdef OPUS_FIXED_POINT
-#include "opus/silk/fixed/main_FIX.h"
-#else
-#include "opus/silk/float/main_FLP.h"
-#endif
-#include "opus/silk/tuning_parameters.h"
-#include "opus/celt/cpu_support.h"
-
-/*********************************/
-/* Initialize Silk Encoder state */
-/*********************************/
-opus_int silk_init_encoder(
- silk_encoder_state_Fxx *psEnc, /* I/O Pointer to Silk FIX encoder state */
- int arch /* I Run-time architecture */
-)
-{
- opus_int ret = 0;
-
- /* Clear the entire encoder state */
- silk_memset( psEnc, 0, sizeof( silk_encoder_state_Fxx ) );
-
- psEnc->sCmn.arch = arch;
-
- psEnc->sCmn.variable_HP_smth1_Q15 = silk_LSHIFT( silk_lin2log( SILK_FIX_CONST( VARIABLE_HP_MIN_CUTOFF_HZ, 16 ) ) - ( 16 << 7 ), 8 );
- psEnc->sCmn.variable_HP_smth2_Q15 = psEnc->sCmn.variable_HP_smth1_Q15;
-
- /* Used to deactivate LSF interpolation, pitch prediction */
- psEnc->sCmn.first_frame_after_reset = 1;
-
- /* Initialize Silk VAD */
- ret += silk_VAD_Init( &psEnc->sCmn.sVAD );
-
- return ret;
-}
diff --git a/drivers/opus/silk/inner_prod_aligned.c b/drivers/opus/silk/inner_prod_aligned.c
deleted file mode 100644
index 7bd7297c7d..0000000000
--- a/drivers/opus/silk/inner_prod_aligned.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-opus_int32 silk_inner_prod_aligned_scale(
- const opus_int16 *const inVec1, /* I input vector 1 */
- const opus_int16 *const inVec2, /* I input vector 2 */
- const opus_int scale, /* I number of bits to shift */
- const opus_int len /* I vector lengths */
-)
-{
- opus_int i;
- opus_int32 sum = 0;
- for( i = 0; i < len; i++ ) {
- sum = silk_ADD_RSHIFT32( sum, silk_SMULBB( inVec1[ i ], inVec2[ i ] ), scale );
- }
- return sum;
-}
diff --git a/drivers/opus/silk/interpolate.c b/drivers/opus/silk/interpolate.c
deleted file mode 100644
index 25091b4fa6..0000000000
--- a/drivers/opus/silk/interpolate.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Interpolate two vectors */
-void silk_interpolate(
- opus_int16 xi[ MAX_LPC_ORDER ], /* O interpolated vector */
- const opus_int16 x0[ MAX_LPC_ORDER ], /* I first vector */
- const opus_int16 x1[ MAX_LPC_ORDER ], /* I second vector */
- const opus_int ifact_Q2, /* I interp. factor, weight on 2nd vector */
- const opus_int d /* I number of parameters */
-)
-{
- opus_int i;
-
- silk_assert( ifact_Q2 >= 0 );
- silk_assert( ifact_Q2 <= 4 );
-
- for( i = 0; i < d; i++ ) {
- xi[ i ] = (opus_int16)silk_ADD_RSHIFT( x0[ i ], silk_SMULBB( x1[ i ] - x0[ i ], ifact_Q2 ), 2 );
- }
-}
diff --git a/drivers/opus/silk/lin2log.c b/drivers/opus/silk/lin2log.c
deleted file mode 100644
index 694eb1e876..0000000000
--- a/drivers/opus/silk/lin2log.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-/* Approximation of 128 * log2() (very close inverse of silk_log2lin()) */
-/* Convert input to a log scale */
-opus_int32 silk_lin2log(
- const opus_int32 inLin /* I input in linear scale */
-)
-{
- opus_int32 lz, frac_Q7;
-
- silk_CLZ_FRAC( inLin, &lz, &frac_Q7 );
-
- /* Piece-wise parabolic approximation */
- return silk_LSHIFT( 31 - lz, 7 ) + silk_SMLAWB( frac_Q7, silk_MUL( frac_Q7, 128 - frac_Q7 ), 179 );
-}
-
diff --git a/drivers/opus/silk/log2lin.c b/drivers/opus/silk/log2lin.c
deleted file mode 100644
index 8d14150a41..0000000000
--- a/drivers/opus/silk/log2lin.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* Approximation of 2^() (very close inverse of silk_lin2log()) */
-/* Convert input to a linear scale */
-opus_int32 silk_log2lin(
- const opus_int32 inLog_Q7 /* I input on log scale */
-)
-{
- opus_int32 out, frac_Q7;
-
- if( inLog_Q7 < 0 ) {
- return 0;
- } else if ( inLog_Q7 >= 3967 ) {
- return silk_int32_MAX;
- }
-
- out = silk_LSHIFT( 1, silk_RSHIFT( inLog_Q7, 7 ) );
- frac_Q7 = inLog_Q7 & 0x7F;
- if( inLog_Q7 < 2048 ) {
- /* Piece-wise parabolic approximation */
- out = silk_ADD_RSHIFT32( out, silk_MUL( out, silk_SMLAWB( frac_Q7, silk_SMULBB( frac_Q7, 128 - frac_Q7 ), -174 ) ), 7 );
- } else {
- /* Piece-wise parabolic approximation */
- out = silk_MLA( out, silk_RSHIFT( out, 7 ), silk_SMLAWB( frac_Q7, silk_SMULBB( frac_Q7, 128 - frac_Q7 ), -174 ) );
- }
- return out;
-}
diff --git a/drivers/opus/silk/macros.h b/drivers/opus/silk/macros.h
deleted file mode 100644
index 29efd11ace..0000000000
--- a/drivers/opus/silk/macros.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_MACROS_H
-#define SILK_MACROS_H
-#include "opus/opus_config.h"
-
-#include "opus/opus_types.h"
-#include "opus/opus_defines.h"
-
-#if OPUS_GNUC_PREREQ(3, 0)
-#define opus_likely(x) (__builtin_expect(!!(x), 1))
-#define opus_unlikely(x) (__builtin_expect(!!(x), 0))
-#else
-#define opus_likely(x) (!!(x))
-#define opus_unlikely(x) (!!(x))
-#endif
-
-/* Set this if opus_int64 is a native type of the CPU. */
-#define OPUS_FAST_INT64 (defined(__x86_64__) || defined(__LP64__) || defined(_WIN64))
-
-/* This is an OPUS_INLINE header file for general platform. */
-
-/* (a32 * (opus_int32)((opus_int16)(b32))) >> 16 output have to be 32bit int */
-#if OPUS_FAST_INT64
-#define silk_SMULWB(a32, b32) (((a32) * (opus_int64)((opus_int16)(b32))) >> 16)
-#else
-#define silk_SMULWB(a32, b32) ((((a32) >> 16) * (opus_int32)((opus_int16)(b32))) + ((((a32) & 0x0000FFFF) * (opus_int32)((opus_int16)(b32))) >> 16))
-#endif
-
-/* a32 + (b32 * (opus_int32)((opus_int16)(c32))) >> 16 output have to be 32bit int */
-#if OPUS_FAST_INT64
-#define silk_SMLAWB(a32, b32, c32) ((a32) + (((b32) * (opus_int64)((opus_int16)(c32))) >> 16))
-#else
-#define silk_SMLAWB(a32, b32, c32) ((a32) + ((((b32) >> 16) * (opus_int32)((opus_int16)(c32))) + ((((b32) & 0x0000FFFF) * (opus_int32)((opus_int16)(c32))) >> 16)))
-#endif
-
-/* (a32 * (b32 >> 16)) >> 16 */
-#define silk_SMULWT(a32, b32) (((a32) >> 16) * ((b32) >> 16) + ((((a32) & 0x0000FFFF) * ((b32) >> 16)) >> 16))
-
-/* a32 + (b32 * (c32 >> 16)) >> 16 */
-#if OPUS_FAST_INT64
-#define silk_SMLAWT(a32, b32, c32) ((a32) + (((b32) * ((opus_int64)(c32) >> 16)) >> 16))
-#else
-#define silk_SMLAWT(a32, b32, c32) ((a32) + (((b32) >> 16) * ((c32) >> 16)) + ((((b32) & 0x0000FFFF) * ((c32) >> 16)) >> 16))
-#endif
-
-/* (opus_int32)((opus_int16)(a3))) * (opus_int32)((opus_int16)(b32)) output have to be 32bit int */
-#define silk_SMULBB(a32, b32) ((opus_int32)((opus_int16)(a32)) * (opus_int32)((opus_int16)(b32)))
-
-/* a32 + (opus_int32)((opus_int16)(b32)) * (opus_int32)((opus_int16)(c32)) output have to be 32bit int */
-#define silk_SMLABB(a32, b32, c32) ((a32) + ((opus_int32)((opus_int16)(b32))) * (opus_int32)((opus_int16)(c32)))
-
-/* (opus_int32)((opus_int16)(a32)) * (b32 >> 16) */
-#define silk_SMULBT(a32, b32) ((opus_int32)((opus_int16)(a32)) * ((b32) >> 16))
-
-/* a32 + (opus_int32)((opus_int16)(b32)) * (c32 >> 16) */
-#define silk_SMLABT(a32, b32, c32) ((a32) + ((opus_int32)((opus_int16)(b32))) * ((c32) >> 16))
-
-/* a64 + (b32 * c32) */
-#define silk_SMLAL(a64, b32, c32) (silk_ADD64((a64), ((opus_int64)(b32) * (opus_int64)(c32))))
-
-/* (a32 * b32) >> 16 */
-#if OPUS_FAST_INT64
-#define silk_SMULWW(a32, b32) (((opus_int64)(a32) * (b32)) >> 16)
-#else
-#define silk_SMULWW(a32, b32) silk_MLA(silk_SMULWB((a32), (b32)), (a32), silk_RSHIFT_ROUND((b32), 16))
-#endif
-
-/* a32 + ((b32 * c32) >> 16) */
-#if OPUS_FAST_INT64
-#define silk_SMLAWW(a32, b32, c32) ((a32) + (((opus_int64)(b32) * (c32)) >> 16))
-#else
-#define silk_SMLAWW(a32, b32, c32) silk_MLA(silk_SMLAWB((a32), (b32), (c32)), (b32), silk_RSHIFT_ROUND((c32), 16))
-#endif
-
-/* add/subtract with output saturated */
-#define silk_ADD_SAT32(a, b) ((((opus_uint32)(a) + (opus_uint32)(b)) & 0x80000000) == 0 ? \
- ((((a) & (b)) & 0x80000000) != 0 ? silk_int32_MIN : (a)+(b)) : \
- ((((a) | (b)) & 0x80000000) == 0 ? silk_int32_MAX : (a)+(b)) )
-
-#define silk_SUB_SAT32(a, b) ((((opus_uint32)(a)-(opus_uint32)(b)) & 0x80000000) == 0 ? \
- (( (a) & ((b)^0x80000000) & 0x80000000) ? silk_int32_MIN : (a)-(b)) : \
- ((((a)^0x80000000) & (b) & 0x80000000) ? silk_int32_MAX : (a)-(b)) )
-
-#if defined(MIPSr1_ASM)
-#include "opus/silk/mips/macros_mipsr1.h"
-#endif
-
-#include "opus/celt/ecintrin.h"
-#ifndef OVERRIDE_silk_CLZ16
-static OPUS_INLINE opus_int32 silk_CLZ16(opus_int16 in16)
-{
- return 32 - EC_ILOG(in16<<16|0x8000);
-}
-#endif
-
-#ifndef OVERRIDE_silk_CLZ32
-static OPUS_INLINE opus_int32 silk_CLZ32(opus_int32 in32)
-{
- return in32 ? 32 - EC_ILOG(in32) : 32;
-}
-#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
-
-#ifdef OPUS_ARM_INLINE_ASM
-#include "opus/silk/arm/macros_armv4.h"
-#endif
-
-#ifdef OPUS_ARM_INLINE_EDSP
-#include "opus/silk/arm/macros_armv5e.h"
-#endif
-
-#endif /* SILK_MACROS_H */
-
diff --git a/drivers/opus/silk/main.h b/drivers/opus/silk/main.h
deleted file mode 100644
index a6ec2d7e4c..0000000000
--- a/drivers/opus/silk/main.h
+++ /dev/null
@@ -1,471 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_MAIN_H
-#define SILK_MAIN_H
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/define.h"
-#include "opus/silk/structs.h"
-#include "opus/silk/tables.h"
-#include "opus/silk/PLC.h"
-#include "opus/silk/control.h"
-#include "opus/silk/debug.h"
-#include "opus/celt/entenc.h"
-#include "opus/celt/entdec.h"
-
-#if defined(OPUS_X86_MAY_HAVE_SSE4_1)
-#include "opus/silk/x86/main_sse.h"
-#endif
-
-/* Convert Left/Right stereo signal to adaptive Mid/Side representation */
-void silk_stereo_LR_to_MS(
- stereo_enc_state *state, /* I/O State */
- opus_int16 x1[], /* I/O Left input signal, becomes mid signal */
- opus_int16 x2[], /* I/O Right input signal, becomes side signal */
- opus_int8 ix[ 2 ][ 3 ], /* O Quantization indices */
- opus_int8 *mid_only_flag, /* O Flag: only mid signal coded */
- opus_int32 mid_side_rates_bps[], /* O Bitrates for mid and side signals */
- opus_int32 total_rate_bps, /* I Total bitrate */
- opus_int prev_speech_act_Q8, /* I Speech activity level in previous frame */
- opus_int toMono, /* I Last frame before a stereo->mono transition */
- opus_int fs_kHz, /* I Sample rate (kHz) */
- opus_int frame_length /* I Number of samples */
-);
-
-/* Convert adaptive Mid/Side representation to Left/Right stereo signal */
-void silk_stereo_MS_to_LR(
- stereo_dec_state *state, /* I/O State */
- opus_int16 x1[], /* I/O Left input signal, becomes mid signal */
- opus_int16 x2[], /* I/O Right input signal, becomes side signal */
- const opus_int32 pred_Q13[], /* I Predictors */
- opus_int fs_kHz, /* I Samples rate (kHz) */
- opus_int frame_length /* I Number of samples */
-);
-
-/* Find least-squares prediction gain for one signal based on another and quantize it */
-opus_int32 silk_stereo_find_predictor( /* O Returns predictor in Q13 */
- opus_int32 *ratio_Q14, /* O Ratio of residual and mid energies */
- const opus_int16 x[], /* I Basis signal */
- const opus_int16 y[], /* I Target signal */
- opus_int32 mid_res_amp_Q0[], /* I/O Smoothed mid, residual norms */
- opus_int length, /* I Number of samples */
- opus_int smooth_coef_Q16 /* I Smoothing coefficient */
-);
-
-/* Quantize mid/side predictors */
-void silk_stereo_quant_pred(
- opus_int32 pred_Q13[], /* I/O Predictors (out: quantized) */
- opus_int8 ix[ 2 ][ 3 ] /* O Quantization indices */
-);
-
-/* Entropy code the mid/side quantization indices */
-void silk_stereo_encode_pred(
- ec_enc *psRangeEnc, /* I/O Compressor data structure */
- opus_int8 ix[ 2 ][ 3 ] /* I Quantization indices */
-);
-
-/* Entropy code the mid-only flag */
-void silk_stereo_encode_mid_only(
- ec_enc *psRangeEnc, /* I/O Compressor data structure */
- opus_int8 mid_only_flag
-);
-
-/* Decode mid/side predictors */
-void silk_stereo_decode_pred(
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int32 pred_Q13[] /* O Predictors */
-);
-
-/* Decode mid-only flag */
-void silk_stereo_decode_mid_only(
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int *decode_only_mid /* O Flag that only mid channel has been coded */
-);
-
-/* Encodes signs of excitation */
-void silk_encode_signs(
- ec_enc *psRangeEnc, /* I/O Compressor data structure */
- const opus_int8 pulses[], /* I pulse signal */
- opus_int length, /* I length of input */
- const opus_int signalType, /* I Signal type */
- const opus_int quantOffsetType, /* I Quantization offset type */
- const opus_int sum_pulses[ MAX_NB_SHELL_BLOCKS ] /* I Sum of absolute pulses per block */
-);
-
-/* Decodes signs of excitation */
-void silk_decode_signs(
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int16 pulses[], /* I/O pulse signal */
- opus_int length, /* I length of input */
- const opus_int signalType, /* I Signal type */
- const opus_int quantOffsetType, /* I Quantization offset type */
- const opus_int sum_pulses[ MAX_NB_SHELL_BLOCKS ] /* I Sum of absolute pulses per block */
-);
-
-/* Check encoder control struct */
-opus_int check_control_input(
- silk_EncControlStruct *encControl /* I Control structure */
-);
-
-/* Control internal sampling rate */
-opus_int silk_control_audio_bandwidth(
- silk_encoder_state *psEncC, /* I/O Pointer to Silk encoder state */
- silk_EncControlStruct *encControl /* I Control structure */
-);
-
-/* Control SNR of redidual quantizer */
-opus_int silk_control_SNR(
- silk_encoder_state *psEncC, /* I/O Pointer to Silk encoder state */
- opus_int32 TargetRate_bps /* I Target max bitrate (bps) */
-);
-
-/***************/
-/* Shell coder */
-/***************/
-
-/* Encode quantization indices of excitation */
-void silk_encode_pulses(
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- const opus_int signalType, /* I Signal type */
- const opus_int quantOffsetType, /* I quantOffsetType */
- opus_int8 pulses[], /* I quantization indices */
- const opus_int frame_length /* I Frame length */
-);
-
-/* Shell encoder, operates on one shell code frame of 16 pulses */
-void silk_shell_encoder(
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- const opus_int *pulses0 /* I data: nonnegative pulse amplitudes */
-);
-
-/* Shell decoder, operates on one shell code frame of 16 pulses */
-void silk_shell_decoder(
- opus_int16 *pulses0, /* O data: nonnegative pulse amplitudes */
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- const opus_int pulses4 /* I number of pulses per pulse-subframe */
-);
-
-/* Gain scalar quantization with hysteresis, uniform on log scale */
-void silk_gains_quant(
- opus_int8 ind[ MAX_NB_SUBFR ], /* O gain indices */
- opus_int32 gain_Q16[ MAX_NB_SUBFR ], /* I/O gains (quantized out) */
- opus_int8 *prev_ind, /* I/O last index in previous frame */
- const opus_int conditional, /* I first gain is delta coded if 1 */
- const opus_int nb_subfr /* I number of subframes */
-);
-
-/* Gains scalar dequantization, uniform on log scale */
-void silk_gains_dequant(
- opus_int32 gain_Q16[ MAX_NB_SUBFR ], /* O quantized gains */
- const opus_int8 ind[ MAX_NB_SUBFR ], /* I gain indices */
- opus_int8 *prev_ind, /* I/O last index in previous frame */
- const opus_int conditional, /* I first gain is delta coded if 1 */
- const opus_int nb_subfr /* I number of subframes */
-);
-
-/* Compute unique identifier of gain indices vector */
-opus_int32 silk_gains_ID( /* O returns unique identifier of gains */
- const opus_int8 ind[ MAX_NB_SUBFR ], /* I gain indices */
- const opus_int nb_subfr /* I number of subframes */
-);
-
-/* Interpolate two vectors */
-void silk_interpolate(
- opus_int16 xi[ MAX_LPC_ORDER ], /* O interpolated vector */
- const opus_int16 x0[ MAX_LPC_ORDER ], /* I first vector */
- const opus_int16 x1[ MAX_LPC_ORDER ], /* I second vector */
- const opus_int ifact_Q2, /* I interp. factor, weight on 2nd vector */
- const opus_int d /* I number of parameters */
-);
-
-/* LTP tap quantizer */
-void silk_quant_LTP_gains(
- opus_int16 B_Q14[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (un)quantized LTP gains */
- opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook Index */
- opus_int8 *periodicity_index, /* O Periodicity Index */
- opus_int32 *sum_gain_dB_Q7, /* I/O Cumulative max prediction gain */
- const opus_int32 W_Q18[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ], /* I Error Weights in Q18 */
- opus_int mu_Q9, /* I Mu value (R/D tradeoff) */
- opus_int lowComplexity, /* I Flag for low complexity */
- const opus_int nb_subfr, /* I number of subframes */
- int arch /* I Run-time architecture */
-);
-
-/* Entropy constrained matrix-weighted VQ, for a single input data vector */
-void silk_VQ_WMat_EC_c(
- opus_int8 *ind, /* O index of best codebook vector */
- opus_int32 *rate_dist_Q14, /* O best weighted quant error + mu * rate */
- opus_int *gain_Q7, /* O sum of absolute LTP coefficients */
- const opus_int16 *in_Q14, /* I input vector to be quantized */
- const opus_int32 *W_Q18, /* I weighting matrix */
- const opus_int8 *cb_Q7, /* I codebook */
- const opus_uint8 *cb_gain_Q7, /* I codebook effective gain */
- const opus_uint8 *cl_Q5, /* I code length for each codebook vector */
- const opus_int mu_Q9, /* I tradeoff betw. weighted error and rate */
- const opus_int32 max_gain_Q7, /* I maximum sum of absolute LTP coefficients */
- opus_int L /* I number of vectors in codebook */
-);
-
-#if !defined(OVERRIDE_silk_VQ_WMat_EC)
-#define silk_VQ_WMat_EC(ind, rate_dist_Q14, gain_Q7, in_Q14, W_Q18, cb_Q7, cb_gain_Q7, cl_Q5, \
- mu_Q9, max_gain_Q7, L, arch) \
- ((void)(arch),silk_VQ_WMat_EC_c(ind, rate_dist_Q14, gain_Q7, in_Q14, W_Q18, cb_Q7, cb_gain_Q7, cl_Q5, \
- mu_Q9, max_gain_Q7, L))
-#endif
-
-/************************************/
-/* Noise shaping quantization (NSQ) */
-/************************************/
-
-void silk_NSQ_c(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-);
-
-#if !defined(OVERRIDE_silk_NSQ)
-#define silk_NSQ(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14, arch) \
- ((void)(arch),silk_NSQ_c(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14))
-#endif
-
-/* Noise shaping using delayed decision */
-void silk_NSQ_del_dec_c(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-);
-
-#if !defined(OVERRIDE_silk_NSQ_del_dec)
-#define silk_NSQ_del_dec(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14, arch) \
- ((void)(arch),silk_NSQ_del_dec_c(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14))
-#endif
-
-/************/
-/* Silk VAD */
-/************/
-/* Initialize the Silk VAD */
-opus_int silk_VAD_Init( /* O Return value, 0 if success */
- silk_VAD_state *psSilk_VAD /* I/O Pointer to Silk VAD state */
-);
-
-/* Get speech activity level in Q8 */
-opus_int silk_VAD_GetSA_Q8_c( /* O Return value, 0 if success */
- silk_encoder_state *psEncC, /* I/O Encoder state */
- const opus_int16 pIn[] /* I PCM input */
-);
-
-#if !defined(OVERRIDE_silk_VAD_GetSA_Q8)
-#define silk_VAD_GetSA_Q8(psEnC, pIn, arch) ((void)(arch),silk_VAD_GetSA_Q8_c(psEnC, pIn))
-#endif
-
-/* Low-pass filter with variable cutoff frequency based on */
-/* piece-wise linear interpolation between elliptic filters */
-/* Start by setting transition_frame_no = 1; */
-void silk_LP_variable_cutoff(
- silk_LP_state *psLP, /* I/O LP filter state */
- opus_int16 *frame, /* I/O Low-pass filtered output signal */
- const opus_int frame_length /* I Frame length */
-);
-
-/******************/
-/* NLSF Quantizer */
-/******************/
-/* Limit, stabilize, convert and quantize NLSFs */
-void silk_process_NLSFs(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- opus_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ], /* O Prediction coefficients */
- opus_int16 pNLSF_Q15[ MAX_LPC_ORDER ], /* I/O Normalized LSFs (quant out) (0 - (2^15-1)) */
- const opus_int16 prev_NLSFq_Q15[ MAX_LPC_ORDER ] /* I Previous Normalized LSFs (0 - (2^15-1)) */
-);
-
-opus_int32 silk_NLSF_encode( /* O Returns RD value in Q25 */
- opus_int8 *NLSFIndices, /* I Codebook path vector [ LPC_ORDER + 1 ] */
- opus_int16 *pNLSF_Q15, /* I/O Quantized NLSF vector [ LPC_ORDER ] */
- const silk_NLSF_CB_struct *psNLSF_CB, /* I Codebook object */
- const opus_int16 *pW_QW, /* I NLSF weight vector [ LPC_ORDER ] */
- const opus_int NLSF_mu_Q20, /* I Rate weight for the RD optimization */
- const opus_int nSurvivors, /* I Max survivors after first stage */
- const opus_int signalType /* I Signal type: 0/1/2 */
-);
-
-/* Compute quantization errors for an LPC_order element input vector for a VQ codebook */
-void silk_NLSF_VQ(
- opus_int32 err_Q26[], /* O Quantization errors [K] */
- const opus_int16 in_Q15[], /* I Input vectors to be quantized [LPC_order] */
- const opus_uint8 pCB_Q8[], /* I Codebook vectors [K*LPC_order] */
- const opus_int K, /* I Number of codebook vectors */
- const opus_int LPC_order /* I Number of LPCs */
-);
-
-/* Delayed-decision quantizer for NLSF residuals */
-opus_int32 silk_NLSF_del_dec_quant( /* O Returns RD value in Q25 */
- opus_int8 indices[], /* O Quantization indices [ order ] */
- const opus_int16 x_Q10[], /* I Input [ order ] */
- const opus_int16 w_Q5[], /* I Weights [ order ] */
- const opus_uint8 pred_coef_Q8[], /* I Backward predictor coefs [ order ] */
- const opus_int16 ec_ix[], /* I Indices to entropy coding tables [ order ] */
- const opus_uint8 ec_rates_Q5[], /* I Rates [] */
- const opus_int quant_step_size_Q16, /* I Quantization step size */
- const opus_int16 inv_quant_step_size_Q6, /* I Inverse quantization step size */
- const opus_int32 mu_Q20, /* I R/D tradeoff */
- const opus_int16 order /* I Number of input values */
-);
-
-/* Unpack predictor values and indices for entropy coding tables */
-void silk_NLSF_unpack(
- opus_int16 ec_ix[], /* O Indices to entropy tables [ LPC_ORDER ] */
- opus_uint8 pred_Q8[], /* O LSF predictor [ LPC_ORDER ] */
- const silk_NLSF_CB_struct *psNLSF_CB, /* I Codebook object */
- const opus_int CB1_index /* I Index of vector in first LSF codebook */
-);
-
-/***********************/
-/* NLSF vector decoder */
-/***********************/
-void silk_NLSF_decode(
- opus_int16 *pNLSF_Q15, /* O Quantized NLSF vector [ LPC_ORDER ] */
- opus_int8 *NLSFIndices, /* I Codebook path vector [ LPC_ORDER + 1 ] */
- const silk_NLSF_CB_struct *psNLSF_CB /* I Codebook object */
-);
-
-/****************************************************/
-/* Decoder Functions */
-/****************************************************/
-opus_int silk_init_decoder(
- silk_decoder_state *psDec /* I/O Decoder state pointer */
-);
-
-/* Set decoder sampling rate */
-opus_int silk_decoder_set_fs(
- silk_decoder_state *psDec, /* I/O Decoder state pointer */
- opus_int fs_kHz, /* I Sampling frequency (kHz) */
- opus_int32 fs_API_Hz /* I API Sampling frequency (Hz) */
-);
-
-/****************/
-/* Decode frame */
-/****************/
-opus_int silk_decode_frame(
- silk_decoder_state *psDec, /* I/O Pointer to Silk decoder state */
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int16 pOut[], /* O Pointer to output speech frame */
- opus_int32 *pN, /* O Pointer to size of output frame */
- opus_int lostFlag, /* I 0: no loss, 1 loss, 2 decode fec */
- opus_int condCoding, /* I The type of conditional coding to use */
- int arch /* I Run-time architecture */
-);
-
-/* Decode indices from bitstream */
-void silk_decode_indices(
- silk_decoder_state *psDec, /* I/O State */
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int FrameIndex, /* I Frame number */
- opus_int decode_LBRR, /* I Flag indicating LBRR data is being decoded */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/* Decode parameters from payload */
-void silk_decode_parameters(
- silk_decoder_state *psDec, /* I/O State */
- silk_decoder_control *psDecCtrl, /* I/O Decoder control */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-/* Core decoder. Performs inverse NSQ operation LTP + LPC */
-void silk_decode_core(
- silk_decoder_state *psDec, /* I/O Decoder state */
- silk_decoder_control *psDecCtrl, /* I Decoder control */
- opus_int16 xq[], /* O Decoded speech */
- const opus_int16 pulses[ MAX_FRAME_LENGTH ], /* I Pulse signal */
- int arch /* I Run-time architecture */
-);
-
-/* Decode quantization indices of excitation (Shell coding) */
-void silk_decode_pulses(
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int16 pulses[], /* O Excitation signal */
- const opus_int signalType, /* I Sigtype */
- const opus_int quantOffsetType, /* I quantOffsetType */
- const opus_int frame_length /* I Frame length */
-);
-
-/******************/
-/* CNG */
-/******************/
-
-/* Reset CNG */
-void silk_CNG_Reset(
- silk_decoder_state *psDec /* I/O Decoder state */
-);
-
-/* Updates CNG estimate, and applies the CNG when packet was lost */
-void silk_CNG(
- silk_decoder_state *psDec, /* I/O Decoder state */
- silk_decoder_control *psDecCtrl, /* I/O Decoder control */
- opus_int16 frame[], /* I/O Signal */
- opus_int length /* I Length of residual */
-);
-
-/* Encoding of various parameters */
-void silk_encode_indices(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- ec_enc *psRangeEnc, /* I/O Compressor data structure */
- opus_int FrameIndex, /* I Frame number */
- opus_int encode_LBRR, /* I Flag indicating LBRR data is being encoded */
- opus_int condCoding /* I The type of conditional coding to use */
-);
-
-#endif
diff --git a/drivers/opus/silk/mips/NSQ_del_dec_mipsr1.h b/drivers/opus/silk/mips/NSQ_del_dec_mipsr1.h
deleted file mode 100644
index 5cecca28b7..0000000000
--- a/drivers/opus/silk/mips/NSQ_del_dec_mipsr1.h
+++ /dev/null
@@ -1,402 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef __NSQ_DEL_DEC_MIPSR1_H__
-#define __NSQ_DEL_DEC_MIPSR1_H__
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-
-#define OVERRIDE_silk_noise_shape_quantizer_del_dec
-static inline void silk_noise_shape_quantizer_del_dec(
- silk_nsq_state *NSQ, /* I/O NSQ state */
- NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */
- opus_int signalType, /* I Signal type */
- const opus_int32 x_Q10[], /* I */
- opus_int8 pulses[], /* O */
- opus_int16 xq[], /* O */
- opus_int32 sLTP_Q15[], /* I/O LTP filter state */
- opus_int32 delayedGain_Q10[], /* I/O Gain delay buffer */
- const opus_int16 a_Q12[], /* I Short term prediction coefs */
- const opus_int16 b_Q14[], /* I Long term prediction coefs */
- const opus_int16 AR_shp_Q13[], /* I Noise shaping coefs */
- opus_int lag, /* I Pitch lag */
- opus_int32 HarmShapeFIRPacked_Q14, /* I */
- opus_int Tilt_Q14, /* I Spectral tilt */
- opus_int32 LF_shp_Q14, /* I */
- opus_int32 Gain_Q16, /* I */
- opus_int Lambda_Q10, /* I */
- opus_int offset_Q10, /* I */
- opus_int length, /* I Input length */
- opus_int subfr, /* I Subframe number */
- opus_int shapingLPCOrder, /* I Shaping LPC filter order */
- opus_int predictLPCOrder, /* I Prediction filter order */
- opus_int warping_Q16, /* I */
- opus_int nStatesDelayedDecision, /* I Number of states in decision tree */
- opus_int *smpl_buf_idx, /* I Index to newest samples in buffers */
- opus_int decisionDelay /* I */
-)
-{
- opus_int i, j, k, Winner_ind, RDmin_ind, RDmax_ind, last_smple_idx;
- opus_int32 Winner_rand_state;
- opus_int32 LTP_pred_Q14, LPC_pred_Q14, n_AR_Q14, n_LTP_Q14;
- opus_int32 n_LF_Q14, r_Q10, rr_Q10, rd1_Q10, rd2_Q10, RDmin_Q10, RDmax_Q10;
- opus_int32 q1_Q0, q1_Q10, q2_Q10, exc_Q14, LPC_exc_Q14, xq_Q14, Gain_Q10;
- opus_int32 tmp1, tmp2, sLF_AR_shp_Q14;
- opus_int32 *pred_lag_ptr, *shp_lag_ptr, *psLPC_Q14;
- NSQ_sample_struct psSampleState[ MAX_DEL_DEC_STATES ][ 2 ];
- NSQ_del_dec_struct *psDD;
- NSQ_sample_struct *psSS;
- opus_int16 b_Q14_0, b_Q14_1, b_Q14_2, b_Q14_3, b_Q14_4;
- opus_int16 a_Q12_0, a_Q12_1, a_Q12_2, a_Q12_3, a_Q12_4, a_Q12_5, a_Q12_6;
- opus_int16 a_Q12_7, a_Q12_8, a_Q12_9, a_Q12_10, a_Q12_11, a_Q12_12, a_Q12_13;
- opus_int16 a_Q12_14, a_Q12_15;
-
- opus_int32 cur, prev, next;
-
- //Intialize b_Q14 variables
- b_Q14_0 = b_Q14[ 0 ];
- b_Q14_1 = b_Q14[ 1 ];
- b_Q14_2 = b_Q14[ 2 ];
- b_Q14_3 = b_Q14[ 3 ];
- b_Q14_4 = b_Q14[ 4 ];
-
- //Intialize a_Q12 variables
- a_Q12_0 = a_Q12[0];
- a_Q12_1 = a_Q12[1];
- a_Q12_2 = a_Q12[2];
- a_Q12_3 = a_Q12[3];
- a_Q12_4 = a_Q12[4];
- a_Q12_5 = a_Q12[5];
- a_Q12_6 = a_Q12[6];
- a_Q12_7 = a_Q12[7];
- a_Q12_8 = a_Q12[8];
- a_Q12_9 = a_Q12[9];
- a_Q12_10 = a_Q12[10];
- a_Q12_11 = a_Q12[11];
- a_Q12_12 = a_Q12[12];
- a_Q12_13 = a_Q12[13];
- a_Q12_14 = a_Q12[14];
- a_Q12_15 = a_Q12[15];
-
- long long temp64;
-
- silk_assert( nStatesDelayedDecision > 0 );
-
- shp_lag_ptr = &NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ];
- pred_lag_ptr = &sLTP_Q15[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
- Gain_Q10 = silk_RSHIFT( Gain_Q16, 6 );
-
- for( i = 0; i < length; i++ ) {
- /* Perform common calculations used in all states */
-
- /* Long-term prediction */
- if( signalType == TYPE_VOICED ) {
- /* Unrolled loop */
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- temp64 = __builtin_mips_mult(pred_lag_ptr[ 0 ], b_Q14_0 );
- temp64 = __builtin_mips_madd( temp64, pred_lag_ptr[ -1 ], b_Q14_1 );
- temp64 = __builtin_mips_madd( temp64, pred_lag_ptr[ -2 ], b_Q14_2 );
- temp64 = __builtin_mips_madd( temp64, pred_lag_ptr[ -3 ], b_Q14_3 );
- temp64 = __builtin_mips_madd( temp64, pred_lag_ptr[ -4 ], b_Q14_4 );
- temp64 += 32768;
- LTP_pred_Q14 = __builtin_mips_extr_w(temp64, 16);
- LTP_pred_Q14 = silk_LSHIFT( LTP_pred_Q14, 1 ); /* Q13 -> Q14 */
- pred_lag_ptr++;
- } else {
- LTP_pred_Q14 = 0;
- }
-
- /* Long-term shaping */
- if( lag > 0 ) {
- /* Symmetric, packed FIR coefficients */
- n_LTP_Q14 = silk_SMULWB( silk_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 );
- n_LTP_Q14 = silk_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ], HarmShapeFIRPacked_Q14 );
- n_LTP_Q14 = silk_SUB_LSHIFT32( LTP_pred_Q14, n_LTP_Q14, 2 ); /* Q12 -> Q14 */
- 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 = silk_RAND( psDD->Seed );
-
- /* Pointer used in short term prediction and shaping */
- psLPC_Q14 = &psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - 1 + i ];
- /* Short-term prediction */
- silk_assert( predictLPCOrder == 10 || predictLPCOrder == 16 );
- temp64 = __builtin_mips_mult(psLPC_Q14[ 0 ], a_Q12_0 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -1 ], a_Q12_1 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -2 ], a_Q12_2 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -3 ], a_Q12_3 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -4 ], a_Q12_4 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -5 ], a_Q12_5 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -6 ], a_Q12_6 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -7 ], a_Q12_7 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -8 ], a_Q12_8 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -9 ], a_Q12_9 );
- if( predictLPCOrder == 16 ) {
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -10 ], a_Q12_10 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -11 ], a_Q12_11 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -12 ], a_Q12_12 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -13 ], a_Q12_13 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -14 ], a_Q12_14 );
- temp64 = __builtin_mips_madd( temp64, psLPC_Q14[ -15 ], a_Q12_15 );
- }
- temp64 += 32768;
- LPC_pred_Q14 = __builtin_mips_extr_w(temp64, 16);
-
- LPC_pred_Q14 = silk_LSHIFT( LPC_pred_Q14, 4 ); /* Q10 -> Q14 */
-
- /* Noise shape feedback */
- silk_assert( ( shapingLPCOrder & 1 ) == 0 ); /* check that order is even */
- /* Output of lowpass section */
- tmp2 = silk_SMLAWB( psLPC_Q14[ 0 ], psDD->sAR2_Q14[ 0 ], warping_Q16 );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( psDD->sAR2_Q14[ 0 ], psDD->sAR2_Q14[ 1 ] - tmp2, warping_Q16 );
- psDD->sAR2_Q14[ 0 ] = tmp2;
-
- temp64 = __builtin_mips_mult(tmp2, AR_shp_Q13[ 0 ] );
-
- prev = psDD->sAR2_Q14[ 1 ];
-
- /* Loop over allpass sections */
- for( j = 2; j < shapingLPCOrder; j += 2 ) {
- cur = psDD->sAR2_Q14[ j ];
- next = psDD->sAR2_Q14[ j+1 ];
- /* Output of allpass section */
- tmp2 = silk_SMLAWB( prev, cur - tmp1, warping_Q16 );
- psDD->sAR2_Q14[ j - 1 ] = tmp1;
- temp64 = __builtin_mips_madd( temp64, tmp1, AR_shp_Q13[ j - 1 ] );
- temp64 = __builtin_mips_madd( temp64, tmp2, AR_shp_Q13[ j ] );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( cur, next - tmp2, warping_Q16 );
- psDD->sAR2_Q14[ j + 0 ] = tmp2;
- prev = next;
- }
- psDD->sAR2_Q14[ shapingLPCOrder - 1 ] = tmp1;
- temp64 = __builtin_mips_madd( temp64, tmp1, AR_shp_Q13[ shapingLPCOrder - 1 ] );
- temp64 += 32768;
- n_AR_Q14 = __builtin_mips_extr_w(temp64, 16);
- n_AR_Q14 = silk_LSHIFT( n_AR_Q14, 1 ); /* Q11 -> Q12 */
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, psDD->LF_AR_Q14, Tilt_Q14 ); /* Q12 */
- n_AR_Q14 = silk_LSHIFT( n_AR_Q14, 2 ); /* Q12 -> Q14 */
-
- n_LF_Q14 = silk_SMULWB( psDD->Shape_Q14[ *smpl_buf_idx ], LF_shp_Q14 ); /* Q12 */
- n_LF_Q14 = silk_SMLAWT( n_LF_Q14, psDD->LF_AR_Q14, LF_shp_Q14 ); /* Q12 */
- n_LF_Q14 = silk_LSHIFT( n_LF_Q14, 2 ); /* Q12 -> Q14 */
-
- /* Input minus prediction plus noise feedback */
- /* r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP */
- tmp1 = silk_ADD32( n_AR_Q14, n_LF_Q14 ); /* Q14 */
- tmp2 = silk_ADD32( n_LTP_Q14, LPC_pred_Q14 ); /* Q13 */
- tmp1 = silk_SUB32( tmp2, tmp1 ); /* Q13 */
- tmp1 = silk_RSHIFT_ROUND( tmp1, 4 ); /* Q10 */
-
- r_Q10 = silk_SUB32( x_Q10[ i ], tmp1 ); /* residual error Q10 */
-
- /* Flip sign depending on dither */
- if ( psDD->Seed < 0 ) {
- r_Q10 = -r_Q10;
- }
- r_Q10 = silk_LIMIT_32( r_Q10, -(31 << 10), 30 << 10 );
-
- /* Find two quantization level candidates and measure their rate-distortion */
- q1_Q10 = silk_SUB32( r_Q10, offset_Q10 );
- q1_Q0 = silk_RSHIFT( q1_Q10, 10 );
- if( q1_Q0 > 0 ) {
- q1_Q10 = silk_SUB32( silk_LSHIFT( q1_Q0, 10 ), QUANT_LEVEL_ADJUST_Q10 );
- q1_Q10 = silk_ADD32( q1_Q10, offset_Q10 );
- q2_Q10 = silk_ADD32( q1_Q10, 1024 );
- rd1_Q10 = silk_SMULBB( q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else if( q1_Q0 == 0 ) {
- q1_Q10 = offset_Q10;
- q2_Q10 = silk_ADD32( q1_Q10, 1024 - QUANT_LEVEL_ADJUST_Q10 );
- rd1_Q10 = silk_SMULBB( q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else if( q1_Q0 == -1 ) {
- q2_Q10 = offset_Q10;
- q1_Q10 = silk_SUB32( q2_Q10, 1024 - QUANT_LEVEL_ADJUST_Q10 );
- rd1_Q10 = silk_SMULBB( -q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else { /* q1_Q0 < -1 */
- q1_Q10 = silk_ADD32( silk_LSHIFT( q1_Q0, 10 ), QUANT_LEVEL_ADJUST_Q10 );
- q1_Q10 = silk_ADD32( q1_Q10, offset_Q10 );
- q2_Q10 = silk_ADD32( q1_Q10, 1024 );
- rd1_Q10 = silk_SMULBB( -q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( -q2_Q10, Lambda_Q10 );
- }
- rr_Q10 = silk_SUB32( r_Q10, q1_Q10 );
- rd1_Q10 = silk_RSHIFT( silk_SMLABB( rd1_Q10, rr_Q10, rr_Q10 ), 10 );
- rr_Q10 = silk_SUB32( r_Q10, q2_Q10 );
- rd2_Q10 = silk_RSHIFT( silk_SMLABB( rd2_Q10, rr_Q10, rr_Q10 ), 10 );
-
- if( rd1_Q10 < rd2_Q10 ) {
- psSS[ 0 ].RD_Q10 = silk_ADD32( psDD->RD_Q10, rd1_Q10 );
- psSS[ 1 ].RD_Q10 = silk_ADD32( psDD->RD_Q10, rd2_Q10 );
- psSS[ 0 ].Q_Q10 = q1_Q10;
- psSS[ 1 ].Q_Q10 = q2_Q10;
- } else {
- psSS[ 0 ].RD_Q10 = silk_ADD32( psDD->RD_Q10, rd2_Q10 );
- psSS[ 1 ].RD_Q10 = silk_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_Q14 = silk_LSHIFT32( psSS[ 0 ].Q_Q10, 4 );
- if ( psDD->Seed < 0 ) {
- exc_Q14 = -exc_Q14;
- }
-
- /* Add predictions */
- LPC_exc_Q14 = silk_ADD32( exc_Q14, LTP_pred_Q14 );
- xq_Q14 = silk_ADD32( LPC_exc_Q14, LPC_pred_Q14 );
-
- /* Update states */
- sLF_AR_shp_Q14 = silk_SUB32( xq_Q14, n_AR_Q14 );
- psSS[ 0 ].sLTP_shp_Q14 = silk_SUB32( sLF_AR_shp_Q14, n_LF_Q14 );
- psSS[ 0 ].LF_AR_Q14 = sLF_AR_shp_Q14;
- psSS[ 0 ].LPC_exc_Q14 = LPC_exc_Q14;
- psSS[ 0 ].xq_Q14 = xq_Q14;
-
- /* Update states for second best quantization */
-
- /* Quantized excitation */
- exc_Q14 = silk_LSHIFT32( psSS[ 1 ].Q_Q10, 4 );
- if ( psDD->Seed < 0 ) {
- exc_Q14 = -exc_Q14;
- }
-
-
- /* Add predictions */
- LPC_exc_Q14 = silk_ADD32( exc_Q14, LTP_pred_Q14 );
- xq_Q14 = silk_ADD32( LPC_exc_Q14, LPC_pred_Q14 );
-
- /* Update states */
- sLF_AR_shp_Q14 = silk_SUB32( xq_Q14, n_AR_Q14 );
- psSS[ 1 ].sLTP_shp_Q14 = silk_SUB32( sLF_AR_shp_Q14, n_LF_Q14 );
- psSS[ 1 ].LF_AR_Q14 = sLF_AR_shp_Q14;
- psSS[ 1 ].LPC_exc_Q14 = LPC_exc_Q14;
- psSS[ 1 ].xq_Q14 = xq_Q14;
- }
-
- *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 = silk_ADD32( psSampleState[ k ][ 0 ].RD_Q10, silk_int32_MAX >> 4 );
- psSampleState[ k ][ 1 ].RD_Q10 = silk_ADD32( psSampleState[ k ][ 1 ].RD_Q10, silk_int32_MAX >> 4 );
- silk_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 ) {
- silk_memcpy( ( (opus_int32 *)&psDelDec[ RDmax_ind ] ) + i,
- ( (opus_int32 *)&psDelDec[ RDmin_ind ] ) + i, sizeof( NSQ_del_dec_struct ) - i * sizeof( opus_int32) );
- silk_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 ) {
- pulses[ i - decisionDelay ] = (opus_int8)silk_RSHIFT_ROUND( psDD->Q_Q10[ last_smple_idx ], 10 );
- xq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND(
- silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], delayedGain_Q10[ last_smple_idx ] ), 8 ) );
- NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay ] = psDD->Shape_Q14[ last_smple_idx ];
- sLTP_Q15[ NSQ->sLTP_buf_idx - decisionDelay ] = psDD->Pred_Q15[ 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_Q14 = psSS->LF_AR_Q14;
- psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH + i ] = psSS->xq_Q14;
- psDD->Xq_Q14[ *smpl_buf_idx ] = psSS->xq_Q14;
- psDD->Q_Q10[ *smpl_buf_idx ] = psSS->Q_Q10;
- psDD->Pred_Q15[ *smpl_buf_idx ] = silk_LSHIFT32( psSS->LPC_exc_Q14, 1 );
- psDD->Shape_Q14[ *smpl_buf_idx ] = psSS->sLTP_shp_Q14;
- psDD->Seed = silk_ADD32_ovflw( psDD->Seed, silk_RSHIFT_ROUND( psSS->Q_Q10, 10 ) );
- psDD->RandState[ *smpl_buf_idx ] = psDD->Seed;
- psDD->RD_Q10 = psSS->RD_Q10;
- }
- delayedGain_Q10[ *smpl_buf_idx ] = Gain_Q10;
- }
- /* Update LPC states */
- for( k = 0; k < nStatesDelayedDecision; k++ ) {
- psDD = &psDelDec[ k ];
- silk_memcpy( psDD->sLPC_Q14, &psDD->sLPC_Q14[ length ], NSQ_LPC_BUF_LENGTH * sizeof( opus_int32 ) );
- }
-}
-
-#endif /* __NSQ_DEL_DEC_MIPSR1_H__ */
diff --git a/drivers/opus/silk/mips/macros_mipsr1.h b/drivers/opus/silk/mips/macros_mipsr1.h
deleted file mode 100644
index 12ed981a6e..0000000000
--- a/drivers/opus/silk/mips/macros_mipsr1.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-
-#ifndef __SILK_MACROS_MIPSR1_H__
-#define __SILK_MACROS_MIPSR1_H__
-
-#define mips_clz(x) __builtin_clz(x)
-
-#undef silk_SMULWB
-static inline int silk_SMULWB(int a, int b)
-{
- long long ac;
- int c;
-
- ac = __builtin_mips_mult(a, (opus_int32)(opus_int16)b);
- c = __builtin_mips_extr_w(ac, 16);
-
- return c;
-}
-
-#undef silk_SMLAWB
-#define silk_SMLAWB(a32, b32, c32) ((a32) + silk_SMULWB(b32, c32))
-
-#undef silk_SMULWW
-static inline int silk_SMULWW(int a, int b)
-{
- long long ac;
- int c;
-
- ac = __builtin_mips_mult(a, b);
- c = __builtin_mips_extr_w(ac, 16);
-
- return c;
-}
-
-#undef silk_SMLAWW
-static inline int silk_SMLAWW(int a, int b, int c)
-{
- long long ac;
- int res;
-
- ac = __builtin_mips_mult(b, c);
- res = __builtin_mips_extr_w(ac, 16);
- res += a;
-
- return res;
-}
-
-#define OVERRIDE_silk_CLZ16
-static inline opus_int32 silk_CLZ16(opus_int16 in16)
-{
- int re32;
- opus_int32 in32 = (opus_int32 )in16;
- re32 = mips_clz(in32);
- re32-=16;
- return re32;
-}
-
-#define OVERRIDE_silk_CLZ32
-static inline opus_int32 silk_CLZ32(opus_int32 in32)
-{
- int re32;
- re32 = mips_clz(in32);
- return re32;
-}
-
-#endif /* __SILK_MACROS_MIPSR1_H__ */
diff --git a/drivers/opus/silk/mips/sigproc_fix_mipsr1.h b/drivers/opus/silk/mips/sigproc_fix_mipsr1.h
deleted file mode 100644
index 3b0a695365..0000000000
--- a/drivers/opus/silk/mips/sigproc_fix_mipsr1.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_SIGPROC_FIX_MIPSR1_H
-#define SILK_SIGPROC_FIX_MIPSR1_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#undef silk_SAT16
-static inline short int silk_SAT16(int a)
-{
- int c;
- c = __builtin_mips_shll_s_w(a, 16);
- c = c>>16;
-
- return c;
-}
-
-#undef silk_LSHIFT_SAT32
-static inline int silk_LSHIFT_SAT32(int a, int shift)
-{
- int r;
-
- r = __builtin_mips_shll_s_w(a, shift);
-
- return r;
-}
-
-#undef silk_RSHIFT_ROUND
-static inline int silk_RSHIFT_ROUND(int a, int shift)
-{
- int r;
-
- r = __builtin_mips_shra_r_w(a, shift);
- return r;
-}
-
-#endif /* SILK_SIGPROC_FIX_MIPSR1_H */
diff --git a/drivers/opus/silk/pitch_est_defines.h b/drivers/opus/silk/pitch_est_defines.h
deleted file mode 100644
index e2d9e517c4..0000000000
--- a/drivers/opus/silk/pitch_est_defines.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_PE_DEFINES_H
-#define SILK_PE_DEFINES_H
-
-#include "opus/silk/SigProc_FIX.h"
-
-/********************************************************/
-/* Definitions for pitch estimator */
-/********************************************************/
-
-#define PE_MAX_FS_KHZ 16 /* Maximum sampling frequency used */
-
-#define PE_MAX_NB_SUBFR 4
-#define PE_SUBFR_LENGTH_MS 5 /* 5 ms */
-
-#define PE_LTP_MEM_LENGTH_MS ( 4 * PE_SUBFR_LENGTH_MS )
-
-#define PE_MAX_FRAME_LENGTH_MS ( PE_LTP_MEM_LENGTH_MS + PE_MAX_NB_SUBFR * PE_SUBFR_LENGTH_MS )
-#define PE_MAX_FRAME_LENGTH ( PE_MAX_FRAME_LENGTH_MS * PE_MAX_FS_KHZ )
-#define PE_MAX_FRAME_LENGTH_ST_1 ( PE_MAX_FRAME_LENGTH >> 2 )
-#define PE_MAX_FRAME_LENGTH_ST_2 ( PE_MAX_FRAME_LENGTH >> 1 )
-
-#define PE_MAX_LAG_MS 18 /* 18 ms -> 56 Hz */
-#define PE_MIN_LAG_MS 2 /* 2 ms -> 500 Hz */
-#define PE_MAX_LAG ( PE_MAX_LAG_MS * PE_MAX_FS_KHZ )
-#define PE_MIN_LAG ( PE_MIN_LAG_MS * PE_MAX_FS_KHZ )
-
-#define PE_D_SRCH_LENGTH 24
-
-#define PE_NB_STAGE3_LAGS 5
-
-#define PE_NB_CBKS_STAGE2 3
-#define PE_NB_CBKS_STAGE2_EXT 11
-
-#define PE_NB_CBKS_STAGE3_MAX 34
-#define PE_NB_CBKS_STAGE3_MID 24
-#define PE_NB_CBKS_STAGE3_MIN 16
-
-#define PE_NB_CBKS_STAGE3_10MS 12
-#define PE_NB_CBKS_STAGE2_10MS 3
-
-#define PE_SHORTLAG_BIAS 0.2f /* for logarithmic weighting */
-#define PE_PREVLAG_BIAS 0.2f /* for logarithmic weighting */
-#define PE_FLATCONTOUR_BIAS 0.05f
-
-#define SILK_PE_MIN_COMPLEX 0
-#define SILK_PE_MID_COMPLEX 1
-#define SILK_PE_MAX_COMPLEX 2
-
-/* Tables for 20 ms frames */
-extern const opus_int8 silk_CB_lags_stage2[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE2_EXT ];
-extern const opus_int8 silk_CB_lags_stage3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ];
-extern const opus_int8 silk_Lag_range_stage3[ SILK_PE_MAX_COMPLEX + 1 ] [ PE_MAX_NB_SUBFR ][ 2 ];
-extern const opus_int8 silk_nb_cbk_searchs_stage3[ SILK_PE_MAX_COMPLEX + 1 ];
-
-/* Tables for 10 ms frames */
-extern const opus_int8 silk_CB_lags_stage2_10_ms[ PE_MAX_NB_SUBFR >> 1][ 3 ];
-extern const opus_int8 silk_CB_lags_stage3_10_ms[ PE_MAX_NB_SUBFR >> 1 ][ 12 ];
-extern const opus_int8 silk_Lag_range_stage3_10_ms[ PE_MAX_NB_SUBFR >> 1 ][ 2 ];
-
-#endif
-
diff --git a/drivers/opus/silk/pitch_est_tables.c b/drivers/opus/silk/pitch_est_tables.c
deleted file mode 100644
index eb17bf0b26..0000000000
--- a/drivers/opus/silk/pitch_est_tables.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/typedef.h"
-#include "opus/silk/pitch_est_defines.h"
-
-const opus_int8 silk_CB_lags_stage2_10_ms[ PE_MAX_NB_SUBFR >> 1][ PE_NB_CBKS_STAGE2_10MS ] =
-{
- {0, 1, 0},
- {0, 0, 1}
-};
-
-const opus_int8 silk_CB_lags_stage3_10_ms[ PE_MAX_NB_SUBFR >> 1 ][ PE_NB_CBKS_STAGE3_10MS ] =
-{
- { 0, 0, 1,-1, 1,-1, 2,-2, 2,-2, 3,-3},
- { 0, 1, 0, 1,-1, 2,-1, 2,-2, 3,-2, 3}
-};
-
-const opus_int8 silk_Lag_range_stage3_10_ms[ PE_MAX_NB_SUBFR >> 1 ][ 2 ] =
-{
- {-3, 7},
- {-2, 7}
-};
-
-const opus_int8 silk_CB_lags_stage2[ PE_MAX_NB_SUBFR ][ PE_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 opus_int8 silk_CB_lags_stage3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ] =
-{
- {0, 0, 1,-1, 0, 1,-1, 0,-1, 1,-2, 2,-2,-2, 2,-3, 2, 3,-3,-4, 3,-4, 4, 4,-5, 5,-6,-5, 6,-7, 6, 5, 8,-9},
- {0, 0, 1, 0, 0, 0, 0, 0, 0, 0,-1, 1, 0, 0, 1,-1, 0, 1,-1,-1, 1,-1, 2, 1,-1, 2,-2,-2, 2,-2, 2, 2, 3,-3},
- {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1,-1, 1, 0, 0, 2, 1,-1, 2,-1,-1, 2,-1, 2, 2,-1, 3,-2,-2,-2, 3},
- {0, 1, 0, 0, 1, 0, 1,-1, 2,-1, 2,-1, 2, 3,-2, 3,-2,-2, 4, 4,-3, 5,-3,-4, 6,-4, 6, 5,-5, 8,-6,-5,-7, 9}
-};
-
-const opus_int8 silk_Lag_range_stage3[ SILK_PE_MAX_COMPLEX + 1 ] [ PE_MAX_NB_SUBFR ][ 2 ] =
-{
- /* Lags to search for low number of stage3 cbks */
- {
- {-5,8},
- {-1,6},
- {-1,6},
- {-4,10}
- },
- /* Lags to search for middle number of stage3 cbks */
- {
- {-6,10},
- {-2,6},
- {-1,6},
- {-5,10}
- },
- /* Lags to search for max number of stage3 cbks */
- {
- {-9,12},
- {-3,7},
- {-2,7},
- {-7,13}
- }
-};
-
-const opus_int8 silk_nb_cbk_searchs_stage3[ SILK_PE_MAX_COMPLEX + 1 ] =
-{
- PE_NB_CBKS_STAGE3_MIN,
- PE_NB_CBKS_STAGE3_MID,
- PE_NB_CBKS_STAGE3_MAX
-};
diff --git a/drivers/opus/silk/process_NLSFs.c b/drivers/opus/silk/process_NLSFs.c
deleted file mode 100644
index 9d8f96d7b7..0000000000
--- a/drivers/opus/silk/process_NLSFs.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Limit, stabilize, convert and quantize NLSFs */
-void silk_process_NLSFs(
- silk_encoder_state *psEncC, /* I/O Encoder state */
- opus_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ], /* O Prediction coefficients */
- opus_int16 pNLSF_Q15[ MAX_LPC_ORDER ], /* I/O Normalized LSFs (quant out) (0 - (2^15-1)) */
- const opus_int16 prev_NLSFq_Q15[ MAX_LPC_ORDER ] /* I Previous Normalized LSFs (0 - (2^15-1)) */
-)
-{
- opus_int i, doInterpolate;
- opus_int NLSF_mu_Q20;
- opus_int32 i_sqr_Q15;
- opus_int16 pNLSF0_temp_Q15[ MAX_LPC_ORDER ];
- opus_int16 pNLSFW_QW[ MAX_LPC_ORDER ];
- opus_int16 pNLSFW0_temp_QW[ MAX_LPC_ORDER ];
-
- silk_assert( psEncC->speech_activity_Q8 >= 0 );
- silk_assert( psEncC->speech_activity_Q8 <= SILK_FIX_CONST( 1.0, 8 ) );
- silk_assert( psEncC->useInterpolatedNLSFs == 1 || psEncC->indices.NLSFInterpCoef_Q2 == ( 1 << 2 ) );
-
- /***********************/
- /* Calculate mu values */
- /***********************/
- /* NLSF_mu = 0.003 - 0.0015 * psEnc->speech_activity; */
- NLSF_mu_Q20 = silk_SMLAWB( SILK_FIX_CONST( 0.003, 20 ), SILK_FIX_CONST( -0.001, 28 ), psEncC->speech_activity_Q8 );
- if( psEncC->nb_subfr == 2 ) {
- /* Multiply by 1.5 for 10 ms packets */
- NLSF_mu_Q20 = silk_ADD_RSHIFT( NLSF_mu_Q20, NLSF_mu_Q20, 1 );
- }
-
- silk_assert( NLSF_mu_Q20 > 0 );
- silk_assert( NLSF_mu_Q20 <= SILK_FIX_CONST( 0.005, 20 ) );
-
- /* Calculate NLSF weights */
- silk_NLSF_VQ_weights_laroia( pNLSFW_QW, pNLSF_Q15, psEncC->predictLPCOrder );
-
- /* Update NLSF weights for interpolated NLSFs */
- doInterpolate = ( psEncC->useInterpolatedNLSFs == 1 ) && ( psEncC->indices.NLSFInterpCoef_Q2 < 4 );
- if( doInterpolate ) {
- /* Calculate the interpolated NLSF vector for the first half */
- silk_interpolate( pNLSF0_temp_Q15, prev_NLSFq_Q15, pNLSF_Q15,
- psEncC->indices.NLSFInterpCoef_Q2, psEncC->predictLPCOrder );
-
- /* Calculate first half NLSF weights for the interpolated NLSFs */
- silk_NLSF_VQ_weights_laroia( pNLSFW0_temp_QW, pNLSF0_temp_Q15, psEncC->predictLPCOrder );
-
- /* Update NLSF weights with contribution from first half */
- i_sqr_Q15 = silk_LSHIFT( silk_SMULBB( psEncC->indices.NLSFInterpCoef_Q2, psEncC->indices.NLSFInterpCoef_Q2 ), 11 );
- for( i = 0; i < psEncC->predictLPCOrder; i++ ) {
- pNLSFW_QW[ i ] = silk_SMLAWB( silk_RSHIFT( pNLSFW_QW[ i ], 1 ), (opus_int32)pNLSFW0_temp_QW[ i ], i_sqr_Q15 );
- silk_assert( pNLSFW_QW[ i ] >= 1 );
- }
- }
-
- silk_NLSF_encode( psEncC->indices.NLSFIndices, pNLSF_Q15, psEncC->psNLSF_CB, pNLSFW_QW,
- NLSF_mu_Q20, psEncC->NLSF_MSVQ_Survivors, psEncC->indices.signalType );
-
- /* Convert quantized NLSFs back to LPC coefficients */
- silk_NLSF2A( PredCoef_Q12[ 1 ], pNLSF_Q15, psEncC->predictLPCOrder );
-
- if( doInterpolate ) {
- /* Calculate the interpolated, quantized LSF vector for the first half */
- silk_interpolate( pNLSF0_temp_Q15, prev_NLSFq_Q15, pNLSF_Q15,
- psEncC->indices.NLSFInterpCoef_Q2, psEncC->predictLPCOrder );
-
- /* Convert back to LPC coefficients */
- silk_NLSF2A( PredCoef_Q12[ 0 ], pNLSF0_temp_Q15, psEncC->predictLPCOrder );
-
- } else {
- /* Copy LPC coefficients for first half from second half */
- silk_memcpy( PredCoef_Q12[ 0 ], PredCoef_Q12[ 1 ], psEncC->predictLPCOrder * sizeof( opus_int16 ) );
- }
-}
diff --git a/drivers/opus/silk/quant_LTP_gains.c b/drivers/opus/silk/quant_LTP_gains.c
deleted file mode 100644
index ffc3cb24ab..0000000000
--- a/drivers/opus/silk/quant_LTP_gains.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/silk/tuning_parameters.h"
-
-void silk_quant_LTP_gains(
- opus_int16 B_Q14[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (un)quantized LTP gains */
- opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook Index */
- opus_int8 *periodicity_index, /* O Periodicity Index */
- opus_int32 *sum_log_gain_Q7, /* I/O Cumulative max prediction gain */
- const opus_int32 W_Q18[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ], /* I Error Weights in Q18 */
- opus_int mu_Q9, /* I Mu value (R/D tradeoff) */
- opus_int lowComplexity, /* I Flag for low complexity */
- const opus_int nb_subfr, /* I number of subframes */
- int arch /* I Run-time architecture */
-)
-{
- opus_int j, k, cbk_size;
- opus_int8 temp_idx[ MAX_NB_SUBFR ];
- const opus_uint8 *cl_ptr_Q5;
- const opus_int8 *cbk_ptr_Q7;
- const opus_uint8 *cbk_gain_ptr_Q7;
- const opus_int16 *b_Q14_ptr;
- const opus_int32 *W_Q18_ptr;
- opus_int32 rate_dist_Q14_subfr, rate_dist_Q14, min_rate_dist_Q14;
- opus_int32 sum_log_gain_tmp_Q7, best_sum_log_gain_Q7, max_gain_Q7, gain_Q7;
-
- /***************************************************/
- /* iterate over different codebooks with different */
- /* rates/distortions, and choose best */
- /***************************************************/
- min_rate_dist_Q14 = silk_int32_MAX;
- best_sum_log_gain_Q7 = 0;
- for( k = 0; k < 3; k++ ) {
- /* Safety margin for pitch gain control, to take into account factors
- such as state rescaling/rewhitening. */
- opus_int32 gain_safety = SILK_FIX_CONST( 0.4, 7 );
-
- cl_ptr_Q5 = silk_LTP_gain_BITS_Q5_ptrs[ k ];
- cbk_ptr_Q7 = silk_LTP_vq_ptrs_Q7[ k ];
- cbk_gain_ptr_Q7 = silk_LTP_vq_gain_ptrs_Q7[ k ];
- cbk_size = silk_LTP_vq_sizes[ k ];
-
- /* Set up pointer to first subframe */
- W_Q18_ptr = W_Q18;
- b_Q14_ptr = B_Q14;
-
- rate_dist_Q14 = 0;
- sum_log_gain_tmp_Q7 = *sum_log_gain_Q7;
- for( j = 0; j < nb_subfr; j++ ) {
- max_gain_Q7 = silk_log2lin( ( SILK_FIX_CONST( MAX_SUM_LOG_GAIN_DB / 6.0, 7 ) - sum_log_gain_tmp_Q7 )
- + SILK_FIX_CONST( 7, 7 ) ) - gain_safety;
-
- silk_VQ_WMat_EC(
- &temp_idx[ j ], /* O index of best codebook vector */
- &rate_dist_Q14_subfr, /* O best weighted quantization error + mu * rate */
- &gain_Q7, /* O sum of absolute LTP coefficients */
- b_Q14_ptr, /* I input vector to be quantized */
- W_Q18_ptr, /* I weighting matrix */
- cbk_ptr_Q7, /* I codebook */
- cbk_gain_ptr_Q7, /* I codebook effective gains */
- cl_ptr_Q5, /* I code length for each codebook vector */
- mu_Q9, /* I tradeoff between weighted error and rate */
- max_gain_Q7, /* I maximum sum of absolute LTP coefficients */
- cbk_size, /* I number of vectors in codebook */
- arch /* I Run-time architecture */
- );
-
- rate_dist_Q14 = silk_ADD_POS_SAT32( rate_dist_Q14, rate_dist_Q14_subfr );
- sum_log_gain_tmp_Q7 = silk_max(0, sum_log_gain_tmp_Q7
- + silk_lin2log( gain_safety + gain_Q7 ) - SILK_FIX_CONST( 7, 7 ));
-
- b_Q14_ptr += LTP_ORDER;
- W_Q18_ptr += LTP_ORDER * LTP_ORDER;
- }
-
- /* Avoid never finding a codebook */
- rate_dist_Q14 = silk_min( silk_int32_MAX - 1, rate_dist_Q14 );
-
- if( rate_dist_Q14 < min_rate_dist_Q14 ) {
- min_rate_dist_Q14 = rate_dist_Q14;
- *periodicity_index = (opus_int8)k;
- silk_memcpy( cbk_index, temp_idx, nb_subfr * sizeof( opus_int8 ) );
- best_sum_log_gain_Q7 = sum_log_gain_tmp_Q7;
- }
-
- /* Break early in low-complexity mode if rate distortion is below threshold */
- if( lowComplexity && ( rate_dist_Q14 < silk_LTP_gain_middle_avg_RD_Q14 ) ) {
- break;
- }
- }
-
- cbk_ptr_Q7 = silk_LTP_vq_ptrs_Q7[ *periodicity_index ];
- for( j = 0; j < nb_subfr; j++ ) {
- for( k = 0; k < LTP_ORDER; k++ ) {
- B_Q14[ j * LTP_ORDER + k ] = silk_LSHIFT( cbk_ptr_Q7[ cbk_index[ j ] * LTP_ORDER + k ], 7 );
- }
- }
- *sum_log_gain_Q7 = best_sum_log_gain_Q7;
-}
diff --git a/drivers/opus/silk/resampler.c b/drivers/opus/silk/resampler.c
deleted file mode 100644
index 12b2f92060..0000000000
--- a/drivers/opus/silk/resampler.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/*
- * Matrix of resampling methods used:
- * Fs_out (kHz)
- * 8 12 16 24 48
- *
- * 8 C UF U UF UF
- * 12 AF C UF U UF
- * Fs_in (kHz) 16 D AF C UF UF
- * 24 AF D AF C U
- * 48 AF AF AF D C
- *
- * C -> Copy (no resampling)
- * D -> Allpass-based 2x downsampling
- * U -> Allpass-based 2x upsampling
- * UF -> Allpass-based 2x upsampling followed by FIR interpolation
- * AF -> AR2 filter followed by FIR interpolation
- */
-
-#include "opus/silk/resampler_private.h"
-
-/* Tables with delay compensation values to equalize total delay for different modes */
-static const opus_int8 delay_matrix_enc[ 5 ][ 3 ] = {
-/* in \ out 8 12 16 */
-/* 8 */ { 6, 0, 3 },
-/* 12 */ { 0, 7, 3 },
-/* 16 */ { 0, 1, 10 },
-/* 24 */ { 0, 2, 6 },
-/* 48 */ { 18, 10, 12 }
-};
-
-static const opus_int8 delay_matrix_dec[ 3 ][ 5 ] = {
-/* in \ out 8 12 16 24 48 */
-/* 8 */ { 4, 0, 2, 0, 0 },
-/* 12 */ { 0, 9, 4, 7, 4 },
-/* 16 */ { 0, 3, 12, 7, 7 }
-};
-
-/* Simple way to make [8000, 12000, 16000, 24000, 48000] to [0, 1, 2, 3, 4] */
-#define rateID(R) ( ( ( ((R)>>12) - ((R)>16000) ) >> ((R)>24000) ) - 1 )
-
-#define USE_silk_resampler_copy (0)
-#define USE_silk_resampler_private_up2_HQ_wrapper (1)
-#define USE_silk_resampler_private_IIR_FIR (2)
-#define USE_silk_resampler_private_down_FIR (3)
-
-/* Initialize/reset the resampler state for a given pair of input/output sampling rates */
-opus_int silk_resampler_init(
- silk_resampler_state_struct *S, /* I/O Resampler state */
- opus_int32 Fs_Hz_in, /* I Input sampling rate (Hz) */
- opus_int32 Fs_Hz_out, /* I Output sampling rate (Hz) */
- opus_int forEnc /* I If 1: encoder; if 0: decoder */
-)
-{
- opus_int up2x;
-
- /* Clear state */
- silk_memset( S, 0, sizeof( silk_resampler_state_struct ) );
-
- /* Input checking */
- if( forEnc ) {
- if( ( Fs_Hz_in != 8000 && Fs_Hz_in != 12000 && Fs_Hz_in != 16000 && Fs_Hz_in != 24000 && Fs_Hz_in != 48000 ) ||
- ( Fs_Hz_out != 8000 && Fs_Hz_out != 12000 && Fs_Hz_out != 16000 ) ) {
- silk_assert( 0 );
- return -1;
- }
- S->inputDelay = delay_matrix_enc[ rateID( Fs_Hz_in ) ][ rateID( Fs_Hz_out ) ];
- } else {
- if( ( Fs_Hz_in != 8000 && Fs_Hz_in != 12000 && Fs_Hz_in != 16000 ) ||
- ( Fs_Hz_out != 8000 && Fs_Hz_out != 12000 && Fs_Hz_out != 16000 && Fs_Hz_out != 24000 && Fs_Hz_out != 48000 ) ) {
- silk_assert( 0 );
- return -1;
- }
- S->inputDelay = delay_matrix_dec[ rateID( Fs_Hz_in ) ][ rateID( Fs_Hz_out ) ];
- }
-
- S->Fs_in_kHz = silk_DIV32_16( Fs_Hz_in, 1000 );
- S->Fs_out_kHz = silk_DIV32_16( Fs_Hz_out, 1000 );
-
- /* Number of samples processed per batch */
- S->batchSize = S->Fs_in_kHz * RESAMPLER_MAX_BATCH_SIZE_MS;
-
- /* Find resampler with the right sampling ratio */
- up2x = 0;
- if( Fs_Hz_out > Fs_Hz_in ) {
- /* Upsample */
- if( Fs_Hz_out == silk_MUL( Fs_Hz_in, 2 ) ) { /* Fs_out : Fs_in = 2 : 1 */
- /* Special case: directly use 2x upsampler */
- S->resampler_function = USE_silk_resampler_private_up2_HQ_wrapper;
- } else {
- /* Default resampler */
- S->resampler_function = USE_silk_resampler_private_IIR_FIR;
- up2x = 1;
- }
- } else if ( Fs_Hz_out < Fs_Hz_in ) {
- /* Downsample */
- S->resampler_function = USE_silk_resampler_private_down_FIR;
- if( silk_MUL( Fs_Hz_out, 4 ) == silk_MUL( Fs_Hz_in, 3 ) ) { /* Fs_out : Fs_in = 3 : 4 */
- S->FIR_Fracs = 3;
- S->FIR_Order = RESAMPLER_DOWN_ORDER_FIR0;
- S->Coefs = silk_Resampler_3_4_COEFS;
- } else if( silk_MUL( Fs_Hz_out, 3 ) == silk_MUL( Fs_Hz_in, 2 ) ) { /* Fs_out : Fs_in = 2 : 3 */
- S->FIR_Fracs = 2;
- S->FIR_Order = RESAMPLER_DOWN_ORDER_FIR0;
- S->Coefs = silk_Resampler_2_3_COEFS;
- } else if( silk_MUL( Fs_Hz_out, 2 ) == Fs_Hz_in ) { /* Fs_out : Fs_in = 1 : 2 */
- S->FIR_Fracs = 1;
- S->FIR_Order = RESAMPLER_DOWN_ORDER_FIR1;
- S->Coefs = silk_Resampler_1_2_COEFS;
- } else if( silk_MUL( Fs_Hz_out, 3 ) == Fs_Hz_in ) { /* Fs_out : Fs_in = 1 : 3 */
- S->FIR_Fracs = 1;
- S->FIR_Order = RESAMPLER_DOWN_ORDER_FIR2;
- S->Coefs = silk_Resampler_1_3_COEFS;
- } else if( silk_MUL( Fs_Hz_out, 4 ) == Fs_Hz_in ) { /* Fs_out : Fs_in = 1 : 4 */
- S->FIR_Fracs = 1;
- S->FIR_Order = RESAMPLER_DOWN_ORDER_FIR2;
- S->Coefs = silk_Resampler_1_4_COEFS;
- } else if( silk_MUL( Fs_Hz_out, 6 ) == Fs_Hz_in ) { /* Fs_out : Fs_in = 1 : 6 */
- S->FIR_Fracs = 1;
- S->FIR_Order = RESAMPLER_DOWN_ORDER_FIR2;
- S->Coefs = silk_Resampler_1_6_COEFS;
- } else {
- /* None available */
- silk_assert( 0 );
- return -1;
- }
- } else {
- /* Input and output sampling rates are equal: copy */
- S->resampler_function = USE_silk_resampler_copy;
- }
-
- /* Ratio of input/output samples */
- S->invRatio_Q16 = silk_LSHIFT32( silk_DIV32( silk_LSHIFT32( Fs_Hz_in, 14 + up2x ), Fs_Hz_out ), 2 );
- /* Make sure the ratio is rounded up */
- while( silk_SMULWW( S->invRatio_Q16, Fs_Hz_out ) < silk_LSHIFT32( Fs_Hz_in, up2x ) ) {
- S->invRatio_Q16++;
- }
-
- return 0;
-}
-
-/* Resampler: convert from one sampling rate to another */
-/* Input and output sampling rate are at most 48000 Hz */
-opus_int silk_resampler(
- silk_resampler_state_struct *S, /* I/O Resampler state */
- opus_int16 out[], /* O Output signal */
- const opus_int16 in[], /* I Input signal */
- opus_int32 inLen /* I Number of input samples */
-)
-{
- opus_int nSamples;
-
- /* Need at least 1 ms of input data */
- silk_assert( inLen >= S->Fs_in_kHz );
- /* Delay can't exceed the 1 ms of buffering */
- silk_assert( S->inputDelay <= S->Fs_in_kHz );
-
- nSamples = S->Fs_in_kHz - S->inputDelay;
-
- /* Copy to delay buffer */
- silk_memcpy( &S->delayBuf[ S->inputDelay ], in, nSamples * sizeof( opus_int16 ) );
-
- switch( S->resampler_function ) {
- case USE_silk_resampler_private_up2_HQ_wrapper:
- silk_resampler_private_up2_HQ_wrapper( S, out, S->delayBuf, S->Fs_in_kHz );
- silk_resampler_private_up2_HQ_wrapper( S, &out[ S->Fs_out_kHz ], &in[ nSamples ], inLen - S->Fs_in_kHz );
- break;
- case USE_silk_resampler_private_IIR_FIR:
- silk_resampler_private_IIR_FIR( S, out, S->delayBuf, S->Fs_in_kHz );
- silk_resampler_private_IIR_FIR( S, &out[ S->Fs_out_kHz ], &in[ nSamples ], inLen - S->Fs_in_kHz );
- break;
- case USE_silk_resampler_private_down_FIR:
- silk_resampler_private_down_FIR( S, out, S->delayBuf, S->Fs_in_kHz );
- silk_resampler_private_down_FIR( S, &out[ S->Fs_out_kHz ], &in[ nSamples ], inLen - S->Fs_in_kHz );
- break;
- default:
- silk_memcpy( out, S->delayBuf, S->Fs_in_kHz * sizeof( opus_int16 ) );
- silk_memcpy( &out[ S->Fs_out_kHz ], &in[ nSamples ], ( inLen - S->Fs_in_kHz ) * sizeof( opus_int16 ) );
- }
-
- /* Copy to delay buffer */
- silk_memcpy( S->delayBuf, &in[ inLen - S->inputDelay ], S->inputDelay * sizeof( opus_int16 ) );
-
- return 0;
-}
diff --git a/drivers/opus/silk/resampler_down2.c b/drivers/opus/silk/resampler_down2.c
deleted file mode 100644
index 20a42c98a6..0000000000
--- a/drivers/opus/silk/resampler_down2.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/resampler_rom.h"
-
-/* Downsample by a factor 2 */
-void silk_resampler_down2(
- opus_int32 *S, /* I/O State vector [ 2 ] */
- opus_int16 *out, /* O Output signal [ floor(len/2) ] */
- const opus_int16 *in, /* I Input signal [ len ] */
- opus_int32 inLen /* I Number of input samples */
-)
-{
- opus_int32 k, len2 = silk_RSHIFT32( inLen, 1 );
- opus_int32 in32, out32, Y, X;
-
- silk_assert( silk_resampler_down2_0 > 0 );
- silk_assert( silk_resampler_down2_1 < 0 );
-
- /* Internal variables and state are in Q10 format */
- for( k = 0; k < len2; k++ ) {
- /* Convert to Q10 */
- in32 = silk_LSHIFT( (opus_int32)in[ 2 * k ], 10 );
-
- /* All-pass section for even input sample */
- Y = silk_SUB32( in32, S[ 0 ] );
- X = silk_SMLAWB( Y, Y, silk_resampler_down2_1 );
- out32 = silk_ADD32( S[ 0 ], X );
- S[ 0 ] = silk_ADD32( in32, X );
-
- /* Convert to Q10 */
- in32 = silk_LSHIFT( (opus_int32)in[ 2 * k + 1 ], 10 );
-
- /* All-pass section for odd input sample, and add to output of previous section */
- Y = silk_SUB32( in32, S[ 1 ] );
- X = silk_SMULWB( Y, silk_resampler_down2_0 );
- out32 = silk_ADD32( out32, S[ 1 ] );
- out32 = silk_ADD32( out32, X );
- S[ 1 ] = silk_ADD32( in32, X );
-
- /* Add, convert back to int16 and store to output */
- out[ k ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( out32, 11 ) );
- }
-}
-
diff --git a/drivers/opus/silk/resampler_down2_3.c b/drivers/opus/silk/resampler_down2_3.c
deleted file mode 100644
index e01dd2bc72..0000000000
--- a/drivers/opus/silk/resampler_down2_3.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/resampler_private.h"
-#include "opus/celt/stack_alloc.h"
-
-#define ORDER_FIR 4
-
-/* Downsample by a factor 2/3, low quality */
-void silk_resampler_down2_3(
- opus_int32 *S, /* I/O State vector [ 6 ] */
- opus_int16 *out, /* O Output signal [ floor(2*inLen/3) ] */
- const opus_int16 *in, /* I Input signal [ inLen ] */
- opus_int32 inLen /* I Number of input samples */
-)
-{
- opus_int32 nSamplesIn, counter, res_Q6;
- VARDECL( opus_int32, buf );
- opus_int32 *buf_ptr;
- SAVE_STACK;
-
- ALLOC( buf, RESAMPLER_MAX_BATCH_SIZE_IN + ORDER_FIR, opus_int32 );
-
- /* Copy buffered samples to start of buffer */
- silk_memcpy( buf, S, ORDER_FIR * sizeof( opus_int32 ) );
-
- /* Iterate over blocks of frameSizeIn input samples */
- while( 1 ) {
- nSamplesIn = silk_min( inLen, RESAMPLER_MAX_BATCH_SIZE_IN );
-
- /* Second-order AR filter (output in Q8) */
- silk_resampler_private_AR2( &S[ ORDER_FIR ], &buf[ ORDER_FIR ], in,
- silk_Resampler_2_3_COEFS_LQ, nSamplesIn );
-
- /* Interpolate filtered signal */
- buf_ptr = buf;
- counter = nSamplesIn;
- while( counter > 2 ) {
- /* Inner product */
- res_Q6 = silk_SMULWB( buf_ptr[ 0 ], silk_Resampler_2_3_COEFS_LQ[ 2 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 1 ], silk_Resampler_2_3_COEFS_LQ[ 3 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 2 ], silk_Resampler_2_3_COEFS_LQ[ 5 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 3 ], silk_Resampler_2_3_COEFS_LQ[ 4 ] );
-
- /* Scale down, saturate and store in output array */
- *out++ = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( res_Q6, 6 ) );
-
- res_Q6 = silk_SMULWB( buf_ptr[ 1 ], silk_Resampler_2_3_COEFS_LQ[ 4 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 2 ], silk_Resampler_2_3_COEFS_LQ[ 5 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 3 ], silk_Resampler_2_3_COEFS_LQ[ 3 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 4 ], silk_Resampler_2_3_COEFS_LQ[ 2 ] );
-
- /* Scale down, saturate and store in output array */
- *out++ = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( res_Q6, 6 ) );
-
- buf_ptr += 3;
- counter -= 3;
- }
-
- in += nSamplesIn;
- inLen -= nSamplesIn;
-
- if( inLen > 0 ) {
- /* More iterations to do; copy last part of filtered signal to beginning of buffer */
- silk_memcpy( buf, &buf[ nSamplesIn ], ORDER_FIR * sizeof( opus_int32 ) );
- } else {
- break;
- }
- }
-
- /* Copy last part of filtered signal to the state for the next call */
- silk_memcpy( S, &buf[ nSamplesIn ], ORDER_FIR * sizeof( opus_int32 ) );
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/resampler_private.h b/drivers/opus/silk/resampler_private.h
deleted file mode 100644
index 5c0ee110fc..0000000000
--- a/drivers/opus/silk/resampler_private.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_RESAMPLER_PRIVATE_H
-#define SILK_RESAMPLER_PRIVATE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/resampler_structs.h"
-#include "opus/silk/resampler_rom.h"
-
-/* Number of input samples to process in the inner loop */
-#define RESAMPLER_MAX_BATCH_SIZE_MS 10
-#define RESAMPLER_MAX_FS_KHZ 48
-#define RESAMPLER_MAX_BATCH_SIZE_IN ( RESAMPLER_MAX_BATCH_SIZE_MS * RESAMPLER_MAX_FS_KHZ )
-
-/* Description: Hybrid IIR/FIR polyphase implementation of resampling */
-void silk_resampler_private_IIR_FIR(
- void *SS, /* I/O Resampler state */
- opus_int16 out[], /* O Output signal */
- const opus_int16 in[], /* I Input signal */
- opus_int32 inLen /* I Number of input samples */
-);
-
-/* Description: Hybrid IIR/FIR polyphase implementation of resampling */
-void silk_resampler_private_down_FIR(
- void *SS, /* I/O Resampler state */
- opus_int16 out[], /* O Output signal */
- const opus_int16 in[], /* I Input signal */
- opus_int32 inLen /* I Number of input samples */
-);
-
-/* Upsample by a factor 2, high quality */
-void silk_resampler_private_up2_HQ_wrapper(
- void *SS, /* I/O Resampler state (unused) */
- opus_int16 *out, /* O Output signal [ 2 * len ] */
- const opus_int16 *in, /* I Input signal [ len ] */
- opus_int32 len /* I Number of input samples */
-);
-
-/* Upsample by a factor 2, high quality */
-void silk_resampler_private_up2_HQ(
- opus_int32 *S, /* I/O Resampler state [ 6 ] */
- opus_int16 *out, /* O Output signal [ 2 * len ] */
- const opus_int16 *in, /* I Input signal [ len ] */
- opus_int32 len /* I Number of input samples */
-);
-
-/* Second order AR filter */
-void silk_resampler_private_AR2(
- opus_int32 S[], /* I/O State vector [ 2 ] */
- opus_int32 out_Q8[], /* O Output signal */
- const opus_int16 in[], /* I Input signal */
- const opus_int16 A_Q14[], /* I AR coefficients, Q14 */
- opus_int32 len /* I Signal length */
-);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* SILK_RESAMPLER_PRIVATE_H */
diff --git a/drivers/opus/silk/resampler_private_AR2.c b/drivers/opus/silk/resampler_private_AR2.c
deleted file mode 100644
index cc753ea704..0000000000
--- a/drivers/opus/silk/resampler_private_AR2.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/resampler_private.h"
-
-/* Second order AR filter with single delay elements */
-void silk_resampler_private_AR2(
- opus_int32 S[], /* I/O State vector [ 2 ] */
- opus_int32 out_Q8[], /* O Output signal */
- const opus_int16 in[], /* I Input signal */
- const opus_int16 A_Q14[], /* I AR coefficients, Q14 */
- opus_int32 len /* I Signal length */
-)
-{
- opus_int32 k;
- opus_int32 out32;
-
- for( k = 0; k < len; k++ ) {
- out32 = silk_ADD_LSHIFT32( S[ 0 ], (opus_int32)in[ k ], 8 );
- out_Q8[ k ] = out32;
- out32 = silk_LSHIFT( out32, 2 );
- S[ 0 ] = silk_SMLAWB( S[ 1 ], out32, A_Q14[ 0 ] );
- S[ 1 ] = silk_SMULWB( out32, A_Q14[ 1 ] );
- }
-}
-
diff --git a/drivers/opus/silk/resampler_private_IIR_FIR.c b/drivers/opus/silk/resampler_private_IIR_FIR.c
deleted file mode 100644
index 9a8733fbbb..0000000000
--- a/drivers/opus/silk/resampler_private_IIR_FIR.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/resampler_private.h"
-#include "opus/celt/stack_alloc.h"
-
-static OPUS_INLINE opus_int16 *silk_resampler_private_IIR_FIR_INTERPOL(
- opus_int16 *out,
- opus_int16 *buf,
- opus_int32 max_index_Q16,
- opus_int32 index_increment_Q16
-)
-{
- opus_int32 index_Q16, res_Q15;
- opus_int16 *buf_ptr;
- opus_int32 table_index;
-
- /* Interpolate upsampled signal and store in output array */
- for( index_Q16 = 0; index_Q16 < max_index_Q16; index_Q16 += index_increment_Q16 ) {
- table_index = silk_SMULWB( index_Q16 & 0xFFFF, 12 );
- buf_ptr = &buf[ index_Q16 >> 16 ];
-
- res_Q15 = silk_SMULBB( buf_ptr[ 0 ], silk_resampler_frac_FIR_12[ table_index ][ 0 ] );
- res_Q15 = silk_SMLABB( res_Q15, buf_ptr[ 1 ], silk_resampler_frac_FIR_12[ table_index ][ 1 ] );
- res_Q15 = silk_SMLABB( res_Q15, buf_ptr[ 2 ], silk_resampler_frac_FIR_12[ table_index ][ 2 ] );
- res_Q15 = silk_SMLABB( res_Q15, buf_ptr[ 3 ], silk_resampler_frac_FIR_12[ table_index ][ 3 ] );
- res_Q15 = silk_SMLABB( res_Q15, buf_ptr[ 4 ], silk_resampler_frac_FIR_12[ 11 - table_index ][ 3 ] );
- res_Q15 = silk_SMLABB( res_Q15, buf_ptr[ 5 ], silk_resampler_frac_FIR_12[ 11 - table_index ][ 2 ] );
- res_Q15 = silk_SMLABB( res_Q15, buf_ptr[ 6 ], silk_resampler_frac_FIR_12[ 11 - table_index ][ 1 ] );
- res_Q15 = silk_SMLABB( res_Q15, buf_ptr[ 7 ], silk_resampler_frac_FIR_12[ 11 - table_index ][ 0 ] );
- *out++ = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( res_Q15, 15 ) );
- }
- return out;
-}
-/* Upsample using a combination of allpass-based 2x upsampling and FIR interpolation */
-void silk_resampler_private_IIR_FIR(
- void *SS, /* I/O Resampler state */
- opus_int16 out[], /* O Output signal */
- const opus_int16 in[], /* I Input signal */
- opus_int32 inLen /* I Number of input samples */
-)
-{
- silk_resampler_state_struct *S = (silk_resampler_state_struct *)SS;
- opus_int32 nSamplesIn;
- opus_int32 max_index_Q16, index_increment_Q16;
- VARDECL( opus_int16, buf );
- SAVE_STACK;
-
- ALLOC( buf, 2 * S->batchSize + RESAMPLER_ORDER_FIR_12, opus_int16 );
-
- /* Copy buffered samples to start of buffer */
- silk_memcpy( buf, S->sFIR.i16, RESAMPLER_ORDER_FIR_12 * sizeof( opus_int16 ) );
-
- /* Iterate over blocks of frameSizeIn input samples */
- index_increment_Q16 = S->invRatio_Q16;
- while( 1 ) {
- nSamplesIn = silk_min( inLen, S->batchSize );
-
- /* Upsample 2x */
- silk_resampler_private_up2_HQ( S->sIIR, &buf[ RESAMPLER_ORDER_FIR_12 ], in, nSamplesIn );
-
- max_index_Q16 = silk_LSHIFT32( nSamplesIn, 16 + 1 ); /* + 1 because 2x upsampling */
- out = silk_resampler_private_IIR_FIR_INTERPOL( out, buf, max_index_Q16, index_increment_Q16 );
- in += nSamplesIn;
- inLen -= nSamplesIn;
-
- if( inLen > 0 ) {
- /* More iterations to do; copy last part of filtered signal to beginning of buffer */
- silk_memcpy( buf, &buf[ nSamplesIn << 1 ], RESAMPLER_ORDER_FIR_12 * sizeof( opus_int16 ) );
- } else {
- break;
- }
- }
-
- /* Copy last part of filtered signal to the state for the next call */
- silk_memcpy( S->sFIR.i16, &buf[ nSamplesIn << 1 ], RESAMPLER_ORDER_FIR_12 * sizeof( opus_int16 ) );
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/resampler_private_down_FIR.c b/drivers/opus/silk/resampler_private_down_FIR.c
deleted file mode 100644
index fb9acc60a7..0000000000
--- a/drivers/opus/silk/resampler_private_down_FIR.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/resampler_private.h"
-#include "opus/celt/stack_alloc.h"
-
-static OPUS_INLINE opus_int16 *silk_resampler_private_down_FIR_INTERPOL(
- opus_int16 *out,
- opus_int32 *buf,
- const opus_int16 *FIR_Coefs,
- opus_int FIR_Order,
- opus_int FIR_Fracs,
- opus_int32 max_index_Q16,
- opus_int32 index_increment_Q16
-)
-{
- opus_int32 index_Q16, res_Q6;
- opus_int32 *buf_ptr;
- opus_int32 interpol_ind;
- const opus_int16 *interpol_ptr;
-
- switch( FIR_Order ) {
- case RESAMPLER_DOWN_ORDER_FIR0:
- for( index_Q16 = 0; index_Q16 < max_index_Q16; index_Q16 += index_increment_Q16 ) {
- /* Integer part gives pointer to buffered input */
- buf_ptr = buf + silk_RSHIFT( index_Q16, 16 );
-
- /* Fractional part gives interpolation coefficients */
- interpol_ind = silk_SMULWB( index_Q16 & 0xFFFF, FIR_Fracs );
-
- /* Inner product */
- interpol_ptr = &FIR_Coefs[ RESAMPLER_DOWN_ORDER_FIR0 / 2 * interpol_ind ];
- res_Q6 = silk_SMULWB( buf_ptr[ 0 ], interpol_ptr[ 0 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 1 ], interpol_ptr[ 1 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 2 ], interpol_ptr[ 2 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 3 ], interpol_ptr[ 3 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 4 ], interpol_ptr[ 4 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 5 ], interpol_ptr[ 5 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 6 ], interpol_ptr[ 6 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 7 ], interpol_ptr[ 7 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 8 ], interpol_ptr[ 8 ] );
- interpol_ptr = &FIR_Coefs[ RESAMPLER_DOWN_ORDER_FIR0 / 2 * ( FIR_Fracs - 1 - interpol_ind ) ];
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 17 ], interpol_ptr[ 0 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 16 ], interpol_ptr[ 1 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 15 ], interpol_ptr[ 2 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 14 ], interpol_ptr[ 3 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 13 ], interpol_ptr[ 4 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 12 ], interpol_ptr[ 5 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 11 ], interpol_ptr[ 6 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 10 ], interpol_ptr[ 7 ] );
- res_Q6 = silk_SMLAWB( res_Q6, buf_ptr[ 9 ], interpol_ptr[ 8 ] );
-
- /* Scale down, saturate and store in output array */
- *out++ = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( res_Q6, 6 ) );
- }
- break;
- case RESAMPLER_DOWN_ORDER_FIR1:
- for( index_Q16 = 0; index_Q16 < max_index_Q16; index_Q16 += index_increment_Q16 ) {
- /* Integer part gives pointer to buffered input */
- buf_ptr = buf + silk_RSHIFT( index_Q16, 16 );
-
- /* Inner product */
- res_Q6 = silk_SMULWB( silk_ADD32( buf_ptr[ 0 ], buf_ptr[ 23 ] ), FIR_Coefs[ 0 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 1 ], buf_ptr[ 22 ] ), FIR_Coefs[ 1 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 2 ], buf_ptr[ 21 ] ), FIR_Coefs[ 2 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 3 ], buf_ptr[ 20 ] ), FIR_Coefs[ 3 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 4 ], buf_ptr[ 19 ] ), FIR_Coefs[ 4 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 5 ], buf_ptr[ 18 ] ), FIR_Coefs[ 5 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 6 ], buf_ptr[ 17 ] ), FIR_Coefs[ 6 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 7 ], buf_ptr[ 16 ] ), FIR_Coefs[ 7 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 8 ], buf_ptr[ 15 ] ), FIR_Coefs[ 8 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 9 ], buf_ptr[ 14 ] ), FIR_Coefs[ 9 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 10 ], buf_ptr[ 13 ] ), FIR_Coefs[ 10 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 11 ], buf_ptr[ 12 ] ), FIR_Coefs[ 11 ] );
-
- /* Scale down, saturate and store in output array */
- *out++ = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( res_Q6, 6 ) );
- }
- break;
- case RESAMPLER_DOWN_ORDER_FIR2:
- for( index_Q16 = 0; index_Q16 < max_index_Q16; index_Q16 += index_increment_Q16 ) {
- /* Integer part gives pointer to buffered input */
- buf_ptr = buf + silk_RSHIFT( index_Q16, 16 );
-
- /* Inner product */
- res_Q6 = silk_SMULWB( silk_ADD32( buf_ptr[ 0 ], buf_ptr[ 35 ] ), FIR_Coefs[ 0 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 1 ], buf_ptr[ 34 ] ), FIR_Coefs[ 1 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 2 ], buf_ptr[ 33 ] ), FIR_Coefs[ 2 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 3 ], buf_ptr[ 32 ] ), FIR_Coefs[ 3 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 4 ], buf_ptr[ 31 ] ), FIR_Coefs[ 4 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 5 ], buf_ptr[ 30 ] ), FIR_Coefs[ 5 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 6 ], buf_ptr[ 29 ] ), FIR_Coefs[ 6 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 7 ], buf_ptr[ 28 ] ), FIR_Coefs[ 7 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 8 ], buf_ptr[ 27 ] ), FIR_Coefs[ 8 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 9 ], buf_ptr[ 26 ] ), FIR_Coefs[ 9 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 10 ], buf_ptr[ 25 ] ), FIR_Coefs[ 10 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 11 ], buf_ptr[ 24 ] ), FIR_Coefs[ 11 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 12 ], buf_ptr[ 23 ] ), FIR_Coefs[ 12 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 13 ], buf_ptr[ 22 ] ), FIR_Coefs[ 13 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 14 ], buf_ptr[ 21 ] ), FIR_Coefs[ 14 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 15 ], buf_ptr[ 20 ] ), FIR_Coefs[ 15 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 16 ], buf_ptr[ 19 ] ), FIR_Coefs[ 16 ] );
- res_Q6 = silk_SMLAWB( res_Q6, silk_ADD32( buf_ptr[ 17 ], buf_ptr[ 18 ] ), FIR_Coefs[ 17 ] );
-
- /* Scale down, saturate and store in output array */
- *out++ = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( res_Q6, 6 ) );
- }
- break;
- default:
- silk_assert( 0 );
- }
- return out;
-}
-
-/* Resample with a 2nd order AR filter followed by FIR interpolation */
-void silk_resampler_private_down_FIR(
- void *SS, /* I/O Resampler state */
- opus_int16 out[], /* O Output signal */
- const opus_int16 in[], /* I Input signal */
- opus_int32 inLen /* I Number of input samples */
-)
-{
- silk_resampler_state_struct *S = (silk_resampler_state_struct *)SS;
- opus_int32 nSamplesIn;
- opus_int32 max_index_Q16, index_increment_Q16;
- VARDECL( opus_int32, buf );
- const opus_int16 *FIR_Coefs;
- SAVE_STACK;
-
- ALLOC( buf, S->batchSize + S->FIR_Order, opus_int32 );
-
- /* Copy buffered samples to start of buffer */
- silk_memcpy( buf, S->sFIR.i32, S->FIR_Order * sizeof( opus_int32 ) );
-
- FIR_Coefs = &S->Coefs[ 2 ];
-
- /* Iterate over blocks of frameSizeIn input samples */
- index_increment_Q16 = S->invRatio_Q16;
- while( 1 ) {
- nSamplesIn = silk_min( inLen, S->batchSize );
-
- /* Second-order AR filter (output in Q8) */
- silk_resampler_private_AR2( S->sIIR, &buf[ S->FIR_Order ], in, S->Coefs, nSamplesIn );
-
- max_index_Q16 = silk_LSHIFT32( nSamplesIn, 16 );
-
- /* Interpolate filtered signal */
- out = silk_resampler_private_down_FIR_INTERPOL( out, buf, FIR_Coefs, S->FIR_Order,
- S->FIR_Fracs, max_index_Q16, index_increment_Q16 );
-
- in += nSamplesIn;
- inLen -= nSamplesIn;
-
- if( inLen > 1 ) {
- /* More iterations to do; copy last part of filtered signal to beginning of buffer */
- silk_memcpy( buf, &buf[ nSamplesIn ], S->FIR_Order * sizeof( opus_int32 ) );
- } else {
- break;
- }
- }
-
- /* Copy last part of filtered signal to the state for the next call */
- silk_memcpy( S->sFIR.i32, &buf[ nSamplesIn ], S->FIR_Order * sizeof( opus_int32 ) );
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/resampler_private_up2_HQ.c b/drivers/opus/silk/resampler_private_up2_HQ.c
deleted file mode 100644
index 0b23c16dab..0000000000
--- a/drivers/opus/silk/resampler_private_up2_HQ.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/resampler_private.h"
-
-/* Upsample by a factor 2, high quality */
-/* Uses 2nd order allpass filters for the 2x upsampling, followed by a */
-/* notch filter just above Nyquist. */
-void silk_resampler_private_up2_HQ(
- opus_int32 *S, /* I/O Resampler state [ 6 ] */
- opus_int16 *out, /* O Output signal [ 2 * len ] */
- const opus_int16 *in, /* I Input signal [ len ] */
- opus_int32 len /* I Number of input samples */
-)
-{
- opus_int32 k;
- opus_int32 in32, out32_1, out32_2, Y, X;
-
- silk_assert( silk_resampler_up2_hq_0[ 0 ] > 0 );
- silk_assert( silk_resampler_up2_hq_0[ 1 ] > 0 );
- silk_assert( silk_resampler_up2_hq_0[ 2 ] < 0 );
- silk_assert( silk_resampler_up2_hq_1[ 0 ] > 0 );
- silk_assert( silk_resampler_up2_hq_1[ 1 ] > 0 );
- silk_assert( silk_resampler_up2_hq_1[ 2 ] < 0 );
-
- /* Internal variables and state are in Q10 format */
- for( k = 0; k < len; k++ ) {
- /* Convert to Q10 */
- in32 = silk_LSHIFT( (opus_int32)in[ k ], 10 );
-
- /* First all-pass section for even output sample */
- Y = silk_SUB32( in32, S[ 0 ] );
- X = silk_SMULWB( Y, silk_resampler_up2_hq_0[ 0 ] );
- out32_1 = silk_ADD32( S[ 0 ], X );
- S[ 0 ] = silk_ADD32( in32, X );
-
- /* Second all-pass section for even output sample */
- Y = silk_SUB32( out32_1, S[ 1 ] );
- X = silk_SMULWB( Y, silk_resampler_up2_hq_0[ 1 ] );
- out32_2 = silk_ADD32( S[ 1 ], X );
- S[ 1 ] = silk_ADD32( out32_1, X );
-
- /* Third all-pass section for even output sample */
- Y = silk_SUB32( out32_2, S[ 2 ] );
- X = silk_SMLAWB( Y, Y, silk_resampler_up2_hq_0[ 2 ] );
- out32_1 = silk_ADD32( S[ 2 ], X );
- S[ 2 ] = silk_ADD32( out32_2, X );
-
- /* Apply gain in Q15, convert back to int16 and store to output */
- out[ 2 * k ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( out32_1, 10 ) );
-
- /* First all-pass section for odd output sample */
- Y = silk_SUB32( in32, S[ 3 ] );
- X = silk_SMULWB( Y, silk_resampler_up2_hq_1[ 0 ] );
- out32_1 = silk_ADD32( S[ 3 ], X );
- S[ 3 ] = silk_ADD32( in32, X );
-
- /* Second all-pass section for odd output sample */
- Y = silk_SUB32( out32_1, S[ 4 ] );
- X = silk_SMULWB( Y, silk_resampler_up2_hq_1[ 1 ] );
- out32_2 = silk_ADD32( S[ 4 ], X );
- S[ 4 ] = silk_ADD32( out32_1, X );
-
- /* Third all-pass section for odd output sample */
- Y = silk_SUB32( out32_2, S[ 5 ] );
- X = silk_SMLAWB( Y, Y, silk_resampler_up2_hq_1[ 2 ] );
- out32_1 = silk_ADD32( S[ 5 ], X );
- S[ 5 ] = silk_ADD32( out32_2, X );
-
- /* Apply gain in Q15, convert back to int16 and store to output */
- out[ 2 * k + 1 ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( out32_1, 10 ) );
- }
-}
-
-void silk_resampler_private_up2_HQ_wrapper(
- void *SS, /* I/O Resampler state (unused) */
- opus_int16 *out, /* O Output signal [ 2 * len ] */
- const opus_int16 *in, /* I Input signal [ len ] */
- opus_int32 len /* I Number of input samples */
-)
-{
- silk_resampler_state_struct *S = (silk_resampler_state_struct *)SS;
- silk_resampler_private_up2_HQ( S->sIIR, out, in, len );
-}
diff --git a/drivers/opus/silk/resampler_rom.c b/drivers/opus/silk/resampler_rom.c
deleted file mode 100644
index 7079efe1dc..0000000000
--- a/drivers/opus/silk/resampler_rom.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/* Filter coefficients for IIR/FIR polyphase resampling *
- * Total size: 179 Words (358 Bytes) */
-
-#include "opus/silk/resampler_private.h"
-
-/* Matlab code for the notch filter coefficients: */
-/* B = [1, 0.147, 1]; A = [1, 0.107, 0.89]; G = 0.93; freqz(G * B, A, 2^14, 16e3); axis([0, 8000, -10, 1]) */
-/* fprintf('\t%6d, %6d, %6d, %6d\n', round(B(2)*2^16), round(-A(2)*2^16), round((1-A(3))*2^16), round(G*2^15)) */
-/* const opus_int16 silk_resampler_up2_hq_notch[ 4 ] = { 9634, -7012, 7209, 30474 }; */
-
-/* Tables with IIR and FIR coefficients for fractional downsamplers (123 Words) */
-silk_DWORD_ALIGN const opus_int16 silk_Resampler_3_4_COEFS[ 2 + 3 * RESAMPLER_DOWN_ORDER_FIR0 / 2 ] = {
- -20694, -13867,
- -49, 64, 17, -157, 353, -496, 163, 11047, 22205,
- -39, 6, 91, -170, 186, 23, -896, 6336, 19928,
- -19, -36, 102, -89, -24, 328, -951, 2568, 15909,
-};
-
-silk_DWORD_ALIGN const opus_int16 silk_Resampler_2_3_COEFS[ 2 + 2 * RESAMPLER_DOWN_ORDER_FIR0 / 2 ] = {
- -14457, -14019,
- 64, 128, -122, 36, 310, -768, 584, 9267, 17733,
- 12, 128, 18, -142, 288, -117, -865, 4123, 14459,
-};
-
-silk_DWORD_ALIGN const opus_int16 silk_Resampler_1_2_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR1 / 2 ] = {
- 616, -14323,
- -10, 39, 58, -46, -84, 120, 184, -315, -541, 1284, 5380, 9024,
-};
-
-silk_DWORD_ALIGN const opus_int16 silk_Resampler_1_3_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR2 / 2 ] = {
- 16102, -15162,
- -13, 0, 20, 26, 5, -31, -43, -4, 65, 90, 7, -157, -248, -44, 593, 1583, 2612, 3271,
-};
-
-silk_DWORD_ALIGN const opus_int16 silk_Resampler_1_4_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR2 / 2 ] = {
- 22500, -15099,
- 3, -14, -20, -15, 2, 25, 37, 25, -16, -71, -107, -79, 50, 292, 623, 982, 1288, 1464,
-};
-
-silk_DWORD_ALIGN const opus_int16 silk_Resampler_1_6_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR2 / 2 ] = {
- 27540, -15257,
- 17, 12, 8, 1, -10, -22, -30, -32, -22, 3, 44, 100, 168, 243, 317, 381, 429, 455,
-};
-
-silk_DWORD_ALIGN const opus_int16 silk_Resampler_2_3_COEFS_LQ[ 2 + 2 * 2 ] = {
- -2797, -6507,
- 4697, 10739,
- 1567, 8276,
-};
-
-/* Table with interplation fractions of 1/24, 3/24, 5/24, ... , 23/24 : 23/24 (46 Words) */
-silk_DWORD_ALIGN const opus_int16 silk_resampler_frac_FIR_12[ 12 ][ RESAMPLER_ORDER_FIR_12 / 2 ] = {
- { 189, -600, 617, 30567 },
- { 117, -159, -1070, 29704 },
- { 52, 221, -2392, 28276 },
- { -4, 529, -3350, 26341 },
- { -48, 758, -3956, 23973 },
- { -80, 905, -4235, 21254 },
- { -99, 972, -4222, 18278 },
- { -107, 967, -3957, 15143 },
- { -103, 896, -3487, 11950 },
- { -91, 773, -2865, 8798 },
- { -71, 611, -2143, 5784 },
- { -46, 425, -1375, 2996 },
-};
diff --git a/drivers/opus/silk/resampler_rom.h b/drivers/opus/silk/resampler_rom.h
deleted file mode 100644
index 2fa586ebf2..0000000000
--- a/drivers/opus/silk/resampler_rom.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_FIX_RESAMPLER_ROM_H
-#define SILK_FIX_RESAMPLER_ROM_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#include "opus/silk/typedef.h"
-#include "opus/silk/resampler_structs.h"
-
-#define RESAMPLER_DOWN_ORDER_FIR0 18
-#define RESAMPLER_DOWN_ORDER_FIR1 24
-#define RESAMPLER_DOWN_ORDER_FIR2 36
-#define RESAMPLER_ORDER_FIR_12 8
-
-/* Tables for 2x downsampler */
-static const opus_int16 silk_resampler_down2_0 = 9872;
-static const opus_int16 silk_resampler_down2_1 = 39809 - 65536;
-
-/* Tables for 2x upsampler, high quality */
-static const opus_int16 silk_resampler_up2_hq_0[ 3 ] = { 1746, 14986, 39083 - 65536 };
-static const opus_int16 silk_resampler_up2_hq_1[ 3 ] = { 6854, 25769, 55542 - 65536 };
-
-/* Tables with IIR and FIR coefficients for fractional downsamplers */
-extern const opus_int16 silk_Resampler_3_4_COEFS[ 2 + 3 * RESAMPLER_DOWN_ORDER_FIR0 / 2 ];
-extern const opus_int16 silk_Resampler_2_3_COEFS[ 2 + 2 * RESAMPLER_DOWN_ORDER_FIR0 / 2 ];
-extern const opus_int16 silk_Resampler_1_2_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR1 / 2 ];
-extern const opus_int16 silk_Resampler_1_3_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR2 / 2 ];
-extern const opus_int16 silk_Resampler_1_4_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR2 / 2 ];
-extern const opus_int16 silk_Resampler_1_6_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR2 / 2 ];
-extern const opus_int16 silk_Resampler_2_3_COEFS_LQ[ 2 + 2 * 2 ];
-
-/* Table with interplation fractions of 1/24, 3/24, ..., 23/24 */
-extern const opus_int16 silk_resampler_frac_FIR_12[ 12 ][ RESAMPLER_ORDER_FIR_12 / 2 ];
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SILK_FIX_RESAMPLER_ROM_H */
diff --git a/drivers/opus/silk/resampler_structs.h b/drivers/opus/silk/resampler_structs.h
deleted file mode 100644
index 9e9457d11c..0000000000
--- a/drivers/opus/silk/resampler_structs.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_RESAMPLER_STRUCTS_H
-#define SILK_RESAMPLER_STRUCTS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define SILK_RESAMPLER_MAX_FIR_ORDER 36
-#define SILK_RESAMPLER_MAX_IIR_ORDER 6
-
-typedef struct _silk_resampler_state_struct{
- opus_int32 sIIR[ SILK_RESAMPLER_MAX_IIR_ORDER ]; /* this must be the first element of this struct */
- union{
- opus_int32 i32[ SILK_RESAMPLER_MAX_FIR_ORDER ];
- opus_int16 i16[ SILK_RESAMPLER_MAX_FIR_ORDER ];
- } sFIR;
- opus_int16 delayBuf[ 48 ];
- opus_int resampler_function;
- opus_int batchSize;
- opus_int32 invRatio_Q16;
- opus_int FIR_Order;
- opus_int FIR_Fracs;
- opus_int Fs_in_kHz;
- opus_int Fs_out_kHz;
- opus_int inputDelay;
- const opus_int16 *Coefs;
-} silk_resampler_state_struct;
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* SILK_RESAMPLER_STRUCTS_H */
-
diff --git a/drivers/opus/silk/shell_coder.c b/drivers/opus/silk/shell_coder.c
deleted file mode 100644
index 67a5446927..0000000000
--- a/drivers/opus/silk/shell_coder.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* shell coder; pulse-subframe length is hardcoded */
-
-static OPUS_INLINE void combine_pulses(
- opus_int *out, /* O combined pulses vector [len] */
- const opus_int *in, /* I input vector [2 * len] */
- const opus_int len /* I number of OUTPUT samples */
-)
-{
- opus_int k;
- for( k = 0; k < len; k++ ) {
- out[ k ] = in[ 2 * k ] + in[ 2 * k + 1 ];
- }
-}
-
-static OPUS_INLINE void encode_split(
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- const opus_int p_child1, /* I pulse amplitude of first child subframe */
- const opus_int p, /* I pulse amplitude of current subframe */
- const opus_uint8 *shell_table /* I table of shell cdfs */
-)
-{
- if( p > 0 ) {
- ec_enc_icdf( psRangeEnc, p_child1, &shell_table[ silk_shell_code_table_offsets[ p ] ], 8 );
- }
-}
-
-static OPUS_INLINE void decode_split(
- opus_int16 *p_child1, /* O pulse amplitude of first child subframe */
- opus_int16 *p_child2, /* O pulse amplitude of second child subframe */
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- const opus_int p, /* I pulse amplitude of current subframe */
- const opus_uint8 *shell_table /* I table of shell cdfs */
-)
-{
- if( p > 0 ) {
- p_child1[ 0 ] = ec_dec_icdf( psRangeDec, &shell_table[ silk_shell_code_table_offsets[ p ] ], 8 );
- 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 silk_shell_encoder(
- ec_enc *psRangeEnc, /* I/O compressor data structure */
- const opus_int *pulses0 /* I data: nonnegative pulse amplitudes */
-)
-{
- opus_int pulses1[ 8 ], pulses2[ 4 ], pulses3[ 2 ], pulses4[ 1 ];
-
- /* this function operates on one shell code frame of 16 pulses */
- silk_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( psRangeEnc, pulses3[ 0 ], pulses4[ 0 ], silk_shell_code_table3 );
-
- encode_split( psRangeEnc, pulses2[ 0 ], pulses3[ 0 ], silk_shell_code_table2 );
-
- encode_split( psRangeEnc, pulses1[ 0 ], pulses2[ 0 ], silk_shell_code_table1 );
- encode_split( psRangeEnc, pulses0[ 0 ], pulses1[ 0 ], silk_shell_code_table0 );
- encode_split( psRangeEnc, pulses0[ 2 ], pulses1[ 1 ], silk_shell_code_table0 );
-
- encode_split( psRangeEnc, pulses1[ 2 ], pulses2[ 1 ], silk_shell_code_table1 );
- encode_split( psRangeEnc, pulses0[ 4 ], pulses1[ 2 ], silk_shell_code_table0 );
- encode_split( psRangeEnc, pulses0[ 6 ], pulses1[ 3 ], silk_shell_code_table0 );
-
- encode_split( psRangeEnc, pulses2[ 2 ], pulses3[ 1 ], silk_shell_code_table2 );
-
- encode_split( psRangeEnc, pulses1[ 4 ], pulses2[ 2 ], silk_shell_code_table1 );
- encode_split( psRangeEnc, pulses0[ 8 ], pulses1[ 4 ], silk_shell_code_table0 );
- encode_split( psRangeEnc, pulses0[ 10 ], pulses1[ 5 ], silk_shell_code_table0 );
-
- encode_split( psRangeEnc, pulses1[ 6 ], pulses2[ 3 ], silk_shell_code_table1 );
- encode_split( psRangeEnc, pulses0[ 12 ], pulses1[ 6 ], silk_shell_code_table0 );
- encode_split( psRangeEnc, pulses0[ 14 ], pulses1[ 7 ], silk_shell_code_table0 );
-}
-
-
-/* Shell decoder, operates on one shell code frame of 16 pulses */
-void silk_shell_decoder(
- opus_int16 *pulses0, /* O data: nonnegative pulse amplitudes */
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- const opus_int pulses4 /* I number of pulses per pulse-subframe */
-)
-{
- opus_int16 pulses3[ 2 ], pulses2[ 4 ], pulses1[ 8 ];
-
- /* this function operates on one shell code frame of 16 pulses */
- silk_assert( SHELL_CODEC_FRAME_LENGTH == 16 );
-
- decode_split( &pulses3[ 0 ], &pulses3[ 1 ], psRangeDec, pulses4, silk_shell_code_table3 );
-
- decode_split( &pulses2[ 0 ], &pulses2[ 1 ], psRangeDec, pulses3[ 0 ], silk_shell_code_table2 );
-
- decode_split( &pulses1[ 0 ], &pulses1[ 1 ], psRangeDec, pulses2[ 0 ], silk_shell_code_table1 );
- decode_split( &pulses0[ 0 ], &pulses0[ 1 ], psRangeDec, pulses1[ 0 ], silk_shell_code_table0 );
- decode_split( &pulses0[ 2 ], &pulses0[ 3 ], psRangeDec, pulses1[ 1 ], silk_shell_code_table0 );
-
- decode_split( &pulses1[ 2 ], &pulses1[ 3 ], psRangeDec, pulses2[ 1 ], silk_shell_code_table1 );
- decode_split( &pulses0[ 4 ], &pulses0[ 5 ], psRangeDec, pulses1[ 2 ], silk_shell_code_table0 );
- decode_split( &pulses0[ 6 ], &pulses0[ 7 ], psRangeDec, pulses1[ 3 ], silk_shell_code_table0 );
-
- decode_split( &pulses2[ 2 ], &pulses2[ 3 ], psRangeDec, pulses3[ 1 ], silk_shell_code_table2 );
-
- decode_split( &pulses1[ 4 ], &pulses1[ 5 ], psRangeDec, pulses2[ 2 ], silk_shell_code_table1 );
- decode_split( &pulses0[ 8 ], &pulses0[ 9 ], psRangeDec, pulses1[ 4 ], silk_shell_code_table0 );
- decode_split( &pulses0[ 10 ], &pulses0[ 11 ], psRangeDec, pulses1[ 5 ], silk_shell_code_table0 );
-
- decode_split( &pulses1[ 6 ], &pulses1[ 7 ], psRangeDec, pulses2[ 3 ], silk_shell_code_table1 );
- decode_split( &pulses0[ 12 ], &pulses0[ 13 ], psRangeDec, pulses1[ 6 ], silk_shell_code_table0 );
- decode_split( &pulses0[ 14 ], &pulses0[ 15 ], psRangeDec, pulses1[ 7 ], silk_shell_code_table0 );
-}
diff --git a/drivers/opus/silk/sigm_Q15.c b/drivers/opus/silk/sigm_Q15.c
deleted file mode 100644
index 3171d15f4a..0000000000
--- a/drivers/opus/silk/sigm_Q15.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/* Approximate sigmoid function */
-
-#include "opus/silk/SigProc_FIX.h"
-
-/* fprintf(1, '%d, ', round(1024 * ([1 ./ (1 + exp(-(1:5))), 1] - 1 ./ (1 + exp(-(0:5)))))); */
-static const opus_int32 sigm_LUT_slope_Q10[ 6 ] = {
- 237, 153, 73, 30, 12, 7
-};
-/* fprintf(1, '%d, ', round(32767 * 1 ./ (1 + exp(-(0:5))))); */
-static const opus_int32 sigm_LUT_pos_Q15[ 6 ] = {
- 16384, 23955, 28861, 31213, 32178, 32548
-};
-/* fprintf(1, '%d, ', round(32767 * 1 ./ (1 + exp((0:5))))); */
-static const opus_int32 sigm_LUT_neg_Q15[ 6 ] = {
- 16384, 8812, 3906, 1554, 589, 219
-};
-
-opus_int silk_sigm_Q15(
- opus_int in_Q5 /* I */
-)
-{
- opus_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 = silk_RSHIFT( in_Q5, 5 );
- return( sigm_LUT_neg_Q15[ ind ] - silk_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 = silk_RSHIFT( in_Q5, 5 );
- return( sigm_LUT_pos_Q15[ ind ] + silk_SMULBB( sigm_LUT_slope_Q10[ ind ], in_Q5 & 0x1F ) );
- }
- }
-}
-
diff --git a/drivers/opus/silk/sort.c b/drivers/opus/silk/sort.c
deleted file mode 100644
index dd2988e5b8..0000000000
--- a/drivers/opus/silk/sort.c
+++ /dev/null
@@ -1,151 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-/* 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 */
-/* */
-/* Shell short: http://en.wikipedia.org/wiki/Shell_sort */
-
-#include "opus/silk/SigProc_FIX.h"
-
-void silk_insertion_sort_increasing(
- opus_int32 *a, /* I/O Unsorted / Sorted vector */
- opus_int *idx, /* O Index vector for the sorted elements */
- const opus_int L, /* I Vector length */
- const opus_int K /* I Number of correctly sorted positions */
-)
-{
- opus_int32 value;
- opus_int i, j;
-
- /* Safety checks */
- silk_assert( K > 0 );
- silk_assert( L > 0 );
- silk_assert( L >= K );
-
- /* Write start indices in index vector */
- for( i = 0; i < K; i++ ) {
- idx[ 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 */
- idx[ j + 1 ] = idx[ j ]; /* Shift index */
- }
- a[ j + 1 ] = value; /* Write value */
- idx[ j + 1 ] = i; /* Write index */
- }
-
- /* If less than L values are asked for, 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 */
- idx[ j + 1 ] = idx[ j ]; /* Shift index */
- }
- a[ j + 1 ] = value; /* Write value */
- idx[ j + 1 ] = i; /* Write index */
- }
- }
-}
-
-#ifdef OPUS_FIXED_POINT
-/* This function is only used by the fixed-point build */
-void silk_insertion_sort_decreasing_int16(
- opus_int16 *a, /* I/O Unsorted / Sorted vector */
- opus_int *idx, /* O Index vector for the sorted elements */
- const opus_int L, /* I Vector length */
- const opus_int K /* I Number of correctly sorted positions */
-)
-{
- opus_int i, j;
- opus_int value;
-
- /* Safety checks */
- silk_assert( K > 0 );
- silk_assert( L > 0 );
- silk_assert( L >= K );
-
- /* Write start indices in index vector */
- for( i = 0; i < K; i++ ) {
- idx[ 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 */
- idx[ j + 1 ] = idx[ j ]; /* Shift index */
- }
- a[ j + 1 ] = value; /* Write value */
- idx[ j + 1 ] = i; /* Write index */
- }
-
- /* If less than L values are asked for, 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 */
- idx[ j + 1 ] = idx[ j ]; /* Shift index */
- }
- a[ j + 1 ] = value; /* Write value */
- idx[ j + 1 ] = i; /* Write index */
- }
- }
-}
-#endif
-
-void silk_insertion_sort_increasing_all_values_int16(
- opus_int16 *a, /* I/O Unsorted / Sorted vector */
- const opus_int L /* I Vector length */
-)
-{
- opus_int value;
- opus_int i, j;
-
- /* Safety checks */
- silk_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 */
- }
-}
diff --git a/drivers/opus/silk/stereo_LR_to_MS.c b/drivers/opus/silk/stereo_LR_to_MS.c
deleted file mode 100644
index cf8affa90b..0000000000
--- a/drivers/opus/silk/stereo_LR_to_MS.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-
-/* Convert Left/Right stereo signal to adaptive Mid/Side representation */
-void silk_stereo_LR_to_MS(
- stereo_enc_state *state, /* I/O State */
- opus_int16 x1[], /* I/O Left input signal, becomes mid signal */
- opus_int16 x2[], /* I/O Right input signal, becomes side signal */
- opus_int8 ix[ 2 ][ 3 ], /* O Quantization indices */
- opus_int8 *mid_only_flag, /* O Flag: only mid signal coded */
- opus_int32 mid_side_rates_bps[], /* O Bitrates for mid and side signals */
- opus_int32 total_rate_bps, /* I Total bitrate */
- opus_int prev_speech_act_Q8, /* I Speech activity level in previous frame */
- opus_int toMono, /* I Last frame before a stereo->mono transition */
- opus_int fs_kHz, /* I Sample rate (kHz) */
- opus_int frame_length /* I Number of samples */
-)
-{
- opus_int n, is10msFrame, denom_Q16, delta0_Q13, delta1_Q13;
- opus_int32 sum, diff, smooth_coef_Q16, pred_Q13[ 2 ], pred0_Q13, pred1_Q13;
- opus_int32 LP_ratio_Q14, HP_ratio_Q14, frac_Q16, frac_3_Q16, min_mid_rate_bps, width_Q14, w_Q24, deltaw_Q24;
- VARDECL( opus_int16, side );
- VARDECL( opus_int16, LP_mid );
- VARDECL( opus_int16, HP_mid );
- VARDECL( opus_int16, LP_side );
- VARDECL( opus_int16, HP_side );
- opus_int16 *mid = &x1[ -2 ];
- SAVE_STACK;
-
- ALLOC( side, frame_length + 2, opus_int16 );
- /* Convert to basic mid/side signals */
- for( n = 0; n < frame_length + 2; n++ ) {
- sum = x1[ n - 2 ] + (opus_int32)x2[ n - 2 ];
- diff = x1[ n - 2 ] - (opus_int32)x2[ n - 2 ];
- mid[ n ] = (opus_int16)silk_RSHIFT_ROUND( sum, 1 );
- side[ n ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( diff, 1 ) );
- }
-
- /* Buffering */
- silk_memcpy( mid, state->sMid, 2 * sizeof( opus_int16 ) );
- silk_memcpy( side, state->sSide, 2 * sizeof( opus_int16 ) );
- silk_memcpy( state->sMid, &mid[ frame_length ], 2 * sizeof( opus_int16 ) );
- silk_memcpy( state->sSide, &side[ frame_length ], 2 * sizeof( opus_int16 ) );
-
- /* LP and HP filter mid signal */
- ALLOC( LP_mid, frame_length, opus_int16 );
- ALLOC( HP_mid, frame_length, opus_int16 );
- for( n = 0; n < frame_length; n++ ) {
- sum = silk_RSHIFT_ROUND( silk_ADD_LSHIFT( mid[ n ] + mid[ n + 2 ], mid[ n + 1 ], 1 ), 2 );
- LP_mid[ n ] = sum;
- HP_mid[ n ] = mid[ n + 1 ] - sum;
- }
-
- /* LP and HP filter side signal */
- ALLOC( LP_side, frame_length, opus_int16 );
- ALLOC( HP_side, frame_length, opus_int16 );
- for( n = 0; n < frame_length; n++ ) {
- sum = silk_RSHIFT_ROUND( silk_ADD_LSHIFT( side[ n ] + side[ n + 2 ], side[ n + 1 ], 1 ), 2 );
- LP_side[ n ] = sum;
- HP_side[ n ] = side[ n + 1 ] - sum;
- }
-
- /* Find energies and predictors */
- is10msFrame = frame_length == 10 * fs_kHz;
- smooth_coef_Q16 = is10msFrame ?
- SILK_FIX_CONST( STEREO_RATIO_SMOOTH_COEF / 2, 16 ) :
- SILK_FIX_CONST( STEREO_RATIO_SMOOTH_COEF, 16 );
- smooth_coef_Q16 = silk_SMULWB( silk_SMULBB( prev_speech_act_Q8, prev_speech_act_Q8 ), smooth_coef_Q16 );
-
- pred_Q13[ 0 ] = silk_stereo_find_predictor( &LP_ratio_Q14, LP_mid, LP_side, &state->mid_side_amp_Q0[ 0 ], frame_length, smooth_coef_Q16 );
- pred_Q13[ 1 ] = silk_stereo_find_predictor( &HP_ratio_Q14, HP_mid, HP_side, &state->mid_side_amp_Q0[ 2 ], frame_length, smooth_coef_Q16 );
- /* Ratio of the norms of residual and mid signals */
- frac_Q16 = silk_SMLABB( HP_ratio_Q14, LP_ratio_Q14, 3 );
- frac_Q16 = silk_min( frac_Q16, SILK_FIX_CONST( 1, 16 ) );
-
- /* Determine bitrate distribution between mid and side, and possibly reduce stereo width */
- total_rate_bps -= is10msFrame ? 1200 : 600; /* Subtract approximate bitrate for coding stereo parameters */
- if( total_rate_bps < 1 ) {
- total_rate_bps = 1;
- }
- min_mid_rate_bps = silk_SMLABB( 2000, fs_kHz, 900 );
- silk_assert( min_mid_rate_bps < 32767 );
- /* Default bitrate distribution: 8 parts for Mid and (5+3*frac) parts for Side. so: mid_rate = ( 8 / ( 13 + 3 * frac ) ) * total_ rate */
- frac_3_Q16 = silk_MUL( 3, frac_Q16 );
- mid_side_rates_bps[ 0 ] = silk_DIV32_varQ( total_rate_bps, SILK_FIX_CONST( 8 + 5, 16 ) + frac_3_Q16, 16+3 );
- /* If Mid bitrate below minimum, reduce stereo width */
- if( mid_side_rates_bps[ 0 ] < min_mid_rate_bps ) {
- mid_side_rates_bps[ 0 ] = min_mid_rate_bps;
- mid_side_rates_bps[ 1 ] = total_rate_bps - mid_side_rates_bps[ 0 ];
- /* width = 4 * ( 2 * side_rate - min_rate ) / ( ( 1 + 3 * frac ) * min_rate ) */
- width_Q14 = silk_DIV32_varQ( silk_LSHIFT( mid_side_rates_bps[ 1 ], 1 ) - min_mid_rate_bps,
- silk_SMULWB( SILK_FIX_CONST( 1, 16 ) + frac_3_Q16, min_mid_rate_bps ), 14+2 );
- width_Q14 = silk_LIMIT( width_Q14, 0, SILK_FIX_CONST( 1, 14 ) );
- } else {
- mid_side_rates_bps[ 1 ] = total_rate_bps - mid_side_rates_bps[ 0 ];
- width_Q14 = SILK_FIX_CONST( 1, 14 );
- }
-
- /* Smoother */
- state->smth_width_Q14 = (opus_int16)silk_SMLAWB( state->smth_width_Q14, width_Q14 - state->smth_width_Q14, smooth_coef_Q16 );
-
- /* At very low bitrates or for inputs that are nearly amplitude panned, switch to panned-mono coding */
- *mid_only_flag = 0;
- if( toMono ) {
- /* Last frame before stereo->mono transition; collapse stereo width */
- width_Q14 = 0;
- pred_Q13[ 0 ] = 0;
- pred_Q13[ 1 ] = 0;
- silk_stereo_quant_pred( pred_Q13, ix );
- } else if( state->width_prev_Q14 == 0 &&
- ( 8 * total_rate_bps < 13 * min_mid_rate_bps || silk_SMULWB( frac_Q16, state->smth_width_Q14 ) < SILK_FIX_CONST( 0.05, 14 ) ) )
- {
- /* Code as panned-mono; previous frame already had zero width */
- /* Scale down and quantize predictors */
- pred_Q13[ 0 ] = silk_RSHIFT( silk_SMULBB( state->smth_width_Q14, pred_Q13[ 0 ] ), 14 );
- pred_Q13[ 1 ] = silk_RSHIFT( silk_SMULBB( state->smth_width_Q14, pred_Q13[ 1 ] ), 14 );
- silk_stereo_quant_pred( pred_Q13, ix );
- /* Collapse stereo width */
- width_Q14 = 0;
- pred_Q13[ 0 ] = 0;
- pred_Q13[ 1 ] = 0;
- mid_side_rates_bps[ 0 ] = total_rate_bps;
- mid_side_rates_bps[ 1 ] = 0;
- *mid_only_flag = 1;
- } else if( state->width_prev_Q14 != 0 &&
- ( 8 * total_rate_bps < 11 * min_mid_rate_bps || silk_SMULWB( frac_Q16, state->smth_width_Q14 ) < SILK_FIX_CONST( 0.02, 14 ) ) )
- {
- /* Transition to zero-width stereo */
- /* Scale down and quantize predictors */
- pred_Q13[ 0 ] = silk_RSHIFT( silk_SMULBB( state->smth_width_Q14, pred_Q13[ 0 ] ), 14 );
- pred_Q13[ 1 ] = silk_RSHIFT( silk_SMULBB( state->smth_width_Q14, pred_Q13[ 1 ] ), 14 );
- silk_stereo_quant_pred( pred_Q13, ix );
- /* Collapse stereo width */
- width_Q14 = 0;
- pred_Q13[ 0 ] = 0;
- pred_Q13[ 1 ] = 0;
- } else if( state->smth_width_Q14 > SILK_FIX_CONST( 0.95, 14 ) ) {
- /* Full-width stereo coding */
- silk_stereo_quant_pred( pred_Q13, ix );
- width_Q14 = SILK_FIX_CONST( 1, 14 );
- } else {
- /* Reduced-width stereo coding; scale down and quantize predictors */
- pred_Q13[ 0 ] = silk_RSHIFT( silk_SMULBB( state->smth_width_Q14, pred_Q13[ 0 ] ), 14 );
- pred_Q13[ 1 ] = silk_RSHIFT( silk_SMULBB( state->smth_width_Q14, pred_Q13[ 1 ] ), 14 );
- silk_stereo_quant_pred( pred_Q13, ix );
- width_Q14 = state->smth_width_Q14;
- }
-
- /* Make sure to keep on encoding until the tapered output has been transmitted */
- if( *mid_only_flag == 1 ) {
- state->silent_side_len += frame_length - STEREO_INTERP_LEN_MS * fs_kHz;
- if( state->silent_side_len < LA_SHAPE_MS * fs_kHz ) {
- *mid_only_flag = 0;
- } else {
- /* Limit to avoid wrapping around */
- state->silent_side_len = 10000;
- }
- } else {
- state->silent_side_len = 0;
- }
-
- if( *mid_only_flag == 0 && mid_side_rates_bps[ 1 ] < 1 ) {
- mid_side_rates_bps[ 1 ] = 1;
- mid_side_rates_bps[ 0 ] = silk_max_int( 1, total_rate_bps - mid_side_rates_bps[ 1 ]);
- }
-
- /* Interpolate predictors and subtract prediction from side channel */
- pred0_Q13 = -state->pred_prev_Q13[ 0 ];
- pred1_Q13 = -state->pred_prev_Q13[ 1 ];
- w_Q24 = silk_LSHIFT( state->width_prev_Q14, 10 );
- denom_Q16 = silk_DIV32_16( (opus_int32)1 << 16, STEREO_INTERP_LEN_MS * fs_kHz );
- delta0_Q13 = -silk_RSHIFT_ROUND( silk_SMULBB( pred_Q13[ 0 ] - state->pred_prev_Q13[ 0 ], denom_Q16 ), 16 );
- delta1_Q13 = -silk_RSHIFT_ROUND( silk_SMULBB( pred_Q13[ 1 ] - state->pred_prev_Q13[ 1 ], denom_Q16 ), 16 );
- deltaw_Q24 = silk_LSHIFT( silk_SMULWB( width_Q14 - state->width_prev_Q14, denom_Q16 ), 10 );
- for( n = 0; n < STEREO_INTERP_LEN_MS * fs_kHz; n++ ) {
- pred0_Q13 += delta0_Q13;
- pred1_Q13 += delta1_Q13;
- w_Q24 += deltaw_Q24;
- sum = silk_LSHIFT( silk_ADD_LSHIFT( mid[ n ] + mid[ n + 2 ], mid[ n + 1 ], 1 ), 9 ); /* Q11 */
- sum = silk_SMLAWB( silk_SMULWB( w_Q24, side[ n + 1 ] ), sum, pred0_Q13 ); /* Q8 */
- sum = silk_SMLAWB( sum, silk_LSHIFT( (opus_int32)mid[ n + 1 ], 11 ), pred1_Q13 ); /* Q8 */
- x2[ n - 1 ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( sum, 8 ) );
- }
-
- pred0_Q13 = -pred_Q13[ 0 ];
- pred1_Q13 = -pred_Q13[ 1 ];
- w_Q24 = silk_LSHIFT( width_Q14, 10 );
- for( n = STEREO_INTERP_LEN_MS * fs_kHz; n < frame_length; n++ ) {
- sum = silk_LSHIFT( silk_ADD_LSHIFT( mid[ n ] + mid[ n + 2 ], mid[ n + 1 ], 1 ), 9 ); /* Q11 */
- sum = silk_SMLAWB( silk_SMULWB( w_Q24, side[ n + 1 ] ), sum, pred0_Q13 ); /* Q8 */
- sum = silk_SMLAWB( sum, silk_LSHIFT( (opus_int32)mid[ n + 1 ], 11 ), pred1_Q13 ); /* Q8 */
- x2[ n - 1 ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( sum, 8 ) );
- }
- state->pred_prev_Q13[ 0 ] = (opus_int16)pred_Q13[ 0 ];
- state->pred_prev_Q13[ 1 ] = (opus_int16)pred_Q13[ 1 ];
- state->width_prev_Q14 = (opus_int16)width_Q14;
- RESTORE_STACK;
-}
diff --git a/drivers/opus/silk/stereo_MS_to_LR.c b/drivers/opus/silk/stereo_MS_to_LR.c
deleted file mode 100644
index 4f553eb694..0000000000
--- a/drivers/opus/silk/stereo_MS_to_LR.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Convert adaptive Mid/Side representation to Left/Right stereo signal */
-void silk_stereo_MS_to_LR(
- stereo_dec_state *state, /* I/O State */
- opus_int16 x1[], /* I/O Left input signal, becomes mid signal */
- opus_int16 x2[], /* I/O Right input signal, becomes side signal */
- const opus_int32 pred_Q13[], /* I Predictors */
- opus_int fs_kHz, /* I Samples rate (kHz) */
- opus_int frame_length /* I Number of samples */
-)
-{
- opus_int n, denom_Q16, delta0_Q13, delta1_Q13;
- opus_int32 sum, diff, pred0_Q13, pred1_Q13;
-
- /* Buffering */
- silk_memcpy( x1, state->sMid, 2 * sizeof( opus_int16 ) );
- silk_memcpy( x2, state->sSide, 2 * sizeof( opus_int16 ) );
- silk_memcpy( state->sMid, &x1[ frame_length ], 2 * sizeof( opus_int16 ) );
- silk_memcpy( state->sSide, &x2[ frame_length ], 2 * sizeof( opus_int16 ) );
-
- /* Interpolate predictors and add prediction to side channel */
- pred0_Q13 = state->pred_prev_Q13[ 0 ];
- pred1_Q13 = state->pred_prev_Q13[ 1 ];
- denom_Q16 = silk_DIV32_16( (opus_int32)1 << 16, STEREO_INTERP_LEN_MS * fs_kHz );
- delta0_Q13 = silk_RSHIFT_ROUND( silk_SMULBB( pred_Q13[ 0 ] - state->pred_prev_Q13[ 0 ], denom_Q16 ), 16 );
- delta1_Q13 = silk_RSHIFT_ROUND( silk_SMULBB( pred_Q13[ 1 ] - state->pred_prev_Q13[ 1 ], denom_Q16 ), 16 );
- for( n = 0; n < STEREO_INTERP_LEN_MS * fs_kHz; n++ ) {
- pred0_Q13 += delta0_Q13;
- pred1_Q13 += delta1_Q13;
- sum = silk_LSHIFT( silk_ADD_LSHIFT( x1[ n ] + x1[ n + 2 ], x1[ n + 1 ], 1 ), 9 ); /* Q11 */
- sum = silk_SMLAWB( silk_LSHIFT( (opus_int32)x2[ n + 1 ], 8 ), sum, pred0_Q13 ); /* Q8 */
- sum = silk_SMLAWB( sum, silk_LSHIFT( (opus_int32)x1[ n + 1 ], 11 ), pred1_Q13 ); /* Q8 */
- x2[ n + 1 ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( sum, 8 ) );
- }
- pred0_Q13 = pred_Q13[ 0 ];
- pred1_Q13 = pred_Q13[ 1 ];
- for( n = STEREO_INTERP_LEN_MS * fs_kHz; n < frame_length; n++ ) {
- sum = silk_LSHIFT( silk_ADD_LSHIFT( x1[ n ] + x1[ n + 2 ], x1[ n + 1 ], 1 ), 9 ); /* Q11 */
- sum = silk_SMLAWB( silk_LSHIFT( (opus_int32)x2[ n + 1 ], 8 ), sum, pred0_Q13 ); /* Q8 */
- sum = silk_SMLAWB( sum, silk_LSHIFT( (opus_int32)x1[ n + 1 ], 11 ), pred1_Q13 ); /* Q8 */
- x2[ n + 1 ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( sum, 8 ) );
- }
- state->pred_prev_Q13[ 0 ] = pred_Q13[ 0 ];
- state->pred_prev_Q13[ 1 ] = pred_Q13[ 1 ];
-
- /* Convert to left/right signals */
- for( n = 0; n < frame_length; n++ ) {
- sum = x1[ n + 1 ] + (opus_int32)x2[ n + 1 ];
- diff = x1[ n + 1 ] - (opus_int32)x2[ n + 1 ];
- x1[ n + 1 ] = (opus_int16)silk_SAT16( sum );
- x2[ n + 1 ] = (opus_int16)silk_SAT16( diff );
- }
-}
diff --git a/drivers/opus/silk/stereo_decode_pred.c b/drivers/opus/silk/stereo_decode_pred.c
deleted file mode 100644
index 9e8abf39d0..0000000000
--- a/drivers/opus/silk/stereo_decode_pred.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Decode mid/side predictors */
-void silk_stereo_decode_pred(
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int32 pred_Q13[] /* O Predictors */
-)
-{
- opus_int n, ix[ 2 ][ 3 ];
- opus_int32 low_Q13, step_Q13;
-
- /* Entropy decoding */
- n = ec_dec_icdf( psRangeDec, silk_stereo_pred_joint_iCDF, 8 );
- ix[ 0 ][ 2 ] = silk_DIV32_16( n, 5 );
- ix[ 1 ][ 2 ] = n - 5 * ix[ 0 ][ 2 ];
- for( n = 0; n < 2; n++ ) {
- ix[ n ][ 0 ] = ec_dec_icdf( psRangeDec, silk_uniform3_iCDF, 8 );
- ix[ n ][ 1 ] = ec_dec_icdf( psRangeDec, silk_uniform5_iCDF, 8 );
- }
-
- /* Dequantize */
- for( n = 0; n < 2; n++ ) {
- ix[ n ][ 0 ] += 3 * ix[ n ][ 2 ];
- low_Q13 = silk_stereo_pred_quant_Q13[ ix[ n ][ 0 ] ];
- step_Q13 = silk_SMULWB( silk_stereo_pred_quant_Q13[ ix[ n ][ 0 ] + 1 ] - low_Q13,
- SILK_FIX_CONST( 0.5 / STEREO_QUANT_SUB_STEPS, 16 ) );
- pred_Q13[ n ] = silk_SMLABB( low_Q13, step_Q13, 2 * ix[ n ][ 1 ] + 1 );
- }
-
- /* Subtract second from first predictor (helps when actually applying these) */
- pred_Q13[ 0 ] -= pred_Q13[ 1 ];
-}
-
-/* Decode mid-only flag */
-void silk_stereo_decode_mid_only(
- ec_dec *psRangeDec, /* I/O Compressor data structure */
- opus_int *decode_only_mid /* O Flag that only mid channel has been coded */
-)
-{
- /* Decode flag that only mid channel is coded */
- *decode_only_mid = ec_dec_icdf( psRangeDec, silk_stereo_only_code_mid_iCDF, 8 );
-}
diff --git a/drivers/opus/silk/stereo_encode_pred.c b/drivers/opus/silk/stereo_encode_pred.c
deleted file mode 100644
index a864d404f6..0000000000
--- a/drivers/opus/silk/stereo_encode_pred.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Entropy code the mid/side quantization indices */
-void silk_stereo_encode_pred(
- ec_enc *psRangeEnc, /* I/O Compressor data structure */
- opus_int8 ix[ 2 ][ 3 ] /* I Quantization indices */
-)
-{
- opus_int n;
-
- /* Entropy coding */
- n = 5 * ix[ 0 ][ 2 ] + ix[ 1 ][ 2 ];
- silk_assert( n < 25 );
- ec_enc_icdf( psRangeEnc, n, silk_stereo_pred_joint_iCDF, 8 );
- for( n = 0; n < 2; n++ ) {
- silk_assert( ix[ n ][ 0 ] < 3 );
- silk_assert( ix[ n ][ 1 ] < STEREO_QUANT_SUB_STEPS );
- ec_enc_icdf( psRangeEnc, ix[ n ][ 0 ], silk_uniform3_iCDF, 8 );
- ec_enc_icdf( psRangeEnc, ix[ n ][ 1 ], silk_uniform5_iCDF, 8 );
- }
-}
-
-/* Entropy code the mid-only flag */
-void silk_stereo_encode_mid_only(
- ec_enc *psRangeEnc, /* I/O Compressor data structure */
- opus_int8 mid_only_flag
-)
-{
- /* Encode flag that only mid channel is coded */
- ec_enc_icdf( psRangeEnc, mid_only_flag, silk_stereo_only_code_mid_iCDF, 8 );
-}
diff --git a/drivers/opus/silk/stereo_find_predictor.c b/drivers/opus/silk/stereo_find_predictor.c
deleted file mode 100644
index c7fa3ac555..0000000000
--- a/drivers/opus/silk/stereo_find_predictor.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Find least-squares prediction gain for one signal based on another and quantize it */
-opus_int32 silk_stereo_find_predictor( /* O Returns predictor in Q13 */
- opus_int32 *ratio_Q14, /* O Ratio of residual and mid energies */
- const opus_int16 x[], /* I Basis signal */
- const opus_int16 y[], /* I Target signal */
- opus_int32 mid_res_amp_Q0[], /* I/O Smoothed mid, residual norms */
- opus_int length, /* I Number of samples */
- opus_int smooth_coef_Q16 /* I Smoothing coefficient */
-)
-{
- opus_int scale, scale1, scale2;
- opus_int32 nrgx, nrgy, corr, pred_Q13, pred2_Q10;
-
- /* Find predictor */
- silk_sum_sqr_shift( &nrgx, &scale1, x, length );
- silk_sum_sqr_shift( &nrgy, &scale2, y, length );
- scale = silk_max_int( scale1, scale2 );
- scale = scale + ( scale & 1 ); /* make even */
- nrgy = silk_RSHIFT32( nrgy, scale - scale2 );
- nrgx = silk_RSHIFT32( nrgx, scale - scale1 );
- nrgx = silk_max_int( nrgx, 1 );
- corr = silk_inner_prod_aligned_scale( x, y, scale, length );
- pred_Q13 = silk_DIV32_varQ( corr, nrgx, 13 );
- pred_Q13 = silk_LIMIT( pred_Q13, -(1 << 14), 1 << 14 );
- pred2_Q10 = silk_SMULWB( pred_Q13, pred_Q13 );
-
- /* Faster update for signals with large prediction parameters */
- smooth_coef_Q16 = (opus_int)silk_max_int( smooth_coef_Q16, silk_abs( pred2_Q10 ) );
-
- /* Smoothed mid and residual norms */
- silk_assert( smooth_coef_Q16 < 32768 );
- scale = silk_RSHIFT( scale, 1 );
- mid_res_amp_Q0[ 0 ] = silk_SMLAWB( mid_res_amp_Q0[ 0 ], silk_LSHIFT( silk_SQRT_APPROX( nrgx ), scale ) - mid_res_amp_Q0[ 0 ],
- smooth_coef_Q16 );
- /* Residual energy = nrgy - 2 * pred * corr + pred^2 * nrgx */
- nrgy = silk_SUB_LSHIFT32( nrgy, silk_SMULWB( corr, pred_Q13 ), 3 + 1 );
- nrgy = silk_ADD_LSHIFT32( nrgy, silk_SMULWB( nrgx, pred2_Q10 ), 6 );
- mid_res_amp_Q0[ 1 ] = silk_SMLAWB( mid_res_amp_Q0[ 1 ], silk_LSHIFT( silk_SQRT_APPROX( nrgy ), scale ) - mid_res_amp_Q0[ 1 ],
- smooth_coef_Q16 );
-
- /* Ratio of smoothed residual and mid norms */
- *ratio_Q14 = silk_DIV32_varQ( mid_res_amp_Q0[ 1 ], silk_max( mid_res_amp_Q0[ 0 ], 1 ), 14 );
- *ratio_Q14 = silk_LIMIT( *ratio_Q14, 0, 32767 );
-
- return pred_Q13;
-}
diff --git a/drivers/opus/silk/stereo_quant_pred.c b/drivers/opus/silk/stereo_quant_pred.c
deleted file mode 100644
index ff2971e7c1..0000000000
--- a/drivers/opus/silk/stereo_quant_pred.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/main.h"
-
-/* Quantize mid/side predictors */
-void silk_stereo_quant_pred(
- opus_int32 pred_Q13[], /* I/O Predictors (out: quantized) */
- opus_int8 ix[ 2 ][ 3 ] /* O Quantization indices */
-)
-{
- opus_int i, j, n;
- opus_int32 low_Q13, step_Q13, lvl_Q13, err_min_Q13, err_Q13, quant_pred_Q13 = 0;
-
- /* Quantize */
- for( n = 0; n < 2; n++ ) {
- /* Brute-force search over quantization levels */
- err_min_Q13 = silk_int32_MAX;
- for( i = 0; i < STEREO_QUANT_TAB_SIZE - 1; i++ ) {
- low_Q13 = silk_stereo_pred_quant_Q13[ i ];
- step_Q13 = silk_SMULWB( silk_stereo_pred_quant_Q13[ i + 1 ] - low_Q13,
- SILK_FIX_CONST( 0.5 / STEREO_QUANT_SUB_STEPS, 16 ) );
- for( j = 0; j < STEREO_QUANT_SUB_STEPS; j++ ) {
- lvl_Q13 = silk_SMLABB( low_Q13, step_Q13, 2 * j + 1 );
- err_Q13 = silk_abs( pred_Q13[ n ] - lvl_Q13 );
- if( err_Q13 < err_min_Q13 ) {
- err_min_Q13 = err_Q13;
- quant_pred_Q13 = lvl_Q13;
- ix[ n ][ 0 ] = i;
- ix[ n ][ 1 ] = j;
- } else {
- /* Error increasing, so we're past the optimum */
- goto done;
- }
- }
- }
- done:
- ix[ n ][ 2 ] = silk_DIV32_16( ix[ n ][ 0 ], 3 );
- ix[ n ][ 0 ] -= ix[ n ][ 2 ] * 3;
- pred_Q13[ n ] = quant_pred_Q13;
- }
-
- /* Subtract second from first predictor (helps when actually applying these) */
- pred_Q13[ 0 ] -= pred_Q13[ 1 ];
-}
diff --git a/drivers/opus/silk/structs.h b/drivers/opus/silk/structs.h
deleted file mode 100644
index a2876b62a2..0000000000
--- a/drivers/opus/silk/structs.h
+++ /dev/null
@@ -1,327 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_STRUCTS_H
-#define SILK_STRUCTS_H
-
-#include "opus/silk/typedef.h"
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/silk/define.h"
-#include "opus/celt/entenc.h"
-#include "opus/celt/entdec.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/************************************/
-/* Noise shaping quantization state */
-/************************************/
-typedef struct {
- opus_int16 xq[ 2 * MAX_FRAME_LENGTH ]; /* Buffer for quantized output signal */
- opus_int32 sLTP_shp_Q14[ 2 * MAX_FRAME_LENGTH ];
- opus_int32 sLPC_Q14[ MAX_SUB_FRAME_LENGTH + NSQ_LPC_BUF_LENGTH ];
- opus_int32 sAR2_Q14[ MAX_SHAPE_LPC_ORDER ];
- opus_int32 sLF_AR_shp_Q14;
- opus_int lagPrev;
- opus_int sLTP_buf_idx;
- opus_int sLTP_shp_buf_idx;
- opus_int32 rand_seed;
- opus_int32 prev_gain_Q16;
- opus_int rewhite_flag;
-} silk_nsq_state;
-
-/********************************/
-/* VAD state */
-/********************************/
-typedef struct {
- opus_int32 AnaState[ 2 ]; /* Analysis filterbank state: 0-8 kHz */
- opus_int32 AnaState1[ 2 ]; /* Analysis filterbank state: 0-4 kHz */
- opus_int32 AnaState2[ 2 ]; /* Analysis filterbank state: 0-2 kHz */
- opus_int32 XnrgSubfr[ VAD_N_BANDS ]; /* Subframe energies */
- opus_int32 NrgRatioSmth_Q8[ VAD_N_BANDS ]; /* Smoothed energy level in each band */
- opus_int16 HPstate; /* State of differentiator in the lowest band */
- opus_int32 NL[ VAD_N_BANDS ]; /* Noise energy level in each band */
- opus_int32 inv_NL[ VAD_N_BANDS ]; /* Inverse noise energy level in each band */
- opus_int32 NoiseLevelBias[ VAD_N_BANDS ]; /* Noise level estimator bias/offset */
- opus_int32 counter; /* Frame counter used in the initial phase */
-} silk_VAD_state;
-
-/* Variable cut-off low-pass filter state */
-typedef struct {
- opus_int32 In_LP_State[ 2 ]; /* Low pass filter state */
- opus_int32 transition_frame_no; /* Counter which is mapped to a cut-off frequency */
- opus_int mode; /* Operating mode, <0: switch down, >0: switch up; 0: do nothing */
-} silk_LP_state;
-
-/* Structure containing NLSF codebook */
-typedef struct {
- const opus_int16 nVectors;
- const opus_int16 order;
- const opus_int16 quantStepSize_Q16;
- const opus_int16 invQuantStepSize_Q6;
- const opus_uint8 *CB1_NLSF_Q8;
- const opus_uint8 *CB1_iCDF;
- const opus_uint8 *pred_Q8;
- const opus_uint8 *ec_sel;
- const opus_uint8 *ec_iCDF;
- const opus_uint8 *ec_Rates_Q5;
- const opus_int16 *deltaMin_Q15;
-} silk_NLSF_CB_struct;
-
-typedef struct {
- opus_int16 pred_prev_Q13[ 2 ];
- opus_int16 sMid[ 2 ];
- opus_int16 sSide[ 2 ];
- opus_int32 mid_side_amp_Q0[ 4 ];
- opus_int16 smth_width_Q14;
- opus_int16 width_prev_Q14;
- opus_int16 silent_side_len;
- opus_int8 predIx[ MAX_FRAMES_PER_PACKET ][ 2 ][ 3 ];
- opus_int8 mid_only_flags[ MAX_FRAMES_PER_PACKET ];
-} stereo_enc_state;
-
-typedef struct {
- opus_int16 pred_prev_Q13[ 2 ];
- opus_int16 sMid[ 2 ];
- opus_int16 sSide[ 2 ];
-} stereo_dec_state;
-
-typedef struct {
- opus_int8 GainsIndices[ MAX_NB_SUBFR ];
- opus_int8 LTPIndex[ MAX_NB_SUBFR ];
- opus_int8 NLSFIndices[ MAX_LPC_ORDER + 1 ];
- opus_int16 lagIndex;
- opus_int8 contourIndex;
- opus_int8 signalType;
- opus_int8 quantOffsetType;
- opus_int8 NLSFInterpCoef_Q2;
- opus_int8 PERIndex;
- opus_int8 LTP_scaleIndex;
- opus_int8 Seed;
-} SideInfoIndices;
-
-/********************************/
-/* Encoder state */
-/********************************/
-typedef struct {
- opus_int32 In_HP_State[ 2 ]; /* High pass filter state */
- opus_int32 variable_HP_smth1_Q15; /* State of first smoother */
- opus_int32 variable_HP_smth2_Q15; /* State of second smoother */
- silk_LP_state sLP; /* Low pass filter state */
- silk_VAD_state sVAD; /* Voice activity detector state */
- silk_nsq_state sNSQ; /* Noise Shape Quantizer State */
- opus_int16 prev_NLSFq_Q15[ MAX_LPC_ORDER ]; /* Previously quantized NLSF vector */
- opus_int speech_activity_Q8; /* Speech activity */
- opus_int allow_bandwidth_switch; /* Flag indicating that switching of internal bandwidth is allowed */
- opus_int8 LBRRprevLastGainIndex;
- opus_int8 prevSignalType;
- opus_int prevLag;
- opus_int pitch_LPC_win_length;
- opus_int max_pitch_lag; /* Highest possible pitch lag (samples) */
- opus_int32 API_fs_Hz; /* API sampling frequency (Hz) */
- opus_int32 prev_API_fs_Hz; /* Previous API sampling frequency (Hz) */
- opus_int maxInternal_fs_Hz; /* Maximum internal sampling frequency (Hz) */
- opus_int minInternal_fs_Hz; /* Minimum internal sampling frequency (Hz) */
- opus_int desiredInternal_fs_Hz; /* Soft request for internal sampling frequency (Hz) */
- opus_int fs_kHz; /* Internal sampling frequency (kHz) */
- opus_int nb_subfr; /* Number of 5 ms subframes in a frame */
- opus_int frame_length; /* Frame length (samples) */
- opus_int subfr_length; /* Subframe length (samples) */
- opus_int ltp_mem_length; /* Length of LTP memory */
- opus_int la_pitch; /* Look-ahead for pitch analysis (samples) */
- opus_int la_shape; /* Look-ahead for noise shape analysis (samples) */
- opus_int shapeWinLength; /* Window length for noise shape analysis (samples) */
- opus_int32 TargetRate_bps; /* Target bitrate (bps) */
- opus_int PacketSize_ms; /* Number of milliseconds to put in each packet */
- opus_int PacketLoss_perc; /* Packet loss rate measured by farend */
- opus_int32 frameCounter;
- opus_int Complexity; /* Complexity setting */
- opus_int nStatesDelayedDecision; /* Number of states in delayed decision quantization */
- opus_int useInterpolatedNLSFs; /* Flag for using NLSF interpolation */
- opus_int shapingLPCOrder; /* Filter order for noise shaping filters */
- opus_int predictLPCOrder; /* Filter order for prediction filters */
- opus_int pitchEstimationComplexity; /* Complexity level for pitch estimator */
- opus_int pitchEstimationLPCOrder; /* Whitening filter order for pitch estimator */
- opus_int32 pitchEstimationThreshold_Q16; /* Threshold for pitch estimator */
- opus_int LTPQuantLowComplexity; /* Flag for low complexity LTP quantization */
- opus_int mu_LTP_Q9; /* Rate-distortion tradeoff in LTP quantization */
- opus_int32 sum_log_gain_Q7; /* Cumulative max prediction gain */
- opus_int NLSF_MSVQ_Survivors; /* Number of survivors in NLSF MSVQ */
- opus_int first_frame_after_reset; /* Flag for deactivating NLSF interpolation, pitch prediction */
- opus_int controlled_since_last_payload; /* Flag for ensuring codec_control only runs once per packet */
- opus_int warping_Q16; /* Warping parameter for warped noise shaping */
- opus_int useCBR; /* Flag to enable constant bitrate */
- opus_int prefillFlag; /* Flag to indicate that only buffers are prefilled, no coding */
- const opus_uint8 *pitch_lag_low_bits_iCDF; /* Pointer to iCDF table for low bits of pitch lag index */
- const opus_uint8 *pitch_contour_iCDF; /* Pointer to iCDF table for pitch contour index */
- const silk_NLSF_CB_struct *psNLSF_CB; /* Pointer to NLSF codebook */
- opus_int input_quality_bands_Q15[ VAD_N_BANDS ];
- opus_int input_tilt_Q15;
- opus_int SNR_dB_Q7; /* Quality setting */
-
- opus_int8 VAD_flags[ MAX_FRAMES_PER_PACKET ];
- opus_int8 LBRR_flag;
- opus_int LBRR_flags[ MAX_FRAMES_PER_PACKET ];
-
- SideInfoIndices indices;
- opus_int8 pulses[ MAX_FRAME_LENGTH ];
-
- int arch;
-
- /* Input/output buffering */
- opus_int16 inputBuf[ MAX_FRAME_LENGTH + 2 ]; /* Buffer containing input signal */
- opus_int inputBufIx;
- opus_int nFramesPerPacket;
- opus_int nFramesEncoded; /* Number of frames analyzed in current packet */
-
- opus_int nChannelsAPI;
- opus_int nChannelsInternal;
- opus_int channelNb;
-
- /* Parameters For LTP scaling Control */
- opus_int frames_since_onset;
-
- /* Specifically for entropy coding */
- opus_int ec_prevSignalType;
- opus_int16 ec_prevLagIndex;
-
- silk_resampler_state_struct resampler_state;
-
- /* DTX */
- opus_int useDTX; /* Flag to enable DTX */
- opus_int inDTX; /* Flag to signal DTX period */
- opus_int noSpeechCounter; /* Counts concecutive nonactive frames, used by DTX */
-
- /* Inband Low Bitrate Redundancy (LBRR) data */
- opus_int useInBandFEC; /* Saves the API setting for query */
- opus_int LBRR_enabled; /* Depends on useInBandFRC, bitrate and packet loss rate */
- opus_int LBRR_GainIncreases; /* Gains increment for coding LBRR frames */
- SideInfoIndices indices_LBRR[ MAX_FRAMES_PER_PACKET ];
- opus_int8 pulses_LBRR[ MAX_FRAMES_PER_PACKET ][ MAX_FRAME_LENGTH ];
-} silk_encoder_state;
-
-
-/* Struct for Packet Loss Concealment */
-typedef struct {
- opus_int32 pitchL_Q8; /* Pitch lag to use for voiced concealment */
- opus_int16 LTPCoef_Q14[ LTP_ORDER ]; /* LTP coeficients to use for voiced concealment */
- opus_int16 prevLPC_Q12[ MAX_LPC_ORDER ];
- opus_int last_frame_lost; /* Was previous frame lost */
- opus_int32 rand_seed; /* Seed for unvoiced signal generation */
- opus_int16 randScale_Q14; /* Scaling of unvoiced random signal */
- opus_int32 conc_energy;
- opus_int conc_energy_shift;
- opus_int16 prevLTP_scale_Q14;
- opus_int32 prevGain_Q16[ 2 ];
- opus_int fs_kHz;
- opus_int nb_subfr;
- opus_int subfr_length;
-} silk_PLC_struct;
-
-/* Struct for CNG */
-typedef struct {
- opus_int32 CNG_exc_buf_Q14[ MAX_FRAME_LENGTH ];
- opus_int16 CNG_smth_NLSF_Q15[ MAX_LPC_ORDER ];
- opus_int32 CNG_synth_state[ MAX_LPC_ORDER ];
- opus_int32 CNG_smth_Gain_Q16;
- opus_int32 rand_seed;
- opus_int fs_kHz;
-} silk_CNG_struct;
-
-/********************************/
-/* Decoder state */
-/********************************/
-typedef struct {
- opus_int32 prev_gain_Q16;
- opus_int32 exc_Q14[ MAX_FRAME_LENGTH ];
- opus_int32 sLPC_Q14_buf[ MAX_LPC_ORDER ];
- opus_int16 outBuf[ MAX_FRAME_LENGTH + 2 * MAX_SUB_FRAME_LENGTH ]; /* Buffer for output signal */
- opus_int lagPrev; /* Previous Lag */
- opus_int8 LastGainIndex; /* Previous gain index */
- opus_int fs_kHz; /* Sampling frequency in kHz */
- opus_int32 fs_API_hz; /* API sample frequency (Hz) */
- opus_int nb_subfr; /* Number of 5 ms subframes in a frame */
- opus_int frame_length; /* Frame length (samples) */
- opus_int subfr_length; /* Subframe length (samples) */
- opus_int ltp_mem_length; /* Length of LTP memory */
- opus_int LPC_order; /* LPC order */
- opus_int16 prevNLSF_Q15[ MAX_LPC_ORDER ]; /* Used to interpolate LSFs */
- opus_int first_frame_after_reset; /* Flag for deactivating NLSF interpolation */
- const opus_uint8 *pitch_lag_low_bits_iCDF; /* Pointer to iCDF table for low bits of pitch lag index */
- const opus_uint8 *pitch_contour_iCDF; /* Pointer to iCDF table for pitch contour index */
-
- /* For buffering payload in case of more frames per packet */
- opus_int nFramesDecoded;
- opus_int nFramesPerPacket;
-
- /* Specifically for entropy coding */
- opus_int ec_prevSignalType;
- opus_int16 ec_prevLagIndex;
-
- opus_int VAD_flags[ MAX_FRAMES_PER_PACKET ];
- opus_int LBRR_flag;
- opus_int LBRR_flags[ MAX_FRAMES_PER_PACKET ];
-
- silk_resampler_state_struct resampler_state;
-
- const silk_NLSF_CB_struct *psNLSF_CB; /* Pointer to NLSF codebook */
-
- /* Quantization indices */
- SideInfoIndices indices;
-
- /* CNG state */
- silk_CNG_struct sCNG;
-
- /* Stuff used for PLC */
- opus_int lossCnt;
- opus_int prevSignalType;
-
- silk_PLC_struct sPLC;
-
-} silk_decoder_state;
-
-/************************/
-/* Decoder control */
-/************************/
-typedef struct {
- /* Prediction and coding parameters */
- opus_int pitchL[ MAX_NB_SUBFR ];
- opus_int32 Gains_Q16[ MAX_NB_SUBFR ];
- /* Holds interpolated and final coefficients, 4-byte aligned */
- silk_DWORD_ALIGN opus_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ];
- opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ];
- opus_int LTP_scale_Q14;
-} silk_decoder_control;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/drivers/opus/silk/sum_sqr_shift.c b/drivers/opus/silk/sum_sqr_shift.c
deleted file mode 100644
index 1d1da449f4..0000000000
--- a/drivers/opus/silk/sum_sqr_shift.c
+++ /dev/null
@@ -1,83 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/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 silk_sum_sqr_shift(
- opus_int32 *energy, /* O Energy of x, after shifting to the right */
- opus_int *shift, /* O Number of bits right shift applied to energy */
- const opus_int16 *x, /* I Input vector */
- opus_int len /* I Length of input vector */
-)
-{
- opus_int i, shft;
- opus_int32 nrg_tmp, nrg;
-
- nrg = 0;
- shft = 0;
- len--;
- for( i = 0; i < len; i += 2 ) {
- nrg = silk_SMLABB_ovflw( nrg, x[ i ], x[ i ] );
- nrg = silk_SMLABB_ovflw( nrg, x[ i + 1 ], x[ i + 1 ] );
- if( nrg < 0 ) {
- /* Scale down */
- nrg = (opus_int32)silk_RSHIFT_uint( (opus_uint32)nrg, 2 );
- shft = 2;
- i+=2;
- break;
- }
- }
- for( ; i < len; i += 2 ) {
- nrg_tmp = silk_SMULBB( x[ i ], x[ i ] );
- nrg_tmp = silk_SMLABB_ovflw( nrg_tmp, x[ i + 1 ], x[ i + 1 ] );
- nrg = (opus_int32)silk_ADD_RSHIFT_uint( nrg, (opus_uint32)nrg_tmp, shft );
- if( nrg < 0 ) {
- /* Scale down */
- nrg = (opus_int32)silk_RSHIFT_uint( (opus_uint32)nrg, 2 );
- shft += 2;
- }
- }
- if( i == len ) {
- /* One sample left to process */
- nrg_tmp = silk_SMULBB( x[ i ], x[ i ] );
- nrg = (opus_int32)silk_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 = silk_RSHIFT_uint( (opus_uint32)nrg, 2 );
- shft += 2;
- }
-
- /* Output arguments */
- *shift = shft;
- *energy = nrg;
-}
-
diff --git a/drivers/opus/silk/table_LSF_cos.c b/drivers/opus/silk/table_LSF_cos.c
deleted file mode 100644
index d350df9add..0000000000
--- a/drivers/opus/silk/table_LSF_cos.c
+++ /dev/null
@@ -1,67 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/tables.h"
-
-/* Cosine approximation table for LSF conversion */
-/* Q12 values (even) */
-const opus_int16 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
-};
diff --git a/drivers/opus/silk/tables.h b/drivers/opus/silk/tables.h
deleted file mode 100644
index 2ad69eec80..0000000000
--- a/drivers/opus/silk/tables.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_TABLES_H
-#define SILK_TABLES_H
-
-#include "opus/silk/define.h"
-#include "opus/silk/structs.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Entropy coding tables (with size in bytes indicated) */
-extern const opus_uint8 silk_gain_iCDF[ 3 ][ N_LEVELS_QGAIN / 8 ]; /* 24 */
-extern const opus_uint8 silk_delta_gain_iCDF[ MAX_DELTA_GAIN_QUANT - MIN_DELTA_GAIN_QUANT + 1 ]; /* 41 */
-
-extern const opus_uint8 silk_pitch_lag_iCDF[ 2 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) ];/* 32 */
-extern const opus_uint8 silk_pitch_delta_iCDF[ 21 ]; /* 21 */
-extern const opus_uint8 silk_pitch_contour_iCDF[ 34 ]; /* 34 */
-extern const opus_uint8 silk_pitch_contour_NB_iCDF[ 11 ]; /* 11 */
-extern const opus_uint8 silk_pitch_contour_10_ms_iCDF[ 12 ]; /* 12 */
-extern const opus_uint8 silk_pitch_contour_10_ms_NB_iCDF[ 3 ]; /* 3 */
-
-extern const opus_uint8 silk_pulses_per_block_iCDF[ N_RATE_LEVELS ][ SILK_MAX_PULSES + 2 ]; /* 180 */
-extern const opus_uint8 silk_pulses_per_block_BITS_Q5[ N_RATE_LEVELS - 1 ][ SILK_MAX_PULSES + 2 ]; /* 162 */
-
-extern const opus_uint8 silk_rate_levels_iCDF[ 2 ][ N_RATE_LEVELS - 1 ]; /* 18 */
-extern const opus_uint8 silk_rate_levels_BITS_Q5[ 2 ][ N_RATE_LEVELS - 1 ]; /* 18 */
-
-extern const opus_uint8 silk_max_pulses_table[ 4 ]; /* 4 */
-
-extern const opus_uint8 silk_shell_code_table0[ 152 ]; /* 152 */
-extern const opus_uint8 silk_shell_code_table1[ 152 ]; /* 152 */
-extern const opus_uint8 silk_shell_code_table2[ 152 ]; /* 152 */
-extern const opus_uint8 silk_shell_code_table3[ 152 ]; /* 152 */
-extern const opus_uint8 silk_shell_code_table_offsets[ SILK_MAX_PULSES + 1 ]; /* 17 */
-
-extern const opus_uint8 silk_lsb_iCDF[ 2 ]; /* 2 */
-
-extern const opus_uint8 silk_sign_iCDF[ 42 ]; /* 42 */
-
-extern const opus_uint8 silk_uniform3_iCDF[ 3 ]; /* 3 */
-extern const opus_uint8 silk_uniform4_iCDF[ 4 ]; /* 4 */
-extern const opus_uint8 silk_uniform5_iCDF[ 5 ]; /* 5 */
-extern const opus_uint8 silk_uniform6_iCDF[ 6 ]; /* 6 */
-extern const opus_uint8 silk_uniform8_iCDF[ 8 ]; /* 8 */
-
-extern const opus_uint8 silk_NLSF_EXT_iCDF[ 7 ]; /* 7 */
-
-extern const opus_uint8 silk_LTP_per_index_iCDF[ 3 ]; /* 3 */
-extern const opus_uint8 * const silk_LTP_gain_iCDF_ptrs[ NB_LTP_CBKS ]; /* 3 */
-extern const opus_uint8 * const silk_LTP_gain_BITS_Q5_ptrs[ NB_LTP_CBKS ]; /* 3 */
-extern const opus_int16 silk_LTP_gain_middle_avg_RD_Q14;
-extern const opus_int8 * const silk_LTP_vq_ptrs_Q7[ NB_LTP_CBKS ]; /* 168 */
-extern const opus_uint8 * const silk_LTP_vq_gain_ptrs_Q7[NB_LTP_CBKS];
-
-extern const opus_int8 silk_LTP_vq_sizes[ NB_LTP_CBKS ]; /* 3 */
-
-extern const opus_uint8 silk_LTPscale_iCDF[ 3 ]; /* 4 */
-extern const opus_int16 silk_LTPScales_table_Q14[ 3 ]; /* 6 */
-
-extern const opus_uint8 silk_type_offset_VAD_iCDF[ 4 ]; /* 4 */
-extern const opus_uint8 silk_type_offset_no_VAD_iCDF[ 2 ]; /* 2 */
-
-extern const opus_int16 silk_stereo_pred_quant_Q13[ STEREO_QUANT_TAB_SIZE ]; /* 32 */
-extern const opus_uint8 silk_stereo_pred_joint_iCDF[ 25 ]; /* 25 */
-extern const opus_uint8 silk_stereo_only_code_mid_iCDF[ 2 ]; /* 2 */
-
-extern const opus_uint8 * const silk_LBRR_flags_iCDF_ptr[ 2 ]; /* 10 */
-
-extern const opus_uint8 silk_NLSF_interpolation_factor_iCDF[ 5 ]; /* 5 */
-
-extern const silk_NLSF_CB_struct silk_NLSF_CB_WB; /* 1040 */
-extern const silk_NLSF_CB_struct silk_NLSF_CB_NB_MB; /* 728 */
-
-/* Piece-wise linear mapping from bitrate in kbps to coding quality in dB SNR */
-extern const opus_int32 silk_TargetRate_table_NB[ TARGET_RATE_TAB_SZ ]; /* 32 */
-extern const opus_int32 silk_TargetRate_table_MB[ TARGET_RATE_TAB_SZ ]; /* 32 */
-extern const opus_int32 silk_TargetRate_table_WB[ TARGET_RATE_TAB_SZ ]; /* 32 */
-extern const opus_int16 silk_SNR_table_Q1[ TARGET_RATE_TAB_SZ ]; /* 32 */
-
-/* Quantization offsets */
-extern const opus_int16 silk_Quantization_Offsets_Q10[ 2 ][ 2 ]; /* 8 */
-
-/* Interpolation points for filter coefficients used in the bandwidth transition smoother */
-extern const opus_int32 silk_Transition_LP_B_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NB ]; /* 60 */
-extern const opus_int32 silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NA ]; /* 60 */
-
-/* Rom table with cosine values */
-extern const opus_int16 silk_LSFCosTab_FIX_Q12[ LSF_COS_TAB_SZ_FIX + 1 ]; /* 258 */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/drivers/opus/silk/tables_LTP.c b/drivers/opus/silk/tables_LTP.c
deleted file mode 100644
index 9f500b25f2..0000000000
--- a/drivers/opus/silk/tables_LTP.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/tables.h"
-
-const opus_uint8 silk_LTP_per_index_iCDF[3] = {
- 179, 99, 0
-};
-
-static const opus_uint8 silk_LTP_gain_iCDF_0[8] = {
- 71, 56, 43, 30, 21, 12, 6, 0
-};
-
-static const opus_uint8 silk_LTP_gain_iCDF_1[16] = {
- 199, 165, 144, 124, 109, 96, 84, 71,
- 61, 51, 42, 32, 23, 15, 8, 0
-};
-
-static const opus_uint8 silk_LTP_gain_iCDF_2[32] = {
- 241, 225, 211, 199, 187, 175, 164, 153,
- 142, 132, 123, 114, 105, 96, 88, 80,
- 72, 64, 57, 50, 44, 38, 33, 29,
- 24, 20, 16, 12, 9, 5, 2, 0
-};
-
-const opus_int16 silk_LTP_gain_middle_avg_RD_Q14 = 12304;
-
-static const opus_uint8 silk_LTP_gain_BITS_Q5_0[8] = {
- 15, 131, 138, 138, 155, 155, 173, 173
-};
-
-static const opus_uint8 silk_LTP_gain_BITS_Q5_1[16] = {
- 69, 93, 115, 118, 131, 138, 141, 138,
- 150, 150, 155, 150, 155, 160, 166, 160
-};
-
-static const opus_uint8 silk_LTP_gain_BITS_Q5_2[32] = {
- 131, 128, 134, 141, 141, 141, 145, 145,
- 145, 150, 155, 155, 155, 155, 160, 160,
- 160, 160, 166, 166, 173, 173, 182, 192,
- 182, 192, 192, 192, 205, 192, 205, 224
-};
-
-const opus_uint8 * const silk_LTP_gain_iCDF_ptrs[NB_LTP_CBKS] = {
- silk_LTP_gain_iCDF_0,
- silk_LTP_gain_iCDF_1,
- silk_LTP_gain_iCDF_2
-};
-
-const opus_uint8 * const silk_LTP_gain_BITS_Q5_ptrs[NB_LTP_CBKS] = {
- silk_LTP_gain_BITS_Q5_0,
- silk_LTP_gain_BITS_Q5_1,
- silk_LTP_gain_BITS_Q5_2
-};
-
-static const opus_int8 silk_LTP_gain_vq_0[8][5] =
-{
-{
- 4, 6, 24, 7, 5
-},
-{
- 0, 0, 2, 0, 0
-},
-{
- 12, 28, 41, 13, -4
-},
-{
- -9, 15, 42, 25, 14
-},
-{
- 1, -2, 62, 41, -9
-},
-{
- -10, 37, 65, -4, 3
-},
-{
- -6, 4, 66, 7, -8
-},
-{
- 16, 14, 38, -3, 33
-}
-};
-
-static const opus_int8 silk_LTP_gain_vq_1[16][5] =
-{
-{
- 13, 22, 39, 23, 12
-},
-{
- -1, 36, 64, 27, -6
-},
-{
- -7, 10, 55, 43, 17
-},
-{
- 1, 1, 8, 1, 1
-},
-{
- 6, -11, 74, 53, -9
-},
-{
- -12, 55, 76, -12, 8
-},
-{
- -3, 3, 93, 27, -4
-},
-{
- 26, 39, 59, 3, -8
-},
-{
- 2, 0, 77, 11, 9
-},
-{
- -8, 22, 44, -6, 7
-},
-{
- 40, 9, 26, 3, 9
-},
-{
- -7, 20, 101, -7, 4
-},
-{
- 3, -8, 42, 26, 0
-},
-{
- -15, 33, 68, 2, 23
-},
-{
- -2, 55, 46, -2, 15
-},
-{
- 3, -1, 21, 16, 41
-}
-};
-
-static const opus_int8 silk_LTP_gain_vq_2[32][5] =
-{
-{
- -6, 27, 61, 39, 5
-},
-{
- -11, 42, 88, 4, 1
-},
-{
- -2, 60, 65, 6, -4
-},
-{
- -1, -5, 73, 56, 1
-},
-{
- -9, 19, 94, 29, -9
-},
-{
- 0, 12, 99, 6, 4
-},
-{
- 8, -19, 102, 46, -13
-},
-{
- 3, 2, 13, 3, 2
-},
-{
- 9, -21, 84, 72, -18
-},
-{
- -11, 46, 104, -22, 8
-},
-{
- 18, 38, 48, 23, 0
-},
-{
- -16, 70, 83, -21, 11
-},
-{
- 5, -11, 117, 22, -8
-},
-{
- -6, 23, 117, -12, 3
-},
-{
- 3, -8, 95, 28, 4
-},
-{
- -10, 15, 77, 60, -15
-},
-{
- -1, 4, 124, 2, -4
-},
-{
- 3, 38, 84, 24, -25
-},
-{
- 2, 13, 42, 13, 31
-},
-{
- 21, -4, 56, 46, -1
-},
-{
- -1, 35, 79, -13, 19
-},
-{
- -7, 65, 88, -9, -14
-},
-{
- 20, 4, 81, 49, -29
-},
-{
- 20, 0, 75, 3, -17
-},
-{
- 5, -9, 44, 92, -8
-},
-{
- 1, -3, 22, 69, 31
-},
-{
- -6, 95, 41, -12, 5
-},
-{
- 39, 67, 16, -4, 1
-},
-{
- 0, -6, 120, 55, -36
-},
-{
- -13, 44, 122, 4, -24
-},
-{
- 81, 5, 11, 3, 7
-},
-{
- 2, 0, 9, 10, 88
-}
-};
-
-const opus_int8 * const silk_LTP_vq_ptrs_Q7[NB_LTP_CBKS] = {
- (opus_int8 *)&silk_LTP_gain_vq_0[0][0],
- (opus_int8 *)&silk_LTP_gain_vq_1[0][0],
- (opus_int8 *)&silk_LTP_gain_vq_2[0][0]
-};
-
-/* Maximum frequency-dependent response of the pitch taps above,
- computed as max(abs(freqz(taps))) */
-static const opus_uint8 silk_LTP_gain_vq_0_gain[8] = {
- 46, 2, 90, 87, 93, 91, 82, 98
-};
-
-static const opus_uint8 silk_LTP_gain_vq_1_gain[16] = {
- 109, 120, 118, 12, 113, 115, 117, 119,
- 99, 59, 87, 111, 63, 111, 112, 80
-};
-
-static const opus_uint8 silk_LTP_gain_vq_2_gain[32] = {
- 126, 124, 125, 124, 129, 121, 126, 23,
- 132, 127, 127, 127, 126, 127, 122, 133,
- 130, 134, 101, 118, 119, 145, 126, 86,
- 124, 120, 123, 119, 170, 173, 107, 109
-};
-
-const opus_uint8 * const silk_LTP_vq_gain_ptrs_Q7[NB_LTP_CBKS] = {
- &silk_LTP_gain_vq_0_gain[0],
- &silk_LTP_gain_vq_1_gain[0],
- &silk_LTP_gain_vq_2_gain[0]
-};
-
-const opus_int8 silk_LTP_vq_sizes[NB_LTP_CBKS] = {
- 8, 16, 32
-};
diff --git a/drivers/opus/silk/tables_NLSF_CB_NB_MB.c b/drivers/opus/silk/tables_NLSF_CB_NB_MB.c
deleted file mode 100644
index d1cf99356d..0000000000
--- a/drivers/opus/silk/tables_NLSF_CB_NB_MB.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/tables.h"
-
-static const opus_uint8 silk_NLSF_CB1_NB_MB_Q8[ 320 ] = {
- 12, 35, 60, 83, 108, 132, 157, 180,
- 206, 228, 15, 32, 55, 77, 101, 125,
- 151, 175, 201, 225, 19, 42, 66, 89,
- 114, 137, 162, 184, 209, 230, 12, 25,
- 50, 72, 97, 120, 147, 172, 200, 223,
- 26, 44, 69, 90, 114, 135, 159, 180,
- 205, 225, 13, 22, 53, 80, 106, 130,
- 156, 180, 205, 228, 15, 25, 44, 64,
- 90, 115, 142, 168, 196, 222, 19, 24,
- 62, 82, 100, 120, 145, 168, 190, 214,
- 22, 31, 50, 79, 103, 120, 151, 170,
- 203, 227, 21, 29, 45, 65, 106, 124,
- 150, 171, 196, 224, 30, 49, 75, 97,
- 121, 142, 165, 186, 209, 229, 19, 25,
- 52, 70, 93, 116, 143, 166, 192, 219,
- 26, 34, 62, 75, 97, 118, 145, 167,
- 194, 217, 25, 33, 56, 70, 91, 113,
- 143, 165, 196, 223, 21, 34, 51, 72,
- 97, 117, 145, 171, 196, 222, 20, 29,
- 50, 67, 90, 117, 144, 168, 197, 221,
- 22, 31, 48, 66, 95, 117, 146, 168,
- 196, 222, 24, 33, 51, 77, 116, 134,
- 158, 180, 200, 224, 21, 28, 70, 87,
- 106, 124, 149, 170, 194, 217, 26, 33,
- 53, 64, 83, 117, 152, 173, 204, 225,
- 27, 34, 65, 95, 108, 129, 155, 174,
- 210, 225, 20, 26, 72, 99, 113, 131,
- 154, 176, 200, 219, 34, 43, 61, 78,
- 93, 114, 155, 177, 205, 229, 23, 29,
- 54, 97, 124, 138, 163, 179, 209, 229,
- 30, 38, 56, 89, 118, 129, 158, 178,
- 200, 231, 21, 29, 49, 63, 85, 111,
- 142, 163, 193, 222, 27, 48, 77, 103,
- 133, 158, 179, 196, 215, 232, 29, 47,
- 74, 99, 124, 151, 176, 198, 220, 237,
- 33, 42, 61, 76, 93, 121, 155, 174,
- 207, 225, 29, 53, 87, 112, 136, 154,
- 170, 188, 208, 227, 24, 30, 52, 84,
- 131, 150, 166, 186, 203, 229, 37, 48,
- 64, 84, 104, 118, 156, 177, 201, 230
-};
-
-static const opus_uint8 silk_NLSF_CB1_iCDF_NB_MB[ 64 ] = {
- 212, 178, 148, 129, 108, 96, 85, 82,
- 79, 77, 61, 59, 57, 56, 51, 49,
- 48, 45, 42, 41, 40, 38, 36, 34,
- 31, 30, 21, 12, 10, 3, 1, 0,
- 255, 245, 244, 236, 233, 225, 217, 203,
- 190, 176, 175, 161, 149, 136, 125, 114,
- 102, 91, 81, 71, 60, 52, 43, 35,
- 28, 20, 19, 18, 12, 11, 5, 0
-};
-
-static const opus_uint8 silk_NLSF_CB2_SELECT_NB_MB[ 160 ] = {
- 16, 0, 0, 0, 0, 99, 66, 36,
- 36, 34, 36, 34, 34, 34, 34, 83,
- 69, 36, 52, 34, 116, 102, 70, 68,
- 68, 176, 102, 68, 68, 34, 65, 85,
- 68, 84, 36, 116, 141, 152, 139, 170,
- 132, 187, 184, 216, 137, 132, 249, 168,
- 185, 139, 104, 102, 100, 68, 68, 178,
- 218, 185, 185, 170, 244, 216, 187, 187,
- 170, 244, 187, 187, 219, 138, 103, 155,
- 184, 185, 137, 116, 183, 155, 152, 136,
- 132, 217, 184, 184, 170, 164, 217, 171,
- 155, 139, 244, 169, 184, 185, 170, 164,
- 216, 223, 218, 138, 214, 143, 188, 218,
- 168, 244, 141, 136, 155, 170, 168, 138,
- 220, 219, 139, 164, 219, 202, 216, 137,
- 168, 186, 246, 185, 139, 116, 185, 219,
- 185, 138, 100, 100, 134, 100, 102, 34,
- 68, 68, 100, 68, 168, 203, 221, 218,
- 168, 167, 154, 136, 104, 70, 164, 246,
- 171, 137, 139, 137, 155, 218, 219, 139
-};
-
-static const opus_uint8 silk_NLSF_CB2_iCDF_NB_MB[ 72 ] = {
- 255, 254, 253, 238, 14, 3, 2, 1,
- 0, 255, 254, 252, 218, 35, 3, 2,
- 1, 0, 255, 254, 250, 208, 59, 4,
- 2, 1, 0, 255, 254, 246, 194, 71,
- 10, 2, 1, 0, 255, 252, 236, 183,
- 82, 8, 2, 1, 0, 255, 252, 235,
- 180, 90, 17, 2, 1, 0, 255, 248,
- 224, 171, 97, 30, 4, 1, 0, 255,
- 254, 236, 173, 95, 37, 7, 1, 0
-};
-
-static const opus_uint8 silk_NLSF_CB2_BITS_NB_MB_Q5[ 72 ] = {
- 255, 255, 255, 131, 6, 145, 255, 255,
- 255, 255, 255, 236, 93, 15, 96, 255,
- 255, 255, 255, 255, 194, 83, 25, 71,
- 221, 255, 255, 255, 255, 162, 73, 34,
- 66, 162, 255, 255, 255, 210, 126, 73,
- 43, 57, 173, 255, 255, 255, 201, 125,
- 71, 48, 58, 130, 255, 255, 255, 166,
- 110, 73, 57, 62, 104, 210, 255, 255,
- 251, 123, 65, 55, 68, 100, 171, 255
-};
-
-static const opus_uint8 silk_NLSF_PRED_NB_MB_Q8[ 18 ] = {
- 179, 138, 140, 148, 151, 149, 153, 151,
- 163, 116, 67, 82, 59, 92, 72, 100,
- 89, 92
-};
-
-static const opus_int16 silk_NLSF_DELTA_MIN_NB_MB_Q15[ 11 ] = {
- 250, 3, 6, 3, 3, 3, 4, 3,
- 3, 3, 461
-};
-
-const silk_NLSF_CB_struct silk_NLSF_CB_NB_MB =
-{
- 32,
- 10,
- SILK_FIX_CONST( 0.18, 16 ),
- SILK_FIX_CONST( 1.0 / 0.18, 6 ),
- silk_NLSF_CB1_NB_MB_Q8,
- silk_NLSF_CB1_iCDF_NB_MB,
- silk_NLSF_PRED_NB_MB_Q8,
- silk_NLSF_CB2_SELECT_NB_MB,
- silk_NLSF_CB2_iCDF_NB_MB,
- silk_NLSF_CB2_BITS_NB_MB_Q5,
- silk_NLSF_DELTA_MIN_NB_MB_Q15,
-};
diff --git a/drivers/opus/silk/tables_NLSF_CB_WB.c b/drivers/opus/silk/tables_NLSF_CB_WB.c
deleted file mode 100644
index 5ee6e880c4..0000000000
--- a/drivers/opus/silk/tables_NLSF_CB_WB.c
+++ /dev/null
@@ -1,195 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/tables.h"
-
-static const opus_uint8 silk_NLSF_CB1_WB_Q8[ 512 ] = {
- 7, 23, 38, 54, 69, 85, 100, 116,
- 131, 147, 162, 178, 193, 208, 223, 239,
- 13, 25, 41, 55, 69, 83, 98, 112,
- 127, 142, 157, 171, 187, 203, 220, 236,
- 15, 21, 34, 51, 61, 78, 92, 106,
- 126, 136, 152, 167, 185, 205, 225, 240,
- 10, 21, 36, 50, 63, 79, 95, 110,
- 126, 141, 157, 173, 189, 205, 221, 237,
- 17, 20, 37, 51, 59, 78, 89, 107,
- 123, 134, 150, 164, 184, 205, 224, 240,
- 10, 15, 32, 51, 67, 81, 96, 112,
- 129, 142, 158, 173, 189, 204, 220, 236,
- 8, 21, 37, 51, 65, 79, 98, 113,
- 126, 138, 155, 168, 179, 192, 209, 218,
- 12, 15, 34, 55, 63, 78, 87, 108,
- 118, 131, 148, 167, 185, 203, 219, 236,
- 16, 19, 32, 36, 56, 79, 91, 108,
- 118, 136, 154, 171, 186, 204, 220, 237,
- 11, 28, 43, 58, 74, 89, 105, 120,
- 135, 150, 165, 180, 196, 211, 226, 241,
- 6, 16, 33, 46, 60, 75, 92, 107,
- 123, 137, 156, 169, 185, 199, 214, 225,
- 11, 19, 30, 44, 57, 74, 89, 105,
- 121, 135, 152, 169, 186, 202, 218, 234,
- 12, 19, 29, 46, 57, 71, 88, 100,
- 120, 132, 148, 165, 182, 199, 216, 233,
- 17, 23, 35, 46, 56, 77, 92, 106,
- 123, 134, 152, 167, 185, 204, 222, 237,
- 14, 17, 45, 53, 63, 75, 89, 107,
- 115, 132, 151, 171, 188, 206, 221, 240,
- 9, 16, 29, 40, 56, 71, 88, 103,
- 119, 137, 154, 171, 189, 205, 222, 237,
- 16, 19, 36, 48, 57, 76, 87, 105,
- 118, 132, 150, 167, 185, 202, 218, 236,
- 12, 17, 29, 54, 71, 81, 94, 104,
- 126, 136, 149, 164, 182, 201, 221, 237,
- 15, 28, 47, 62, 79, 97, 115, 129,
- 142, 155, 168, 180, 194, 208, 223, 238,
- 8, 14, 30, 45, 62, 78, 94, 111,
- 127, 143, 159, 175, 192, 207, 223, 239,
- 17, 30, 49, 62, 79, 92, 107, 119,
- 132, 145, 160, 174, 190, 204, 220, 235,
- 14, 19, 36, 45, 61, 76, 91, 108,
- 121, 138, 154, 172, 189, 205, 222, 238,
- 12, 18, 31, 45, 60, 76, 91, 107,
- 123, 138, 154, 171, 187, 204, 221, 236,
- 13, 17, 31, 43, 53, 70, 83, 103,
- 114, 131, 149, 167, 185, 203, 220, 237,
- 17, 22, 35, 42, 58, 78, 93, 110,
- 125, 139, 155, 170, 188, 206, 224, 240,
- 8, 15, 34, 50, 67, 83, 99, 115,
- 131, 146, 162, 178, 193, 209, 224, 239,
- 13, 16, 41, 66, 73, 86, 95, 111,
- 128, 137, 150, 163, 183, 206, 225, 241,
- 17, 25, 37, 52, 63, 75, 92, 102,
- 119, 132, 144, 160, 175, 191, 212, 231,
- 19, 31, 49, 65, 83, 100, 117, 133,
- 147, 161, 174, 187, 200, 213, 227, 242,
- 18, 31, 52, 68, 88, 103, 117, 126,
- 138, 149, 163, 177, 192, 207, 223, 239,
- 16, 29, 47, 61, 76, 90, 106, 119,
- 133, 147, 161, 176, 193, 209, 224, 240,
- 15, 21, 35, 50, 61, 73, 86, 97,
- 110, 119, 129, 141, 175, 198, 218, 237
-};
-
-static const opus_uint8 silk_NLSF_CB1_iCDF_WB[ 64 ] = {
- 225, 204, 201, 184, 183, 175, 158, 154,
- 153, 135, 119, 115, 113, 110, 109, 99,
- 98, 95, 79, 68, 52, 50, 48, 45,
- 43, 32, 31, 27, 18, 10, 3, 0,
- 255, 251, 235, 230, 212, 201, 196, 182,
- 167, 166, 163, 151, 138, 124, 110, 104,
- 90, 78, 76, 70, 69, 57, 45, 34,
- 24, 21, 11, 6, 5, 4, 3, 0
-};
-
-static const opus_uint8 silk_NLSF_CB2_SELECT_WB[ 256 ] = {
- 0, 0, 0, 0, 0, 0, 0, 1,
- 100, 102, 102, 68, 68, 36, 34, 96,
- 164, 107, 158, 185, 180, 185, 139, 102,
- 64, 66, 36, 34, 34, 0, 1, 32,
- 208, 139, 141, 191, 152, 185, 155, 104,
- 96, 171, 104, 166, 102, 102, 102, 132,
- 1, 0, 0, 0, 0, 16, 16, 0,
- 80, 109, 78, 107, 185, 139, 103, 101,
- 208, 212, 141, 139, 173, 153, 123, 103,
- 36, 0, 0, 0, 0, 0, 0, 1,
- 48, 0, 0, 0, 0, 0, 0, 32,
- 68, 135, 123, 119, 119, 103, 69, 98,
- 68, 103, 120, 118, 118, 102, 71, 98,
- 134, 136, 157, 184, 182, 153, 139, 134,
- 208, 168, 248, 75, 189, 143, 121, 107,
- 32, 49, 34, 34, 34, 0, 17, 2,
- 210, 235, 139, 123, 185, 137, 105, 134,
- 98, 135, 104, 182, 100, 183, 171, 134,
- 100, 70, 68, 70, 66, 66, 34, 131,
- 64, 166, 102, 68, 36, 2, 1, 0,
- 134, 166, 102, 68, 34, 34, 66, 132,
- 212, 246, 158, 139, 107, 107, 87, 102,
- 100, 219, 125, 122, 137, 118, 103, 132,
- 114, 135, 137, 105, 171, 106, 50, 34,
- 164, 214, 141, 143, 185, 151, 121, 103,
- 192, 34, 0, 0, 0, 0, 0, 1,
- 208, 109, 74, 187, 134, 249, 159, 137,
- 102, 110, 154, 118, 87, 101, 119, 101,
- 0, 2, 0, 36, 36, 66, 68, 35,
- 96, 164, 102, 100, 36, 0, 2, 33,
- 167, 138, 174, 102, 100, 84, 2, 2,
- 100, 107, 120, 119, 36, 197, 24, 0
-};
-
-static const opus_uint8 silk_NLSF_CB2_iCDF_WB[ 72 ] = {
- 255, 254, 253, 244, 12, 3, 2, 1,
- 0, 255, 254, 252, 224, 38, 3, 2,
- 1, 0, 255, 254, 251, 209, 57, 4,
- 2, 1, 0, 255, 254, 244, 195, 69,
- 4, 2, 1, 0, 255, 251, 232, 184,
- 84, 7, 2, 1, 0, 255, 254, 240,
- 186, 86, 14, 2, 1, 0, 255, 254,
- 239, 178, 91, 30, 5, 1, 0, 255,
- 248, 227, 177, 100, 19, 2, 1, 0
-};
-
-static const opus_uint8 silk_NLSF_CB2_BITS_WB_Q5[ 72 ] = {
- 255, 255, 255, 156, 4, 154, 255, 255,
- 255, 255, 255, 227, 102, 15, 92, 255,
- 255, 255, 255, 255, 213, 83, 24, 72,
- 236, 255, 255, 255, 255, 150, 76, 33,
- 63, 214, 255, 255, 255, 190, 121, 77,
- 43, 55, 185, 255, 255, 255, 245, 137,
- 71, 43, 59, 139, 255, 255, 255, 255,
- 131, 66, 50, 66, 107, 194, 255, 255,
- 166, 116, 76, 55, 53, 125, 255, 255
-};
-
-static const opus_uint8 silk_NLSF_PRED_WB_Q8[ 30 ] = {
- 175, 148, 160, 176, 178, 173, 174, 164,
- 177, 174, 196, 182, 198, 192, 182, 68,
- 62, 66, 60, 72, 117, 85, 90, 118,
- 136, 151, 142, 160, 142, 155
-};
-
-static const opus_int16 silk_NLSF_DELTA_MIN_WB_Q15[ 17 ] = {
- 100, 3, 40, 3, 3, 3, 5, 14,
- 14, 10, 11, 3, 8, 9, 7, 3,
- 347
-};
-
-const silk_NLSF_CB_struct silk_NLSF_CB_WB =
-{
- 32,
- 16,
- SILK_FIX_CONST( 0.15, 16 ),
- SILK_FIX_CONST( 1.0 / 0.15, 6 ),
- silk_NLSF_CB1_WB_Q8,
- silk_NLSF_CB1_iCDF_WB,
- silk_NLSF_PRED_WB_Q8,
- silk_NLSF_CB2_SELECT_WB,
- silk_NLSF_CB2_iCDF_WB,
- silk_NLSF_CB2_BITS_WB_Q5,
- silk_NLSF_DELTA_MIN_WB_Q15,
-};
-
diff --git a/drivers/opus/silk/tables_gain.c b/drivers/opus/silk/tables_gain.c
deleted file mode 100644
index e1e4319d7d..0000000000
--- a/drivers/opus/silk/tables_gain.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/tables.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-const opus_uint8 silk_gain_iCDF[ 3 ][ N_LEVELS_QGAIN / 8 ] =
-{
-{
- 224, 112, 44, 15, 3, 2, 1, 0
-},
-{
- 254, 237, 192, 132, 70, 23, 4, 0
-},
-{
- 255, 252, 226, 155, 61, 11, 2, 0
-}
-};
-
-const opus_uint8 silk_delta_gain_iCDF[ MAX_DELTA_GAIN_QUANT - MIN_DELTA_GAIN_QUANT + 1 ] = {
- 250, 245, 234, 203, 71, 50, 42, 38,
- 35, 33, 31, 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, 3, 2, 1,
- 0
-};
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/drivers/opus/silk/tables_other.c b/drivers/opus/silk/tables_other.c
deleted file mode 100644
index 3713ff8227..0000000000
--- a/drivers/opus/silk/tables_other.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/structs.h"
-#include "opus/silk/define.h"
-#include "opus/silk/tables.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Piece-wise linear mapping from bitrate in kbps to coding quality in dB SNR */
-const opus_int32 silk_TargetRate_table_NB[ TARGET_RATE_TAB_SZ ] = {
- 0, 8000, 9400, 11500, 13500, 17500, 25000, MAX_TARGET_RATE_BPS
-};
-const opus_int32 silk_TargetRate_table_MB[ TARGET_RATE_TAB_SZ ] = {
- 0, 9000, 12000, 14500, 18500, 24500, 35500, MAX_TARGET_RATE_BPS
-};
-const opus_int32 silk_TargetRate_table_WB[ TARGET_RATE_TAB_SZ ] = {
- 0, 10500, 14000, 17000, 21500, 28500, 42000, MAX_TARGET_RATE_BPS
-};
-const opus_int16 silk_SNR_table_Q1[ TARGET_RATE_TAB_SZ ] = {
- 18, 29, 38, 40, 46, 52, 62, 84
-};
-
-/* Tables for stereo predictor coding */
-const opus_int16 silk_stereo_pred_quant_Q13[ STEREO_QUANT_TAB_SIZE ] = {
- -13732, -10050, -8266, -7526, -6500, -5000, -2950, -820,
- 820, 2950, 5000, 6500, 7526, 8266, 10050, 13732
-};
-const opus_uint8 silk_stereo_pred_joint_iCDF[ 25 ] = {
- 249, 247, 246, 245, 244,
- 234, 210, 202, 201, 200,
- 197, 174, 82, 59, 56,
- 55, 54, 46, 22, 12,
- 11, 10, 9, 7, 0
-};
-const opus_uint8 silk_stereo_only_code_mid_iCDF[ 2 ] = { 64, 0 };
-
-/* Tables for LBRR flags */
-static const opus_uint8 silk_LBRR_flags_2_iCDF[ 3 ] = { 203, 150, 0 };
-static const opus_uint8 silk_LBRR_flags_3_iCDF[ 7 ] = { 215, 195, 166, 125, 110, 82, 0 };
-const opus_uint8 * const silk_LBRR_flags_iCDF_ptr[ 2 ] = {
- silk_LBRR_flags_2_iCDF,
- silk_LBRR_flags_3_iCDF
-};
-
-/* Table for LSB coding */
-const opus_uint8 silk_lsb_iCDF[ 2 ] = { 120, 0 };
-
-/* Tables for LTPScale */
-const opus_uint8 silk_LTPscale_iCDF[ 3 ] = { 128, 64, 0 };
-
-/* Tables for signal type and offset coding */
-const opus_uint8 silk_type_offset_VAD_iCDF[ 4 ] = {
- 232, 158, 10, 0
-};
-const opus_uint8 silk_type_offset_no_VAD_iCDF[ 2 ] = {
- 230, 0
-};
-
-/* Tables for NLSF interpolation factor */
-const opus_uint8 silk_NLSF_interpolation_factor_iCDF[ 5 ] = { 243, 221, 192, 181, 0 };
-
-/* Quantization offsets */
-const opus_int16 silk_Quantization_Offsets_Q10[ 2 ][ 2 ] = {
- { OFFSET_UVL_Q10, OFFSET_UVH_Q10 }, { OFFSET_VL_Q10, OFFSET_VH_Q10 }
-};
-
-/* Table for LTPScale */
-const opus_int16 silk_LTPScales_table_Q14[ 3 ] = { 15565, 12288, 8192 };
-
-/* Uniform entropy tables */
-const opus_uint8 silk_uniform3_iCDF[ 3 ] = { 171, 85, 0 };
-const opus_uint8 silk_uniform4_iCDF[ 4 ] = { 192, 128, 64, 0 };
-const opus_uint8 silk_uniform5_iCDF[ 5 ] = { 205, 154, 102, 51, 0 };
-const opus_uint8 silk_uniform6_iCDF[ 6 ] = { 213, 171, 128, 85, 43, 0 };
-const opus_uint8 silk_uniform8_iCDF[ 8 ] = { 224, 192, 160, 128, 96, 64, 32, 0 };
-
-const opus_uint8 silk_NLSF_EXT_iCDF[ 7 ] = { 100, 40, 16, 7, 3, 1, 0 };
-
-/* 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 opus_int32 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 opus_int32 silk_Transition_LP_A_Q28[ TRANSITION_INT_NUM ][ TRANSITION_NA ] =
-{
-{ 506393414, 239854379 },
-{ 411067935, 169683996 },
-{ 306733530, 116694253 },
-{ 185807084, 77959395 },
-{ 35497197, 57401098 }
-};
-
-#ifdef __cplusplus
-}
-#endif
-
diff --git a/drivers/opus/silk/tables_pitch_lag.c b/drivers/opus/silk/tables_pitch_lag.c
deleted file mode 100644
index f435b7e016..0000000000
--- a/drivers/opus/silk/tables_pitch_lag.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/tables.h"
-
-const opus_uint8 silk_pitch_lag_iCDF[ 2 * ( PITCH_EST_MAX_LAG_MS - PITCH_EST_MIN_LAG_MS ) ] = {
- 253, 250, 244, 233, 212, 182, 150, 131,
- 120, 110, 98, 85, 72, 60, 49, 40,
- 32, 25, 19, 15, 13, 11, 9, 8,
- 7, 6, 5, 4, 3, 2, 1, 0
-};
-
-const opus_uint8 silk_pitch_delta_iCDF[21] = {
- 210, 208, 206, 203, 199, 193, 183, 168,
- 142, 104, 74, 52, 37, 27, 20, 14,
- 10, 6, 4, 2, 0
-};
-
-const opus_uint8 silk_pitch_contour_iCDF[34] = {
- 223, 201, 183, 167, 152, 138, 124, 111,
- 98, 88, 79, 70, 62, 56, 50, 44,
- 39, 35, 31, 27, 24, 21, 18, 16,
- 14, 12, 10, 8, 6, 4, 3, 2,
- 1, 0
-};
-
-const opus_uint8 silk_pitch_contour_NB_iCDF[11] = {
- 188, 176, 155, 138, 119, 97, 67, 43,
- 26, 10, 0
-};
-
-const opus_uint8 silk_pitch_contour_10_ms_iCDF[12] = {
- 165, 119, 80, 61, 47, 35, 27, 20,
- 14, 9, 4, 0
-};
-
-const opus_uint8 silk_pitch_contour_10_ms_NB_iCDF[3] = {
- 113, 63, 0
-};
-
-
diff --git a/drivers/opus/silk/tables_pulses_per_block.c b/drivers/opus/silk/tables_pulses_per_block.c
deleted file mode 100644
index 21f430791a..0000000000
--- a/drivers/opus/silk/tables_pulses_per_block.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/silk/tables.h"
-
-const opus_uint8 silk_max_pulses_table[ 4 ] = {
- 8, 10, 12, 16
-};
-
-const opus_uint8 silk_pulses_per_block_iCDF[ 10 ][ 18 ] = {
-{
- 125, 51, 26, 18, 15, 12, 11, 10,
- 9, 8, 7, 6, 5, 4, 3, 2,
- 1, 0
-},
-{
- 198, 105, 45, 22, 15, 12, 11, 10,
- 9, 8, 7, 6, 5, 4, 3, 2,
- 1, 0
-},
-{
- 213, 162, 116, 83, 59, 43, 32, 24,
- 18, 15, 12, 9, 7, 6, 5, 3,
- 2, 0
-},
-{
- 239, 187, 116, 59, 28, 16, 11, 10,
- 9, 8, 7, 6, 5, 4, 3, 2,
- 1, 0
-},
-{
- 250, 229, 188, 135, 86, 51, 30, 19,
- 13, 10, 8, 6, 5, 4, 3, 2,
- 1, 0
-},
-{
- 249, 235, 213, 185, 156, 128, 103, 83,
- 66, 53, 42, 33, 26, 21, 17, 13,
- 10, 0
-},
-{
- 254, 249, 235, 206, 164, 118, 77, 46,
- 27, 16, 10, 7, 5, 4, 3, 2,
- 1, 0
-},
-{
- 255, 253, 249, 239, 220, 191, 156, 119,
- 85, 57, 37, 23, 15, 10, 6, 4,
- 2, 0
-},
-{
- 255, 253, 251, 246, 237, 223, 203, 179,
- 152, 124, 98, 75, 55, 40, 29, 21,
- 15, 0
-},
-{
- 255, 254, 253, 247, 220, 162, 106, 67,
- 42, 28, 18, 12, 9, 6, 4, 3,
- 2, 0
-}
-};
-
-const opus_uint8 silk_pulses_per_block_BITS_Q5[ 9 ][ 18 ] = {
-{
- 31, 57, 107, 160, 205, 205, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255
-},
-{
- 69, 47, 67, 111, 166, 205, 255, 255,
- 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255
-},
-{
- 82, 74, 79, 95, 109, 128, 145, 160,
- 173, 205, 205, 205, 224, 255, 255, 224,
- 255, 224
-},
-{
- 125, 74, 59, 69, 97, 141, 182, 255,
- 255, 255, 255, 255, 255, 255, 255, 255,
- 255, 255
-},
-{
- 173, 115, 85, 73, 76, 92, 115, 145,
- 173, 205, 224, 224, 255, 255, 255, 255,
- 255, 255
-},
-{
- 166, 134, 113, 102, 101, 102, 107, 118,
- 125, 138, 145, 155, 166, 182, 192, 192,
- 205, 150
-},
-{
- 224, 182, 134, 101, 83, 79, 85, 97,
- 120, 145, 173, 205, 224, 255, 255, 255,
- 255, 255
-},
-{
- 255, 224, 192, 150, 120, 101, 92, 89,
- 93, 102, 118, 134, 160, 182, 192, 224,
- 224, 224
-},
-{
- 255, 224, 224, 182, 155, 134, 118, 109,
- 104, 102, 106, 111, 118, 131, 145, 160,
- 173, 131
-}
-};
-
-const opus_uint8 silk_rate_levels_iCDF[ 2 ][ 9 ] =
-{
-{
- 241, 190, 178, 132, 87, 74, 41, 14,
- 0
-},
-{
- 223, 193, 157, 140, 106, 57, 39, 18,
- 0
-}
-};
-
-const opus_uint8 silk_rate_levels_BITS_Q5[ 2 ][ 9 ] =
-{
-{
- 131, 74, 141, 79, 80, 138, 95, 104,
- 134
-},
-{
- 95, 99, 91, 125, 93, 76, 123, 115,
- 123
-}
-};
-
-const opus_uint8 silk_shell_code_table0[ 152 ] = {
- 128, 0, 214, 42, 0, 235, 128, 21,
- 0, 244, 184, 72, 11, 0, 248, 214,
- 128, 42, 7, 0, 248, 225, 170, 80,
- 25, 5, 0, 251, 236, 198, 126, 54,
- 18, 3, 0, 250, 238, 211, 159, 82,
- 35, 15, 5, 0, 250, 231, 203, 168,
- 128, 88, 53, 25, 6, 0, 252, 238,
- 216, 185, 148, 108, 71, 40, 18, 4,
- 0, 253, 243, 225, 199, 166, 128, 90,
- 57, 31, 13, 3, 0, 254, 246, 233,
- 212, 183, 147, 109, 73, 44, 23, 10,
- 2, 0, 255, 250, 240, 223, 198, 166,
- 128, 90, 58, 33, 16, 6, 1, 0,
- 255, 251, 244, 231, 210, 181, 146, 110,
- 75, 46, 25, 12, 5, 1, 0, 255,
- 253, 248, 238, 221, 196, 164, 128, 92,
- 60, 35, 18, 8, 3, 1, 0, 255,
- 253, 249, 242, 229, 208, 180, 146, 110,
- 76, 48, 27, 14, 7, 3, 1, 0
-};
-
-const opus_uint8 silk_shell_code_table1[ 152 ] = {
- 129, 0, 207, 50, 0, 236, 129, 20,
- 0, 245, 185, 72, 10, 0, 249, 213,
- 129, 42, 6, 0, 250, 226, 169, 87,
- 27, 4, 0, 251, 233, 194, 130, 62,
- 20, 4, 0, 250, 236, 207, 160, 99,
- 47, 17, 3, 0, 255, 240, 217, 182,
- 131, 81, 41, 11, 1, 0, 255, 254,
- 233, 201, 159, 107, 61, 20, 2, 1,
- 0, 255, 249, 233, 206, 170, 128, 86,
- 50, 23, 7, 1, 0, 255, 250, 238,
- 217, 186, 148, 108, 70, 39, 18, 6,
- 1, 0, 255, 252, 243, 226, 200, 166,
- 128, 90, 56, 30, 13, 4, 1, 0,
- 255, 252, 245, 231, 209, 180, 146, 110,
- 76, 47, 25, 11, 4, 1, 0, 255,
- 253, 248, 237, 219, 194, 163, 128, 93,
- 62, 37, 19, 8, 3, 1, 0, 255,
- 254, 250, 241, 226, 205, 177, 145, 111,
- 79, 51, 30, 15, 6, 2, 1, 0
-};
-
-const opus_uint8 silk_shell_code_table2[ 152 ] = {
- 129, 0, 203, 54, 0, 234, 129, 23,
- 0, 245, 184, 73, 10, 0, 250, 215,
- 129, 41, 5, 0, 252, 232, 173, 86,
- 24, 3, 0, 253, 240, 200, 129, 56,
- 15, 2, 0, 253, 244, 217, 164, 94,
- 38, 10, 1, 0, 253, 245, 226, 189,
- 132, 71, 27, 7, 1, 0, 253, 246,
- 231, 203, 159, 105, 56, 23, 6, 1,
- 0, 255, 248, 235, 213, 179, 133, 85,
- 47, 19, 5, 1, 0, 255, 254, 243,
- 221, 194, 159, 117, 70, 37, 12, 2,
- 1, 0, 255, 254, 248, 234, 208, 171,
- 128, 85, 48, 22, 8, 2, 1, 0,
- 255, 254, 250, 240, 220, 189, 149, 107,
- 67, 36, 16, 6, 2, 1, 0, 255,
- 254, 251, 243, 227, 201, 166, 128, 90,
- 55, 29, 13, 5, 2, 1, 0, 255,
- 254, 252, 246, 234, 213, 183, 147, 109,
- 73, 43, 22, 10, 4, 2, 1, 0
-};
-
-const opus_uint8 silk_shell_code_table3[ 152 ] = {
- 130, 0, 200, 58, 0, 231, 130, 26,
- 0, 244, 184, 76, 12, 0, 249, 214,
- 130, 43, 6, 0, 252, 232, 173, 87,
- 24, 3, 0, 253, 241, 203, 131, 56,
- 14, 2, 0, 254, 246, 221, 167, 94,
- 35, 8, 1, 0, 254, 249, 232, 193,
- 130, 65, 23, 5, 1, 0, 255, 251,
- 239, 211, 162, 99, 45, 15, 4, 1,
- 0, 255, 251, 243, 223, 186, 131, 74,
- 33, 11, 3, 1, 0, 255, 252, 245,
- 230, 202, 158, 105, 57, 24, 8, 2,
- 1, 0, 255, 253, 247, 235, 214, 179,
- 132, 84, 44, 19, 7, 2, 1, 0,
- 255, 254, 250, 240, 223, 196, 159, 112,
- 69, 36, 15, 6, 2, 1, 0, 255,
- 254, 253, 245, 231, 209, 176, 136, 93,
- 55, 27, 11, 3, 2, 1, 0, 255,
- 254, 253, 252, 239, 221, 194, 158, 117,
- 76, 42, 18, 4, 3, 2, 1, 0
-};
-
-const opus_uint8 silk_shell_code_table_offsets[ 17 ] = {
- 0, 0, 2, 5, 9, 14, 20, 27,
- 35, 44, 54, 65, 77, 90, 104, 119,
- 135
-};
-
-const opus_uint8 silk_sign_iCDF[ 42 ] = {
- 254, 49, 67, 77, 82, 93, 99,
- 198, 11, 18, 24, 31, 36, 45,
- 255, 46, 66, 78, 87, 94, 104,
- 208, 14, 21, 32, 42, 51, 66,
- 255, 94, 104, 109, 112, 115, 118,
- 248, 53, 69, 80, 88, 95, 102
-};
diff --git a/drivers/opus/silk/tuning_parameters.h b/drivers/opus/silk/tuning_parameters.h
deleted file mode 100644
index 5b8f404235..0000000000
--- a/drivers/opus/silk/tuning_parameters.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_TUNING_PARAMETERS_H
-#define SILK_TUNING_PARAMETERS_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Decay time for bitreservoir */
-#define BITRESERVOIR_DECAY_TIME_MS 500
-
-/*******************/
-/* Pitch estimator */
-/*******************/
-
-/* Level of noise floor for whitening filter LPC analysis in pitch analysis */
-#define FIND_PITCH_WHITE_NOISE_FRACTION 1e-3f
-
-/* Bandwidth expansion for whitening filter in pitch analysis */
-#define FIND_PITCH_BANDWIDTH_EXPANSION 0.99f
-
-/*********************/
-/* Linear prediction */
-/*********************/
-
-/* LPC analysis regularization */
-#define FIND_LPC_COND_FAC 1e-5f
-
-/* LTP analysis defines */
-#define FIND_LTP_COND_FAC 1e-5f
-#define LTP_DAMPING 0.05f
-#define LTP_SMOOTHING 0.1f
-
-/* LTP quantization settings */
-#define MU_LTP_QUANT_NB 0.03f
-#define MU_LTP_QUANT_MB 0.025f
-#define MU_LTP_QUANT_WB 0.02f
-
-/* Max cumulative LTP gain */
-#define MAX_SUM_LOG_GAIN_DB 250.0f
-
-/***********************/
-/* High pass filtering */
-/***********************/
-
-/* Smoothing parameters for low end of pitch frequency range estimation */
-#define VARIABLE_HP_SMTH_COEF1 0.1f
-#define VARIABLE_HP_SMTH_COEF2 0.015f
-#define VARIABLE_HP_MAX_DELTA_FREQ 0.4f
-
-/* Min and max cut-off frequency values (-3 dB points) */
-#define VARIABLE_HP_MIN_CUTOFF_HZ 60
-#define VARIABLE_HP_MAX_CUTOFF_HZ 100
-
-/***********/
-/* Various */
-/***********/
-
-/* VAD threshold */
-#define SPEECH_ACTIVITY_DTX_THRES 0.05f
-
-/* Speech Activity LBRR enable threshold */
-#define LBRR_SPEECH_ACTIVITY_THRES 0.3f
-
-/*************************/
-/* Perceptual parameters */
-/*************************/
-
-/* reduction in coding SNR during low speech activity */
-#define BG_SNR_DECR_dB 2.0f
-
-/* factor for reducing quantization noise during voiced speech */
-#define HARM_SNR_INCR_dB 2.0f
-
-/* factor for reducing quantization noise for unvoiced sparse signals */
-#define SPARSE_SNR_INCR_dB 2.0f
-
-/* threshold for sparseness measure above which to use lower quantization offset during unvoiced */
-#define SPARSENESS_THRESHOLD_QNT_OFFSET 0.75f
-
-/* warping control */
-#define WARPING_MULTIPLIER 0.015f
-
-/* fraction added to first autocorrelation value */
-#define SHAPE_WHITE_NOISE_FRACTION 5e-5f
-
-/* noise shaping filter chirp factor */
-#define BANDWIDTH_EXPANSION 0.95f
-
-/* difference between chirp factors for analysis and synthesis noise shaping filters at low bitrates */
-#define LOW_RATE_BANDWIDTH_EXPANSION_DELTA 0.01f
-
-/* extra harmonic boosting (signal shaping) at low bitrates */
-#define LOW_RATE_HARMONIC_BOOST 0.1f
-
-/* extra harmonic boosting (signal shaping) for noisy input signals */
-#define LOW_INPUT_QUALITY_HARMONIC_BOOST 0.1f
-
-/* harmonic noise shaping */
-#define HARMONIC_SHAPING 0.3f
-
-/* extra harmonic noise shaping for high bitrates or noisy input */
-#define HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING 0.2f
-
-/* parameter for shaping noise towards higher frequencies */
-#define HP_NOISE_COEF 0.25f
-
-/* parameter for shaping noise even more towards higher frequencies during voiced speech */
-#define HARM_HP_NOISE_COEF 0.35f
-
-/* parameter for applying a high-pass tilt to the input signal */
-#define INPUT_TILT 0.05f
-
-/* parameter for extra high-pass tilt to the input signal at high rates */
-#define HIGH_RATE_INPUT_TILT 0.1f
-
-/* parameter for reducing noise at the very low frequencies */
-#define LOW_FREQ_SHAPING 4.0f
-
-/* less reduction of noise at the very low frequencies for signals with low SNR at low frequencies */
-#define LOW_QUALITY_LOW_FREQ_SHAPING_DECR 0.5f
-
-/* subframe smoothing coefficient for HarmBoost, HarmShapeGain, Tilt (lower -> more smoothing) */
-#define SUBFR_SMTH_COEF 0.4f
-
-/* parameters defining the R/D tradeoff in the residual quantizer */
-#define LAMBDA_OFFSET 1.2f
-#define LAMBDA_SPEECH_ACT -0.2f
-#define LAMBDA_DELAYED_DECISIONS -0.05f
-#define LAMBDA_INPUT_QUALITY -0.1f
-#define LAMBDA_CODING_QUALITY -0.2f
-#define LAMBDA_QUANT_OFFSET 0.8f
-
-/* Compensation in bitrate calculations for 10 ms modes */
-#define REDUCE_BITRATE_10_MS_BPS 2200
-
-/* Maximum time before allowing a bandwidth transition */
-#define MAX_BANDWIDTH_SWITCH_DELAY_MS 5000
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SILK_TUNING_PARAMETERS_H */
diff --git a/drivers/opus/silk/typedef.h b/drivers/opus/silk/typedef.h
deleted file mode 100644
index 3e193b4a45..0000000000
--- a/drivers/opus/silk/typedef.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/***********************************************************************
-Copyright (c) 2006-2011, Skype Limited. 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 name of Internet Society, IETF or IETF Trust, nor the
-names of specific 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.
-***********************************************************************/
-
-#ifndef SILK_TYPEDEF_H
-#define SILK_TYPEDEF_H
-
-#include "opus/opus_types.h"
-#include "opus/opus_defines.h"
-
-#ifndef OPUS_FIXED_POINT
-# include <float.h>
-# define silk_float float
-# define silk_float_MAX FLT_MAX
-#endif
-
-#define silk_int64_MAX ((opus_int64)0x7FFFFFFFFFFFFFFFLL) /* 2^63 - 1 */
-#define silk_int64_MIN ((opus_int64)0x8000000000000000LL) /* -2^63 */
-#define silk_int32_MAX 0x7FFFFFFF /* 2^31 - 1 = 2147483647 */
-#define silk_int32_MIN ((opus_int32)0x80000000) /* -2^31 = -2147483648 */
-#define silk_int16_MAX 0x7FFF /* 2^15 - 1 = 32767 */
-#define silk_int16_MIN ((opus_int16)0x8000) /* -2^15 = -32768 */
-#define silk_int8_MAX 0x7F /* 2^7 - 1 = 127 */
-#define silk_int8_MIN ((opus_int8)0x80) /* -2^7 = -128 */
-#define silk_uint8_MAX 0xFF /* 2^8 - 1 = 255 */
-
-#define silk_TRUE 1
-#define silk_FALSE 0
-
-/* assertions */
-#if (defined _WIN32 && !defined _WINCE && !defined(__GNUC__) && !defined(NO_ASSERTS))
-# ifndef silk_assert
-# include <crtdbg.h> /* ASSERTE() */
-# define silk_assert(COND) _ASSERTE(COND)
-# endif
-#else
-# ifdef ENABLE_ASSERTIONS
-# include <stdio.h>
-# include <stdlib.h>
-#define silk_fatal(str) _silk_fatal(str, __FILE__, __LINE__);
-#ifdef __GNUC__
-__attribute__((noreturn))
-#endif
-static OPUS_INLINE void _silk_fatal(const char *str, const char *file, int line)
-{
- fprintf (stderr, "Fatal (internal) error in %s, line %d: %s\n", file, line, str);
- abort();
-}
-# define silk_assert(COND) {if (!(COND)) {silk_fatal("assertion failed: " #COND);}}
-# else
-# define silk_assert(COND)
-# endif
-#endif
-
-#endif /* SILK_TYPEDEF_H */
diff --git a/drivers/opus/silk/x86/NSQ_del_dec_sse.c b/drivers/opus/silk/x86/NSQ_del_dec_sse.c
deleted file mode 100644
index e9afbba01b..0000000000
--- a/drivers/opus/silk/x86/NSQ_del_dec_sse.c
+++ /dev/null
@@ -1,854 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-#include <smmintrin.h>
-#include "opus/silk/main.h"
-#include "opus/celt/x86/x86cpu.h"
-
-#include "opus/celt/stack_alloc.h"
-
-typedef struct {
- opus_int32 sLPC_Q14[ MAX_SUB_FRAME_LENGTH + NSQ_LPC_BUF_LENGTH ];
- opus_int32 RandState[ DECISION_DELAY ];
- opus_int32 Q_Q10[ DECISION_DELAY ];
- opus_int32 Xq_Q14[ DECISION_DELAY ];
- opus_int32 Pred_Q15[ DECISION_DELAY ];
- opus_int32 Shape_Q14[ DECISION_DELAY ];
- opus_int32 sAR2_Q14[ MAX_SHAPE_LPC_ORDER ];
- opus_int32 LF_AR_Q14;
- opus_int32 Seed;
- opus_int32 SeedInit;
- opus_int32 RD_Q10;
-} NSQ_del_dec_struct;
-
-typedef struct {
- opus_int32 Q_Q10;
- opus_int32 RD_Q10;
- opus_int32 xq_Q14;
- opus_int32 LF_AR_Q14;
- opus_int32 sLTP_shp_Q14;
- opus_int32 LPC_exc_Q14;
-} NSQ_sample_struct;
-
-typedef NSQ_sample_struct NSQ_sample_pair[ 2 ];
-
-static OPUS_INLINE void silk_nsq_del_dec_scale_states_sse4_1(
- const silk_encoder_state *psEncC, /* I Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */
- const opus_int32 x_Q3[], /* I Input in Q3 */
- opus_int32 x_sc_Q10[], /* O Input scaled with 1/Gain in Q10 */
- const opus_int16 sLTP[], /* I Re-whitened LTP state in Q0 */
- opus_int32 sLTP_Q15[], /* O LTP state matching scaled input */
- opus_int subfr, /* I Subframe number */
- opus_int nStatesDelayedDecision, /* I Number of del dec states */
- const opus_int LTP_scale_Q14, /* I LTP state scaling */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lag */
- const opus_int signal_type, /* I Signal type */
- const opus_int decisionDelay /* I Decision delay */
-);
-
-/******************************************/
-/* Noise shape quantizer for one subframe */
-/******************************************/
-static OPUS_INLINE void silk_noise_shape_quantizer_del_dec_sse4_1(
- silk_nsq_state *NSQ, /* I/O NSQ state */
- NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */
- opus_int signalType, /* I Signal type */
- const opus_int32 x_Q10[], /* I */
- opus_int8 pulses[], /* O */
- opus_int16 xq[], /* O */
- opus_int32 sLTP_Q15[], /* I/O LTP filter state */
- opus_int32 delayedGain_Q10[], /* I/O Gain delay buffer */
- const opus_int16 a_Q12[], /* I Short term prediction coefs */
- const opus_int16 b_Q14[], /* I Long term prediction coefs */
- const opus_int16 AR_shp_Q13[], /* I Noise shaping coefs */
- opus_int lag, /* I Pitch lag */
- opus_int32 HarmShapeFIRPacked_Q14, /* I */
- opus_int Tilt_Q14, /* I Spectral tilt */
- opus_int32 LF_shp_Q14, /* I */
- opus_int32 Gain_Q16, /* I */
- opus_int Lambda_Q10, /* I */
- opus_int offset_Q10, /* I */
- opus_int length, /* I Input length */
- opus_int subfr, /* I Subframe number */
- opus_int shapingLPCOrder, /* I Shaping LPC filter order */
- opus_int predictLPCOrder, /* I Prediction filter order */
- opus_int warping_Q16, /* I */
- opus_int nStatesDelayedDecision, /* I Number of states in decision tree */
- opus_int *smpl_buf_idx, /* I Index to newest samples in buffers */
- opus_int decisionDelay /* I */
-);
-
-void silk_NSQ_del_dec_sse4_1(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-)
-{
- opus_int i, k, lag, start_idx, LSF_interpolation_flag, Winner_ind, subfr;
- opus_int last_smple_idx, smpl_buf_idx, decisionDelay;
- const opus_int16 *A_Q12, *B_Q14, *AR_shp_Q13;
- opus_int16 *pxq;
- VARDECL( opus_int32, sLTP_Q15 );
- VARDECL( opus_int16, sLTP );
- opus_int32 HarmShapeFIRPacked_Q14;
- opus_int offset_Q10;
- opus_int32 RDmin_Q10, Gain_Q10;
- VARDECL( opus_int32, x_sc_Q10 );
- VARDECL( opus_int32, delayedGain_Q10 );
- VARDECL( NSQ_del_dec_struct, psDelDec );
- NSQ_del_dec_struct *psDD;
- SAVE_STACK;
-
- /* Set unvoiced lag to the previous one, overwrite later for voiced */
- lag = NSQ->lagPrev;
-
- silk_assert( NSQ->prev_gain_Q16 != 0 );
-
- /* Initialize delayed decision states */
- ALLOC( psDelDec, psEncC->nStatesDelayedDecision, NSQ_del_dec_struct );
- silk_memset( psDelDec, 0, psEncC->nStatesDelayedDecision * sizeof( NSQ_del_dec_struct ) );
- for( k = 0; k < psEncC->nStatesDelayedDecision; k++ ) {
- psDD = &psDelDec[ k ];
- psDD->Seed = ( k + psIndices->Seed ) & 3;
- psDD->SeedInit = psDD->Seed;
- psDD->RD_Q10 = 0;
- psDD->LF_AR_Q14 = NSQ->sLF_AR_shp_Q14;
- psDD->Shape_Q14[ 0 ] = NSQ->sLTP_shp_Q14[ psEncC->ltp_mem_length - 1 ];
- silk_memcpy( psDD->sLPC_Q14, NSQ->sLPC_Q14, NSQ_LPC_BUF_LENGTH * sizeof( opus_int32 ) );
- silk_memcpy( psDD->sAR2_Q14, NSQ->sAR2_Q14, sizeof( NSQ->sAR2_Q14 ) );
- }
-
- offset_Q10 = silk_Quantization_Offsets_Q10[ psIndices->signalType >> 1 ][ psIndices->quantOffsetType ];
- smpl_buf_idx = 0; /* index of oldest samples */
-
- decisionDelay = silk_min_int( DECISION_DELAY, psEncC->subfr_length );
-
- /* For voiced frames limit the decision delay to lower than the pitch lag */
- if( psIndices->signalType == TYPE_VOICED ) {
- for( k = 0; k < psEncC->nb_subfr; k++ ) {
- decisionDelay = silk_min_int( decisionDelay, pitchL[ k ] - LTP_ORDER / 2 - 1 );
- }
- } else {
- if( lag > 0 ) {
- decisionDelay = silk_min_int( decisionDelay, lag - LTP_ORDER / 2 - 1 );
- }
- }
-
- if( psIndices->NLSFInterpCoef_Q2 == 4 ) {
- LSF_interpolation_flag = 0;
- } else {
- LSF_interpolation_flag = 1;
- }
-
- ALLOC( sLTP_Q15,
- psEncC->ltp_mem_length + psEncC->frame_length, opus_int32 );
- ALLOC( sLTP, psEncC->ltp_mem_length + psEncC->frame_length, opus_int16 );
- ALLOC( x_sc_Q10, psEncC->subfr_length, opus_int32 );
- ALLOC( delayedGain_Q10, DECISION_DELAY, opus_int32 );
- /* Set up pointers to start of sub frame */
- pxq = &NSQ->xq[ psEncC->ltp_mem_length ];
- NSQ->sLTP_shp_buf_idx = psEncC->ltp_mem_length;
- NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;
- subfr = 0;
- for( k = 0; k < psEncC->nb_subfr; k++ ) {
- A_Q12 = &PredCoef_Q12[ ( ( k >> 1 ) | ( 1 - LSF_interpolation_flag ) ) * MAX_LPC_ORDER ];
- B_Q14 = &LTPCoef_Q14[ k * LTP_ORDER ];
- AR_shp_Q13 = &AR2_Q13[ k * MAX_SHAPE_LPC_ORDER ];
-
- /* Noise shape parameters */
- silk_assert( HarmShapeGain_Q14[ k ] >= 0 );
- HarmShapeFIRPacked_Q14 = silk_RSHIFT( HarmShapeGain_Q14[ k ], 2 );
- HarmShapeFIRPacked_Q14 |= silk_LSHIFT( (opus_int32)silk_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 );
-
- NSQ->rewhite_flag = 0;
- if( psIndices->signalType == TYPE_VOICED ) {
- /* Voiced */
- lag = pitchL[ k ];
-
- /* Re-whitening */
- if( ( k & ( 3 - silk_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 += ( silk_int32_MAX >> 4 );
- silk_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;
- pulses[ i - decisionDelay ] = (opus_int8)silk_RSHIFT_ROUND( psDD->Q_Q10[ last_smple_idx ], 10 );
- pxq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND(
- silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], Gains_Q16[ 1 ] ), 14 ) );
- NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q14[ last_smple_idx ];
- }
-
- subfr = 0;
- }
-
- /* Rewhiten with new A coefs */
- start_idx = psEncC->ltp_mem_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2;
- silk_assert( start_idx > 0 );
-
- silk_LPC_analysis_filter( &sLTP[ start_idx ], &NSQ->xq[ start_idx + k * psEncC->subfr_length ],
- A_Q12, psEncC->ltp_mem_length - start_idx, psEncC->predictLPCOrder, psEncC->arch );
-
- NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;
- NSQ->rewhite_flag = 1;
- }
- }
-
- silk_nsq_del_dec_scale_states_sse4_1( psEncC, NSQ, psDelDec, x_Q3, x_sc_Q10, sLTP, sLTP_Q15, k,
- psEncC->nStatesDelayedDecision, LTP_scale_Q14, Gains_Q16, pitchL, psIndices->signalType, decisionDelay );
-
- silk_noise_shape_quantizer_del_dec_sse4_1( NSQ, psDelDec, psIndices->signalType, x_sc_Q10, pulses, pxq, sLTP_Q15,
- delayedGain_Q10, 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->warping_Q16, psEncC->nStatesDelayedDecision, &smpl_buf_idx, decisionDelay );
-
- x_Q3 += psEncC->subfr_length;
- pulses += 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 ];
- psIndices->Seed = psDD->SeedInit;
- last_smple_idx = smpl_buf_idx + decisionDelay;
- Gain_Q10 = silk_RSHIFT32( Gains_Q16[ psEncC->nb_subfr - 1 ], 6 );
- for( i = 0; i < decisionDelay; i++ ) {
- last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK;
- pulses[ i - decisionDelay ] = (opus_int8)silk_RSHIFT_ROUND( psDD->Q_Q10[ last_smple_idx ], 10 );
- pxq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND(
- silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], Gain_Q10 ), 8 ) );
- NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay + i ] = psDD->Shape_Q14[ last_smple_idx ];
- }
- silk_memcpy( NSQ->sLPC_Q14, &psDD->sLPC_Q14[ psEncC->subfr_length ], NSQ_LPC_BUF_LENGTH * sizeof( opus_int32 ) );
- silk_memcpy( NSQ->sAR2_Q14, psDD->sAR2_Q14, sizeof( psDD->sAR2_Q14 ) );
-
- /* Update states */
- NSQ->sLF_AR_shp_Q14 = psDD->LF_AR_Q14;
- NSQ->lagPrev = pitchL[ psEncC->nb_subfr - 1 ];
-
- /* Save quantized speech signal */
- /* DEBUG_STORE_DATA( enc.pcm, &NSQ->xq[psEncC->ltp_mem_length], psEncC->frame_length * sizeof( opus_int16 ) ) */
- silk_memmove( NSQ->xq, &NSQ->xq[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( opus_int16 ) );
- silk_memmove( NSQ->sLTP_shp_Q14, &NSQ->sLTP_shp_Q14[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( opus_int32 ) );
- RESTORE_STACK;
-}
-
-/******************************************/
-/* Noise shape quantizer for one subframe */
-/******************************************/
-static OPUS_INLINE void silk_noise_shape_quantizer_del_dec_sse4_1(
- silk_nsq_state *NSQ, /* I/O NSQ state */
- NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */
- opus_int signalType, /* I Signal type */
- const opus_int32 x_Q10[], /* I */
- opus_int8 pulses[], /* O */
- opus_int16 xq[], /* O */
- opus_int32 sLTP_Q15[], /* I/O LTP filter state */
- opus_int32 delayedGain_Q10[], /* I/O Gain delay buffer */
- const opus_int16 a_Q12[], /* I Short term prediction coefs */
- const opus_int16 b_Q14[], /* I Long term prediction coefs */
- const opus_int16 AR_shp_Q13[], /* I Noise shaping coefs */
- opus_int lag, /* I Pitch lag */
- opus_int32 HarmShapeFIRPacked_Q14, /* I */
- opus_int Tilt_Q14, /* I Spectral tilt */
- opus_int32 LF_shp_Q14, /* I */
- opus_int32 Gain_Q16, /* I */
- opus_int Lambda_Q10, /* I */
- opus_int offset_Q10, /* I */
- opus_int length, /* I Input length */
- opus_int subfr, /* I Subframe number */
- opus_int shapingLPCOrder, /* I Shaping LPC filter order */
- opus_int predictLPCOrder, /* I Prediction filter order */
- opus_int warping_Q16, /* I */
- opus_int nStatesDelayedDecision, /* I Number of states in decision tree */
- opus_int *smpl_buf_idx, /* I Index to newest samples in buffers */
- opus_int decisionDelay /* I */
-)
-{
- opus_int i, j, k, Winner_ind, RDmin_ind, RDmax_ind, last_smple_idx;
- opus_int32 Winner_rand_state;
- opus_int32 LTP_pred_Q14, LPC_pred_Q14, n_AR_Q14, n_LTP_Q14;
- opus_int32 n_LF_Q14, r_Q10, rr_Q10, rd1_Q10, rd2_Q10, RDmin_Q10, RDmax_Q10;
- opus_int32 q1_Q0, q1_Q10, q2_Q10, exc_Q14, LPC_exc_Q14, xq_Q14, Gain_Q10;
- opus_int32 tmp1, tmp2, sLF_AR_shp_Q14;
- opus_int32 *pred_lag_ptr, *shp_lag_ptr, *psLPC_Q14;
- VARDECL( NSQ_sample_pair, psSampleState );
- NSQ_del_dec_struct *psDD;
- NSQ_sample_struct *psSS;
-
- __m128i a_Q12_0123, a_Q12_4567, a_Q12_89AB, a_Q12_CDEF;
- __m128i b_Q12_0123, b_sr_Q12_0123;
- SAVE_STACK;
-
- silk_assert( nStatesDelayedDecision > 0 );
- ALLOC( psSampleState, nStatesDelayedDecision, NSQ_sample_pair );
-
- shp_lag_ptr = &NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ];
- pred_lag_ptr = &sLTP_Q15[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
- Gain_Q10 = silk_RSHIFT( Gain_Q16, 6 );
-
- a_Q12_0123 = OP_CVTEPI16_EPI32_M64( a_Q12 );
- a_Q12_4567 = OP_CVTEPI16_EPI32_M64( a_Q12 + 4 );
-
- if( opus_likely( predictLPCOrder == 16 ) ) {
- a_Q12_89AB = OP_CVTEPI16_EPI32_M64( a_Q12 + 8 );
- a_Q12_CDEF = OP_CVTEPI16_EPI32_M64( a_Q12 + 12 );
- }
-
- if( signalType == TYPE_VOICED ){
- b_Q12_0123 = OP_CVTEPI16_EPI32_M64( b_Q14 );
- b_sr_Q12_0123 = _mm_shuffle_epi32( b_Q12_0123, _MM_SHUFFLE( 0, 3, 2, 1 ) ); /* equal shift right 4 bytes */
- }
- for( i = 0; i < length; i++ ) {
- /* Perform common calculations used in all states */
-
- /* Long-term prediction */
- if( signalType == TYPE_VOICED ) {
- /* Unrolled loop */
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LTP_pred_Q14 = 2;
- {
- __m128i tmpa, tmpb, pred_lag_ptr_tmp;
- pred_lag_ptr_tmp = _mm_loadu_si128( (__m128i *)(&pred_lag_ptr[ -3 ] ) );
- pred_lag_ptr_tmp = _mm_shuffle_epi32( pred_lag_ptr_tmp, 0x1B );
- tmpa = _mm_mul_epi32( pred_lag_ptr_tmp, b_Q12_0123 );
- tmpa = _mm_srli_si128( tmpa, 2 );
-
- pred_lag_ptr_tmp = _mm_shuffle_epi32( pred_lag_ptr_tmp, _MM_SHUFFLE( 0, 3, 2, 1 ) );/* equal shift right 4 bytes */
- pred_lag_ptr_tmp = _mm_mul_epi32( pred_lag_ptr_tmp, b_sr_Q12_0123 );
- pred_lag_ptr_tmp = _mm_srli_si128( pred_lag_ptr_tmp, 2 );
- pred_lag_ptr_tmp = _mm_add_epi32( pred_lag_ptr_tmp, tmpa );
-
- tmpb = _mm_shuffle_epi32( pred_lag_ptr_tmp, _MM_SHUFFLE( 0, 0, 3, 2 ) );/* equal shift right 8 bytes */
- pred_lag_ptr_tmp = _mm_add_epi32( pred_lag_ptr_tmp, tmpb );
- LTP_pred_Q14 += _mm_cvtsi128_si32( pred_lag_ptr_tmp );
-
- LTP_pred_Q14 = silk_SMLAWB( LTP_pred_Q14, pred_lag_ptr[ -4 ], b_Q14[ 4 ] );
- LTP_pred_Q14 = silk_LSHIFT( LTP_pred_Q14, 1 ); /* Q13 -> Q14 */
- pred_lag_ptr++;
- }
- } else {
- LTP_pred_Q14 = 0;
- }
-
- /* Long-term shaping */
- if( lag > 0 ) {
- /* Symmetric, packed FIR coefficients */
- n_LTP_Q14 = silk_SMULWB( silk_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 );
- n_LTP_Q14 = silk_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ], HarmShapeFIRPacked_Q14 );
- n_LTP_Q14 = silk_SUB_LSHIFT32( LTP_pred_Q14, n_LTP_Q14, 2 ); /* Q12 -> Q14 */
- shp_lag_ptr++;
- } else {
- n_LTP_Q14 = 0;
- }
- {
- __m128i tmpa, tmpb, psLPC_Q14_tmp, a_Q12_tmp;
-
- for( k = 0; k < nStatesDelayedDecision; k++ ) {
- /* Delayed decision state */
- psDD = &psDelDec[ k ];
-
- /* Sample state */
- psSS = psSampleState[ k ];
-
- /* Generate dither */
- psDD->Seed = silk_RAND( psDD->Seed );
-
- /* Pointer used in short term prediction and shaping */
- psLPC_Q14 = &psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - 1 + i ];
- /* Short-term prediction */
- silk_assert( predictLPCOrder == 10 || predictLPCOrder == 16 );
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LPC_pred_Q14 = silk_RSHIFT( predictLPCOrder, 1 );
-
- tmpb = _mm_setzero_si128();
-
- /* step 1 */
- psLPC_Q14_tmp = _mm_loadu_si128( (__m128i *)(&psLPC_Q14[ -3 ] ) ); /* -3, -2 , -1, 0 */
- psLPC_Q14_tmp = _mm_shuffle_epi32( psLPC_Q14_tmp, 0x1B ); /* 0, -1, -2, -3 */
- tmpa = _mm_mul_epi32( psLPC_Q14_tmp, a_Q12_0123 ); /* 0, -1, -2, -3 * 0123 -> 0*0, 2*-2 */
-
- tmpa = _mm_srli_epi64( tmpa, 16 );
- tmpb = _mm_add_epi32( tmpb, tmpa );
-
- psLPC_Q14_tmp = _mm_shuffle_epi32( psLPC_Q14_tmp, _MM_SHUFFLE( 0, 3, 2, 1 ) ); /* equal shift right 4 bytes */
- a_Q12_tmp = _mm_shuffle_epi32( a_Q12_0123, _MM_SHUFFLE(0, 3, 2, 1 ) ); /* equal shift right 4 bytes */
- psLPC_Q14_tmp = _mm_mul_epi32( psLPC_Q14_tmp, a_Q12_tmp ); /* 1*-1, 3*-3 */
- psLPC_Q14_tmp = _mm_srli_epi64( psLPC_Q14_tmp, 16 );
- tmpb = _mm_add_epi32( tmpb, psLPC_Q14_tmp );
-
- /* step 2 */
- psLPC_Q14_tmp = _mm_loadu_si128( (__m128i *)(&psLPC_Q14[ -7 ] ) );
- psLPC_Q14_tmp = _mm_shuffle_epi32( psLPC_Q14_tmp, 0x1B );
- tmpa = _mm_mul_epi32( psLPC_Q14_tmp, a_Q12_4567 );
- tmpa = _mm_srli_epi64( tmpa, 16 );
- tmpb = _mm_add_epi32( tmpb, tmpa );
-
- psLPC_Q14_tmp = _mm_shuffle_epi32( psLPC_Q14_tmp, _MM_SHUFFLE( 0, 3, 2, 1 ) ); /* equal shift right 4 bytes */
- a_Q12_tmp = _mm_shuffle_epi32( a_Q12_4567, _MM_SHUFFLE(0, 3, 2, 1 ) ); /* equal shift right 4 bytes */
- psLPC_Q14_tmp = _mm_mul_epi32( psLPC_Q14_tmp, a_Q12_tmp );
- psLPC_Q14_tmp = _mm_srli_epi64( psLPC_Q14_tmp, 16 );
- tmpb = _mm_add_epi32( tmpb, psLPC_Q14_tmp );
-
- if ( opus_likely( predictLPCOrder == 16 ) )
- {
- /* step 3 */
- psLPC_Q14_tmp = _mm_loadu_si128( (__m128i *)(&psLPC_Q14[ -11 ] ) );
- psLPC_Q14_tmp = _mm_shuffle_epi32( psLPC_Q14_tmp, 0x1B );
- tmpa = _mm_mul_epi32( psLPC_Q14_tmp, a_Q12_89AB );
- tmpa = _mm_srli_epi64( tmpa, 16 );
- tmpb = _mm_add_epi32( tmpb, tmpa );
-
- psLPC_Q14_tmp = _mm_shuffle_epi32( psLPC_Q14_tmp, _MM_SHUFFLE( 0, 3, 2, 1 ) ); /* equal shift right 4 bytes */
- a_Q12_tmp = _mm_shuffle_epi32( a_Q12_89AB, _MM_SHUFFLE(0, 3, 2, 1 ) );/* equal shift right 4 bytes */
- psLPC_Q14_tmp = _mm_mul_epi32( psLPC_Q14_tmp, a_Q12_tmp );
- psLPC_Q14_tmp = _mm_srli_epi64( psLPC_Q14_tmp, 16 );
- tmpb = _mm_add_epi32( tmpb, psLPC_Q14_tmp );
-
- /* setp 4 */
- psLPC_Q14_tmp = _mm_loadu_si128( (__m128i *)(&psLPC_Q14[ -15 ] ) );
- psLPC_Q14_tmp = _mm_shuffle_epi32( psLPC_Q14_tmp, 0x1B );
- tmpa = _mm_mul_epi32( psLPC_Q14_tmp, a_Q12_CDEF );
- tmpa = _mm_srli_epi64( tmpa, 16 );
- tmpb = _mm_add_epi32( tmpb, tmpa );
-
- psLPC_Q14_tmp = _mm_shuffle_epi32( psLPC_Q14_tmp, _MM_SHUFFLE( 0, 3, 2, 1 ) ); /* equal shift right 4 bytes */
- a_Q12_tmp = _mm_shuffle_epi32( a_Q12_CDEF, _MM_SHUFFLE(0, 3, 2, 1 ) ); /* equal shift right 4 bytes */
- psLPC_Q14_tmp = _mm_mul_epi32( psLPC_Q14_tmp, a_Q12_tmp );
- psLPC_Q14_tmp = _mm_srli_epi64( psLPC_Q14_tmp, 16 );
- tmpb = _mm_add_epi32( tmpb, psLPC_Q14_tmp );
-
- /* add at last */
- /* equal shift right 8 bytes*/
- tmpa = _mm_shuffle_epi32( tmpb, _MM_SHUFFLE( 0, 0, 3, 2 ) );
- tmpb = _mm_add_epi32( tmpb, tmpa );
- LPC_pred_Q14 += _mm_cvtsi128_si32( tmpb );
- }
- else
- {
- /* add at last */
- tmpa = _mm_shuffle_epi32( tmpb, _MM_SHUFFLE( 0, 0, 3, 2 ) ); /* equal shift right 8 bytes*/
- tmpb = _mm_add_epi32( tmpb, tmpa );
- LPC_pred_Q14 += _mm_cvtsi128_si32( tmpb );
-
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -8 ], a_Q12[ 8 ] );
- LPC_pred_Q14 = silk_SMLAWB( LPC_pred_Q14, psLPC_Q14[ -9 ], a_Q12[ 9 ] );
- }
-
- LPC_pred_Q14 = silk_LSHIFT( LPC_pred_Q14, 4 ); /* Q10 -> Q14 */
-
- /* Noise shape feedback */
- silk_assert( ( shapingLPCOrder & 1 ) == 0 ); /* check that order is even */
- /* Output of lowpass section */
- tmp2 = silk_SMLAWB( psLPC_Q14[ 0 ], psDD->sAR2_Q14[ 0 ], warping_Q16 );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( psDD->sAR2_Q14[ 0 ], psDD->sAR2_Q14[ 1 ] - tmp2, warping_Q16 );
- psDD->sAR2_Q14[ 0 ] = tmp2;
- n_AR_Q14 = silk_RSHIFT( shapingLPCOrder, 1 );
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, tmp2, AR_shp_Q13[ 0 ] );
- /* Loop over allpass sections */
- for( j = 2; j < shapingLPCOrder; j += 2 ) {
- /* Output of allpass section */
- tmp2 = silk_SMLAWB( psDD->sAR2_Q14[ j - 1 ], psDD->sAR2_Q14[ j + 0 ] - tmp1, warping_Q16 );
- psDD->sAR2_Q14[ j - 1 ] = tmp1;
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, tmp1, AR_shp_Q13[ j - 1 ] );
- /* Output of allpass section */
- tmp1 = silk_SMLAWB( psDD->sAR2_Q14[ j + 0 ], psDD->sAR2_Q14[ j + 1 ] - tmp2, warping_Q16 );
- psDD->sAR2_Q14[ j + 0 ] = tmp2;
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, tmp2, AR_shp_Q13[ j ] );
- }
- psDD->sAR2_Q14[ shapingLPCOrder - 1 ] = tmp1;
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, tmp1, AR_shp_Q13[ shapingLPCOrder - 1 ] );
-
- n_AR_Q14 = silk_LSHIFT( n_AR_Q14, 1 ); /* Q11 -> Q12 */
- n_AR_Q14 = silk_SMLAWB( n_AR_Q14, psDD->LF_AR_Q14, Tilt_Q14 ); /* Q12 */
- n_AR_Q14 = silk_LSHIFT( n_AR_Q14, 2 ); /* Q12 -> Q14 */
-
- n_LF_Q14 = silk_SMULWB( psDD->Shape_Q14[ *smpl_buf_idx ], LF_shp_Q14 ); /* Q12 */
- n_LF_Q14 = silk_SMLAWT( n_LF_Q14, psDD->LF_AR_Q14, LF_shp_Q14 ); /* Q12 */
- n_LF_Q14 = silk_LSHIFT( n_LF_Q14, 2 ); /* Q12 -> Q14 */
-
- /* Input minus prediction plus noise feedback */
- /* r = x[ i ] - LTP_pred - LPC_pred + n_AR + n_Tilt + n_LF + n_LTP */
- tmp1 = silk_ADD32( n_AR_Q14, n_LF_Q14 ); /* Q14 */
- tmp2 = silk_ADD32( n_LTP_Q14, LPC_pred_Q14 ); /* Q13 */
- tmp1 = silk_SUB32( tmp2, tmp1 ); /* Q13 */
- tmp1 = silk_RSHIFT_ROUND( tmp1, 4 ); /* Q10 */
-
- r_Q10 = silk_SUB32( x_Q10[ i ], tmp1 ); /* residual error Q10 */
-
- /* Flip sign depending on dither */
- if ( psDD->Seed < 0 ) {
- r_Q10 = -r_Q10;
- }
- r_Q10 = silk_LIMIT_32( r_Q10, -(31 << 10), 30 << 10 );
-
- /* Find two quantization level candidates and measure their rate-distortion */
- q1_Q10 = silk_SUB32( r_Q10, offset_Q10 );
- q1_Q0 = silk_RSHIFT( q1_Q10, 10 );
- if( q1_Q0 > 0 ) {
- q1_Q10 = silk_SUB32( silk_LSHIFT( q1_Q0, 10 ), QUANT_LEVEL_ADJUST_Q10 );
- q1_Q10 = silk_ADD32( q1_Q10, offset_Q10 );
- q2_Q10 = silk_ADD32( q1_Q10, 1024 );
- rd1_Q10 = silk_SMULBB( q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else if( q1_Q0 == 0 ) {
- q1_Q10 = offset_Q10;
- q2_Q10 = silk_ADD32( q1_Q10, 1024 - QUANT_LEVEL_ADJUST_Q10 );
- rd1_Q10 = silk_SMULBB( q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else if( q1_Q0 == -1 ) {
- q2_Q10 = offset_Q10;
- q1_Q10 = silk_SUB32( q2_Q10, 1024 - QUANT_LEVEL_ADJUST_Q10 );
- rd1_Q10 = silk_SMULBB( -q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( q2_Q10, Lambda_Q10 );
- } else { /* q1_Q0 < -1 */
- q1_Q10 = silk_ADD32( silk_LSHIFT( q1_Q0, 10 ), QUANT_LEVEL_ADJUST_Q10 );
- q1_Q10 = silk_ADD32( q1_Q10, offset_Q10 );
- q2_Q10 = silk_ADD32( q1_Q10, 1024 );
- rd1_Q10 = silk_SMULBB( -q1_Q10, Lambda_Q10 );
- rd2_Q10 = silk_SMULBB( -q2_Q10, Lambda_Q10 );
- }
- rr_Q10 = silk_SUB32( r_Q10, q1_Q10 );
- rd1_Q10 = silk_RSHIFT( silk_SMLABB( rd1_Q10, rr_Q10, rr_Q10 ), 10 );
- rr_Q10 = silk_SUB32( r_Q10, q2_Q10 );
- rd2_Q10 = silk_RSHIFT( silk_SMLABB( rd2_Q10, rr_Q10, rr_Q10 ), 10 );
-
- if( rd1_Q10 < rd2_Q10 ) {
- psSS[ 0 ].RD_Q10 = silk_ADD32( psDD->RD_Q10, rd1_Q10 );
- psSS[ 1 ].RD_Q10 = silk_ADD32( psDD->RD_Q10, rd2_Q10 );
- psSS[ 0 ].Q_Q10 = q1_Q10;
- psSS[ 1 ].Q_Q10 = q2_Q10;
- } else {
- psSS[ 0 ].RD_Q10 = silk_ADD32( psDD->RD_Q10, rd2_Q10 );
- psSS[ 1 ].RD_Q10 = silk_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_Q14 = silk_LSHIFT32( psSS[ 0 ].Q_Q10, 4 );
- if ( psDD->Seed < 0 ) {
- exc_Q14 = -exc_Q14;
- }
-
- /* Add predictions */
- LPC_exc_Q14 = silk_ADD32( exc_Q14, LTP_pred_Q14 );
- xq_Q14 = silk_ADD32( LPC_exc_Q14, LPC_pred_Q14 );
-
- /* Update states */
- sLF_AR_shp_Q14 = silk_SUB32( xq_Q14, n_AR_Q14 );
- psSS[ 0 ].sLTP_shp_Q14 = silk_SUB32( sLF_AR_shp_Q14, n_LF_Q14 );
- psSS[ 0 ].LF_AR_Q14 = sLF_AR_shp_Q14;
- psSS[ 0 ].LPC_exc_Q14 = LPC_exc_Q14;
- psSS[ 0 ].xq_Q14 = xq_Q14;
-
- /* Update states for second best quantization */
-
- /* Quantized excitation */
- exc_Q14 = silk_LSHIFT32( psSS[ 1 ].Q_Q10, 4 );
- if ( psDD->Seed < 0 ) {
- exc_Q14 = -exc_Q14;
- }
-
-
- /* Add predictions */
- LPC_exc_Q14 = silk_ADD32( exc_Q14, LTP_pred_Q14 );
- xq_Q14 = silk_ADD32( LPC_exc_Q14, LPC_pred_Q14 );
-
- /* Update states */
- sLF_AR_shp_Q14 = silk_SUB32( xq_Q14, n_AR_Q14 );
- psSS[ 1 ].sLTP_shp_Q14 = silk_SUB32( sLF_AR_shp_Q14, n_LF_Q14 );
- psSS[ 1 ].LF_AR_Q14 = sLF_AR_shp_Q14;
- psSS[ 1 ].LPC_exc_Q14 = LPC_exc_Q14;
- psSS[ 1 ].xq_Q14 = xq_Q14;
- }
- }
- *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 = silk_ADD32( psSampleState[ k ][ 0 ].RD_Q10, silk_int32_MAX >> 4 );
- psSampleState[ k ][ 1 ].RD_Q10 = silk_ADD32( psSampleState[ k ][ 1 ].RD_Q10, silk_int32_MAX >> 4 );
- silk_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 ) {
- silk_memcpy( ( (opus_int32 *)&psDelDec[ RDmax_ind ] ) + i,
- ( (opus_int32 *)&psDelDec[ RDmin_ind ] ) + i, sizeof( NSQ_del_dec_struct ) - i * sizeof( opus_int32) );
- silk_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 ) {
- pulses[ i - decisionDelay ] = (opus_int8)silk_RSHIFT_ROUND( psDD->Q_Q10[ last_smple_idx ], 10 );
- xq[ i - decisionDelay ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND(
- silk_SMULWW( psDD->Xq_Q14[ last_smple_idx ], delayedGain_Q10[ last_smple_idx ] ), 8 ) );
- NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - decisionDelay ] = psDD->Shape_Q14[ last_smple_idx ];
- sLTP_Q15[ NSQ->sLTP_buf_idx - decisionDelay ] = psDD->Pred_Q15[ 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_Q14 = psSS->LF_AR_Q14;
- psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH + i ] = psSS->xq_Q14;
- psDD->Xq_Q14[ *smpl_buf_idx ] = psSS->xq_Q14;
- psDD->Q_Q10[ *smpl_buf_idx ] = psSS->Q_Q10;
- psDD->Pred_Q15[ *smpl_buf_idx ] = silk_LSHIFT32( psSS->LPC_exc_Q14, 1 );
- psDD->Shape_Q14[ *smpl_buf_idx ] = psSS->sLTP_shp_Q14;
- psDD->Seed = silk_ADD32_ovflw( psDD->Seed, silk_RSHIFT_ROUND( psSS->Q_Q10, 10 ) );
- psDD->RandState[ *smpl_buf_idx ] = psDD->Seed;
- psDD->RD_Q10 = psSS->RD_Q10;
- }
- delayedGain_Q10[ *smpl_buf_idx ] = Gain_Q10;
- }
- /* Update LPC states */
- for( k = 0; k < nStatesDelayedDecision; k++ ) {
- psDD = &psDelDec[ k ];
- silk_memcpy( psDD->sLPC_Q14, &psDD->sLPC_Q14[ length ], NSQ_LPC_BUF_LENGTH * sizeof( opus_int32 ) );
- }
- RESTORE_STACK;
-}
-
-static OPUS_INLINE void silk_nsq_del_dec_scale_states_sse4_1(
- const silk_encoder_state *psEncC, /* I Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */
- const opus_int32 x_Q3[], /* I Input in Q3 */
- opus_int32 x_sc_Q10[], /* O Input scaled with 1/Gain in Q10 */
- const opus_int16 sLTP[], /* I Re-whitened LTP state in Q0 */
- opus_int32 sLTP_Q15[], /* O LTP state matching scaled input */
- opus_int subfr, /* I Subframe number */
- opus_int nStatesDelayedDecision, /* I Number of del dec states */
- const opus_int LTP_scale_Q14, /* I LTP state scaling */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lag */
- const opus_int signal_type, /* I Signal type */
- const opus_int decisionDelay /* I Decision delay */
-)
-{
- opus_int i, k, lag;
- opus_int32 gain_adj_Q16, inv_gain_Q31, inv_gain_Q23;
- NSQ_del_dec_struct *psDD;
- __m128i xmm_inv_gain_Q23, xmm_x_Q3_x2x0, xmm_x_Q3_x3x1;
-
- lag = pitchL[ subfr ];
- inv_gain_Q31 = silk_INVERSE32_varQ( silk_max( Gains_Q16[ subfr ], 1 ), 47 );
-
- silk_assert( inv_gain_Q31 != 0 );
-
- /* Calculate gain adjustment factor */
- if( Gains_Q16[ subfr ] != NSQ->prev_gain_Q16 ) {
- gain_adj_Q16 = silk_DIV32_varQ( NSQ->prev_gain_Q16, Gains_Q16[ subfr ], 16 );
- } else {
- gain_adj_Q16 = (opus_int32)1 << 16;
- }
-
- /* Scale input */
- inv_gain_Q23 = silk_RSHIFT_ROUND( inv_gain_Q31, 8 );
-
- /* prepare inv_gain_Q23 in packed 4 32-bits */
- xmm_inv_gain_Q23 = _mm_set1_epi32(inv_gain_Q23);
-
- for( i = 0; i < psEncC->subfr_length - 3; i += 4 ) {
- xmm_x_Q3_x2x0 = _mm_loadu_si128( (__m128i *)(&(x_Q3[ i ] ) ) );
- /* equal shift right 4 bytes*/
- xmm_x_Q3_x3x1 = _mm_shuffle_epi32( xmm_x_Q3_x2x0, _MM_SHUFFLE( 0, 3, 2, 1 ) );
-
- xmm_x_Q3_x2x0 = _mm_mul_epi32( xmm_x_Q3_x2x0, xmm_inv_gain_Q23 );
- xmm_x_Q3_x3x1 = _mm_mul_epi32( xmm_x_Q3_x3x1, xmm_inv_gain_Q23 );
-
- xmm_x_Q3_x2x0 = _mm_srli_epi64( xmm_x_Q3_x2x0, 16 );
- xmm_x_Q3_x3x1 = _mm_slli_epi64( xmm_x_Q3_x3x1, 16 );
-
- xmm_x_Q3_x2x0 = _mm_blend_epi16( xmm_x_Q3_x2x0, xmm_x_Q3_x3x1, 0xCC );
-
- _mm_storeu_si128( (__m128i *)(&(x_sc_Q10[ i ])), xmm_x_Q3_x2x0 );
- }
-
- for( ; i < psEncC->subfr_length; i++ ) {
- x_sc_Q10[ i ] = silk_SMULWW( x_Q3[ i ], inv_gain_Q23 );
- }
-
- /* Save inverse gain */
- NSQ->prev_gain_Q16 = Gains_Q16[ subfr ];
-
- /* After rewhitening the LTP state is un-scaled, so scale with inv_gain_Q16 */
- if( NSQ->rewhite_flag ) {
- if( subfr == 0 ) {
- /* Do LTP downscaling */
- inv_gain_Q31 = silk_LSHIFT( silk_SMULWB( inv_gain_Q31, LTP_scale_Q14 ), 2 );
- }
- for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
- silk_assert( i < MAX_FRAME_LENGTH );
- sLTP_Q15[ i ] = silk_SMULWB( inv_gain_Q31, sLTP[ i ] );
- }
- }
-
- /* Adjust for changing gain */
- if( gain_adj_Q16 != (opus_int32)1 << 16 ) {
- /* Scale long-term shaping state */
- {
- __m128i xmm_gain_adj_Q16, xmm_sLTP_shp_Q14_x2x0, xmm_sLTP_shp_Q14_x3x1;
-
- /* prepare gain_adj_Q16 in packed 4 32-bits */
- xmm_gain_adj_Q16 = _mm_set1_epi32( gain_adj_Q16 );
-
- for( i = NSQ->sLTP_shp_buf_idx - psEncC->ltp_mem_length; i < NSQ->sLTP_shp_buf_idx - 3; i += 4 )
- {
- xmm_sLTP_shp_Q14_x2x0 = _mm_loadu_si128( (__m128i *)(&(NSQ->sLTP_shp_Q14[ i ] ) ) );
- /* equal shift right 4 bytes*/
- xmm_sLTP_shp_Q14_x3x1 = _mm_shuffle_epi32( xmm_sLTP_shp_Q14_x2x0, _MM_SHUFFLE( 0, 3, 2, 1 ) );
-
- xmm_sLTP_shp_Q14_x2x0 = _mm_mul_epi32( xmm_sLTP_shp_Q14_x2x0, xmm_gain_adj_Q16 );
- xmm_sLTP_shp_Q14_x3x1 = _mm_mul_epi32( xmm_sLTP_shp_Q14_x3x1, xmm_gain_adj_Q16 );
-
- xmm_sLTP_shp_Q14_x2x0 = _mm_srli_epi64( xmm_sLTP_shp_Q14_x2x0, 16 );
- xmm_sLTP_shp_Q14_x3x1 = _mm_slli_epi64( xmm_sLTP_shp_Q14_x3x1, 16 );
-
- xmm_sLTP_shp_Q14_x2x0 = _mm_blend_epi16( xmm_sLTP_shp_Q14_x2x0, xmm_sLTP_shp_Q14_x3x1, 0xCC );
-
- _mm_storeu_si128( (__m128i *)(&(NSQ->sLTP_shp_Q14[ i ] ) ), xmm_sLTP_shp_Q14_x2x0 );
- }
-
- for( ; i < NSQ->sLTP_shp_buf_idx; i++ ) {
- NSQ->sLTP_shp_Q14[ i ] = silk_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q14[ i ] );
- }
-
- /* Scale long-term prediction state */
- if( signal_type == TYPE_VOICED && NSQ->rewhite_flag == 0 ) {
- for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx - decisionDelay; i++ ) {
- sLTP_Q15[ i ] = silk_SMULWW( gain_adj_Q16, sLTP_Q15[ i ] );
- }
- }
-
- for( k = 0; k < nStatesDelayedDecision; k++ ) {
- psDD = &psDelDec[ k ];
-
- /* Scale scalar states */
- psDD->LF_AR_Q14 = silk_SMULWW( gain_adj_Q16, psDD->LF_AR_Q14 );
-
- /* Scale short-term prediction and shaping states */
- for( i = 0; i < NSQ_LPC_BUF_LENGTH; i++ ) {
- psDD->sLPC_Q14[ i ] = silk_SMULWW( gain_adj_Q16, psDD->sLPC_Q14[ i ] );
- }
- for( i = 0; i < MAX_SHAPE_LPC_ORDER; i++ ) {
- psDD->sAR2_Q14[ i ] = silk_SMULWW( gain_adj_Q16, psDD->sAR2_Q14[ i ] );
- }
- for( i = 0; i < DECISION_DELAY; i++ ) {
- psDD->Pred_Q15[ i ] = silk_SMULWW( gain_adj_Q16, psDD->Pred_Q15[ i ] );
- psDD->Shape_Q14[ i ] = silk_SMULWW( gain_adj_Q16, psDD->Shape_Q14[ i ] );
- }
- }
- }
- }
-}
diff --git a/drivers/opus/silk/x86/NSQ_sse.c b/drivers/opus/silk/x86/NSQ_sse.c
deleted file mode 100644
index ac0fa1ab04..0000000000
--- a/drivers/opus/silk/x86/NSQ_sse.c
+++ /dev/null
@@ -1,717 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-#include <smmintrin.h>
-#include "opus/silk/main.h"
-#include "opus/celt/x86/x86cpu.h"
-#include "opus/celt/stack_alloc.h"
-
-static OPUS_INLINE void silk_nsq_scale_states_sse4_1(
- const silk_encoder_state *psEncC, /* I Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- const opus_int32 x_Q3[], /* I input in Q3 */
- opus_int32 x_sc_Q10[], /* O input scaled with 1/Gain */
- const opus_int16 sLTP[], /* I re-whitened LTP state in Q0 */
- opus_int32 sLTP_Q15[], /* O LTP state matching scaled input */
- opus_int subfr, /* I subframe number */
- const opus_int LTP_scale_Q14, /* I */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lag */
- const opus_int signal_type /* I Signal type */
-);
-
-static OPUS_INLINE void silk_noise_shape_quantizer_10_16_sse4_1(
- silk_nsq_state *NSQ, /* I/O NSQ state */
- opus_int signalType, /* I Signal type */
- const opus_int32 x_sc_Q10[], /* I */
- opus_int8 pulses[], /* O */
- opus_int16 xq[], /* O */
- opus_int32 sLTP_Q15[], /* I/O LTP state */
- const opus_int16 a_Q12[], /* I Short term prediction coefs */
- const opus_int16 b_Q14[], /* I Long term prediction coefs */
- const opus_int16 AR_shp_Q13[], /* I Noise shaping AR coefs */
- opus_int lag, /* I Pitch lag */
- opus_int32 HarmShapeFIRPacked_Q14, /* I */
- opus_int Tilt_Q14, /* I Spectral tilt */
- opus_int32 LF_shp_Q14, /* I */
- opus_int32 Gain_Q16, /* I */
- opus_int offset_Q10, /* I */
- opus_int length, /* I Input length */
- opus_int32 table[][4] /* I */
-);
-
-void silk_NSQ_sse4_1(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-)
-{
- opus_int k, lag, start_idx, LSF_interpolation_flag;
- const opus_int16 *A_Q12, *B_Q14, *AR_shp_Q13;
- opus_int16 *pxq;
- VARDECL( opus_int32, sLTP_Q15 );
- VARDECL( opus_int16, sLTP );
- opus_int32 HarmShapeFIRPacked_Q14;
- opus_int offset_Q10;
- VARDECL( opus_int32, x_sc_Q10 );
-
- opus_int32 table[ 64 ][ 4 ];
- opus_int32 tmp1;
- opus_int32 q1_Q10, q2_Q10, rd1_Q20, rd2_Q20;
-
- SAVE_STACK;
-
- NSQ->rand_seed = psIndices->Seed;
-
- /* Set unvoiced lag to the previous one, overwrite later for voiced */
- lag = NSQ->lagPrev;
-
- silk_assert( NSQ->prev_gain_Q16 != 0 );
-
- offset_Q10 = silk_Quantization_Offsets_Q10[ psIndices->signalType >> 1 ][ psIndices->quantOffsetType ];
-
- /* 0 */
- q1_Q10 = offset_Q10;
- q2_Q10 = offset_Q10 + ( 1024 - QUANT_LEVEL_ADJUST_Q10 );
- rd1_Q20 = q1_Q10 * Lambda_Q10;
- rd2_Q20 = q2_Q10 * Lambda_Q10;
-
- table[ 32 ][ 0 ] = q1_Q10;
- table[ 32 ][ 1 ] = q2_Q10;
- table[ 32 ][ 2 ] = 2 * (q1_Q10 - q2_Q10);
- table[ 32 ][ 3 ] = (rd1_Q20 - rd2_Q20) + (q1_Q10 * q1_Q10 - q2_Q10 * q2_Q10);
-
- /* -1 */
- q1_Q10 = offset_Q10 - ( 1024 - QUANT_LEVEL_ADJUST_Q10 );
- q2_Q10 = offset_Q10;
- rd1_Q20 = - q1_Q10 * Lambda_Q10;
- rd2_Q20 = q2_Q10 * Lambda_Q10;
-
- table[ 31 ][ 0 ] = q1_Q10;
- table[ 31 ][ 1 ] = q2_Q10;
- table[ 31 ][ 2 ] = 2 * (q1_Q10 - q2_Q10);
- table[ 31 ][ 3 ] = (rd1_Q20 - rd2_Q20) + (q1_Q10 * q1_Q10 - q2_Q10 * q2_Q10);
-
- /* > 0 */
- for (k = 1; k <= 31; k++)
- {
- tmp1 = offset_Q10 + silk_LSHIFT( k, 10 );
-
- q1_Q10 = tmp1 - QUANT_LEVEL_ADJUST_Q10;
- q2_Q10 = tmp1 - QUANT_LEVEL_ADJUST_Q10 + 1024;
- rd1_Q20 = q1_Q10 * Lambda_Q10;
- rd2_Q20 = q2_Q10 * Lambda_Q10;
-
- table[ 32 + k ][ 0 ] = q1_Q10;
- table[ 32 + k ][ 1 ] = q2_Q10;
- table[ 32 + k ][ 2 ] = 2 * (q1_Q10 - q2_Q10);
- table[ 32 + k ][ 3 ] = (rd1_Q20 - rd2_Q20) + (q1_Q10 * q1_Q10 - q2_Q10 * q2_Q10);
- }
-
- /* < -1 */
- for (k = -32; k <= -2; k++)
- {
- tmp1 = offset_Q10 + silk_LSHIFT( k, 10 );
-
- q1_Q10 = tmp1 + QUANT_LEVEL_ADJUST_Q10;
- q2_Q10 = tmp1 + QUANT_LEVEL_ADJUST_Q10 + 1024;
- rd1_Q20 = - q1_Q10 * Lambda_Q10;
- rd2_Q20 = - q2_Q10 * Lambda_Q10;
-
- table[ 32 + k ][ 0 ] = q1_Q10;
- table[ 32 + k ][ 1 ] = q2_Q10;
- table[ 32 + k ][ 2 ] = 2 * (q1_Q10 - q2_Q10);
- table[ 32 + k ][ 3 ] = (rd1_Q20 - rd2_Q20) + (q1_Q10 * q1_Q10 - q2_Q10 * q2_Q10);
- }
-
- if( psIndices->NLSFInterpCoef_Q2 == 4 ) {
- LSF_interpolation_flag = 0;
- } else {
- LSF_interpolation_flag = 1;
- }
-
- ALLOC( sLTP_Q15,
- psEncC->ltp_mem_length + psEncC->frame_length, opus_int32 );
- ALLOC( sLTP, psEncC->ltp_mem_length + psEncC->frame_length, opus_int16 );
- ALLOC( x_sc_Q10, psEncC->subfr_length, opus_int32 );
- /* Set up pointers to start of sub frame */
- NSQ->sLTP_shp_buf_idx = psEncC->ltp_mem_length;
- NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;
- pxq = &NSQ->xq[ psEncC->ltp_mem_length ];
- for( k = 0; k < psEncC->nb_subfr; k++ ) {
- A_Q12 = &PredCoef_Q12[ (( k >> 1 ) | ( 1 - LSF_interpolation_flag )) * MAX_LPC_ORDER ];
- B_Q14 = &LTPCoef_Q14[ k * LTP_ORDER ];
- AR_shp_Q13 = &AR2_Q13[ k * MAX_SHAPE_LPC_ORDER ];
-
- /* Noise shape parameters */
- silk_assert( HarmShapeGain_Q14[ k ] >= 0 );
- HarmShapeFIRPacked_Q14 = silk_RSHIFT( HarmShapeGain_Q14[ k ], 2 );
- HarmShapeFIRPacked_Q14 |= silk_LSHIFT( (opus_int32)silk_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 );
-
- NSQ->rewhite_flag = 0;
- if( psIndices->signalType == TYPE_VOICED ) {
- /* Voiced */
- lag = pitchL[ k ];
-
- /* Re-whitening */
- if( ( k & ( 3 - silk_LSHIFT( LSF_interpolation_flag, 1 ) ) ) == 0 ) {
- /* Rewhiten with new A coefs */
- start_idx = psEncC->ltp_mem_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2;
- silk_assert( start_idx > 0 );
-
- silk_LPC_analysis_filter( &sLTP[ start_idx ], &NSQ->xq[ start_idx + k * psEncC->subfr_length ],
- A_Q12, psEncC->ltp_mem_length - start_idx, psEncC->predictLPCOrder, psEncC->arch );
-
- NSQ->rewhite_flag = 1;
- NSQ->sLTP_buf_idx = psEncC->ltp_mem_length;
- }
- }
-
- silk_nsq_scale_states_sse4_1( psEncC, NSQ, x_Q3, x_sc_Q10, sLTP, sLTP_Q15, k, LTP_scale_Q14, Gains_Q16, pitchL, psIndices->signalType );
-
- if ( opus_likely( ( 10 == psEncC->shapingLPCOrder ) && ( 16 == psEncC->predictLPCOrder) ) )
- {
- silk_noise_shape_quantizer_10_16_sse4_1( NSQ, psIndices->signalType, x_sc_Q10, pulses, pxq, sLTP_Q15, A_Q12, B_Q14,
- AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ],
- offset_Q10, psEncC->subfr_length, &(table[32]) );
- }
- else
- {
- silk_noise_shape_quantizer( NSQ, psIndices->signalType, x_sc_Q10, pulses, pxq, sLTP_Q15, 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_Q3 += psEncC->subfr_length;
- pulses += psEncC->subfr_length;
- pxq += psEncC->subfr_length;
- }
-
- /* Update lagPrev for next frame */
- NSQ->lagPrev = pitchL[ psEncC->nb_subfr - 1 ];
-
- /* Save quantized speech and noise shaping signals */
- /* DEBUG_STORE_DATA( enc.pcm, &NSQ->xq[ psEncC->ltp_mem_length ], psEncC->frame_length * sizeof( opus_int16 ) ) */
- silk_memmove( NSQ->xq, &NSQ->xq[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( opus_int16 ) );
- silk_memmove( NSQ->sLTP_shp_Q14, &NSQ->sLTP_shp_Q14[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( opus_int32 ) );
- RESTORE_STACK;
-}
-
-/***********************************/
-/* silk_noise_shape_quantizer_10_16 */
-/***********************************/
-static OPUS_INLINE void silk_noise_shape_quantizer_10_16_sse4_1(
- silk_nsq_state *NSQ, /* I/O NSQ state */
- opus_int signalType, /* I Signal type */
- const opus_int32 x_sc_Q10[], /* I */
- opus_int8 pulses[], /* O */
- opus_int16 xq[], /* O */
- opus_int32 sLTP_Q15[], /* I/O LTP state */
- const opus_int16 a_Q12[], /* I Short term prediction coefs */
- const opus_int16 b_Q14[], /* I Long term prediction coefs */
- const opus_int16 AR_shp_Q13[], /* I Noise shaping AR coefs */
- opus_int lag, /* I Pitch lag */
- opus_int32 HarmShapeFIRPacked_Q14, /* I */
- opus_int Tilt_Q14, /* I Spectral tilt */
- opus_int32 LF_shp_Q14, /* I */
- opus_int32 Gain_Q16, /* I */
- opus_int offset_Q10, /* I */
- opus_int length, /* I Input length */
- opus_int32 table[][4] /* I */
-)
-{
- opus_int i;
- opus_int32 LTP_pred_Q13, LPC_pred_Q10, n_AR_Q12, n_LTP_Q13;
- opus_int32 n_LF_Q12, r_Q10, q1_Q0, q1_Q10, q2_Q10;
- opus_int32 exc_Q14, LPC_exc_Q14, xq_Q14, Gain_Q10;
- opus_int32 tmp1, tmp2, sLF_AR_shp_Q14;
- opus_int32 *psLPC_Q14, *shp_lag_ptr, *pred_lag_ptr;
-
- __m128i xmm_tempa, xmm_tempb;
-
- __m128i xmm_one;
-
- __m128i psLPC_Q14_hi_01234567, psLPC_Q14_hi_89ABCDEF;
- __m128i psLPC_Q14_lo_01234567, psLPC_Q14_lo_89ABCDEF;
- __m128i a_Q12_01234567, a_Q12_89ABCDEF;
-
- __m128i sAR2_Q14_hi_76543210, sAR2_Q14_lo_76543210;
- __m128i AR_shp_Q13_76543210;
-
- shp_lag_ptr = &NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - lag + HARM_SHAPE_FIR_TAPS / 2 ];
- pred_lag_ptr = &sLTP_Q15[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ];
- Gain_Q10 = silk_RSHIFT( Gain_Q16, 6 );
-
- /* Set up short term AR state */
- psLPC_Q14 = &NSQ->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - 1 ];
-
- sLF_AR_shp_Q14 = NSQ->sLF_AR_shp_Q14;
- xq_Q14 = psLPC_Q14[ 0 ];
- LTP_pred_Q13 = 0;
-
- /* load a_Q12 */
- xmm_one = _mm_set_epi8( 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 );
-
- /* load a_Q12[0] - a_Q12[7] */
- a_Q12_01234567 = _mm_loadu_si128( (__m128i *)(&a_Q12[ 0 ] ) );
- /* load a_Q12[ 8 ] - a_Q12[ 15 ] */
- a_Q12_89ABCDEF = _mm_loadu_si128( (__m128i *)(&a_Q12[ 8 ] ) );
-
- a_Q12_01234567 = _mm_shuffle_epi8( a_Q12_01234567, xmm_one );
- a_Q12_89ABCDEF = _mm_shuffle_epi8( a_Q12_89ABCDEF, xmm_one );
-
- /* load AR_shp_Q13 */
- AR_shp_Q13_76543210 = _mm_loadu_si128( (__m128i *)(&AR_shp_Q13[0] ) );
-
- /* load psLPC_Q14 */
- xmm_one = _mm_set_epi8(15, 14, 11, 10, 7, 6, 3, 2, 13, 12, 9, 8, 5, 4, 1, 0 );
-
- xmm_tempa = _mm_loadu_si128( (__m128i *)(&psLPC_Q14[-16]) );
- xmm_tempb = _mm_loadu_si128( (__m128i *)(&psLPC_Q14[-12]) );
-
- xmm_tempa = _mm_shuffle_epi8( xmm_tempa, xmm_one );
- xmm_tempb = _mm_shuffle_epi8( xmm_tempb, xmm_one );
-
- psLPC_Q14_hi_89ABCDEF = _mm_unpackhi_epi64( xmm_tempa, xmm_tempb );
- psLPC_Q14_lo_89ABCDEF = _mm_unpacklo_epi64( xmm_tempa, xmm_tempb );
-
- xmm_tempa = _mm_loadu_si128( (__m128i *)(&psLPC_Q14[ -8 ]) );
- xmm_tempb = _mm_loadu_si128( (__m128i *)(&psLPC_Q14[ -4 ]) );
-
- xmm_tempa = _mm_shuffle_epi8( xmm_tempa, xmm_one );
- xmm_tempb = _mm_shuffle_epi8( xmm_tempb, xmm_one );
-
- psLPC_Q14_hi_01234567 = _mm_unpackhi_epi64( xmm_tempa, xmm_tempb );
- psLPC_Q14_lo_01234567 = _mm_unpacklo_epi64( xmm_tempa, xmm_tempb );
-
- /* load sAR2_Q14 */
- xmm_tempa = _mm_loadu_si128( (__m128i *)(&(NSQ->sAR2_Q14[ 0 ]) ) );
- xmm_tempb = _mm_loadu_si128( (__m128i *)(&(NSQ->sAR2_Q14[ 4 ]) ) );
-
- xmm_tempa = _mm_shuffle_epi8( xmm_tempa, xmm_one );
- xmm_tempb = _mm_shuffle_epi8( xmm_tempb, xmm_one );
-
- sAR2_Q14_hi_76543210 = _mm_unpackhi_epi64( xmm_tempa, xmm_tempb );
- sAR2_Q14_lo_76543210 = _mm_unpacklo_epi64( xmm_tempa, xmm_tempb );
-
- /* prepare 1 in 8 * 16bit */
- xmm_one = _mm_set1_epi16(1);
-
- for( i = 0; i < length; i++ )
- {
- /* Short-term prediction */
- __m128i xmm_hi_07, xmm_hi_8F, xmm_lo_07, xmm_lo_8F;
-
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LPC_pred_Q10 = 8; /* silk_RSHIFT( predictLPCOrder, 1 ); */
-
- /* shift psLPC_Q14 */
- psLPC_Q14_hi_89ABCDEF = _mm_alignr_epi8( psLPC_Q14_hi_01234567, psLPC_Q14_hi_89ABCDEF, 2 );
- psLPC_Q14_lo_89ABCDEF = _mm_alignr_epi8( psLPC_Q14_lo_01234567, psLPC_Q14_lo_89ABCDEF, 2 );
-
- psLPC_Q14_hi_01234567 = _mm_srli_si128( psLPC_Q14_hi_01234567, 2 );
- psLPC_Q14_lo_01234567 = _mm_srli_si128( psLPC_Q14_lo_01234567, 2 );
-
- psLPC_Q14_hi_01234567 = _mm_insert_epi16( psLPC_Q14_hi_01234567, (xq_Q14 >> 16), 7 );
- psLPC_Q14_lo_01234567 = _mm_insert_epi16( psLPC_Q14_lo_01234567, (xq_Q14), 7 );
-
- /* high part, use pmaddwd, results in 4 32-bit */
- xmm_hi_07 = _mm_madd_epi16( psLPC_Q14_hi_01234567, a_Q12_01234567 );
- xmm_hi_8F = _mm_madd_epi16( psLPC_Q14_hi_89ABCDEF, a_Q12_89ABCDEF );
-
- /* low part, use pmulhw, results in 8 16-bit, note we need simulate unsigned * signed, _mm_srai_epi16(psLPC_Q14_lo_01234567, 15) */
- xmm_tempa = _mm_cmpgt_epi16( _mm_setzero_si128(), psLPC_Q14_lo_01234567 );
- xmm_tempb = _mm_cmpgt_epi16( _mm_setzero_si128(), psLPC_Q14_lo_89ABCDEF );
-
- xmm_tempa = _mm_and_si128( xmm_tempa, a_Q12_01234567 );
- xmm_tempb = _mm_and_si128( xmm_tempb, a_Q12_89ABCDEF );
-
- xmm_lo_07 = _mm_mulhi_epi16( psLPC_Q14_lo_01234567, a_Q12_01234567 );
- xmm_lo_8F = _mm_mulhi_epi16( psLPC_Q14_lo_89ABCDEF, a_Q12_89ABCDEF );
-
- xmm_lo_07 = _mm_add_epi16( xmm_lo_07, xmm_tempa );
- xmm_lo_8F = _mm_add_epi16( xmm_lo_8F, xmm_tempb );
-
- xmm_lo_07 = _mm_madd_epi16( xmm_lo_07, xmm_one );
- xmm_lo_8F = _mm_madd_epi16( xmm_lo_8F, xmm_one );
-
- /* accumulate */
- xmm_hi_07 = _mm_add_epi32( xmm_hi_07, xmm_hi_8F );
- xmm_lo_07 = _mm_add_epi32( xmm_lo_07, xmm_lo_8F );
-
- xmm_hi_07 = _mm_add_epi32( xmm_hi_07, xmm_lo_07 );
-
- xmm_hi_07 = _mm_add_epi32( xmm_hi_07, _mm_unpackhi_epi64(xmm_hi_07, xmm_hi_07 ) );
- xmm_hi_07 = _mm_add_epi32( xmm_hi_07, _mm_shufflelo_epi16(xmm_hi_07, 0x0E ) );
-
- LPC_pred_Q10 += _mm_cvtsi128_si32( xmm_hi_07 );
-
- /* Long-term prediction */
- if ( opus_likely( signalType == TYPE_VOICED ) ) {
- /* Unrolled loop */
- /* Avoids introducing a bias because silk_SMLAWB() always rounds to -inf */
- LTP_pred_Q13 = 2;
- {
- __m128i b_Q14_3210, b_Q14_0123, pred_lag_ptr_0123;
-
- b_Q14_3210 = OP_CVTEPI16_EPI32_M64( b_Q14 );
- b_Q14_0123 = _mm_shuffle_epi32( b_Q14_3210, 0x1B );
-
- /* loaded: [0] [-1] [-2] [-3] */
- pred_lag_ptr_0123 = _mm_loadu_si128( (__m128i *)(&pred_lag_ptr[ -3 ] ) );
- /* shuffle to [-3] [-2] [-1] [0] and to new xmm */
- xmm_tempa = _mm_shuffle_epi32( pred_lag_ptr_0123, 0x1B );
- /*64-bit multiply, a[2] * b[-2], a[0] * b[0] */
- xmm_tempa = _mm_mul_epi32( xmm_tempa, b_Q14_3210 );
- /* right shift 2 bytes (16 bits), zero extended */
- xmm_tempa = _mm_srli_si128( xmm_tempa, 2 );
-
- /* a[1] * b[-1], a[3] * b[-3] */
- pred_lag_ptr_0123 = _mm_mul_epi32( pred_lag_ptr_0123, b_Q14_0123 );
- pred_lag_ptr_0123 = _mm_srli_si128( pred_lag_ptr_0123, 2 );
-
- pred_lag_ptr_0123 = _mm_add_epi32( pred_lag_ptr_0123, xmm_tempa );
- /* equal shift right 8 bytes*/
- xmm_tempa = _mm_shuffle_epi32( pred_lag_ptr_0123, _MM_SHUFFLE( 0, 0, 3, 2 ) );
- xmm_tempa = _mm_add_epi32( xmm_tempa, pred_lag_ptr_0123 );
-
- LTP_pred_Q13 += _mm_cvtsi128_si32( xmm_tempa );
-
- LTP_pred_Q13 = silk_SMLAWB( LTP_pred_Q13, pred_lag_ptr[ -4 ], b_Q14[ 4 ] );
- pred_lag_ptr++;
- }
- }
-
- /* Noise shape feedback */
- NSQ->sAR2_Q14[ 9 ] = NSQ->sAR2_Q14[ 8 ];
- NSQ->sAR2_Q14[ 8 ] = _mm_cvtsi128_si32( _mm_srli_si128(_mm_unpackhi_epi16( sAR2_Q14_lo_76543210, sAR2_Q14_hi_76543210 ), 12 ) );
-
- sAR2_Q14_hi_76543210 = _mm_slli_si128( sAR2_Q14_hi_76543210, 2 );
- sAR2_Q14_lo_76543210 = _mm_slli_si128( sAR2_Q14_lo_76543210, 2 );
-
- sAR2_Q14_hi_76543210 = _mm_insert_epi16( sAR2_Q14_hi_76543210, (xq_Q14 >> 16), 0 );
- sAR2_Q14_lo_76543210 = _mm_insert_epi16( sAR2_Q14_lo_76543210, (xq_Q14), 0 );
-
- /* high part, use pmaddwd, results in 4 32-bit */
- xmm_hi_07 = _mm_madd_epi16( sAR2_Q14_hi_76543210, AR_shp_Q13_76543210 );
-
- /* low part, use pmulhw, results in 8 16-bit, note we need simulate unsigned * signed,_mm_srai_epi16(sAR2_Q14_lo_76543210, 15) */
- xmm_tempa = _mm_cmpgt_epi16( _mm_setzero_si128(), sAR2_Q14_lo_76543210 );
- xmm_tempa = _mm_and_si128( xmm_tempa, AR_shp_Q13_76543210 );
-
- xmm_lo_07 = _mm_mulhi_epi16( sAR2_Q14_lo_76543210, AR_shp_Q13_76543210 );
- xmm_lo_07 = _mm_add_epi16( xmm_lo_07, xmm_tempa );
-
- xmm_lo_07 = _mm_madd_epi16( xmm_lo_07, xmm_one );
-
- /* accumulate */
- xmm_hi_07 = _mm_add_epi32( xmm_hi_07, xmm_lo_07 );
-
- xmm_hi_07 = _mm_add_epi32( xmm_hi_07, _mm_unpackhi_epi64(xmm_hi_07, xmm_hi_07 ) );
- xmm_hi_07 = _mm_add_epi32( xmm_hi_07, _mm_shufflelo_epi16(xmm_hi_07, 0x0E ) );
-
- n_AR_Q12 = 5 + _mm_cvtsi128_si32( xmm_hi_07 );
-
- n_AR_Q12 = silk_SMLAWB( n_AR_Q12, NSQ->sAR2_Q14[ 8 ], AR_shp_Q13[ 8 ] );
- n_AR_Q12 = silk_SMLAWB( n_AR_Q12, NSQ->sAR2_Q14[ 9 ], AR_shp_Q13[ 9 ] );
-
- n_AR_Q12 = silk_LSHIFT32( n_AR_Q12, 1 ); /* Q11 -> Q12 */
- n_AR_Q12 = silk_SMLAWB( n_AR_Q12, sLF_AR_shp_Q14, Tilt_Q14 );
-
- n_LF_Q12 = silk_SMULWB( NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx - 1 ], LF_shp_Q14 );
- n_LF_Q12 = silk_SMLAWT( n_LF_Q12, sLF_AR_shp_Q14, LF_shp_Q14 );
-
- silk_assert( lag > 0 || signalType != TYPE_VOICED );
-
- /* Combine prediction and noise shaping signals */
- tmp1 = silk_SUB32( silk_LSHIFT32( LPC_pred_Q10, 2 ), n_AR_Q12 ); /* Q12 */
- tmp1 = silk_SUB32( tmp1, n_LF_Q12 ); /* Q12 */
- if( lag > 0 ) {
- /* Symmetric, packed FIR coefficients */
- n_LTP_Q13 = silk_SMULWB( silk_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 );
- n_LTP_Q13 = silk_SMLAWT( n_LTP_Q13, shp_lag_ptr[ -1 ], HarmShapeFIRPacked_Q14 );
- n_LTP_Q13 = silk_LSHIFT( n_LTP_Q13, 1 );
- shp_lag_ptr++;
-
- tmp2 = silk_SUB32( LTP_pred_Q13, n_LTP_Q13 ); /* Q13 */
- tmp1 = silk_ADD_LSHIFT32( tmp2, tmp1, 1 ); /* Q13 */
- tmp1 = silk_RSHIFT_ROUND( tmp1, 3 ); /* Q10 */
- } else {
- tmp1 = silk_RSHIFT_ROUND( tmp1, 2 ); /* Q10 */
- }
-
- r_Q10 = silk_SUB32( x_sc_Q10[ i ], tmp1 ); /* residual error Q10 */
-
- /* Generate dither */
- NSQ->rand_seed = silk_RAND( NSQ->rand_seed );
-
- /* Flip sign depending on dither */
- tmp2 = -r_Q10;
- if ( NSQ->rand_seed < 0 ) r_Q10 = tmp2;
-
- r_Q10 = silk_LIMIT_32( r_Q10, -(31 << 10), 30 << 10 );
-
- /* Find two quantization level candidates and measure their rate-distortion */
- q1_Q10 = silk_SUB32( r_Q10, offset_Q10 );
- q1_Q0 = silk_RSHIFT( q1_Q10, 10 );
-
- q1_Q10 = table[q1_Q0][0];
- q2_Q10 = table[q1_Q0][1];
-
- if (r_Q10 * table[q1_Q0][2] - table[q1_Q0][3] < 0)
- {
- q1_Q10 = q2_Q10;
- }
-
- pulses[ i ] = (opus_int8)silk_RSHIFT_ROUND( q1_Q10, 10 );
-
- /* Excitation */
- exc_Q14 = silk_LSHIFT( q1_Q10, 4 );
-
- tmp2 = -exc_Q14;
- if ( NSQ->rand_seed < 0 ) exc_Q14 = tmp2;
-
- /* Add predictions */
- LPC_exc_Q14 = silk_ADD_LSHIFT32( exc_Q14, LTP_pred_Q13, 1 );
- xq_Q14 = silk_ADD_LSHIFT32( LPC_exc_Q14, LPC_pred_Q10, 4 );
-
- /* Update states */
- psLPC_Q14++;
- *psLPC_Q14 = xq_Q14;
- sLF_AR_shp_Q14 = silk_SUB_LSHIFT32( xq_Q14, n_AR_Q12, 2 );
-
- NSQ->sLTP_shp_Q14[ NSQ->sLTP_shp_buf_idx ] = silk_SUB_LSHIFT32( sLF_AR_shp_Q14, n_LF_Q12, 2 );
- sLTP_Q15[ NSQ->sLTP_buf_idx ] = silk_LSHIFT( LPC_exc_Q14, 1 );
- NSQ->sLTP_shp_buf_idx++;
- NSQ->sLTP_buf_idx++;
-
- /* Make dither dependent on quantized signal */
- NSQ->rand_seed = silk_ADD32_ovflw( NSQ->rand_seed, pulses[ i ] );
- }
-
- NSQ->sLF_AR_shp_Q14 = sLF_AR_shp_Q14;
-
- /* Scale XQ back to normal level before saving */
- psLPC_Q14 = &NSQ->sLPC_Q14[ NSQ_LPC_BUF_LENGTH ];
-
- /* write back sAR2_Q14 */
- xmm_tempa = _mm_unpackhi_epi16( sAR2_Q14_lo_76543210, sAR2_Q14_hi_76543210 );
- xmm_tempb = _mm_unpacklo_epi16( sAR2_Q14_lo_76543210, sAR2_Q14_hi_76543210 );
- _mm_storeu_si128( (__m128i *)(&NSQ->sAR2_Q14[ 4 ]), xmm_tempa );
- _mm_storeu_si128( (__m128i *)(&NSQ->sAR2_Q14[ 0 ]), xmm_tempb );
-
- /* xq[ i ] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( silk_SMULWW( psLPC_Q14[ i ], Gain_Q10 ), 8 ) ); */
- {
- __m128i xmm_Gain_Q10;
- __m128i xmm_xq_Q14_3210, xmm_xq_Q14_x3x1, xmm_xq_Q14_7654, xmm_xq_Q14_x7x5;
-
- /* prepare (1 << 7) in packed 4 32-bits */
- xmm_tempa = _mm_set1_epi32( (1 << 7) );
-
- /* prepare Gain_Q10 in packed 4 32-bits */
- xmm_Gain_Q10 = _mm_set1_epi32( Gain_Q10 );
-
- /* process xq */
- for (i = 0; i < length - 7; i += 8)
- {
- xmm_xq_Q14_3210 = _mm_loadu_si128( (__m128i *)(&(psLPC_Q14[ i + 0 ] ) ) );
- xmm_xq_Q14_7654 = _mm_loadu_si128( (__m128i *)(&(psLPC_Q14[ i + 4 ] ) ) );
-
- /* equal shift right 4 bytes*/
- xmm_xq_Q14_x3x1 = _mm_shuffle_epi32( xmm_xq_Q14_3210, _MM_SHUFFLE( 0, 3, 2, 1 ) );
- /* equal shift right 4 bytes*/
- xmm_xq_Q14_x7x5 = _mm_shuffle_epi32( xmm_xq_Q14_7654, _MM_SHUFFLE( 0, 3, 2, 1 ) );
-
- xmm_xq_Q14_3210 = _mm_mul_epi32( xmm_xq_Q14_3210, xmm_Gain_Q10 );
- xmm_xq_Q14_x3x1 = _mm_mul_epi32( xmm_xq_Q14_x3x1, xmm_Gain_Q10 );
- xmm_xq_Q14_7654 = _mm_mul_epi32( xmm_xq_Q14_7654, xmm_Gain_Q10 );
- xmm_xq_Q14_x7x5 = _mm_mul_epi32( xmm_xq_Q14_x7x5, xmm_Gain_Q10 );
-
- xmm_xq_Q14_3210 = _mm_srli_epi64( xmm_xq_Q14_3210, 16 );
- xmm_xq_Q14_x3x1 = _mm_slli_epi64( xmm_xq_Q14_x3x1, 16 );
- xmm_xq_Q14_7654 = _mm_srli_epi64( xmm_xq_Q14_7654, 16 );
- xmm_xq_Q14_x7x5 = _mm_slli_epi64( xmm_xq_Q14_x7x5, 16 );
-
- xmm_xq_Q14_3210 = _mm_blend_epi16( xmm_xq_Q14_3210, xmm_xq_Q14_x3x1, 0xCC );
- xmm_xq_Q14_7654 = _mm_blend_epi16( xmm_xq_Q14_7654, xmm_xq_Q14_x7x5, 0xCC );
-
- /* silk_RSHIFT_ROUND(xq, 8) */
- xmm_xq_Q14_3210 = _mm_add_epi32( xmm_xq_Q14_3210, xmm_tempa );
- xmm_xq_Q14_7654 = _mm_add_epi32( xmm_xq_Q14_7654, xmm_tempa );
-
- xmm_xq_Q14_3210 = _mm_srai_epi32( xmm_xq_Q14_3210, 8 );
- xmm_xq_Q14_7654 = _mm_srai_epi32( xmm_xq_Q14_7654, 8 );
-
- /* silk_SAT16 */
- xmm_xq_Q14_3210 = _mm_packs_epi32( xmm_xq_Q14_3210, xmm_xq_Q14_7654 );
-
- /* save to xq */
- _mm_storeu_si128( (__m128i *)(&xq[ i ] ), xmm_xq_Q14_3210 );
- }
- }
- for ( ; i < length; i++)
- {
- xq[i] = (opus_int16)silk_SAT16( silk_RSHIFT_ROUND( silk_SMULWW( psLPC_Q14[ i ], Gain_Q10 ), 8 ) );
- }
-
- /* Update LPC synth buffer */
- silk_memcpy( NSQ->sLPC_Q14, &NSQ->sLPC_Q14[ length ], NSQ_LPC_BUF_LENGTH * sizeof( opus_int32 ) );
-}
-
-static OPUS_INLINE void silk_nsq_scale_states_sse4_1(
- const silk_encoder_state *psEncC, /* I Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- const opus_int32 x_Q3[], /* I input in Q3 */
- opus_int32 x_sc_Q10[], /* O input scaled with 1/Gain */
- const opus_int16 sLTP[], /* I re-whitened LTP state in Q0 */
- opus_int32 sLTP_Q15[], /* O LTP state matching scaled input */
- opus_int subfr, /* I subframe number */
- const opus_int LTP_scale_Q14, /* I */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lag */
- const opus_int signal_type /* I Signal type */
-)
-{
- opus_int i, lag;
- opus_int32 gain_adj_Q16, inv_gain_Q31, inv_gain_Q23;
- __m128i xmm_inv_gain_Q23, xmm_x_Q3_x2x0, xmm_x_Q3_x3x1;
-
- lag = pitchL[ subfr ];
- inv_gain_Q31 = silk_INVERSE32_varQ( silk_max( Gains_Q16[ subfr ], 1 ), 47 );
- silk_assert( inv_gain_Q31 != 0 );
-
- /* Calculate gain adjustment factor */
- if( Gains_Q16[ subfr ] != NSQ->prev_gain_Q16 ) {
- gain_adj_Q16 = silk_DIV32_varQ( NSQ->prev_gain_Q16, Gains_Q16[ subfr ], 16 );
- } else {
- gain_adj_Q16 = (opus_int32)1 << 16;
- }
-
- /* Scale input */
- inv_gain_Q23 = silk_RSHIFT_ROUND( inv_gain_Q31, 8 );
-
- /* prepare inv_gain_Q23 in packed 4 32-bits */
- xmm_inv_gain_Q23 = _mm_set1_epi32(inv_gain_Q23);
-
- for( i = 0; i < psEncC->subfr_length - 3; i += 4 ) {
- xmm_x_Q3_x2x0 = _mm_loadu_si128( (__m128i *)(&(x_Q3[ i ] ) ) );
-
- /* equal shift right 4 bytes*/
- xmm_x_Q3_x3x1 = _mm_shuffle_epi32( xmm_x_Q3_x2x0, _MM_SHUFFLE( 0, 3, 2, 1 ) );
-
- xmm_x_Q3_x2x0 = _mm_mul_epi32( xmm_x_Q3_x2x0, xmm_inv_gain_Q23 );
- xmm_x_Q3_x3x1 = _mm_mul_epi32( xmm_x_Q3_x3x1, xmm_inv_gain_Q23 );
-
- xmm_x_Q3_x2x0 = _mm_srli_epi64( xmm_x_Q3_x2x0, 16 );
- xmm_x_Q3_x3x1 = _mm_slli_epi64( xmm_x_Q3_x3x1, 16 );
-
- xmm_x_Q3_x2x0 = _mm_blend_epi16( xmm_x_Q3_x2x0, xmm_x_Q3_x3x1, 0xCC );
-
- _mm_storeu_si128( (__m128i *)(&(x_sc_Q10[ i ] ) ), xmm_x_Q3_x2x0 );
- }
-
- for( ; i < psEncC->subfr_length; i++ ) {
- x_sc_Q10[ i ] = silk_SMULWW( x_Q3[ i ], inv_gain_Q23 );
- }
-
- /* Save inverse gain */
- NSQ->prev_gain_Q16 = Gains_Q16[ subfr ];
-
- /* After rewhitening the LTP state is un-scaled, so scale with inv_gain_Q16 */
- if( NSQ->rewhite_flag ) {
- if( subfr == 0 ) {
- /* Do LTP downscaling */
- inv_gain_Q31 = silk_LSHIFT( silk_SMULWB( inv_gain_Q31, LTP_scale_Q14 ), 2 );
- }
- for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
- silk_assert( i < MAX_FRAME_LENGTH );
- sLTP_Q15[ i ] = silk_SMULWB( inv_gain_Q31, sLTP[ i ] );
- }
- }
-
- /* Adjust for changing gain */
- if( gain_adj_Q16 != (opus_int32)1 << 16 ) {
- /* Scale long-term shaping state */
- __m128i xmm_gain_adj_Q16, xmm_sLTP_shp_Q14_x2x0, xmm_sLTP_shp_Q14_x3x1;
-
- /* prepare gain_adj_Q16 in packed 4 32-bits */
- xmm_gain_adj_Q16 = _mm_set1_epi32(gain_adj_Q16);
-
- for( i = NSQ->sLTP_shp_buf_idx - psEncC->ltp_mem_length; i < NSQ->sLTP_shp_buf_idx - 3; i += 4 )
- {
- xmm_sLTP_shp_Q14_x2x0 = _mm_loadu_si128( (__m128i *)(&(NSQ->sLTP_shp_Q14[ i ] ) ) );
- /* equal shift right 4 bytes*/
- xmm_sLTP_shp_Q14_x3x1 = _mm_shuffle_epi32( xmm_sLTP_shp_Q14_x2x0, _MM_SHUFFLE( 0, 3, 2, 1 ) );
-
- xmm_sLTP_shp_Q14_x2x0 = _mm_mul_epi32( xmm_sLTP_shp_Q14_x2x0, xmm_gain_adj_Q16 );
- xmm_sLTP_shp_Q14_x3x1 = _mm_mul_epi32( xmm_sLTP_shp_Q14_x3x1, xmm_gain_adj_Q16 );
-
- xmm_sLTP_shp_Q14_x2x0 = _mm_srli_epi64( xmm_sLTP_shp_Q14_x2x0, 16 );
- xmm_sLTP_shp_Q14_x3x1 = _mm_slli_epi64( xmm_sLTP_shp_Q14_x3x1, 16 );
-
- xmm_sLTP_shp_Q14_x2x0 = _mm_blend_epi16( xmm_sLTP_shp_Q14_x2x0, xmm_sLTP_shp_Q14_x3x1, 0xCC );
-
- _mm_storeu_si128( (__m128i *)(&(NSQ->sLTP_shp_Q14[ i ] ) ), xmm_sLTP_shp_Q14_x2x0 );
- }
-
- for( ; i < NSQ->sLTP_shp_buf_idx; i++ ) {
- NSQ->sLTP_shp_Q14[ i ] = silk_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q14[ i ] );
- }
-
- /* Scale long-term prediction state */
- if( signal_type == TYPE_VOICED && NSQ->rewhite_flag == 0 ) {
- for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) {
- sLTP_Q15[ i ] = silk_SMULWW( gain_adj_Q16, sLTP_Q15[ i ] );
- }
- }
-
- NSQ->sLF_AR_shp_Q14 = silk_SMULWW( gain_adj_Q16, NSQ->sLF_AR_shp_Q14 );
-
- /* Scale short-term prediction and shaping states */
- for( i = 0; i < NSQ_LPC_BUF_LENGTH; i++ ) {
- NSQ->sLPC_Q14[ i ] = silk_SMULWW( gain_adj_Q16, NSQ->sLPC_Q14[ i ] );
- }
- for( i = 0; i < MAX_SHAPE_LPC_ORDER; i++ ) {
- NSQ->sAR2_Q14[ i ] = silk_SMULWW( gain_adj_Q16, NSQ->sAR2_Q14[ i ] );
- }
- }
-}
diff --git a/drivers/opus/silk/x86/SigProc_FIX_sse.h b/drivers/opus/silk/x86/SigProc_FIX_sse.h
deleted file mode 100644
index 67ab30fd78..0000000000
--- a/drivers/opus/silk/x86/SigProc_FIX_sse.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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_FIX_SSE_H
-#define SIGPROC_FIX_SSE_H
-#include "opus/opus_config.h"
-
-#if defined(OPUS_X86_MAY_HAVE_SSE4_1)
-void silk_burg_modified_sse4_1(
- opus_int32 *res_nrg, /* O Residual energy */
- opus_int *res_nrg_Q, /* O Residual energy Q value */
- opus_int32 A_Q16[], /* O Prediction coefficients (length order) */
- const opus_int16 x[], /* I Input signal, length: nb_subfr * ( D + subfr_length ) */
- const opus_int32 minInvGain_Q30, /* I Inverse of max prediction gain */
- const opus_int subfr_length, /* I Input signal subframe length (incl. D preceding samples) */
- const opus_int nb_subfr, /* I Number of subframes stacked in x */
- const opus_int D, /* I Order */
- int arch /* I Run-time architecture */
-);
-
-#if defined(OPUS_X86_PRESUME_SSE4_1)
-#define silk_burg_modified(res_nrg, res_nrg_Q, A_Q16, x, minInvGain_Q30, subfr_length, nb_subfr, D, arch) \
- ((void)(arch), silk_burg_modified_sse4_1(res_nrg, res_nrg_Q, A_Q16, x, minInvGain_Q30, subfr_length, nb_subfr, D, arch))
-
-#else
-
-extern void (*const SILK_BURG_MODIFIED_IMPL[OPUS_ARCHMASK + 1])(
- opus_int32 *res_nrg, /* O Residual energy */
- opus_int *res_nrg_Q, /* O Residual energy Q value */
- opus_int32 A_Q16[], /* O Prediction coefficients (length order) */
- const opus_int16 x[], /* I Input signal, length: nb_subfr * ( D + subfr_length ) */
- const opus_int32 minInvGain_Q30, /* I Inverse of max prediction gain */
- const opus_int subfr_length, /* I Input signal subframe length (incl. D preceding samples) */
- const opus_int nb_subfr, /* I Number of subframes stacked in x */
- const opus_int D, /* I Order */
- int arch /* I Run-time architecture */);
-
-# define silk_burg_modified(res_nrg, res_nrg_Q, A_Q16, x, minInvGain_Q30, subfr_length, nb_subfr, D, arch) \
- ((*SILK_BURG_MODIFIED_IMPL[(arch) & OPUS_ARCHMASK])(res_nrg, res_nrg_Q, A_Q16, x, minInvGain_Q30, subfr_length, nb_subfr, D, arch))
-
-#endif
-
-opus_int64 silk_inner_prod16_aligned_64_sse4_1(
- const opus_int16 *inVec1,
- const opus_int16 *inVec2,
- const opus_int len
-);
-
-
-#if defined(OPUS_X86_PRESUME_SSE4_1)
-
-#define silk_inner_prod16_aligned_64(inVec1, inVec2, len, arch) \
- ((void)(arch),silk_inner_prod16_aligned_64_sse4_1(inVec1, inVec2, len))
-
-#else
-
-extern opus_int64 (*const SILK_INNER_PROD16_ALIGNED_64_IMPL[OPUS_ARCHMASK + 1])(
- const opus_int16 *inVec1,
- const opus_int16 *inVec2,
- const opus_int len);
-
-# define silk_inner_prod16_aligned_64(inVec1, inVec2, len, arch) \
- ((*SILK_INNER_PROD16_ALIGNED_64_IMPL[(arch) & OPUS_ARCHMASK])(inVec1, inVec2, len))
-
-#endif
-#endif
-#endif
diff --git a/drivers/opus/silk/x86/VAD_sse.c b/drivers/opus/silk/x86/VAD_sse.c
deleted file mode 100644
index 5db2c86aa9..0000000000
--- a/drivers/opus/silk/x86/VAD_sse.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-#include <smmintrin.h>
-
-#include "opus/silk/main.h"
-#include "opus/celt/stack_alloc.h"
-
-/* Weighting factors for tilt measure */
-static const opus_int32 tiltWeights[ VAD_N_BANDS ] = { 30000, 6000, -12000, -12000 };
-
-/***************************************/
-/* Get the speech activity level in Q8 */
-/***************************************/
-opus_int silk_VAD_GetSA_Q8_sse4_1( /* O Return value, 0 if success */
- silk_encoder_state *psEncC, /* I/O Encoder state */
- const opus_int16 pIn[] /* I PCM input */
-)
-{
- opus_int SA_Q15, pSNR_dB_Q7, input_tilt;
- opus_int decimated_framelength1, decimated_framelength2;
- opus_int decimated_framelength;
- opus_int dec_subframe_length, dec_subframe_offset, SNR_Q7, i, b, s;
- opus_int32 sumSquared, smooth_coef_Q16;
- opus_int16 HPstateTmp;
- VARDECL( opus_int16, X );
- opus_int32 Xnrg[ VAD_N_BANDS ];
- opus_int32 NrgToNoiseRatio_Q8[ VAD_N_BANDS ];
- opus_int32 speech_nrg, x_tmp;
- opus_int X_offset[ VAD_N_BANDS ];
- opus_int ret = 0;
- silk_VAD_state *psSilk_VAD = &psEncC->sVAD;
-
- SAVE_STACK;
-
- /* Safety checks */
- silk_assert( VAD_N_BANDS == 4 );
- silk_assert( MAX_FRAME_LENGTH >= psEncC->frame_length );
- silk_assert( psEncC->frame_length <= 512 );
- silk_assert( psEncC->frame_length == 8 * silk_RSHIFT( psEncC->frame_length, 3 ) );
-
- /***********************/
- /* Filter and Decimate */
- /***********************/
- decimated_framelength1 = silk_RSHIFT( psEncC->frame_length, 1 );
- decimated_framelength2 = silk_RSHIFT( psEncC->frame_length, 2 );
- decimated_framelength = silk_RSHIFT( psEncC->frame_length, 3 );
- /* Decimate into 4 bands:
- 0 L 3L L 3L 5L
- - -- - -- --
- 8 8 2 4 4
-
- [0-1 kHz| temp. |1-2 kHz| 2-4 kHz | 4-8 kHz |
-
- They're arranged to allow the minimal ( frame_length / 4 ) extra
- scratch space during the downsampling process */
- X_offset[ 0 ] = 0;
- X_offset[ 1 ] = decimated_framelength + decimated_framelength2;
- X_offset[ 2 ] = X_offset[ 1 ] + decimated_framelength;
- X_offset[ 3 ] = X_offset[ 2 ] + decimated_framelength2;
- ALLOC( X, X_offset[ 3 ] + decimated_framelength1, opus_int16 );
-
- /* 0-8 kHz to 0-4 kHz and 4-8 kHz */
- silk_ana_filt_bank_1( pIn, &psSilk_VAD->AnaState[ 0 ],
- X, &X[ X_offset[ 3 ] ], psEncC->frame_length );
-
- /* 0-4 kHz to 0-2 kHz and 2-4 kHz */
- silk_ana_filt_bank_1( X, &psSilk_VAD->AnaState1[ 0 ],
- X, &X[ X_offset[ 2 ] ], decimated_framelength1 );
-
- /* 0-2 kHz to 0-1 kHz and 1-2 kHz */
- silk_ana_filt_bank_1( X, &psSilk_VAD->AnaState2[ 0 ],
- X, &X[ X_offset[ 1 ] ], decimated_framelength2 );
-
- /*********************************************/
- /* HP filter on lowest band (differentiator) */
- /*********************************************/
- X[ decimated_framelength - 1 ] = silk_RSHIFT( X[ decimated_framelength - 1 ], 1 );
- HPstateTmp = X[ decimated_framelength - 1 ];
- for( i = decimated_framelength - 1; i > 0; i-- ) {
- X[ i - 1 ] = silk_RSHIFT( X[ i - 1 ], 1 );
- X[ i ] -= X[ i - 1 ];
- }
- X[ 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 = silk_RSHIFT( psEncC->frame_length, silk_min_int( VAD_N_BANDS - b, VAD_N_BANDS - 1 ) );
-
- /* Split length into subframe lengths */
- dec_subframe_length = silk_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++ ) {
- __m128i xmm_X, xmm_acc;
- sumSquared = 0;
-
- xmm_acc = _mm_setzero_si128();
-
- for( i = 0; i < dec_subframe_length - 7; i += 8 )
- {
- xmm_X = _mm_loadu_si128( (__m128i *)&(X[ X_offset[ b ] + i + dec_subframe_offset ] ) );
- xmm_X = _mm_srai_epi16( xmm_X, 3 );
- xmm_X = _mm_madd_epi16( xmm_X, xmm_X );
- xmm_acc = _mm_add_epi32( xmm_acc, xmm_X );
- }
-
- xmm_acc = _mm_add_epi32( xmm_acc, _mm_unpackhi_epi64( xmm_acc, xmm_acc ) );
- xmm_acc = _mm_add_epi32( xmm_acc, _mm_shufflelo_epi16( xmm_acc, 0x0E ) );
-
- sumSquared += _mm_cvtsi128_si32( xmm_acc );
-
- for( ; i < dec_subframe_length; i++ ) {
- /* The energy will be less than dec_subframe_length * ( silk_int16_MIN / 8 ) ^ 2. */
- /* Therefore we can accumulate with no risk of overflow (unless dec_subframe_length > 128) */
- x_tmp = silk_RSHIFT(
- X[ X_offset[ b ] + i + dec_subframe_offset ], 3 );
- sumSquared = silk_SMLABB( sumSquared, x_tmp, x_tmp );
-
- /* Safety check */
- silk_assert( sumSquared >= 0 );
- }
-
- /* Add/saturate summed energy of current subframe */
- if( s < VAD_INTERNAL_SUBFRAMES - 1 ) {
- Xnrg[ b ] = silk_ADD_POS_SAT32( Xnrg[ b ], sumSquared );
- } else {
- /* Look-ahead subframe */
- Xnrg[ b ] = silk_ADD_POS_SAT32( Xnrg[ b ], silk_RSHIFT( sumSquared, 1 ) );
- }
-
- dec_subframe_offset += dec_subframe_length;
- }
- psSilk_VAD->XnrgSubfr[ b ] = sumSquared;
- }
-
- /********************/
- /* Noise estimation */
- /********************/
- 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 ] = silk_DIV32( silk_LSHIFT( Xnrg[ b ], 8 ), psSilk_VAD->NL[ b ] + 1 );
- } else {
- NrgToNoiseRatio_Q8[ b ] = silk_DIV32( Xnrg[ b ], silk_RSHIFT( psSilk_VAD->NL[ b ], 8 ) + 1 );
- }
-
- /* Convert to log domain */
- SNR_Q7 = silk_lin2log( NrgToNoiseRatio_Q8[ b ] ) - 8 * 128;
-
- /* Sum-of-squares */
- sumSquared = silk_SMLABB( sumSquared, SNR_Q7, SNR_Q7 ); /* Q14 */
-
- /* Tilt measure */
- if( speech_nrg < ( (opus_int32)1 << 20 ) ) {
- /* Scale down SNR value for small subband speech energies */
- SNR_Q7 = silk_SMULWB( silk_LSHIFT( silk_SQRT_APPROX( speech_nrg ), 6 ), SNR_Q7 );
- }
- input_tilt = silk_SMLAWB( input_tilt, tiltWeights[ b ], SNR_Q7 );
- } else {
- NrgToNoiseRatio_Q8[ b ] = 256;
- }
- }
-
- /* Mean-of-squares */
- sumSquared = silk_DIV32_16( sumSquared, VAD_N_BANDS ); /* Q14 */
-
- /* Root-mean-square approximation, scale to dBs, and write to output pointer */
- pSNR_dB_Q7 = (opus_int16)( 3 * silk_SQRT_APPROX( sumSquared ) ); /* Q7 */
-
- /*********************************/
- /* Speech Probability Estimation */
- /*********************************/
- SA_Q15 = silk_sigm_Q15( silk_SMULWB( VAD_SNR_FACTOR_Q16, pSNR_dB_Q7 ) - VAD_NEGATIVE_OFFSET_Q5 );
-
- /**************************/
- /* Frequency Tilt Measure */
- /**************************/
- psEncC->input_tilt_Q15 = silk_LSHIFT( 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 ) * silk_RSHIFT( Xnrg[ b ] - psSilk_VAD->NL[ b ], 4 );
- }
-
- /* Power scaling */
- if( speech_nrg <= 0 ) {
- SA_Q15 = silk_RSHIFT( SA_Q15, 1 );
- } else if( speech_nrg < 32768 ) {
- if( psEncC->frame_length == 10 * psEncC->fs_kHz ) {
- speech_nrg = silk_LSHIFT_SAT32( speech_nrg, 16 );
- } else {
- speech_nrg = silk_LSHIFT_SAT32( speech_nrg, 15 );
- }
-
- /* square-root */
- speech_nrg = silk_SQRT_APPROX( speech_nrg );
- SA_Q15 = silk_SMULWB( 32768 + speech_nrg, SA_Q15 );
- }
-
- /* Copy the resulting speech activity in Q8 */
- psEncC->speech_activity_Q8 = silk_min_int( silk_RSHIFT( SA_Q15, 7 ), silk_uint8_MAX );
-
- /***********************************/
- /* Energy Level and SNR estimation */
- /***********************************/
- /* Smoothing coefficient */
- smooth_coef_Q16 = silk_SMULWB( VAD_SNR_SMOOTH_COEF_Q18, silk_SMULWB( (opus_int32)SA_Q15, SA_Q15 ) );
-
- if( psEncC->frame_length == 10 * psEncC->fs_kHz ) {
- smooth_coef_Q16 >>= 1;
- }
-
- for( b = 0; b < VAD_N_BANDS; b++ ) {
- /* compute smoothed energy-to-noise ratio per band */
- psSilk_VAD->NrgRatioSmth_Q8[ b ] = silk_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 * ( silk_lin2log( psSilk_VAD->NrgRatioSmth_Q8[b] ) - 8 * 128 );
- /* quality = sigmoid( 0.25 * ( SNR_dB - 16 ) ); */
- psEncC->input_quality_bands_Q15[ b ] = silk_sigm_Q15( silk_RSHIFT( SNR_Q7 - 16 * 128, 4 ) );
- }
-
- RESTORE_STACK;
- return( ret );
-}
diff --git a/drivers/opus/silk/x86/VQ_WMat_EC_sse.c b/drivers/opus/silk/x86/VQ_WMat_EC_sse.c
deleted file mode 100644
index 3afa42a6e5..0000000000
--- a/drivers/opus/silk/x86/VQ_WMat_EC_sse.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include <xmmintrin.h>
-#include <emmintrin.h>
-#include <smmintrin.h>
-#include "opus/silk/main.h"
-#include "opus/celt/x86/x86cpu.h"
-
-/* Entropy constrained matrix-weighted VQ, hard-coded to 5-element vectors, for a single input data vector */
-void silk_VQ_WMat_EC_sse4_1(
- opus_int8 *ind, /* O index of best codebook vector */
- opus_int32 *rate_dist_Q14, /* O best weighted quant error + mu * rate */
- opus_int *gain_Q7, /* O sum of absolute LTP coefficients */
- const opus_int16 *in_Q14, /* I input vector to be quantized */
- const opus_int32 *W_Q18, /* I weighting matrix */
- const opus_int8 *cb_Q7, /* I codebook */
- const opus_uint8 *cb_gain_Q7, /* I codebook effective gain */
- const opus_uint8 *cl_Q5, /* I code length for each codebook vector */
- const opus_int mu_Q9, /* I tradeoff betw. weighted error and rate */
- const opus_int32 max_gain_Q7, /* I maximum sum of absolute LTP coefficients */
- opus_int L /* I number of vectors in codebook */
-)
-{
- opus_int k, gain_tmp_Q7;
- const opus_int8 *cb_row_Q7;
- opus_int16 diff_Q14[ 5 ];
- opus_int32 sum1_Q14, sum2_Q16;
-
- __m128i C_tmp1, C_tmp2, C_tmp3, C_tmp4, C_tmp5;
- /* Loop over codebook */
- *rate_dist_Q14 = silk_int32_MAX;
- cb_row_Q7 = cb_Q7;
- for( k = 0; k < L; k++ ) {
- gain_tmp_Q7 = cb_gain_Q7[k];
-
- diff_Q14[ 0 ] = in_Q14[ 0 ] - silk_LSHIFT( cb_row_Q7[ 0 ], 7 );
-
- C_tmp1 = OP_CVTEPI16_EPI32_M64( &in_Q14[ 1 ] );
- C_tmp2 = OP_CVTEPI8_EPI32_M32( &cb_row_Q7[ 1 ] );
- C_tmp2 = _mm_slli_epi32( C_tmp2, 7 );
- C_tmp1 = _mm_sub_epi32( C_tmp1, C_tmp2 );
-
- diff_Q14[ 1 ] = _mm_extract_epi16( C_tmp1, 0 );
- diff_Q14[ 2 ] = _mm_extract_epi16( C_tmp1, 2 );
- diff_Q14[ 3 ] = _mm_extract_epi16( C_tmp1, 4 );
- diff_Q14[ 4 ] = _mm_extract_epi16( C_tmp1, 6 );
-
- /* Weighted rate */
- sum1_Q14 = silk_SMULBB( mu_Q9, cl_Q5[ k ] );
-
- /* Penalty for too large gain */
- sum1_Q14 = silk_ADD_LSHIFT32( sum1_Q14, silk_max( silk_SUB32( gain_tmp_Q7, max_gain_Q7 ), 0 ), 10 );
-
- silk_assert( sum1_Q14 >= 0 );
-
- /* first row of W_Q18 */
- C_tmp3 = _mm_loadu_si128( (__m128i *)(&W_Q18[ 1 ] ) );
- C_tmp4 = _mm_mul_epi32( C_tmp3, C_tmp1 );
- C_tmp4 = _mm_srli_si128( C_tmp4, 2 );
-
- C_tmp1 = _mm_shuffle_epi32( C_tmp1, _MM_SHUFFLE( 0, 3, 2, 1 ) ); /* shift right 4 bytes */
- C_tmp3 = _mm_shuffle_epi32( C_tmp3, _MM_SHUFFLE( 0, 3, 2, 1 ) ); /* shift right 4 bytes */
-
- C_tmp5 = _mm_mul_epi32( C_tmp3, C_tmp1 );
- C_tmp5 = _mm_srli_si128( C_tmp5, 2 );
-
- C_tmp5 = _mm_add_epi32( C_tmp4, C_tmp5 );
- C_tmp5 = _mm_slli_epi32( C_tmp5, 1 );
-
- C_tmp5 = _mm_add_epi32( C_tmp5, _mm_shuffle_epi32( C_tmp5, _MM_SHUFFLE( 0, 0, 0, 2 ) ) );
- sum2_Q16 = _mm_cvtsi128_si32( C_tmp5 );
-
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 0 ], diff_Q14[ 0 ] );
- sum1_Q14 = silk_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14[ 0 ] );
-
- /* second row of W_Q18 */
- sum2_Q16 = silk_SMULWB( W_Q18[ 7 ], diff_Q14[ 2 ] );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 8 ], diff_Q14[ 3 ] );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 9 ], diff_Q14[ 4 ] );
- sum2_Q16 = silk_LSHIFT( sum2_Q16, 1 );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 6 ], diff_Q14[ 1 ] );
- sum1_Q14 = silk_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14[ 1 ] );
-
- /* third row of W_Q18 */
- sum2_Q16 = silk_SMULWB( W_Q18[ 13 ], diff_Q14[ 3 ] );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 14 ], diff_Q14[ 4 ] );
- sum2_Q16 = silk_LSHIFT( sum2_Q16, 1 );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 12 ], diff_Q14[ 2 ] );
- sum1_Q14 = silk_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14[ 2 ] );
-
- /* fourth row of W_Q18 */
- sum2_Q16 = silk_SMULWB( W_Q18[ 19 ], diff_Q14[ 4 ] );
- sum2_Q16 = silk_LSHIFT( sum2_Q16, 1 );
- sum2_Q16 = silk_SMLAWB( sum2_Q16, W_Q18[ 18 ], diff_Q14[ 3 ] );
- sum1_Q14 = silk_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14[ 3 ] );
-
- /* last row of W_Q18 */
- sum2_Q16 = silk_SMULWB( W_Q18[ 24 ], diff_Q14[ 4 ] );
- sum1_Q14 = silk_SMLAWB( sum1_Q14, sum2_Q16, diff_Q14[ 4 ] );
-
- silk_assert( sum1_Q14 >= 0 );
-
- /* find best */
- if( sum1_Q14 < *rate_dist_Q14 ) {
- *rate_dist_Q14 = sum1_Q14;
- *ind = (opus_int8)k;
- *gain_Q7 = gain_tmp_Q7;
- }
-
- /* Go to next cbk vector */
- cb_row_Q7 += LTP_ORDER;
- }
-}
diff --git a/drivers/opus/silk/x86/main_sse.h b/drivers/opus/silk/x86/main_sse.h
deleted file mode 100644
index 6fef1b358b..0000000000
--- a/drivers/opus/silk/x86/main_sse.h
+++ /dev/null
@@ -1,273 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 MAIN_SSE_H
-#define MAIN_SSE_H
-#include "opus/opus_config.h"
-
-# if defined(OPUS_X86_MAY_HAVE_SSE4_1)
-
-# define OVERRIDE_silk_VQ_WMat_EC
-
-void silk_VQ_WMat_EC_sse4_1(
- opus_int8 *ind, /* O index of best codebook vector */
- opus_int32 *rate_dist_Q14, /* O best weighted quant error + mu * rate */
- opus_int *gain_Q7, /* O sum of absolute LTP coefficients */
- const opus_int16 *in_Q14, /* I input vector to be quantized */
- const opus_int32 *W_Q18, /* I weighting matrix */
- const opus_int8 *cb_Q7, /* I codebook */
- const opus_uint8 *cb_gain_Q7, /* I codebook effective gain */
- const opus_uint8 *cl_Q5, /* I code length for each codebook vector */
- const opus_int mu_Q9, /* I tradeoff betw. weighted error and rate */
- const opus_int32 max_gain_Q7, /* I maximum sum of absolute LTP coefficients */
- opus_int L /* I number of vectors in codebook */
-);
-
-#if defined OPUS_X86_PRESUME_SSE4_1
-
-#define silk_VQ_WMat_EC(ind, rate_dist_Q14, gain_Q7, in_Q14, W_Q18, cb_Q7, cb_gain_Q7, cl_Q5, \
- mu_Q9, max_gain_Q7, L, arch) \
- ((void)(arch),silk_VQ_WMat_EC_sse4_1(ind, rate_dist_Q14, gain_Q7, in_Q14, W_Q18, cb_Q7, cb_gain_Q7, cl_Q5, \
- mu_Q9, max_gain_Q7, L))
-
-#else
-
-extern void (*const SILK_VQ_WMAT_EC_IMPL[OPUS_ARCHMASK + 1])(
- opus_int8 *ind, /* O index of best codebook vector */
- opus_int32 *rate_dist_Q14, /* O best weighted quant error + mu * rate */
- opus_int *gain_Q7, /* O sum of absolute LTP coefficients */
- const opus_int16 *in_Q14, /* I input vector to be quantized */
- const opus_int32 *W_Q18, /* I weighting matrix */
- const opus_int8 *cb_Q7, /* I codebook */
- const opus_uint8 *cb_gain_Q7, /* I codebook effective gain */
- const opus_uint8 *cl_Q5, /* I code length for each codebook vector */
- const opus_int mu_Q9, /* I tradeoff betw. weighted error and rate */
- const opus_int32 max_gain_Q7, /* I maximum sum of absolute LTP coefficients */
- opus_int L /* I number of vectors in codebook */
-);
-
-# define silk_VQ_WMat_EC(ind, rate_dist_Q14, gain_Q7, in_Q14, W_Q18, cb_Q7, cb_gain_Q7, cl_Q5, \
- mu_Q9, max_gain_Q7, L, arch) \
- ((*SILK_VQ_WMAT_EC_IMPL[(arch) & OPUS_ARCHMASK])(ind, rate_dist_Q14, gain_Q7, in_Q14, W_Q18, cb_Q7, cb_gain_Q7, cl_Q5, \
- mu_Q9, max_gain_Q7, L))
-
-#endif
-
-# define OVERRIDE_silk_NSQ
-
-void silk_NSQ_sse4_1(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-);
-
-#if defined OPUS_X86_PRESUME_SSE4_1
-
-#define silk_NSQ(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14, arch) \
- ((void)(arch),silk_NSQ_sse4_1(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14))
-
-#else
-
-extern void (*const SILK_NSQ_IMPL[OPUS_ARCHMASK + 1])(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-);
-
-# define silk_NSQ(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14, arch) \
- ((*SILK_NSQ_IMPL[(arch) & OPUS_ARCHMASK])(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14))
-
-#endif
-
-# define OVERRIDE_silk_NSQ_del_dec
-
-void silk_NSQ_del_dec_sse4_1(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-);
-
-#if defined OPUS_X86_PRESUME_SSE4_1
-
-#define silk_NSQ_del_dec(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14, arch) \
- ((void)(arch),silk_NSQ_del_dec_sse4_1(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14))
-
-#else
-
-extern void (*const SILK_NSQ_DEL_DEC_IMPL[OPUS_ARCHMASK + 1])(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-);
-
-# define silk_NSQ_del_dec(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14, arch) \
- ((*SILK_NSQ_DEL_DEC_IMPL[(arch) & OPUS_ARCHMASK])(psEncC, NSQ, psIndices, x_Q3, pulses, PredCoef_Q12, LTPCoef_Q14, AR2_Q13, \
- HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, pitchL, Lambda_Q10, LTP_scale_Q14))
-
-#endif
-
-void silk_noise_shape_quantizer(
- silk_nsq_state *NSQ, /* I/O NSQ state */
- opus_int signalType, /* I Signal type */
- const opus_int32 x_sc_Q10[], /* I */
- opus_int8 pulses[], /* O */
- opus_int16 xq[], /* O */
- opus_int32 sLTP_Q15[], /* I/O LTP state */
- const opus_int16 a_Q12[], /* I Short term prediction coefs */
- const opus_int16 b_Q14[], /* I Long term prediction coefs */
- const opus_int16 AR_shp_Q13[], /* I Noise shaping AR coefs */
- opus_int lag, /* I Pitch lag */
- opus_int32 HarmShapeFIRPacked_Q14, /* I */
- opus_int Tilt_Q14, /* I Spectral tilt */
- opus_int32 LF_shp_Q14, /* I */
- opus_int32 Gain_Q16, /* I */
- opus_int Lambda_Q10, /* I */
- opus_int offset_Q10, /* I */
- opus_int length, /* I Input length */
- opus_int shapingLPCOrder, /* I Noise shaping AR filter order */
- opus_int predictLPCOrder /* I Prediction filter order */
-);
-
-/**************************/
-/* Noise level estimation */
-/**************************/
-void silk_VAD_GetNoiseLevels(
- const opus_int32 pX[ VAD_N_BANDS ], /* I subband energies */
- silk_VAD_state *psSilk_VAD /* I/O Pointer to Silk VAD state */
-);
-
-# define OVERRIDE_silk_VAD_GetSA_Q8
-
-opus_int silk_VAD_GetSA_Q8_sse4_1(
- silk_encoder_state *psEnC,
- const opus_int16 pIn[]
-);
-
-#if defined(OPUS_X86_PRESUME_SSE4_1)
-#define silk_VAD_GetSA_Q8(psEnC, pIn, arch) ((void)(arch),silk_VAD_GetSA_Q8_sse4_1(psEnC, pIn))
-
-#else
-
-# define silk_VAD_GetSA_Q8(psEnC, pIn, arch) \
- ((*SILK_VAD_GETSA_Q8_IMPL[(arch) & OPUS_ARCHMASK])(psEnC, pIn))
-
-extern opus_int (*const SILK_VAD_GETSA_Q8_IMPL[OPUS_ARCHMASK + 1])(
- silk_encoder_state *psEnC,
- const opus_int16 pIn[]);
-
-# define OVERRIDE_silk_warped_LPC_analysis_filter_FIX
-
-#endif
-
-void silk_warped_LPC_analysis_filter_FIX_sse4_1(
- opus_int32 state[], /* I/O State [order + 1] */
- opus_int32 res_Q2[], /* O Residual signal [length] */
- const opus_int16 coef_Q13[], /* I Coefficients [order] */
- const opus_int16 input[], /* I Input signal [length] */
- const opus_int16 lambda_Q16, /* I Warping factor */
- const opus_int length, /* I Length of input signal */
- const opus_int order /* I Filter order (even) */
-);
-
-#if defined(OPUS_X86_PRESUME_SSE4_1)
-#define silk_warped_LPC_analysis_filter_FIX(state, res_Q2, coef_Q13, input, lambda_Q16, length, order, arch) \
- ((void)(arch),silk_warped_LPC_analysis_filter_FIX_c(state, res_Q2, coef_Q13, input, lambda_Q16, length, order))
-
-#else
-
-extern void (*const SILK_WARPED_LPC_ANALYSIS_FILTER_FIX_IMPL[OPUS_ARCHMASK + 1])(
- opus_int32 state[], /* I/O State [order + 1] */
- opus_int32 res_Q2[], /* O Residual signal [length] */
- const opus_int16 coef_Q13[], /* I Coefficients [order] */
- const opus_int16 input[], /* I Input signal [length] */
- const opus_int16 lambda_Q16, /* I Warping factor */
- const opus_int length, /* I Length of input signal */
- const opus_int order /* I Filter order (even) */
-);
-
-# define silk_warped_LPC_analysis_filter_FIX(state, res_Q2, coef_Q13, input, lambda_Q16, length, order, arch) \
- ((*SILK_WARPED_LPC_ANALYSIS_FILTER_FIX_IMPL[(arch) & OPUS_ARCHMASK])(state, res_Q2, coef_Q13, input, lambda_Q16, length, order))
-
-#endif
-
-# endif
-#endif
diff --git a/drivers/opus/silk/x86/x86_silk_map.c b/drivers/opus/silk/x86/x86_silk_map.c
deleted file mode 100644
index c3502114d1..0000000000
--- a/drivers/opus/silk/x86/x86_silk_map.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/* Copyright (c) 2014, Cisco Systems, INC
- Written by XiangMingZhu WeiZhou MinPeng YanWang
-
- 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.
-
- 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 "opus/opus_config.h"
-
-#include "opus/celt/x86/x86cpu.h"
-#include "opus/silk/structs.h"
-#include "opus/silk/SigProc_FIX.h"
-#include "opus/celt/pitch.h"
-#include "opus/silk/main.h"
-
-#if !defined(OPUS_X86_PRESUME_SSE4_1)
-
-#if defined(FIXED_POINT)
-
-#include "opus/silk/fixed/main_FIX.h"
-
-opus_int64 (*const SILK_INNER_PROD16_ALIGNED_64_IMPL[ OPUS_ARCHMASK + 1 ] )(
- const opus_int16 *inVec1,
- const opus_int16 *inVec2,
- const opus_int len
-) = {
- silk_inner_prod16_aligned_64_c, /* non-sse */
- silk_inner_prod16_aligned_64_c,
- silk_inner_prod16_aligned_64_c,
- MAY_HAVE_SSE4_1( silk_inner_prod16_aligned_64 ), /* sse4.1 */
- MAY_HAVE_SSE4_1( silk_inner_prod16_aligned_64 ) /* avx */
-};
-
-#endif
-
-opus_int (*const SILK_VAD_GETSA_Q8_IMPL[ OPUS_ARCHMASK + 1 ] )(
- silk_encoder_state *psEncC,
- const opus_int16 pIn[]
-) = {
- silk_VAD_GetSA_Q8_c, /* non-sse */
- silk_VAD_GetSA_Q8_c,
- silk_VAD_GetSA_Q8_c,
- MAY_HAVE_SSE4_1( silk_VAD_GetSA_Q8 ), /* sse4.1 */
- MAY_HAVE_SSE4_1( silk_VAD_GetSA_Q8 ) /* avx */
-};
-
-void (*const SILK_NSQ_IMPL[ OPUS_ARCHMASK + 1 ] )(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-) = {
- silk_NSQ_c, /* non-sse */
- silk_NSQ_c,
- silk_NSQ_c,
- MAY_HAVE_SSE4_1( silk_NSQ ), /* sse4.1 */
- MAY_HAVE_SSE4_1( silk_NSQ ) /* avx */
-};
-
-void (*const SILK_VQ_WMAT_EC_IMPL[ OPUS_ARCHMASK + 1 ] )(
- opus_int8 *ind, /* O index of best codebook vector */
- opus_int32 *rate_dist_Q14, /* O best weighted quant error + mu * rate */
- opus_int *gain_Q7, /* O sum of absolute LTP coefficients */
- const opus_int16 *in_Q14, /* I input vector to be quantized */
- const opus_int32 *W_Q18, /* I weighting matrix */
- const opus_int8 *cb_Q7, /* I codebook */
- const opus_uint8 *cb_gain_Q7, /* I codebook effective gain */
- const opus_uint8 *cl_Q5, /* I code length for each codebook vector */
- const opus_int mu_Q9, /* I tradeoff betw. weighted error and rate */
- const opus_int32 max_gain_Q7, /* I maximum sum of absolute LTP coefficients */
- opus_int L /* I number of vectors in codebook */
-) = {
- silk_VQ_WMat_EC_c, /* non-sse */
- silk_VQ_WMat_EC_c,
- silk_VQ_WMat_EC_c,
- MAY_HAVE_SSE4_1( silk_VQ_WMat_EC ), /* sse4.1 */
- MAY_HAVE_SSE4_1( silk_VQ_WMat_EC ) /* avx */
-};
-
-void (*const SILK_NSQ_DEL_DEC_IMPL[ OPUS_ARCHMASK + 1 ] )(
- const silk_encoder_state *psEncC, /* I/O Encoder State */
- silk_nsq_state *NSQ, /* I/O NSQ state */
- SideInfoIndices *psIndices, /* I/O Quantization Indices */
- const opus_int32 x_Q3[], /* I Prefiltered input signal */
- opus_int8 pulses[], /* O Quantized pulse signal */
- const opus_int16 PredCoef_Q12[ 2 * MAX_LPC_ORDER ], /* I Short term prediction coefs */
- const opus_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ], /* I Long term prediction coefs */
- const opus_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ], /* I Noise shaping coefs */
- const opus_int HarmShapeGain_Q14[ MAX_NB_SUBFR ], /* I Long term shaping coefs */
- const opus_int Tilt_Q14[ MAX_NB_SUBFR ], /* I Spectral tilt */
- const opus_int32 LF_shp_Q14[ MAX_NB_SUBFR ], /* I Low frequency shaping coefs */
- const opus_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I Quantization step sizes */
- const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
- const opus_int Lambda_Q10, /* I Rate/distortion tradeoff */
- const opus_int LTP_scale_Q14 /* I LTP state scaling */
-) = {
- silk_NSQ_del_dec_c, /* non-sse */
- silk_NSQ_del_dec_c,
- silk_NSQ_del_dec_c,
- MAY_HAVE_SSE4_1( silk_NSQ_del_dec ), /* sse4.1 */
- MAY_HAVE_SSE4_1( silk_NSQ_del_dec ) /* avx */
-};
-
-#if defined(FIXED_POINT)
-
-void (*const SILK_WARPED_LPC_ANALYSIS_FILTER_FIX_IMPL[ OPUS_ARCHMASK + 1 ] )(
- opus_int32 state[], /* I/O State [order + 1] */
- opus_int32 res_Q2[], /* O Residual signal [length] */
- const opus_int16 coef_Q13[], /* I Coefficients [order] */
- const opus_int16 input[], /* I Input signal [length] */
- const opus_int16 lambda_Q16, /* I Warping factor */
- const opus_int length, /* I Length of input signal */
- const opus_int order /* I Filter order (even) */
-) = {
- silk_warped_LPC_analysis_filter_FIX_c, /* non-sse */
- silk_warped_LPC_analysis_filter_FIX_c,
- silk_warped_LPC_analysis_filter_FIX_c,
- MAY_HAVE_SSE4_1( silk_warped_LPC_analysis_filter_FIX ), /* sse4.1 */
- MAY_HAVE_SSE4_1( silk_warped_LPC_analysis_filter_FIX ) /* avx */
-};
-
-void (*const SILK_BURG_MODIFIED_IMPL[ OPUS_ARCHMASK + 1 ] )(
- opus_int32 *res_nrg, /* O Residual energy */
- opus_int *res_nrg_Q, /* O Residual energy Q value */
- opus_int32 A_Q16[], /* O Prediction coefficients (length order) */
- const opus_int16 x[], /* I Input signal, length: nb_subfr * ( D + subfr_length ) */
- const opus_int32 minInvGain_Q30, /* I Inverse of max prediction gain */
- const opus_int subfr_length, /* I Input signal subframe length (incl. D preceding samples) */
- const opus_int nb_subfr, /* I Number of subframes stacked in x */
- const opus_int D, /* I Order */
- int arch /* I Run-time architecture */
-) = {
- silk_burg_modified_c, /* non-sse */
- silk_burg_modified_c,
- silk_burg_modified_c,
- MAY_HAVE_SSE4_1( silk_burg_modified ), /* sse4.1 */
- MAY_HAVE_SSE4_1( silk_burg_modified ) /* avx */
-};
-
-#endif
-#endif
diff --git a/drivers/opus/stream.c b/drivers/opus/stream.c
deleted file mode 100644
index 2ac12642dd..0000000000
--- a/drivers/opus/stream.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE libopusfile 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 libopusfile SOURCE CODE IS (C) COPYRIGHT 1994-2012 *
- * by the Xiph.Org Foundation and contributors http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: stdio-based convenience library for opening/seeking/decoding
- last mod: $Id: vorbisfile.c 17573 2010-10-27 14:53:59Z xiphmont $
-
- ********************************************************************/
-#include "opus/opus_config.h"
-
-#include "opus/internal.h"
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#if defined(_WIN32)
-# include <io.h>
-#endif
-
-typedef struct OpusMemStream OpusMemStream;
-
-#define OP_MEM_SIZE_MAX (~(size_t)0>>1)
-#define OP_MEM_DIFF_MAX ((ptrdiff_t)OP_MEM_SIZE_MAX)
-
-/*The context information needed to read from a block of memory as if it were a
- file.*/
-struct OpusMemStream{
- /*The block of memory to read from.*/
- const unsigned char *data;
- /*The total size of the block.
- This must be at most OP_MEM_SIZE_MAX to prevent signed overflow while
- seeking.*/
- ptrdiff_t size;
- /*The current file position.
- This is allowed to be set arbitrarily greater than size (i.e., past the end
- of the block, though we will not read data past the end of the block), but
- is not allowed to be negative (i.e., before the beginning of the block).*/
- ptrdiff_t pos;
-};
-
-static int op_fread(void *_stream,unsigned char *_ptr,int _buf_size){
- FILE *stream;
- size_t ret;
- /*Check for empty read.*/
- if(_buf_size<=0)return 0;
- stream=(FILE *)_stream;
- ret=fread(_ptr,1,_buf_size,stream);
- OP_ASSERT(ret<=(size_t)_buf_size);
- /*If ret==0 and !feof(stream), there was a read error.*/
- return ret>0||feof(stream)?(int)ret:OP_EREAD;
-}
-
-static int op_fseek(void *_stream,opus_int64 _offset,int _whence){
-#if defined(_WIN32)
- /*_fseeki64() is not exposed until MSCVCRT80.
- This is the default starting with MSVC 2005 (_MSC_VER>=1400), but we want
- to allow linking against older MSVCRT versions for compatibility back to
- XP without installing extra runtime libraries.
- i686-pc-mingw32 does not have fseeko() and requires
- __MSVCRT_VERSION__>=0x800 for _fseeki64(), which screws up linking with
- other libraries (that don't use MSVCRT80 from MSVC 2005 by default).
- i686-w64-mingw32 does have fseeko() and respects _FILE_OFFSET_BITS, but I
- don't know how to detect that at compile time.
- We could just use fseeko64() (which is available in both), but its
- implemented using fgetpos()/fsetpos() just like this code, except without
- the overflow checking, so we prefer our version.*/
- opus_int64 pos;
- /*We don't use fpos_t directly because it might be a struct if __STDC__ is
- non-zero or _INTEGRAL_MAX_BITS < 64.
- I'm not certain when the latter is true, but someone could in theory set
- the former.
- Either way, it should be binary compatible with a normal 64-bit int (this
- assumption is not portable, but I believe it is true for MSVCRT).*/
- OP_ASSERT(sizeof(pos)==sizeof(fpos_t));
- /*Translate the seek to an absolute one.*/
- if(_whence==SEEK_CUR){
- int ret;
- ret=fgetpos((FILE *)_stream,(fpos_t *)&pos);
- if(ret)return ret;
- }
- else if(_whence==SEEK_END)pos=_filelengthi64(_fileno((FILE *)_stream));
- else if(_whence==SEEK_SET)pos=0;
- else return -1;
- /*Check for errors or overflow.*/
- if(pos<0||_offset<-pos||_offset>OP_INT64_MAX-pos)return -1;
- pos+=_offset;
- return fsetpos((FILE *)_stream,(fpos_t *)&pos);
-#else
- /*This function actually conforms to the SUSv2 and POSIX.1-2001, so we prefer
- it except on Windows.*/
- return fseeko((FILE *)_stream,(off_t)_offset,_whence);
-#endif
-}
-
-static opus_int64 op_ftell(void *_stream){
-#if defined(_WIN32)
- /*_ftelli64() is not exposed until MSCVCRT80, and ftello()/ftello64() have
- the same problems as fseeko()/fseeko64() in MingW.
- See above for a more detailed explanation.*/
- opus_int64 pos;
- OP_ASSERT(sizeof(pos)==sizeof(fpos_t));
- return fgetpos((FILE *)_stream,(fpos_t *)&pos)?-1:pos;
-#else
- /*This function actually conforms to the SUSv2 and POSIX.1-2001, so we prefer
- it except on Windows.*/
- return ftello((FILE *)_stream);
-#endif
-}
-
-static const OpusFileCallbacks OP_FILE_CALLBACKS={
- op_fread,
- op_fseek,
- op_ftell,
- (op_close_func)fclose
-};
-
-#if defined(_WIN32)
-# include <stddef.h>
-# include <errno.h>
-
-/*Windows doesn't accept UTF-8 by default, and we don't have a wchar_t API,
- so if we just pass the path to fopen(), then there'd be no way for a user
- of our API to open a Unicode filename.
- Instead, we translate from UTF-8 to UTF-16 and use Windows' wchar_t API.
- This makes this API more consistent with platforms where the character set
- used by fopen is the same as used on disk, which is generally UTF-8, and
- with our metadata API, which always uses UTF-8.*/
-static wchar_t *op_utf8_to_utf16(const char *_src){
- wchar_t *dst;
- size_t len;
- len=strlen(_src);
- /*Worst-case output is 1 wide character per 1 input character.*/
- dst=(wchar_t *)_ogg_malloc(sizeof(*dst)*(len+1));
- if(dst!=NULL){
- size_t si;
- size_t di;
- for(di=si=0;si<len;si++){
- int c0;
- c0=(unsigned char)_src[si];
- if(!(c0&0x80)){
- /*Start byte says this is a 1-byte sequence.*/
- dst[di++]=(wchar_t)c0;
- continue;
- }
- else{
- int c1;
- /*This is safe, because c0 was not 0 and _src is NUL-terminated.*/
- c1=(unsigned char)_src[si+1];
- if((c1&0xC0)==0x80){
- /*Found at least one continuation byte.*/
- if((c0&0xE0)==0xC0){
- wchar_t w;
- /*Start byte says this is a 2-byte sequence.*/
- w=(c0&0x1F)<<6|c1&0x3F;
- if(w>=0x80U){
- /*This is a 2-byte sequence that is not overlong.*/
- dst[di++]=w;
- si++;
- continue;
- }
- }
- else{
- int c2;
- /*This is safe, because c1 was not 0 and _src is NUL-terminated.*/
- c2=(unsigned char)_src[si+2];
- if((c2&0xC0)==0x80){
- /*Found at least two continuation bytes.*/
- if((c0&0xF0)==0xE0){
- wchar_t w;
- /*Start byte says this is a 3-byte sequence.*/
- w=(c0&0xF)<<12|(c1&0x3F)<<6|c2&0x3F;
- if(w>=0x800U&&(w<0xD800||w>=0xE000)&&w<0xFFFE){
- /*This is a 3-byte sequence that is not overlong, not a
- UTF-16 surrogate pair value, and not a 'not a character'
- value.*/
- dst[di++]=w;
- si+=2;
- continue;
- }
- }
- else{
- int c3;
- /*This is safe, because c2 was not 0 and _src is
- NUL-terminated.*/
- c3=(unsigned char)_src[si+3];
- if((c3&0xC0)==0x80){
- /*Found at least three continuation bytes.*/
- if((c0&0xF8)==0xF0){
- opus_uint32 w;
- /*Start byte says this is a 4-byte sequence.*/
- w=(c0&7)<<18|(c1&0x3F)<<12|(c2&0x3F)<<6&(c3&0x3F);
- if(w>=0x10000U&&w<0x110000U){
- /*This is a 4-byte sequence that is not overlong and not
- greater than the largest valid Unicode code point.
- Convert it to a surrogate pair.*/
- w-=0x10000;
- dst[di++]=(wchar_t)(0xD800+(w>>10));
- dst[di++]=(wchar_t)(0xDC00+(w&0x3FF));
- si+=3;
- continue;
- }
- }
- }
- }
- }
- }
- }
- }
- /*If we got here, we encountered an illegal UTF-8 sequence.*/
- _ogg_free(dst);
- return NULL;
- }
- OP_ASSERT(di<=len);
- dst[di]='\0';
- }
- return dst;
-}
-
-#endif
-
-void *op_fopen(OpusFileCallbacks *_cb,const char *_path,const char *_mode){
- FILE *fp;
-#if !defined(_WIN32)
- fp=fopen(_path,_mode);
-#else
- fp=NULL;
- if(_path==NULL||_mode==NULL)errno=EINVAL;
- else{
- wchar_t *wpath;
- wchar_t *wmode;
- wpath=op_utf8_to_utf16(_path);
- wmode=op_utf8_to_utf16(_mode);
- if(wmode==NULL)errno=EINVAL;
- else if(wpath==NULL)errno=ENOENT;
- else fp=_wfopen(wpath,wmode);
- _ogg_free(wmode);
- _ogg_free(wpath);
- }
-#endif
- if(fp!=NULL)*_cb=*&OP_FILE_CALLBACKS;
- return fp;
-}
-
-void *op_fdopen(OpusFileCallbacks *_cb,int _fd,const char *_mode){
- FILE *fp;
- fp=fdopen(_fd,_mode);
- if(fp!=NULL)*_cb=*&OP_FILE_CALLBACKS;
- return fp;
-}
-
-void *op_freopen(OpusFileCallbacks *_cb,const char *_path,const char *_mode,
- void *_stream){
- FILE *fp;
-#if !defined(_WIN32)
- fp=freopen(_path,_mode,(FILE *)_stream);
-#else
- fp=NULL;
- if(_path==NULL||_mode==NULL)errno=EINVAL;
- else{
- wchar_t *wpath;
- wchar_t *wmode;
- wpath=op_utf8_to_utf16(_path);
- wmode=op_utf8_to_utf16(_mode);
- if(wmode==NULL)errno=EINVAL;
- else if(wpath==NULL)errno=ENOENT;
- else fp=_wfreopen(wpath,wmode,(FILE *)_stream);
- _ogg_free(wmode);
- _ogg_free(wpath);
- }
-#endif
- if(fp!=NULL)*_cb=*&OP_FILE_CALLBACKS;
- return fp;
-}
-
-static int op_mem_read(void *_stream,unsigned char *_ptr,int _buf_size){
- OpusMemStream *stream;
- ptrdiff_t size;
- ptrdiff_t pos;
- stream=(OpusMemStream *)_stream;
- /*Check for empty read.*/
- if(_buf_size<=0)return 0;
- size=stream->size;
- pos=stream->pos;
- /*Check for EOF.*/
- if(pos>=size)return 0;
- /*Check for a short read.*/
- _buf_size=(int)OP_MIN(size-pos,_buf_size);
- memcpy(_ptr,stream->data+pos,_buf_size);
- pos+=_buf_size;
- stream->pos=pos;
- return _buf_size;
-}
-
-static int op_mem_seek(void *_stream,opus_int64 _offset,int _whence){
- OpusMemStream *stream;
- ptrdiff_t pos;
- stream=(OpusMemStream *)_stream;
- pos=stream->pos;
- OP_ASSERT(pos>=0);
- switch(_whence){
- case SEEK_SET:{
- /*Check for overflow:*/
- if(_offset<0||_offset>OP_MEM_DIFF_MAX)return -1;
- pos=(ptrdiff_t)_offset;
- }break;
- case SEEK_CUR:{
- /*Check for overflow:*/
- if(_offset<-pos||_offset>OP_MEM_DIFF_MAX-pos)return -1;
- pos=(ptrdiff_t)(pos+_offset);
- }break;
- case SEEK_END:{
- ptrdiff_t size;
- size=stream->size;
- OP_ASSERT(size>=0);
- /*Check for overflow:*/
- if(_offset>size||_offset<size-OP_MEM_DIFF_MAX)return -1;
- pos=(ptrdiff_t)(size-_offset);
- }break;
- default:return -1;
- }
- stream->pos=pos;
- return 0;
-}
-
-static opus_int64 op_mem_tell(void *_stream){
- OpusMemStream *stream;
- stream=(OpusMemStream *)_stream;
- return (ogg_int64_t)stream->pos;
-}
-
-static int op_mem_close(void *_stream){
- _ogg_free(_stream);
- return 0;
-}
-
-static const OpusFileCallbacks OP_MEM_CALLBACKS={
- op_mem_read,
- op_mem_seek,
- op_mem_tell,
- op_mem_close
-};
-
-void *op_mem_stream_create(OpusFileCallbacks *_cb,
- const unsigned char *_data,size_t _size){
- OpusMemStream *stream;
- if(_size>OP_MEM_SIZE_MAX)return NULL;
- stream=(OpusMemStream *)_ogg_malloc(sizeof(*stream));
- if(stream!=NULL){
- *_cb=*&OP_MEM_CALLBACKS;
- stream->data=_data;
- stream->size=_size;
- stream->pos=0;
- }
- return stream;
-}
diff --git a/drivers/opus/tansig_table.h b/drivers/opus/tansig_table.h
deleted file mode 100644
index c76f844a72..0000000000
--- a/drivers/opus/tansig_table.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* This file is auto-generated by gen_tables */
-
-static const float tansig_table[201] = {
-0.000000f, 0.039979f, 0.079830f, 0.119427f, 0.158649f,
-0.197375f, 0.235496f, 0.272905f, 0.309507f, 0.345214f,
-0.379949f, 0.413644f, 0.446244f, 0.477700f, 0.507977f,
-0.537050f, 0.564900f, 0.591519f, 0.616909f, 0.641077f,
-0.664037f, 0.685809f, 0.706419f, 0.725897f, 0.744277f,
-0.761594f, 0.777888f, 0.793199f, 0.807569f, 0.821040f,
-0.833655f, 0.845456f, 0.856485f, 0.866784f, 0.876393f,
-0.885352f, 0.893698f, 0.901468f, 0.908698f, 0.915420f,
-0.921669f, 0.927473f, 0.932862f, 0.937863f, 0.942503f,
-0.946806f, 0.950795f, 0.954492f, 0.957917f, 0.961090f,
-0.964028f, 0.966747f, 0.969265f, 0.971594f, 0.973749f,
-0.975743f, 0.977587f, 0.979293f, 0.980869f, 0.982327f,
-0.983675f, 0.984921f, 0.986072f, 0.987136f, 0.988119f,
-0.989027f, 0.989867f, 0.990642f, 0.991359f, 0.992020f,
-0.992631f, 0.993196f, 0.993718f, 0.994199f, 0.994644f,
-0.995055f, 0.995434f, 0.995784f, 0.996108f, 0.996407f,
-0.996682f, 0.996937f, 0.997172f, 0.997389f, 0.997590f,
-0.997775f, 0.997946f, 0.998104f, 0.998249f, 0.998384f,
-0.998508f, 0.998623f, 0.998728f, 0.998826f, 0.998916f,
-0.999000f, 0.999076f, 0.999147f, 0.999213f, 0.999273f,
-0.999329f, 0.999381f, 0.999428f, 0.999472f, 0.999513f,
-0.999550f, 0.999585f, 0.999617f, 0.999646f, 0.999673f,
-0.999699f, 0.999722f, 0.999743f, 0.999763f, 0.999781f,
-0.999798f, 0.999813f, 0.999828f, 0.999841f, 0.999853f,
-0.999865f, 0.999875f, 0.999885f, 0.999893f, 0.999902f,
-0.999909f, 0.999916f, 0.999923f, 0.999929f, 0.999934f,
-0.999939f, 0.999944f, 0.999948f, 0.999952f, 0.999956f,
-0.999959f, 0.999962f, 0.999965f, 0.999968f, 0.999970f,
-0.999973f, 0.999975f, 0.999977f, 0.999978f, 0.999980f,
-0.999982f, 0.999983f, 0.999984f, 0.999986f, 0.999987f,
-0.999988f, 0.999989f, 0.999990f, 0.999990f, 0.999991f,
-0.999992f, 0.999992f, 0.999993f, 0.999994f, 0.999994f,
-0.999994f, 0.999995f, 0.999995f, 0.999996f, 0.999996f,
-0.999996f, 0.999997f, 0.999997f, 0.999997f, 0.999997f,
-0.999997f, 0.999998f, 0.999998f, 0.999998f, 0.999998f,
-0.999998f, 0.999998f, 0.999999f, 0.999999f, 0.999999f,
-0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f,
-0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f,
-1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
-1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
-1.000000f,
-};
diff --git a/drivers/opus/wincerts.c b/drivers/opus/wincerts.c
deleted file mode 100644
index 1a5b634063..0000000000
--- a/drivers/opus/wincerts.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE libopusfile 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 libopusfile SOURCE CODE IS (C) COPYRIGHT 2013 *
- * by the Xiph.Org Foundation and contributors http://www.xiph.org/ *
- * *
- ********************************************************************/
-
-/*This should really be part of OpenSSL, but there's been a patch [1] sitting
- in their bugtracker for over two years that implements this, without any
- action, so I'm giving up and re-implementing it locally.
-
- [1] <http://rt.openssl.org/Ticket/Display.html?id=2158>*/
-#include "opus/opus_config.h"
-
-#include "opus/internal.h"
-#if defined(OP_ENABLE_HTTP)&&defined(_WIN32)
-/*You must include windows.h before wincrypt.h and x509.h.*/
-# define WIN32_LEAN_AND_MEAN
-# define WIN32_EXTRA_LEAN
-# include <windows.h>
-/*You must include wincrypt.h before x509.h, too, or X509_NAME doesn't get
- defined properly.*/
-# include <wincrypt.h>
-# include <openssl/ssl.h>
-# include <openssl/err.h>
-# include <openssl/x509.h>
-
-static int op_capi_new(X509_LOOKUP *_lu){
- HCERTSTORE h_store;
- h_store=CertOpenStore(CERT_STORE_PROV_SYSTEM_A,0,0,
- CERT_STORE_OPEN_EXISTING_FLAG|CERT_STORE_READONLY_FLAG|
- CERT_SYSTEM_STORE_CURRENT_USER|CERT_STORE_SHARE_CONTEXT_FLAG,"ROOT");
- if(h_store!=NULL){
- _lu->method_data=(char *)h_store;
- return 1;
- }
- return 0;
-}
-
-static void op_capi_free(X509_LOOKUP *_lu){
- HCERTSTORE h_store;
- h_store=(HCERTSTORE)_lu->method_data;
-# if defined(OP_ENABLE_ASSERTIONS)
- OP_ALWAYS_TRUE(CertCloseStore(h_store,CERT_CLOSE_STORE_CHECK_FLAG));
-# else
- CertCloseStore(h_store,0);
-# endif
-}
-
-static int op_capi_retrieve_by_subject(X509_LOOKUP *_lu,int _type,
- X509_NAME *_name,X509_OBJECT *_ret){
- X509_OBJECT *obj;
- CRYPTO_w_lock(CRYPTO_LOCK_X509_STORE);
- obj=X509_OBJECT_retrieve_by_subject(_lu->store_ctx->objs,_type,_name);
- CRYPTO_w_unlock(CRYPTO_LOCK_X509_STORE);
- if(obj!=NULL){
- _ret->type=obj->type;
- memcpy(&_ret->data,&obj->data,sizeof(_ret->data));
- return 1;
- }
- return 0;
-}
-
-static int op_capi_get_by_subject(X509_LOOKUP *_lu,int _type,X509_NAME *_name,
- X509_OBJECT *_ret){
- HCERTSTORE h_store;
- if(_name==NULL)return 0;
- if(_name->bytes==NULL||_name->bytes->length<=0||_name->modified){
- if(i2d_X509_NAME(_name,NULL)<0)return 0;
- OP_ASSERT(_name->bytes->length>0);
- }
- h_store=(HCERTSTORE)_lu->method_data;
- switch(_type){
- case X509_LU_X509:{
- CERT_NAME_BLOB find_para;
- PCCERT_CONTEXT cert;
- X509 *x;
- int ret;
- /*Although X509_NAME contains a canon_enc field, that "canonical" [1]
- encoding was just made up by OpenSSL.
- It doesn't correspond to any actual standard, and since it drops the
- initial sequence header, won't be recognized by the Crypto API.
- The assumption here is that CertFindCertificateInStore() will allow any
- appropriate variations in the encoding when it does its comparison.
- This is, however, emphatically not true under Wine, which just compares
- the encodings with memcmp().
- Most of the time things work anyway, though, and there isn't really
- anything we can do to make the situation better.
-
- [1] A "canonical form" is defined as the one where, if you locked 10
- mathematicians in a room and asked them to come up with a
- representation for something, it's the answer that 9 of them would
- give you back.
- I don't think OpenSSL's encoding qualifies.*/
- find_para.cbData=_name->bytes->length;
- find_para.pbData=(unsigned char *)_name->bytes->data;
- cert=CertFindCertificateInStore(h_store,X509_ASN_ENCODING,0,
- CERT_FIND_SUBJECT_NAME,&find_para,NULL);
- if(cert==NULL)return 0;
- x=d2i_X509(NULL,(const unsigned char **)&cert->pbCertEncoded,
- cert->cbCertEncoded);
- CertFreeCertificateContext(cert);
- if(x==NULL)return 0;
- ret=X509_STORE_add_cert(_lu->store_ctx,x);
- X509_free(x);
- if(ret)return op_capi_retrieve_by_subject(_lu,_type,_name,_ret);
- }break;
- case X509_LU_CRL:{
- CERT_INFO cert_info;
- CERT_CONTEXT find_para;
- PCCRL_CONTEXT crl;
- X509_CRL *x;
- int ret;
- ret=op_capi_retrieve_by_subject(_lu,_type,_name,_ret);
- if(ret>0)return ret;
- memset(&cert_info,0,sizeof(cert_info));
- cert_info.Issuer.cbData=_name->bytes->length;
- cert_info.Issuer.pbData=(unsigned char *)_name->bytes->data;
- memset(&find_para,0,sizeof(find_para));
- find_para.pCertInfo=&cert_info;
- crl=CertFindCRLInStore(h_store,0,0,CRL_FIND_ISSUED_BY,&find_para,NULL);
- if(crl==NULL)return 0;
- x=d2i_X509_CRL(NULL,(const unsigned char **)&crl->pbCrlEncoded,
- crl->cbCrlEncoded);
- CertFreeCRLContext(crl);
- if(x==NULL)return 0;
- ret=X509_STORE_add_crl(_lu->store_ctx,x);
- X509_CRL_free(x);
- if(ret)return op_capi_retrieve_by_subject(_lu,_type,_name,_ret);
- }break;
- }
- return 0;
-}
-
-/*This is not const because OpenSSL doesn't allow it, even though it won't
- write to it.*/
-static X509_LOOKUP_METHOD X509_LOOKUP_CAPI={
- "Load Crypto API store into cache",
- op_capi_new,
- op_capi_free,
- NULL,
- NULL,
- NULL,
- op_capi_get_by_subject,
- NULL,
- NULL,
- NULL
-};
-
-int SSL_CTX_set_default_verify_paths_win32(SSL_CTX *_ssl_ctx){
- X509_STORE *store;
- X509_LOOKUP *lu;
- /*We intentionally do not add the normal default paths, as they are usually
- wrong, and are just asking to be used as an exploit vector.*/
- store=SSL_CTX_get_cert_store(_ssl_ctx);
- OP_ASSERT(store!=NULL);
- lu=X509_STORE_add_lookup(store,&X509_LOOKUP_CAPI);
- if(lu==NULL)return 0;
- ERR_clear_error();
- return 1;
-}
-
-#endif
diff --git a/drivers/opus/winerrno.h b/drivers/opus/winerrno.h
deleted file mode 100644
index 32a90b4ee1..0000000000
--- a/drivers/opus/winerrno.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/********************************************************************
- * *
- * THIS FILE IS PART OF THE libopusfile 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 libopusfile SOURCE CODE IS (C) COPYRIGHT 2012 *
- * by the Xiph.Org Foundation and contributors http://www.xiph.org/ *
- * *
- ********************************************************************/
-#if !defined(_opusfile_winerrno_h)
-# define _opusfile_winerrno_h (1)
-
-# include <errno.h>
-# include <winerror.h>
-
-/*These conflict with the MSVC errno.h definitions, but we don't need to use
- the original ones in any file that deals with sockets.
- We could map the WSA errors to the errno.h ones (most of which are only
- available on sufficiently new versions of MSVC), but they aren't ordered the
- same, and given how rarely we actually look at the values, I don't think
- it's worth a lookup table.*/
-# undef EWOULDBLOCK
-# undef EINPROGRESS
-# undef EALREADY
-# undef ENOTSOCK
-# undef EDESTADDRREQ
-# undef EMSGSIZE
-# undef EPROTOTYPE
-# undef ENOPROTOOPT
-# undef EPROTONOSUPPORT
-# undef EOPNOTSUPP
-# undef EAFNOSUPPORT
-# undef EADDRINUSE
-# undef EADDRNOTAVAIL
-# undef ENETDOWN
-# undef ENETUNREACH
-# undef ENETRESET
-# undef ECONNABORTED
-# undef ECONNRESET
-# undef ENOBUFS
-# undef EISCONN
-# undef ENOTCONN
-# undef ETIMEDOUT
-# undef ECONNREFUSED
-# undef ELOOP
-# undef ENAMETOOLONG
-# undef EHOSTUNREACH
-# undef ENOTEMPTY
-
-# define EWOULDBLOCK (WSAEWOULDBLOCK-WSABASEERR)
-# define EINPROGRESS (WSAEINPROGRESS-WSABASEERR)
-# define EALREADY (WSAEALREADY-WSABASEERR)
-# define ENOTSOCK (WSAENOTSOCK-WSABASEERR)
-# define EDESTADDRREQ (WSAEDESTADDRREQ-WSABASEERR)
-# define EMSGSIZE (WSAEMSGSIZE-WSABASEERR)
-# define EPROTOTYPE (WSAEPROTOTYPE-WSABASEERR)
-# define ENOPROTOOPT (WSAENOPROTOOPT-WSABASEERR)
-# define EPROTONOSUPPORT (WSAEPROTONOSUPPORT-WSABASEERR)
-# define ESOCKTNOSUPPORT (WSAESOCKTNOSUPPORT-WSABASEERR)
-# define EOPNOTSUPP (WSAEOPNOTSUPP-WSABASEERR)
-# define EPFNOSUPPORT (WSAEPFNOSUPPORT-WSABASEERR)
-# define EAFNOSUPPORT (WSAEAFNOSUPPORT-WSABASEERR)
-# define EADDRINUSE (WSAEADDRINUSE-WSABASEERR)
-# define EADDRNOTAVAIL (WSAEADDRNOTAVAIL-WSABASEERR)
-# define ENETDOWN (WSAENETDOWN-WSABASEERR)
-# define ENETUNREACH (WSAENETUNREACH-WSABASEERR)
-# define ENETRESET (WSAENETRESET-WSABASEERR)
-# define ECONNABORTED (WSAECONNABORTED-WSABASEERR)
-# define ECONNRESET (WSAECONNRESET-WSABASEERR)
-# define ENOBUFS (WSAENOBUFS-WSABASEERR)
-# define EISCONN (WSAEISCONN-WSABASEERR)
-# define ENOTCONN (WSAENOTCONN-WSABASEERR)
-# define ESHUTDOWN (WSAESHUTDOWN-WSABASEERR)
-# define ETOOMANYREFS (WSAETOOMANYREFS-WSABASEERR)
-# define ETIMEDOUT (WSAETIMEDOUT-WSABASEERR)
-# define ECONNREFUSED (WSAECONNREFUSED-WSABASEERR)
-# define ELOOP (WSAELOOP-WSABASEERR)
-# define ENAMETOOLONG (WSAENAMETOOLONG-WSABASEERR)
-# define EHOSTDOWN (WSAEHOSTDOWN-WSABASEERR)
-# define EHOSTUNREACH (WSAEHOSTUNREACH-WSABASEERR)
-# define ENOTEMPTY (WSAENOTEMPTY-WSABASEERR)
-# define EPROCLIM (WSAEPROCLIM-WSABASEERR)
-# define EUSERS (WSAEUSERS-WSABASEERR)
-# define EDQUOT (WSAEDQUOT-WSABASEERR)
-# define ESTALE (WSAESTALE-WSABASEERR)
-# define EREMOTE (WSAEREMOTE-WSABASEERR)
-
-#endif
diff --git a/drivers/register_driver_types.cpp b/drivers/register_driver_types.cpp
index cd4fcd18f2..14af9ac1a6 100644
--- a/drivers/register_driver_types.cpp
+++ b/drivers/register_driver_types.cpp
@@ -45,18 +45,6 @@
#include "platform/windows/export/export.h"
#endif
-#ifdef TREMOR_ENABLED
-#include "teora/audio_stream_ogg.h"
-#endif
-
-#ifdef VORBIS_ENABLED
-#include "vorbis/audio_stream_ogg_vorbis.h"
-#endif
-
-#ifdef OPUS_ENABLED
-#include "opus/audio_stream_opus.h"
-#endif
-
#ifdef THEORA_ENABLED
#include "theora/video_stream_theora.h"
#endif
@@ -71,18 +59,6 @@
static ImageLoaderPNG *image_loader_png=NULL;
static ResourceSaverPNG *resource_saver_png=NULL;
-#ifdef TREMOR_ENABLED
-static ResourceFormatLoaderAudioStreamOGG *vorbis_stream_loader=NULL;
-#endif
-
-#ifdef VORBIS_ENABLED
-static ResourceFormatLoaderAudioStreamOGGVorbis *vorbis_stream_loader=NULL;
-#endif
-
-#ifdef OPUS_ENABLED
-static ResourceFormatLoaderAudioStreamOpus *opus_stream_loader=NULL;
-#endif
-
#ifdef THEORA_ENABLED
static ResourceFormatLoaderVideoStreamTheora* theora_stream_loader = NULL;
#endif
@@ -118,24 +94,6 @@ void unregister_core_driver_types() {
void register_driver_types() {
-#ifdef TREMOR_ENABLED
- vorbis_stream_loader=memnew( ResourceFormatLoaderAudioStreamOGG );
- ResourceLoader::add_resource_format_loader(vorbis_stream_loader );
- ObjectTypeDB::register_type<AudioStreamOGG>();
-#endif
-
-#ifdef VORBIS_ENABLED
- vorbis_stream_loader=memnew( ResourceFormatLoaderAudioStreamOGGVorbis );
- ResourceLoader::add_resource_format_loader(vorbis_stream_loader );
- ObjectTypeDB::register_type<AudioStreamOGGVorbis>();
-#endif
-
-#ifdef OPUS_ENABLED
- opus_stream_loader=memnew( ResourceFormatLoaderAudioStreamOpus );
- ResourceLoader::add_resource_format_loader( opus_stream_loader );
- ObjectTypeDB::register_type<AudioStreamOpus>();
-#endif
-
#ifdef TOOLS_ENABLED
Geometry::_decompose_func=b2d_decompose;
@@ -174,19 +132,6 @@ void register_driver_types() {
void unregister_driver_types() {
-
-#ifdef TREMOR_ENABLED
- memdelete( vorbis_stream_loader );
-#endif
-
-#ifdef VORBIS_ENABLED
- memdelete( vorbis_stream_loader );
-#endif
-
-#ifdef OPUS_ENABLED
- memdelete( opus_stream_loader );
-#endif
-
#ifdef THEORA_ENABLED
memdelete (theora_stream_loader);
#endif
diff --git a/drivers/vorbis/COPYING b/drivers/vorbis/COPYING
deleted file mode 100644
index 8f1d18cc2b..0000000000
--- a/drivers/vorbis/COPYING
+++ /dev/null
@@ -1,28 +0,0 @@
-Copyright (c) 2002-2015 Xiph.org Foundation
-
-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.
diff --git a/drivers/vorbis/SCsub b/drivers/vorbis/SCsub
deleted file mode 100644
index 4afafcc4ba..0000000000
--- a/drivers/vorbis/SCsub
+++ /dev/null
@@ -1,36 +0,0 @@
-Import('env')
-
-sources = [
- "vorbis/audio_stream_ogg_vorbis.cpp",
-]
-
-sources_lib = [
- #"vorbis/analysis.c",
- #"vorbis/barkmel.c",
- "vorbis/bitrate.c",
- "vorbis/block.c",
- "vorbis/codebook.c",
- "vorbis/envelope.c",
- "vorbis/floor0.c",
- "vorbis/floor1.c",
- "vorbis/info.c",
- "vorbis/lookup.c",
- "vorbis/lpc.c",
- "vorbis/lsp.c",
- "vorbis/mapping0.c",
- "vorbis/mdct.c",
- "vorbis/psy.c",
- #"vorbis/psytune.c",
- "vorbis/registry.c",
- "vorbis/res0.c",
- "vorbis/sharedbook.c",
- "vorbis/smallft.c",
- "vorbis/synthesis.c",
- #"vorbis/tone.c",
- #"vorbis/vorbisenc.c",
- "vorbis/vorbisfile.c",
- "vorbis/window.c",
-]
-
-env.drivers_sources += sources
-env.drivers_sources += sources_lib
diff --git a/drivers/vorbis/analysis.c b/drivers/vorbis/analysis.c
deleted file mode 100644
index 01aa6f30db..0000000000
--- a/drivers/vorbis/analysis.c
+++ /dev/null
@@ -1,120 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: single-block PCM analysis mode dispatch
- last mod: $Id: analysis.c 16226 2009-07-08 06:43:49Z xiphmont $
-
- ********************************************************************/
-
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "scales.h"
-#include "os.h"
-#include "misc.h"
-
-/* decides between modes, dispatches to the appropriate mapping. */
-int vorbis_analysis(vorbis_block *vb, ogg_packet *op){
- int ret,i;
- vorbis_block_internal *vbi=vb->internal;
-
- vb->glue_bits=0;
- vb->time_bits=0;
- vb->floor_bits=0;
- vb->res_bits=0;
-
- /* first things first. Make sure encode is ready */
- for(i=0;i<PACKETBLOBS;i++)
- oggpack_reset(vbi->packetblob[i]);
-
- /* we only have one mapping type (0), and we let the mapping code
- itself figure out what soft mode to use. This allows easier
- bitrate management */
-
- if((ret=_mapping_P[0]->forward(vb)))
- return(ret);
-
- if(op){
- if(vorbis_bitrate_managed(vb))
- /* The app is using a bitmanaged mode... but not using the
- bitrate management interface. */
- return(OV_EINVAL);
-
- op->packet=oggpack_get_buffer(&vb->opb);
- op->bytes=oggpack_bytes(&vb->opb);
- op->b_o_s=0;
- op->e_o_s=vb->eofflag;
- op->granulepos=vb->granulepos;
- op->packetno=vb->sequence; /* for sake of completeness */
- }
- return(0);
-}
-
-#ifdef ANALYSIS
-int analysis_noisy=1;
-
-/* there was no great place to put this.... */
-void _analysis_output_always(char *base,int i,float *v,int n,int bark,int dB,ogg_int64_t off){
- 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<n;j++){
- if(bark){
- float b=toBARK((4000.f*j/n)+.25);
- fprintf(of,"%f ",b);
- }else
- if(off!=0)
- fprintf(of,"%f ",(double)(j+off)/8000.);
- else
- fprintf(of,"%f ",(double)j);
-
- if(dB){
- float val;
- if(v[j]==0.)
- val=-140.;
- else
- val=todB(v+j);
- fprintf(of,"%f\n",val);
- }else{
- fprintf(of,"%f\n",v[j]);
- }
- }
- fclose(of);
-}
-
-void _analysis_output(char *base,int i,float *v,int n,int bark,int dB,
- ogg_int64_t off){
- if(analysis_noisy)_analysis_output_always(base,i,v,n,bark,dB,off);
-}
-
-#endif
-
-
-
-
-
-
-
-
-
-
-
diff --git a/drivers/vorbis/audio_stream_ogg_vorbis.cpp b/drivers/vorbis/audio_stream_ogg_vorbis.cpp
deleted file mode 100644
index 4ce7940a01..0000000000
--- a/drivers/vorbis/audio_stream_ogg_vorbis.cpp
+++ /dev/null
@@ -1,430 +0,0 @@
-/*************************************************************************/
-/* audio_stream_ogg_vorbis.cpp */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
-/* */
-/* 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#include "audio_stream_ogg_vorbis.h"
-
-
-
-size_t AudioStreamPlaybackOGGVorbis::_ov_read_func(void *p_dst,size_t p_data, size_t p_count, void *_f) {
-
- //printf("read to %p, %i bytes, %i nmemb, %p\n",p_dst,p_data,p_count,_f);
- FileAccess *fa=(FileAccess*)_f;
- size_t read_total = p_data*p_count;
-
- if (fa->eof_reached())
- return 0;
-
- uint8_t *dst=(uint8_t*)p_dst;
-
- int read = fa->get_buffer(dst, read_total);
-
- return read;
-}
-
-int AudioStreamPlaybackOGGVorbis::_ov_seek_func(void *_f,ogg_int64_t offs, int whence) {
-
- //printf("seek to %p, offs %i, whence %i\n",_f,(int)offs,whence);
-
-#ifdef SEEK_SET
- //printf("seek set defined\n");
- FileAccess *fa=(FileAccess*)_f;
-
- if (whence==SEEK_SET) {
-
- fa->seek(offs);
- } else if (whence==SEEK_CUR) {
-
- fa->seek(fa->get_pos()+offs);
- } else if (whence==SEEK_END) {
-
- fa->seek_end(offs);
- } else {
-
- ERR_PRINT("BUG, wtf was whence set to?\n");
- }
- int ret=fa->eof_reached()?-1:0;
- //printf("returning %i\n",ret);
- return ret;
-
-#else
- return -1; // no seeking
-#endif
-
-}
-int AudioStreamPlaybackOGGVorbis::_ov_close_func(void *_f) {
-
-// printf("close %p\n",_f);
- if (!_f)
- return 0;
- FileAccess *fa=(FileAccess*)_f;
- if (fa->is_open())
- fa->close();
- return 0;
-}
-long AudioStreamPlaybackOGGVorbis::_ov_tell_func(void *_f) {
-
- //printf("close %p\n",_f);
-
- FileAccess *fa=(FileAccess*)_f;
- return fa->get_pos();
-}
-
-
-
-int AudioStreamPlaybackOGGVorbis::mix(int16_t* p_bufer,int p_frames) {
-
- if (!playing)
- return 0;
-
- int total=p_frames;
- while (true) {
-
- int todo = p_frames;
-
- if (todo==0 || todo<MIN_MIX) {
- break;
- }
-
- //printf("to mix %i - mix me %i bytes\n",to_mix,to_mix*stream_channels*sizeof(int16_t));
-
- #ifdef BIG_ENDIAN_ENABLED
- long ret=ov_read(&vf,(char*)p_bufer,todo*stream_channels*sizeof(int16_t), 1, 2, 1, &current_section);
- #else
- long ret=ov_read(&vf,(char*)p_bufer,todo*stream_channels*sizeof(int16_t), 0, 2, 1, &current_section);
- #endif
-
- if (ret<0) {
-
- playing = false;
- ERR_EXPLAIN("Error reading OGG Vorbis File: "+file);
- ERR_BREAK(ret<0);
- } else if (ret==0) { // end of song, reload?
-
- ov_clear(&vf);
-
- _close_file();
-
- if (!has_loop()) {
-
- playing=false;
- repeats=1;
- break;
- }
-
- f=FileAccess::open(file,FileAccess::READ);
-
- int errv = ov_open_callbacks(f,&vf,NULL,0,_ov_callbacks);
- if (errv!=0) {
- playing=false;
- break;; // :(
- }
-
- if (loop_restart_time) {
- bool ok = ov_time_seek(&vf,loop_restart_time)==0;
- if (!ok) {
- playing=false;
- //ERR_EXPLAIN("loop restart time rejected");
- ERR_PRINT("loop restart time rejected")
- }
-
- frames_mixed=stream_srate*loop_restart_time;
- } else {
-
- frames_mixed=0;
- }
- repeats++;
- continue;
-
- }
-
- ret/=stream_channels;
- ret/=sizeof(int16_t);
-
- frames_mixed+=ret;
-
- p_bufer+=ret*stream_channels;
- p_frames-=ret;
-
- }
-
- return total-p_frames;
-
-}
-
-
-
-void AudioStreamPlaybackOGGVorbis::play(float p_from) {
-
- if (playing)
- stop();
-
- if (_load_stream()!=OK)
- return;
-
-
- frames_mixed=0;
- playing=true;
- if (p_from>0) {
- seek_pos(p_from);
- }
-}
-
-void AudioStreamPlaybackOGGVorbis::_close_file() {
-
- if (f) {
-
- memdelete(f);
- f=NULL;
- }
-}
-
-bool AudioStreamPlaybackOGGVorbis::is_playing() const {
- return playing;
-}
-void AudioStreamPlaybackOGGVorbis::stop() {
-
- _clear_stream();
- playing=false;
- //_clear();
-}
-
-
-
-float AudioStreamPlaybackOGGVorbis::get_pos() const {
-
- int32_t frames = int32_t(frames_mixed);
- if (frames < 0)
- frames=0;
- return double(frames) / stream_srate;
-}
-
-void AudioStreamPlaybackOGGVorbis::seek_pos(float p_time) {
-
-
-
- if (!playing)
- return;
- bool ok = ov_time_seek(&vf,p_time)==0;
- ERR_FAIL_COND(!ok);
- frames_mixed=stream_srate*p_time;
-}
-
-String AudioStreamPlaybackOGGVorbis::get_stream_name() const {
-
- return "";
-}
-
-void AudioStreamPlaybackOGGVorbis::set_loop(bool p_enable) {
-
- loops=p_enable;
-}
-
-bool AudioStreamPlaybackOGGVorbis::has_loop() const {
-
- return loops;
-}
-
-int AudioStreamPlaybackOGGVorbis::get_loop_count() const {
- return repeats;
-}
-
-
-Error AudioStreamPlaybackOGGVorbis::set_file(const String& p_file) {
-
- file=p_file;
- stream_valid=false;
- Error err;
- f=FileAccess::open(file,FileAccess::READ,&err);
-
- if (err) {
- ERR_FAIL_COND_V( err, err );
- }
-
- int errv = ov_open_callbacks(f,&vf,NULL,0,_ov_callbacks);
- switch(errv) {
-
- case OV_EREAD: { // - A read from media returned an error.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_CANT_READ );
- } break;
- case OV_EVERSION: // - Vorbis version mismatch.
- case OV_ENOTVORBIS: { // - Bitstream is not Vorbis data.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_UNRECOGNIZED );
- } break;
- case OV_EBADHEADER: { // - Invalid Vorbis bitstream header.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_CORRUPT );
- } break;
- case OV_EFAULT: { // - Internal logic fault; indicates a bug or heap/stack corruption.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_BUG );
- } break;
- }
- const vorbis_info *vinfo=ov_info(&vf,-1);
- stream_channels=vinfo->channels;
- stream_srate=vinfo->rate;
- length = ov_time_total(&vf,-1);
- ov_clear(&vf);
- memdelete(f);
- f=NULL;
- stream_valid=true;
-
-
- return OK;
-}
-
-Error AudioStreamPlaybackOGGVorbis::_load_stream() {
-
- ERR_FAIL_COND_V(!stream_valid,ERR_UNCONFIGURED);
-
- _clear_stream();
- if (file=="")
- return ERR_INVALID_DATA;
-
- Error err;
- f=FileAccess::open(file,FileAccess::READ,&err);
- if (err) {
- ERR_FAIL_COND_V( err, err );
- }
-
- int errv = ov_open_callbacks(f,&vf,NULL,0,_ov_callbacks);
- switch(errv) {
-
- case OV_EREAD: { // - A read from media returned an error.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_CANT_READ );
- } break;
- case OV_EVERSION: // - Vorbis version mismatch.
- case OV_ENOTVORBIS: { // - Bitstream is not Vorbis data.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_UNRECOGNIZED );
- } break;
- case OV_EBADHEADER: { // - Invalid Vorbis bitstream header.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_FILE_CORRUPT );
- } break;
- case OV_EFAULT: { // - Internal logic fault; indicates a bug or heap/stack corruption.
- memdelete(f); f=NULL;
- ERR_FAIL_V( ERR_BUG );
- } break;
- }
- repeats=0;
- stream_loaded=true;
-
-
- return OK;
-}
-
-
-float AudioStreamPlaybackOGGVorbis::get_length() const {
-
- if (!stream_loaded) {
- if (const_cast<AudioStreamPlaybackOGGVorbis*>(this)->_load_stream()!=OK)
- return 0;
- }
- return length;
-}
-
-void AudioStreamPlaybackOGGVorbis::_clear_stream() {
-
- if (!stream_loaded)
- return;
-
- ov_clear(&vf);
- _close_file();
-
- stream_loaded=false;
- //stream_channels=1;
- playing=false;
-}
-
-void AudioStreamPlaybackOGGVorbis::set_paused(bool p_paused) {
-
- paused=p_paused;
-}
-
-bool AudioStreamPlaybackOGGVorbis::is_paused(bool p_paused) const {
-
- return paused;
-}
-
-
-AudioStreamPlaybackOGGVorbis::AudioStreamPlaybackOGGVorbis() {
-
- loops=false;
- playing=false;
- _ov_callbacks.read_func=_ov_read_func;
- _ov_callbacks.seek_func=_ov_seek_func;
- _ov_callbacks.close_func=_ov_close_func;
- _ov_callbacks.tell_func=_ov_tell_func;
- f = NULL;
- stream_loaded=false;
- stream_valid=false;
- repeats=0;
- paused=true;
- stream_channels=0;
- stream_srate=0;
- current_section=0;
- length=0;
- loop_restart_time=0;
-}
-
-
-AudioStreamPlaybackOGGVorbis::~AudioStreamPlaybackOGGVorbis() {
-
- _clear_stream();
-
-}
-
-
-
-RES ResourceFormatLoaderAudioStreamOGGVorbis::load(const String &p_path, const String& p_original_path, Error *r_error) {
- if (r_error)
- *r_error=OK;
-
- AudioStreamOGGVorbis *ogg_stream = memnew(AudioStreamOGGVorbis);
- ogg_stream->set_file(p_path);
- return Ref<AudioStreamOGGVorbis>(ogg_stream);
-}
-
-void ResourceFormatLoaderAudioStreamOGGVorbis::get_recognized_extensions(List<String> *p_extensions) const {
-
- p_extensions->push_back("ogg");
-}
-String ResourceFormatLoaderAudioStreamOGGVorbis::get_resource_type(const String &p_path) const {
-
- if (p_path.extension().to_lower()=="ogg")
- return "AudioStreamOGGVorbis";
- return "";
-}
-
-bool ResourceFormatLoaderAudioStreamOGGVorbis::handles_type(const String& p_type) const {
- return (p_type=="AudioStream" || p_type=="AudioStreamOGG" || p_type=="AudioStreamOGGVorbis");
-}
-
diff --git a/drivers/vorbis/audio_stream_ogg_vorbis.h b/drivers/vorbis/audio_stream_ogg_vorbis.h
deleted file mode 100644
index bb4d521c1e..0000000000
--- a/drivers/vorbis/audio_stream_ogg_vorbis.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*************************************************************************/
-/* audio_stream_ogg_vorbis.h */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
-/* */
-/* 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-#ifndef AUDIO_STREAM_OGG_VORBIS_H
-#define AUDIO_STREAM_OGG_VORBIS_H
-
-#include "scene/resources/audio_stream.h"
-#include "vorbis/vorbisfile.h"
-#include "os/file_access.h"
-#include "io/resource_loader.h"
-#include "os/thread_safe.h"
-
-
-class AudioStreamPlaybackOGGVorbis : public AudioStreamPlayback {
-
- OBJ_TYPE(AudioStreamPlaybackOGGVorbis,AudioStreamPlayback);
-
- enum {
- MIN_MIX=1024
- };
-
- FileAccess *f;
-
- ov_callbacks _ov_callbacks;
- float length;
- static size_t _ov_read_func(void *p_dst,size_t p_data, size_t p_count, void *_f);
- static int _ov_seek_func(void *_f,ogg_int64_t offs, int whence);
- static int _ov_close_func(void *_f);
- static long _ov_tell_func(void *_f);
-
- String file;
- int64_t frames_mixed;
-
- bool stream_loaded;
- volatile bool playing;
- OggVorbis_File vf;
- int stream_channels;
- int stream_srate;
- int current_section;
-
-
- bool paused;
- bool loops;
- int repeats;
-
- Error _load_stream();
- void _clear_stream();
- void _close_file();
-
- bool stream_valid;
- float loop_restart_time;
-
-
-public:
-
-
- Error set_file(const String& p_file);
-
- virtual void play(float p_from=0);
- virtual void stop();
- virtual bool is_playing() const;
-
- virtual void set_loop_restart_time(float p_time) { loop_restart_time=p_time; }
-
- virtual void set_paused(bool p_paused);
- virtual bool is_paused(bool p_paused) const;
-
- virtual void set_loop(bool p_enable);
- virtual bool has_loop() const;
-
- virtual float get_length() const;
-
- virtual String get_stream_name() const;
-
- virtual int get_loop_count() const;
-
- virtual float get_pos() const;
- virtual void seek_pos(float p_time);
-
- virtual int get_channels() const { return stream_channels; }
- virtual int get_mix_rate() const { return stream_srate; }
-
- virtual int get_minimum_buffer_size() const { return 0; }
- virtual int mix(int16_t* p_bufer,int p_frames);
-
- AudioStreamPlaybackOGGVorbis();
- ~AudioStreamPlaybackOGGVorbis();
-};
-
-
-class AudioStreamOGGVorbis : public AudioStream {
-
- OBJ_TYPE(AudioStreamOGGVorbis,AudioStream);
-
- String file;
-public:
-
- Ref<AudioStreamPlayback> instance_playback() {
- Ref<AudioStreamPlaybackOGGVorbis> pb = memnew( AudioStreamPlaybackOGGVorbis );
- pb->set_file(file);
- return pb;
- }
-
- void set_file(const String& p_file) { file=p_file; }
-
-};
-
-class ResourceFormatLoaderAudioStreamOGGVorbis : public ResourceFormatLoader {
-public:
- virtual RES load(const String &p_path,const String& p_original_path="",Error *r_error=NULL);
- virtual void get_recognized_extensions(List<String> *p_extensions) const;
- virtual bool handles_type(const String& p_type) const;
- virtual String get_resource_type(const String &p_path) const;
-};
-
-
-#endif // AUDIO_STREAM_OGG_H
diff --git a/drivers/vorbis/backends.h b/drivers/vorbis/backends.h
deleted file mode 100644
index ff5bcc95fe..0000000000
--- a/drivers/vorbis/backends.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: libvorbis backend and mapping structures; needed for
- static mode headers
- last mod: $Id: backends.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-/* this is exposed up here because we need it for static modes.
- Lookups for each backend aren't exposed because there's no reason
- to do so */
-
-#ifndef _vorbis_backend_h_
-#define _vorbis_backend_h_
-
-#include "codec_internal.h"
-
-/* this would all be simpler/shorter with templates, but.... */
-/* Floor backend generic *****************************************/
-typedef struct{
- void (*pack) (vorbis_info_floor *,oggpack_buffer *);
- vorbis_info_floor *(*unpack)(vorbis_info *,oggpack_buffer *);
- vorbis_look_floor *(*look) (vorbis_dsp_state *,vorbis_info_floor *);
- void (*free_info) (vorbis_info_floor *);
- void (*free_look) (vorbis_look_floor *);
- void *(*inverse1) (struct vorbis_block *,vorbis_look_floor *);
- int (*inverse2) (struct vorbis_block *,vorbis_look_floor *,
- void *buffer,float *);
-} vorbis_func_floor;
-
-typedef struct{
- int order;
- long rate;
- long barkmap;
-
- int ampbits;
- int ampdB;
-
- int numbooks; /* <= 16 */
- int books[16];
-
- float lessthan; /* encode-only config setting hacks for libvorbis */
- float greaterthan; /* encode-only config setting hacks for libvorbis */
-
-} vorbis_info_floor0;
-
-
-#define VIF_POSIT 63
-#define VIF_CLASS 16
-#define VIF_PARTS 31
-typedef struct{
- int partitions; /* 0 to 31 */
- int partitionclass[VIF_PARTS]; /* 0 to 15 */
-
- int class_dim[VIF_CLASS]; /* 1 to 8 */
- int class_subs[VIF_CLASS]; /* 0,1,2,3 (bits: 1<<n poss) */
- int class_book[VIF_CLASS]; /* subs ^ dim entries */
- int class_subbook[VIF_CLASS][8]; /* [VIF_CLASS][subs] */
-
-
- int mult; /* 1 2 3 or 4 */
- int postlist[VIF_POSIT+2]; /* first two implicit */
-
-
- /* encode side analysis parameters */
- float maxover;
- float maxunder;
- float maxerr;
-
- float twofitweight;
- float twofitatten;
-
- int n;
-
-} vorbis_info_floor1;
-
-/* Residue backend generic *****************************************/
-typedef struct{
- void (*pack) (vorbis_info_residue *,oggpack_buffer *);
- vorbis_info_residue *(*unpack)(vorbis_info *,oggpack_buffer *);
- vorbis_look_residue *(*look) (vorbis_dsp_state *,
- vorbis_info_residue *);
- void (*free_info) (vorbis_info_residue *);
- void (*free_look) (vorbis_look_residue *);
- long **(*class) (struct vorbis_block *,vorbis_look_residue *,
- int **,int *,int);
- int (*forward) (oggpack_buffer *,struct vorbis_block *,
- vorbis_look_residue *,
- int **,int *,int,long **,int);
- int (*inverse) (struct vorbis_block *,vorbis_look_residue *,
- float **,int *,int);
-} vorbis_func_residue;
-
-typedef struct vorbis_info_residue0{
-/* block-partitioned VQ coded straight residue */
- long begin;
- long end;
-
- /* first stage (lossless partitioning) */
- int grouping; /* group n vectors per partition */
- int partitions; /* possible codebooks for a partition */
- int partvals; /* partitions ^ groupbook dim */
- int groupbook; /* huffbook for partitioning */
- int secondstages[64]; /* expanded out to pointers in lookup */
- int booklist[512]; /* list of second stage books */
-
- const int classmetric1[64];
- const int classmetric2[64];
-} vorbis_info_residue0;
-
-/* Mapping backend generic *****************************************/
-typedef struct{
- void (*pack) (vorbis_info *,vorbis_info_mapping *,
- oggpack_buffer *);
- vorbis_info_mapping *(*unpack)(vorbis_info *,oggpack_buffer *);
- void (*free_info) (vorbis_info_mapping *);
- int (*forward) (struct vorbis_block *vb);
- int (*inverse) (struct vorbis_block *vb,vorbis_info_mapping *);
-} vorbis_func_mapping;
-
-typedef struct vorbis_info_mapping0{
- int submaps; /* <= 16 */
- int chmuxlist[256]; /* up to 256 channels in a Vorbis stream */
-
- int floorsubmap[16]; /* [mux] submap to floors */
- int residuesubmap[16]; /* [mux] submap to residue */
-
- int coupling_steps;
- int coupling_mag[256];
- int coupling_ang[256];
-
-} vorbis_info_mapping0;
-
-#endif
diff --git a/drivers/vorbis/barkmel.c b/drivers/vorbis/barkmel.c
deleted file mode 100644
index 37b6c4c7ba..0000000000
--- a/drivers/vorbis/barkmel.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: bark scale utility
- last mod: $Id: barkmel.c 19454 2015-03-02 22:39:28Z xiphmont $
-
- ********************************************************************/
-
-#include <stdio.h>
-#include "scales.h"
-int main(){
- int i;
- double rate;
- for(i=64;i<32000;i*=2){
- rate=48000.f;
- fprintf(stderr,"rate=%gHz, block=%d, f(1)=%.2gHz bark(1)=%.2g (of %.2g)\n",
- rate,i,rate/2 / (i/2),toBARK(rate/2 /(i/2)),toBARK(rate/2));
-
- rate=44100.f;
- fprintf(stderr,"rate=%gHz, block=%d, f(1)=%.2gHz bark(1)=%.2g (of %.2g)\n",
- rate,i,rate/2 / (i/2),toBARK(rate/2 /(i/2)),toBARK(rate/2));
-
- rate=32000.f;
- fprintf(stderr,"rate=%gHz, block=%d, f(1)=%.2gHz bark(1)=%.2g (of %.2g)\n",
- rate,i,rate/2 / (i/2),toBARK(rate/2 /(i/2)),toBARK(rate/2));
-
- rate=22050.f;
- fprintf(stderr,"rate=%gHz, block=%d, f(1)=%.2gHz bark(1)=%.2g (of %.2g)\n",
- rate,i,rate/2 / (i/2),toBARK(rate/2 /(i/2)),toBARK(rate/2));
-
- rate=16000.f;
- fprintf(stderr,"rate=%gHz, block=%d, f(1)=%.2gHz bark(1)=%.2g (of %.2g)\n",
- rate,i,rate/2 / (i/2),toBARK(rate/2 /(i/2)),toBARK(rate/2));
-
- rate=11025.f;
- fprintf(stderr,"rate=%gHz, block=%d, f(1)=%.2gHz bark(1)=%.2g (of %.2g)\n",
- rate,i,rate/2 / (i/2),toBARK(rate/2 /(i/2)),toBARK(rate/2));
-
- rate=8000.f;
- fprintf(stderr,"rate=%gHz, block=%d, f(1)=%.2gHz bark(1)=%.2g (of %.2g)\n\n",
- rate,i,rate/2 / (i/2),toBARK(rate/2 /(i/2)),toBARK(rate/2));
-
-
- }
- {
- float i;
- int j;
- for(i=0.,j=0;i<28;i+=1,j++){
- fprintf(stderr,"(%d) bark=%f %gHz (%d of 128)\n",
- j,i,fromBARK(i),(int)(fromBARK(i)/22050.*128.));
- }
- }
- return(0);
-}
-
diff --git a/drivers/vorbis/bitrate.c b/drivers/vorbis/bitrate.c
deleted file mode 100644
index 3a71b1dc23..0000000000
--- a/drivers/vorbis/bitrate.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: bitrate tracking and management
- last mod: $Id: bitrate.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "os.h"
-#include "misc.h"
-#include "bitrate.h"
-
-/* compute bitrate tracking setup */
-void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bm){
- codec_setup_info *ci=vi->codec_setup;
- bitrate_manager_info *bi=&ci->bi;
-
- memset(bm,0,sizeof(*bm));
-
- if(bi && (bi->reservoir_bits>0)){
- long ratesamples=vi->rate;
- int halfsamples=ci->blocksizes[0]>>1;
-
- bm->short_per_long=ci->blocksizes[1]/ci->blocksizes[0];
- bm->managed=1;
-
- bm->avg_bitsper= rint(1.*bi->avg_rate*halfsamples/ratesamples);
- bm->min_bitsper= rint(1.*bi->min_rate*halfsamples/ratesamples);
- bm->max_bitsper= rint(1.*bi->max_rate*halfsamples/ratesamples);
-
- bm->avgfloat=PACKETBLOBS/2;
-
- /* not a necessary fix, but one that leads to a more balanced
- typical initialization */
- {
- long desired_fill=bi->reservoir_bits*bi->reservoir_bias;
- bm->minmax_reservoir=desired_fill;
- bm->avg_reservoir=desired_fill;
- }
-
- }
-}
-
-void vorbis_bitrate_clear(bitrate_manager_state *bm){
- memset(bm,0,sizeof(*bm));
- return;
-}
-
-int vorbis_bitrate_managed(vorbis_block *vb){
- vorbis_dsp_state *vd=vb->vd;
- private_state *b=vd->backend_state;
- bitrate_manager_state *bm=&b->bms;
-
- if(bm && bm->managed)return(1);
- return(0);
-}
-
-/* finish taking in the block we just processed */
-int vorbis_bitrate_addblock(vorbis_block *vb){
- vorbis_block_internal *vbi=vb->internal;
- vorbis_dsp_state *vd=vb->vd;
- private_state *b=vd->backend_state;
- bitrate_manager_state *bm=&b->bms;
- vorbis_info *vi=vd->vi;
- codec_setup_info *ci=vi->codec_setup;
- bitrate_manager_info *bi=&ci->bi;
-
- int choice=rint(bm->avgfloat);
- long this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
- long min_target_bits=(vb->W?bm->min_bitsper*bm->short_per_long:bm->min_bitsper);
- long max_target_bits=(vb->W?bm->max_bitsper*bm->short_per_long:bm->max_bitsper);
- int samples=ci->blocksizes[vb->W]>>1;
- long desired_fill=bi->reservoir_bits*bi->reservoir_bias;
- if(!bm->managed){
- /* not a bitrate managed stream, but for API simplicity, we'll
- buffer the packet to keep the code path clean */
-
- if(bm->vb)return(-1); /* one has been submitted without
- being claimed */
- bm->vb=vb;
- return(0);
- }
-
- bm->vb=vb;
-
- /* look ahead for avg floater */
- if(bm->avg_bitsper>0){
- double slew=0.;
- long avg_target_bits=(vb->W?bm->avg_bitsper*bm->short_per_long:bm->avg_bitsper);
- double slewlimit= 15./bi->slew_damp;
-
- /* choosing a new floater:
- if we're over target, we slew down
- if we're under target, we slew up
-
- choose slew as follows: look through packetblobs of this frame
- and set slew as the first in the appropriate direction that
- gives us the slew we want. This may mean no slew if delta is
- already favorable.
-
- Then limit slew to slew max */
-
- if(bm->avg_reservoir+(this_bits-avg_target_bits)>desired_fill){
- while(choice>0 && this_bits>avg_target_bits &&
- bm->avg_reservoir+(this_bits-avg_target_bits)>desired_fill){
- choice--;
- this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
- }
- }else if(bm->avg_reservoir+(this_bits-avg_target_bits)<desired_fill){
- while(choice+1<PACKETBLOBS && this_bits<avg_target_bits &&
- bm->avg_reservoir+(this_bits-avg_target_bits)<desired_fill){
- choice++;
- this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
- }
- }
-
- slew=rint(choice-bm->avgfloat)/samples*vi->rate;
- if(slew<-slewlimit)slew=-slewlimit;
- if(slew>slewlimit)slew=slewlimit;
- choice=rint(bm->avgfloat+= slew/vi->rate*samples);
- this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
- }
-
-
-
- /* enforce min(if used) on the current floater (if used) */
- if(bm->min_bitsper>0){
- /* do we need to force the bitrate up? */
- if(this_bits<min_target_bits){
- while(bm->minmax_reservoir-(min_target_bits-this_bits)<0){
- choice++;
- if(choice>=PACKETBLOBS)break;
- this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
- }
- }
- }
-
- /* enforce max (if used) on the current floater (if used) */
- if(bm->max_bitsper>0){
- /* do we need to force the bitrate down? */
- if(this_bits>max_target_bits){
- while(bm->minmax_reservoir+(this_bits-max_target_bits)>bi->reservoir_bits){
- choice--;
- if(choice<0)break;
- this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
- }
- }
- }
-
- /* Choice of packetblobs now made based on floater, and min/max
- requirements. Now boundary check extreme choices */
-
- if(choice<0){
- /* choosing a smaller packetblob is insufficient to trim bitrate.
- frame will need to be truncated */
- long maxsize=(max_target_bits+(bi->reservoir_bits-bm->minmax_reservoir))/8;
- bm->choice=choice=0;
-
- if(oggpack_bytes(vbi->packetblob[choice])>maxsize){
-
- oggpack_writetrunc(vbi->packetblob[choice],maxsize*8);
- this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
- }
- }else{
- long minsize=(min_target_bits-bm->minmax_reservoir+7)/8;
- if(choice>=PACKETBLOBS)
- choice=PACKETBLOBS-1;
-
- bm->choice=choice;
-
- /* prop up bitrate according to demand. pad this frame out with zeroes */
- minsize-=oggpack_bytes(vbi->packetblob[choice]);
- while(minsize-->0)oggpack_write(vbi->packetblob[choice],0,8);
- this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
-
- }
-
- /* now we have the final packet and the final packet size. Update statistics */
- /* min and max reservoir */
- if(bm->min_bitsper>0 || bm->max_bitsper>0){
-
- if(max_target_bits>0 && this_bits>max_target_bits){
- bm->minmax_reservoir+=(this_bits-max_target_bits);
- }else if(min_target_bits>0 && this_bits<min_target_bits){
- bm->minmax_reservoir+=(this_bits-min_target_bits);
- }else{
- /* inbetween; we want to take reservoir toward but not past desired_fill */
- if(bm->minmax_reservoir>desired_fill){
- if(max_target_bits>0){ /* logical bulletproofing against initialization state */
- bm->minmax_reservoir+=(this_bits-max_target_bits);
- if(bm->minmax_reservoir<desired_fill)bm->minmax_reservoir=desired_fill;
- }else{
- bm->minmax_reservoir=desired_fill;
- }
- }else{
- if(min_target_bits>0){ /* logical bulletproofing against initialization state */
- bm->minmax_reservoir+=(this_bits-min_target_bits);
- if(bm->minmax_reservoir>desired_fill)bm->minmax_reservoir=desired_fill;
- }else{
- bm->minmax_reservoir=desired_fill;
- }
- }
- }
- }
-
- /* avg reservoir */
- if(bm->avg_bitsper>0){
- long avg_target_bits=(vb->W?bm->avg_bitsper*bm->short_per_long:bm->avg_bitsper);
- bm->avg_reservoir+=this_bits-avg_target_bits;
- }
-
- return(0);
-}
-
-int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,ogg_packet *op){
- private_state *b=vd->backend_state;
- bitrate_manager_state *bm=&b->bms;
- vorbis_block *vb=bm->vb;
- int choice=PACKETBLOBS/2;
- if(!vb)return 0;
-
- if(op){
- vorbis_block_internal *vbi=vb->internal;
-
- if(vorbis_bitrate_managed(vb))
- choice=bm->choice;
-
- op->packet=oggpack_get_buffer(vbi->packetblob[choice]);
- op->bytes=oggpack_bytes(vbi->packetblob[choice]);
- op->b_o_s=0;
- op->e_o_s=vb->eofflag;
- op->granulepos=vb->granulepos;
- op->packetno=vb->sequence; /* for sake of completeness */
- }
-
- bm->vb=0;
- return(1);
-}
diff --git a/drivers/vorbis/bitrate.h b/drivers/vorbis/bitrate.h
deleted file mode 100644
index db48fcb645..0000000000
--- a/drivers/vorbis/bitrate.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: bitrate tracking and management
- last mod: $Id: bitrate.h 13293 2007-07-24 00:09:47Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_BITRATE_H_
-#define _V_BITRATE_H_
-
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "os.h"
-
-/* encode side bitrate tracking */
-typedef struct bitrate_manager_state {
- int managed;
-
- long avg_reservoir;
- long minmax_reservoir;
- long avg_bitsper;
- long min_bitsper;
- long max_bitsper;
-
- long short_per_long;
- double avgfloat;
-
- vorbis_block *vb;
- int choice;
-} bitrate_manager_state;
-
-typedef struct bitrate_manager_info{
- long avg_rate;
- long min_rate;
- long max_rate;
- long reservoir_bits;
- double reservoir_bias;
-
- double slew_damp;
-
-} bitrate_manager_info;
-
-extern void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bs);
-extern void vorbis_bitrate_clear(bitrate_manager_state *bs);
-extern int vorbis_bitrate_managed(vorbis_block *vb);
-extern int vorbis_bitrate_addblock(vorbis_block *vb);
-extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, ogg_packet *op);
-
-#endif
diff --git a/drivers/vorbis/block.c b/drivers/vorbis/block.c
deleted file mode 100644
index 345c042769..0000000000
--- a/drivers/vorbis/block.c
+++ /dev/null
@@ -1,1047 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: PCM data vector blocking, windowing and dis/reassembly
- last mod: $Id: block.c 19457 2015-03-03 00:15:29Z giles $
-
- Handle windowing, overlap-add, etc of the PCM vectors. This is made
- more amusing by Vorbis' current two allowed block sizes.
-
- ********************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-
-#include "window.h"
-#include "mdct.h"
-#include "lpc.h"
-#include "registry.h"
-#include "misc.h"
-
-/* pcm accumulator examples (not exhaustive):
-
- <-------------- lW ---------------->
- <--------------- W ---------------->
-: .....|..... _______________ |
-: .''' | '''_--- | |\ |
-:.....''' |_____--- '''......| | \_______|
-:.................|__________________|_______|__|______|
- |<------ Sl ------>| > Sr < |endW
- |beginSl |endSl | |endSr
- |beginW |endlW |beginSr
-
-
- |< lW >|
- <--------------- W ---------------->
- | | .. ______________ |
- | | ' `/ | ---_ |
- |___.'___/`. | ---_____|
- |_______|__|_______|_________________|
- | >|Sl|< |<------ Sr ----->|endW
- | | |endSl |beginSr |endSr
- |beginW | |endlW
- mult[0] |beginSl mult[n]
-
- <-------------- lW ----------------->
- |<--W-->|
-: .............. ___ | |
-: .''' |`/ \ | |
-:.....''' |/`....\|...|
-:.........................|___|___|___|
- |Sl |Sr |endW
- | | |endSr
- | |beginSr
- | |endSl
- |beginSl
- |beginW
-*/
-
-/* block abstraction setup *********************************************/
-
-#ifndef WORD_ALIGN
-#define WORD_ALIGN 8
-#endif
-
-int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb){
- int i;
- memset(vb,0,sizeof(*vb));
- vb->vd=v;
- vb->localalloc=0;
- vb->localstore=NULL;
- if(v->analysisp){
- vorbis_block_internal *vbi=
- vb->internal=_ogg_calloc(1,sizeof(vorbis_block_internal));
- vbi->ampmax=-9999;
-
- for(i=0;i<PACKETBLOBS;i++){
- if(i==PACKETBLOBS/2){
- vbi->packetblob[i]=&vb->opb;
- }else{
- vbi->packetblob[i]=
- _ogg_calloc(1,sizeof(oggpack_buffer));
- }
- oggpack_writeinit(vbi->packetblob[i]);
- }
- }
-
- return(0);
-}
-
-void *_vorbis_block_alloc(vorbis_block *vb,long bytes){
- bytes=(bytes+(WORD_ALIGN-1)) & ~(WORD_ALIGN-1);
- if(bytes+vb->localtop>vb->localalloc){
- /* can't just _ogg_realloc... there are outstanding pointers */
- if(vb->localstore){
- struct alloc_chain *link=_ogg_malloc(sizeof(*link));
- vb->totaluse+=vb->localtop;
- link->next=vb->reap;
- link->ptr=vb->localstore;
- vb->reap=link;
- }
- /* highly conservative */
- vb->localalloc=bytes;
- vb->localstore=_ogg_malloc(vb->localalloc);
- vb->localtop=0;
- }
- {
- void *ret=(void *)(((char *)vb->localstore)+vb->localtop);
- vb->localtop+=bytes;
- return ret;
- }
-}
-
-/* reap the chain, pull the ripcord */
-void _vorbis_block_ripcord(vorbis_block *vb){
- /* reap the chain */
- struct alloc_chain *reap=vb->reap;
- while(reap){
- struct alloc_chain *next=reap->next;
- _ogg_free(reap->ptr);
- memset(reap,0,sizeof(*reap));
- _ogg_free(reap);
- reap=next;
- }
- /* consolidate storage */
- if(vb->totaluse){
- vb->localstore=_ogg_realloc(vb->localstore,vb->totaluse+vb->localalloc);
- vb->localalloc+=vb->totaluse;
- vb->totaluse=0;
- }
-
- /* pull the ripcord */
- vb->localtop=0;
- vb->reap=NULL;
-}
-
-int vorbis_block_clear(vorbis_block *vb){
- int i;
- vorbis_block_internal *vbi=vb->internal;
-
- _vorbis_block_ripcord(vb);
- if(vb->localstore)_ogg_free(vb->localstore);
-
- if(vbi){
- for(i=0;i<PACKETBLOBS;i++){
- oggpack_writeclear(vbi->packetblob[i]);
- if(i!=PACKETBLOBS/2)_ogg_free(vbi->packetblob[i]);
- }
- _ogg_free(vbi);
- }
- memset(vb,0,sizeof(*vb));
- return(0);
-}
-
-/* Analysis side code, but directly related to blocking. Thus it's
- here and not in analysis.c (which is for analysis transforms only).
- The init is here because some of it is shared */
-
-static int _vds_shared_init(vorbis_dsp_state *v,vorbis_info *vi,int encp){
- int i;
- codec_setup_info *ci=vi->codec_setup;
- private_state *b=NULL;
- int hs;
-
- if(ci==NULL||
- ci->modes<=0||
- ci->blocksizes[0]<64||
- ci->blocksizes[1]<ci->blocksizes[0]){
- return 1;
- }
- hs=ci->halfrate_flag;
-
- memset(v,0,sizeof(*v));
- b=v->backend_state=_ogg_calloc(1,sizeof(*b));
-
- v->vi=vi;
- b->modebits=ov_ilog(ci->modes-1);
-
- b->transform[0]=_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[0]));
- b->transform[1]=_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[1]));
-
- /* MDCT is tranform 0 */
-
- b->transform[0][0]=_ogg_calloc(1,sizeof(mdct_lookup));
- b->transform[1][0]=_ogg_calloc(1,sizeof(mdct_lookup));
- mdct_init(b->transform[0][0],ci->blocksizes[0]>>hs);
- mdct_init(b->transform[1][0],ci->blocksizes[1]>>hs);
-
- /* Vorbis I uses only window type 0 */
- /* note that the correct computation below is technically:
- b->window[0]=ov_ilog(ci->blocksizes[0]-1)-6;
- b->window[1]=ov_ilog(ci->blocksizes[1]-1)-6;
- but since blocksizes are always powers of two,
- the below is equivalent.
- */
- b->window[0]=ov_ilog(ci->blocksizes[0])-7;
- b->window[1]=ov_ilog(ci->blocksizes[1])-7;
-
- if(encp){ /* encode/decode differ here */
-
- /* analysis always needs an fft */
- drft_init(&b->fft_look[0],ci->blocksizes[0]);
- drft_init(&b->fft_look[1],ci->blocksizes[1]);
-
- /* finish the codebooks */
- if(!ci->fullbooks){
- ci->fullbooks=_ogg_calloc(ci->books,sizeof(*ci->fullbooks));
- for(i=0;i<ci->books;i++)
- vorbis_book_init_encode(ci->fullbooks+i,ci->book_param[i]);
- }
-
- b->psy=_ogg_calloc(ci->psys,sizeof(*b->psy));
- for(i=0;i<ci->psys;i++){
- _vp_psy_init(b->psy+i,
- ci->psy_param[i],
- &ci->psy_g_param,
- ci->blocksizes[ci->psy_param[i]->blockflag]/2,
- vi->rate);
- }
-
- v->analysisp=1;
- }else{
- /* finish the codebooks */
- if(!ci->fullbooks){
- ci->fullbooks=_ogg_calloc(ci->books,sizeof(*ci->fullbooks));
- for(i=0;i<ci->books;i++){
- if(ci->book_param[i]==NULL)
- goto abort_books;
- if(vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]))
- goto abort_books;
- /* decode codebooks are now standalone after init */
- vorbis_staticbook_destroy(ci->book_param[i]);
- ci->book_param[i]=NULL;
- }
- }
- }
-
- /* initialize the storage vectors. blocksize[1] is small for encode,
- but the correct size for decode */
- v->pcm_storage=ci->blocksizes[1];
- v->pcm=_ogg_malloc(vi->channels*sizeof(*v->pcm));
- v->pcmret=_ogg_malloc(vi->channels*sizeof(*v->pcmret));
- {
- int i;
- for(i=0;i<vi->channels;i++)
- v->pcm[i]=_ogg_calloc(v->pcm_storage,sizeof(*v->pcm[i]));
- }
-
- /* all 1 (large block) or 0 (small block) */
- /* explicitly set for the sake of clarity */
- v->lW=0; /* previous window size */
- v->W=0; /* current window size */
-
- /* all vector indexes */
- v->centerW=ci->blocksizes[1]/2;
-
- v->pcm_current=v->centerW;
-
- /* initialize all the backend lookups */
- b->flr=_ogg_calloc(ci->floors,sizeof(*b->flr));
- b->residue=_ogg_calloc(ci->residues,sizeof(*b->residue));
-
- for(i=0;i<ci->floors;i++)
- b->flr[i]=_floor_P[ci->floor_type[i]]->
- look(v,ci->floor_param[i]);
-
- for(i=0;i<ci->residues;i++)
- b->residue[i]=_residue_P[ci->residue_type[i]]->
- look(v,ci->residue_param[i]);
-
- return 0;
- abort_books:
- for(i=0;i<ci->books;i++){
- if(ci->book_param[i]!=NULL){
- vorbis_staticbook_destroy(ci->book_param[i]);
- ci->book_param[i]=NULL;
- }
- }
- vorbis_dsp_clear(v);
- return -1;
-}
-
-/* arbitrary settings and spec-mandated numbers get filled in here */
-int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi){
- private_state *b=NULL;
-
- if(_vds_shared_init(v,vi,1))return 1;
- b=v->backend_state;
- b->psy_g_look=_vp_global_look(vi);
-
- /* Initialize the envelope state storage */
- b->ve=_ogg_calloc(1,sizeof(*b->ve));
- _ve_envelope_init(b->ve,vi);
-
- vorbis_bitrate_init(vi,&b->bms);
-
- /* compressed audio packets start after the headers
- with sequence number 3 */
- v->sequence=3;
-
- return(0);
-}
-
-void vorbis_dsp_clear(vorbis_dsp_state *v){
- int i;
- if(v){
- vorbis_info *vi=v->vi;
- codec_setup_info *ci=(vi?vi->codec_setup:NULL);
- private_state *b=v->backend_state;
-
- if(b){
-
- if(b->ve){
- _ve_envelope_clear(b->ve);
- _ogg_free(b->ve);
- }
-
- if(b->transform[0]){
- mdct_clear(b->transform[0][0]);
- _ogg_free(b->transform[0][0]);
- _ogg_free(b->transform[0]);
- }
- if(b->transform[1]){
- mdct_clear(b->transform[1][0]);
- _ogg_free(b->transform[1][0]);
- _ogg_free(b->transform[1]);
- }
-
- if(b->flr){
- if(ci)
- for(i=0;i<ci->floors;i++)
- _floor_P[ci->floor_type[i]]->
- free_look(b->flr[i]);
- _ogg_free(b->flr);
- }
- if(b->residue){
- if(ci)
- for(i=0;i<ci->residues;i++)
- _residue_P[ci->residue_type[i]]->
- free_look(b->residue[i]);
- _ogg_free(b->residue);
- }
- if(b->psy){
- if(ci)
- for(i=0;i<ci->psys;i++)
- _vp_psy_clear(b->psy+i);
- _ogg_free(b->psy);
- }
-
- if(b->psy_g_look)_vp_global_free(b->psy_g_look);
- vorbis_bitrate_clear(&b->bms);
-
- drft_clear(&b->fft_look[0]);
- drft_clear(&b->fft_look[1]);
-
- }
-
- if(v->pcm){
- if(vi)
- for(i=0;i<vi->channels;i++)
- if(v->pcm[i])_ogg_free(v->pcm[i]);
- _ogg_free(v->pcm);
- if(v->pcmret)_ogg_free(v->pcmret);
- }
-
- if(b){
- /* free header, header1, header2 */
- if(b->header)_ogg_free(b->header);
- if(b->header1)_ogg_free(b->header1);
- if(b->header2)_ogg_free(b->header2);
- _ogg_free(b);
- }
-
- memset(v,0,sizeof(*v));
- }
-}
-
-float **vorbis_analysis_buffer(vorbis_dsp_state *v, int vals){
- int i;
- vorbis_info *vi=v->vi;
- private_state *b=v->backend_state;
-
- /* free header, header1, header2 */
- if(b->header)_ogg_free(b->header);b->header=NULL;
- if(b->header1)_ogg_free(b->header1);b->header1=NULL;
- if(b->header2)_ogg_free(b->header2);b->header2=NULL;
-
- /* Do we have enough storage space for the requested buffer? If not,
- expand the PCM (and envelope) storage */
-
- if(v->pcm_current+vals>=v->pcm_storage){
- v->pcm_storage=v->pcm_current+vals*2;
-
- for(i=0;i<vi->channels;i++){
- v->pcm[i]=_ogg_realloc(v->pcm[i],v->pcm_storage*sizeof(*v->pcm[i]));
- }
- }
-
- for(i=0;i<vi->channels;i++)
- v->pcmret[i]=v->pcm[i]+v->pcm_current;
-
- return(v->pcmret);
-}
-
-static void _preextrapolate_helper(vorbis_dsp_state *v){
- int i;
- int order=16;
- float *lpc=alloca(order*sizeof(*lpc));
- float *work=alloca(v->pcm_current*sizeof(*work));
- long j;
- v->preextrapolate=1;
-
- if(v->pcm_current-v->centerW>order*2){ /* safety */
- for(i=0;i<v->vi->channels;i++){
- /* need to run the extrapolation in reverse! */
- for(j=0;j<v->pcm_current;j++)
- work[j]=v->pcm[i][v->pcm_current-j-1];
-
- /* prime as above */
- vorbis_lpc_from_data(work,lpc,v->pcm_current-v->centerW,order);
-
-#if 0
- if(v->vi->channels==2){
- if(i==0)
- _analysis_output("predataL",0,work,v->pcm_current-v->centerW,0,0,0);
- else
- _analysis_output("predataR",0,work,v->pcm_current-v->centerW,0,0,0);
- }else{
- _analysis_output("predata",0,work,v->pcm_current-v->centerW,0,0,0);
- }
-#endif
-
- /* run the predictor filter */
- vorbis_lpc_predict(lpc,work+v->pcm_current-v->centerW-order,
- order,
- work+v->pcm_current-v->centerW,
- v->centerW);
-
- for(j=0;j<v->pcm_current;j++)
- v->pcm[i][v->pcm_current-j-1]=work[j];
-
- }
- }
-}
-
-
-/* call with val<=0 to set eof */
-
-int vorbis_analysis_wrote(vorbis_dsp_state *v, int vals){
- vorbis_info *vi=v->vi;
- codec_setup_info *ci=vi->codec_setup;
-
- if(vals<=0){
- int order=32;
- int i;
- float *lpc=alloca(order*sizeof(*lpc));
-
- /* if it wasn't done earlier (very short sample) */
- if(!v->preextrapolate)
- _preextrapolate_helper(v);
-
- /* We're encoding the end of the stream. Just make sure we have
- [at least] a few full blocks of zeroes at the end. */
- /* actually, we don't want zeroes; that could drop a large
- amplitude off a cliff, creating spread spectrum noise that will
- suck to encode. Extrapolate for the sake of cleanliness. */
-
- vorbis_analysis_buffer(v,ci->blocksizes[1]*3);
- v->eofflag=v->pcm_current;
- v->pcm_current+=ci->blocksizes[1]*3;
-
- for(i=0;i<vi->channels;i++){
- if(v->eofflag>order*2){
- /* extrapolate with LPC to fill in */
- long n;
-
- /* make a predictor filter */
- n=v->eofflag;
- if(n>ci->blocksizes[1])n=ci->blocksizes[1];
- vorbis_lpc_from_data(v->pcm[i]+v->eofflag-n,lpc,n,order);
-
- /* run the predictor filter */
- vorbis_lpc_predict(lpc,v->pcm[i]+v->eofflag-order,order,
- v->pcm[i]+v->eofflag,v->pcm_current-v->eofflag);
- }else{
- /* not enough data to extrapolate (unlikely to happen due to
- guarding the overlap, but bulletproof in case that
- assumtion goes away). zeroes will do. */
- memset(v->pcm[i]+v->eofflag,0,
- (v->pcm_current-v->eofflag)*sizeof(*v->pcm[i]));
-
- }
- }
- }else{
-
- if(v->pcm_current+vals>v->pcm_storage)
- return(OV_EINVAL);
-
- v->pcm_current+=vals;
-
- /* we may want to reverse extrapolate the beginning of a stream
- too... in case we're beginning on a cliff! */
- /* clumsy, but simple. It only runs once, so simple is good. */
- if(!v->preextrapolate && v->pcm_current-v->centerW>ci->blocksizes[1])
- _preextrapolate_helper(v);
-
- }
- return(0);
-}
-
-/* do the deltas, envelope shaping, pre-echo and determine the size of
- the next block on which to continue analysis */
-int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb){
- int i;
- vorbis_info *vi=v->vi;
- codec_setup_info *ci=vi->codec_setup;
- private_state *b=v->backend_state;
- vorbis_look_psy_global *g=b->psy_g_look;
- long beginW=v->centerW-ci->blocksizes[v->W]/2,centerNext;
- vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal;
-
- /* check to see if we're started... */
- if(!v->preextrapolate)return(0);
-
- /* check to see if we're done... */
- if(v->eofflag==-1)return(0);
-
- /* By our invariant, we have lW, W and centerW set. Search for
- the next boundary so we can determine nW (the next window size)
- which lets us compute the shape of the current block's window */
-
- /* we do an envelope search even on a single blocksize; we may still
- be throwing more bits at impulses, and envelope search handles
- marking impulses too. */
- {
- long bp=_ve_envelope_search(v);
- if(bp==-1){
-
- if(v->eofflag==0)return(0); /* not enough data currently to search for a
- full long block */
- v->nW=0;
- }else{
-
- if(ci->blocksizes[0]==ci->blocksizes[1])
- v->nW=0;
- else
- v->nW=bp;
- }
- }
-
- centerNext=v->centerW+ci->blocksizes[v->W]/4+ci->blocksizes[v->nW]/4;
-
- {
- /* center of next block + next block maximum right side. */
-
- long blockbound=centerNext+ci->blocksizes[v->nW]/2;
- if(v->pcm_current<blockbound)return(0); /* not enough data yet;
- although this check is
- less strict that the
- _ve_envelope_search,
- the search is not run
- if we only use one
- block size */
-
-
- }
-
- /* fill in the block. Note that for a short window, lW and nW are *short*
- regardless of actual settings in the stream */
-
- _vorbis_block_ripcord(vb);
- vb->lW=v->lW;
- vb->W=v->W;
- vb->nW=v->nW;
-
- if(v->W){
- if(!v->lW || !v->nW){
- vbi->blocktype=BLOCKTYPE_TRANSITION;
- /*fprintf(stderr,"-");*/
- }else{
- vbi->blocktype=BLOCKTYPE_LONG;
- /*fprintf(stderr,"_");*/
- }
- }else{
- if(_ve_envelope_mark(v)){
- vbi->blocktype=BLOCKTYPE_IMPULSE;
- /*fprintf(stderr,"|");*/
-
- }else{
- vbi->blocktype=BLOCKTYPE_PADDING;
- /*fprintf(stderr,".");*/
-
- }
- }
-
- vb->vd=v;
- vb->sequence=v->sequence++;
- vb->granulepos=v->granulepos;
- vb->pcmend=ci->blocksizes[v->W];
-
- /* copy the vectors; this uses the local storage in vb */
-
- /* this tracks 'strongest peak' for later psychoacoustics */
- /* moved to the global psy state; clean this mess up */
- if(vbi->ampmax>g->ampmax)g->ampmax=vbi->ampmax;
- g->ampmax=_vp_ampmax_decay(g->ampmax,v);
- vbi->ampmax=g->ampmax;
-
- vb->pcm=_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels);
- vbi->pcmdelay=_vorbis_block_alloc(vb,sizeof(*vbi->pcmdelay)*vi->channels);
- for(i=0;i<vi->channels;i++){
- vbi->pcmdelay[i]=
- _vorbis_block_alloc(vb,(vb->pcmend+beginW)*sizeof(*vbi->pcmdelay[i]));
- memcpy(vbi->pcmdelay[i],v->pcm[i],(vb->pcmend+beginW)*sizeof(*vbi->pcmdelay[i]));
- vb->pcm[i]=vbi->pcmdelay[i]+beginW;
-
- /* before we added the delay
- vb->pcm[i]=_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i]));
- memcpy(vb->pcm[i],v->pcm[i]+beginW,ci->blocksizes[v->W]*sizeof(*vb->pcm[i]));
- */
-
- }
-
- /* handle eof detection: eof==0 means that we've not yet received EOF
- eof>0 marks the last 'real' sample in pcm[]
- eof<0 'no more to do'; doesn't get here */
-
- if(v->eofflag){
- if(v->centerW>=v->eofflag){
- v->eofflag=-1;
- vb->eofflag=1;
- return(1);
- }
- }
-
- /* advance storage vectors and clean up */
- {
- int new_centerNext=ci->blocksizes[1]/2;
- int movementW=centerNext-new_centerNext;
-
- if(movementW>0){
-
- _ve_envelope_shift(b->ve,movementW);
- v->pcm_current-=movementW;
-
- for(i=0;i<vi->channels;i++)
- memmove(v->pcm[i],v->pcm[i]+movementW,
- v->pcm_current*sizeof(*v->pcm[i]));
-
-
- v->lW=v->W;
- v->W=v->nW;
- v->centerW=new_centerNext;
-
- if(v->eofflag){
- v->eofflag-=movementW;
- if(v->eofflag<=0)v->eofflag=-1;
- /* do not add padding to end of stream! */
- if(v->centerW>=v->eofflag){
- v->granulepos+=movementW-(v->centerW-v->eofflag);
- }else{
- v->granulepos+=movementW;
- }
- }else{
- v->granulepos+=movementW;
- }
- }
- }
-
- /* done */
- return(1);
-}
-
-int vorbis_synthesis_restart(vorbis_dsp_state *v){
- vorbis_info *vi=v->vi;
- codec_setup_info *ci;
- int hs;
-
- if(!v->backend_state)return -1;
- if(!vi)return -1;
- ci=vi->codec_setup;
- if(!ci)return -1;
- hs=ci->halfrate_flag;
-
- v->centerW=ci->blocksizes[1]>>(hs+1);
- v->pcm_current=v->centerW>>hs;
-
- v->pcm_returned=-1;
- v->granulepos=-1;
- v->sequence=-1;
- v->eofflag=0;
- ((private_state *)(v->backend_state))->sample_count=-1;
-
- return(0);
-}
-
-int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi){
- if(_vds_shared_init(v,vi,0)){
- vorbis_dsp_clear(v);
- return 1;
- }
- vorbis_synthesis_restart(v);
- return 0;
-}
-
-/* Unlike in analysis, the window is only partially applied for each
- block. The time domain envelope is not yet handled at the point of
- calling (as it relies on the previous block). */
-
-int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){
- vorbis_info *vi=v->vi;
- codec_setup_info *ci=vi->codec_setup;
- private_state *b=v->backend_state;
- int hs=ci->halfrate_flag;
- int i,j;
-
- if(!vb)return(OV_EINVAL);
- if(v->pcm_current>v->pcm_returned && v->pcm_returned!=-1)return(OV_EINVAL);
-
- v->lW=v->W;
- v->W=vb->W;
- v->nW=-1;
-
- if((v->sequence==-1)||
- (v->sequence+1 != vb->sequence)){
- v->granulepos=-1; /* out of sequence; lose count */
- b->sample_count=-1;
- }
-
- v->sequence=vb->sequence;
-
- if(vb->pcm){ /* no pcm to process if vorbis_synthesis_trackonly
- was called on block */
- int n=ci->blocksizes[v->W]>>(hs+1);
- int n0=ci->blocksizes[0]>>(hs+1);
- int n1=ci->blocksizes[1]>>(hs+1);
-
- int thisCenter;
- int prevCenter;
-
- v->glue_bits+=vb->glue_bits;
- v->time_bits+=vb->time_bits;
- v->floor_bits+=vb->floor_bits;
- v->res_bits+=vb->res_bits;
-
- if(v->centerW){
- thisCenter=n1;
- prevCenter=0;
- }else{
- thisCenter=0;
- prevCenter=n1;
- }
-
- /* v->pcm is now used like a two-stage double buffer. We don't want
- to have to constantly shift *or* adjust memory usage. Don't
- accept a new block until the old is shifted out */
-
- for(j=0;j<vi->channels;j++){
- /* the overlap/add section */
- if(v->lW){
- if(v->W){
- /* large/large */
- const float *w=_vorbis_window_get(b->window[1]-hs);
- float *pcm=v->pcm[j]+prevCenter;
- float *p=vb->pcm[j];
- for(i=0;i<n1;i++)
- pcm[i]=pcm[i]*w[n1-i-1] + p[i]*w[i];
- }else{
- /* large/small */
- const float *w=_vorbis_window_get(b->window[0]-hs);
- float *pcm=v->pcm[j]+prevCenter+n1/2-n0/2;
- float *p=vb->pcm[j];
- for(i=0;i<n0;i++)
- pcm[i]=pcm[i]*w[n0-i-1] +p[i]*w[i];
- }
- }else{
- if(v->W){
- /* small/large */
- const float *w=_vorbis_window_get(b->window[0]-hs);
- float *pcm=v->pcm[j]+prevCenter;
- float *p=vb->pcm[j]+n1/2-n0/2;
- for(i=0;i<n0;i++)
- pcm[i]=pcm[i]*w[n0-i-1] +p[i]*w[i];
- for(;i<n1/2+n0/2;i++)
- pcm[i]=p[i];
- }else{
- /* small/small */
- const float *w=_vorbis_window_get(b->window[0]-hs);
- float *pcm=v->pcm[j]+prevCenter;
- float *p=vb->pcm[j];
- for(i=0;i<n0;i++)
- pcm[i]=pcm[i]*w[n0-i-1] +p[i]*w[i];
- }
- }
-
- /* the copy section */
- {
- float *pcm=v->pcm[j]+thisCenter;
- float *p=vb->pcm[j]+n;
- for(i=0;i<n;i++)
- pcm[i]=p[i];
- }
- }
-
- if(v->centerW)
- v->centerW=0;
- else
- v->centerW=n1;
-
- /* deal with initial packet state; we do this using the explicit
- pcm_returned==-1 flag otherwise we're sensitive to first block
- being short or long */
-
- if(v->pcm_returned==-1){
- v->pcm_returned=thisCenter;
- v->pcm_current=thisCenter;
- }else{
- v->pcm_returned=prevCenter;
- v->pcm_current=prevCenter+
- ((ci->blocksizes[v->lW]/4+
- ci->blocksizes[v->W]/4)>>hs);
- }
-
- }
-
- /* track the frame number... This is for convenience, but also
- making sure our last packet doesn't end with added padding. If
- the last packet is partial, the number of samples we'll have to
- return will be past the vb->granulepos.
-
- This is not foolproof! It will be confused if we begin
- decoding at the last page after a seek or hole. In that case,
- we don't have a starting point to judge where the last frame
- is. For this reason, vorbisfile will always try to make sure
- it reads the last two marked pages in proper sequence */
-
- if(b->sample_count==-1){
- b->sample_count=0;
- }else{
- b->sample_count+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;
- }
-
- if(v->granulepos==-1){
- if(vb->granulepos!=-1){ /* only set if we have a position to set to */
-
- v->granulepos=vb->granulepos;
-
- /* is this a short page? */
- if(b->sample_count>v->granulepos){
- /* corner case; if this is both the first and last audio page,
- then spec says the end is cut, not beginning */
- long extra=b->sample_count-vb->granulepos;
-
- /* we use ogg_int64_t for granule positions because a
- uint64 isn't universally available. Unfortunately,
- that means granposes can be 'negative' and result in
- extra being negative */
- if(extra<0)
- extra=0;
-
- if(vb->eofflag){
- /* trim the end */
- /* no preceding granulepos; assume we started at zero (we'd
- have to in a short single-page stream) */
- /* granulepos could be -1 due to a seek, but that would result
- in a long count, not short count */
-
- /* Guard against corrupt/malicious frames that set EOP and
- a backdated granpos; don't rewind more samples than we
- actually have */
- if(extra > (v->pcm_current - v->pcm_returned)<<hs)
- extra = (v->pcm_current - v->pcm_returned)<<hs;
-
- v->pcm_current-=extra>>hs;
- }else{
- /* trim the beginning */
- v->pcm_returned+=extra>>hs;
- if(v->pcm_returned>v->pcm_current)
- v->pcm_returned=v->pcm_current;
- }
-
- }
-
- }
- }else{
- v->granulepos+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;
- if(vb->granulepos!=-1 && v->granulepos!=vb->granulepos){
-
- if(v->granulepos>vb->granulepos){
- long extra=v->granulepos-vb->granulepos;
-
- if(extra)
- if(vb->eofflag){
- /* partial last frame. Strip the extra samples off */
-
- /* Guard against corrupt/malicious frames that set EOP and
- a backdated granpos; don't rewind more samples than we
- actually have */
- if(extra > (v->pcm_current - v->pcm_returned)<<hs)
- extra = (v->pcm_current - v->pcm_returned)<<hs;
-
- /* we use ogg_int64_t for granule positions because a
- uint64 isn't universally available. Unfortunately,
- that means granposes can be 'negative' and result in
- extra being negative */
- if(extra<0)
- extra=0;
-
- v->pcm_current-=extra>>hs;
- } /* else {Shouldn't happen *unless* the bitstream is out of
- spec. Either way, believe the bitstream } */
- } /* else {Shouldn't happen *unless* the bitstream is out of
- spec. Either way, believe the bitstream } */
- v->granulepos=vb->granulepos;
- }
- }
-
- /* Update, cleanup */
-
- if(vb->eofflag)v->eofflag=1;
- return(0);
-
-}
-
-/* pcm==NULL indicates we just want the pending samples, no more */
-int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm){
- vorbis_info *vi=v->vi;
-
- if(v->pcm_returned>-1 && v->pcm_returned<v->pcm_current){
- if(pcm){
- int i;
- for(i=0;i<vi->channels;i++)
- v->pcmret[i]=v->pcm[i]+v->pcm_returned;
- *pcm=v->pcmret;
- }
- return(v->pcm_current-v->pcm_returned);
- }
- return(0);
-}
-
-int vorbis_synthesis_read(vorbis_dsp_state *v,int n){
- if(n && v->pcm_returned+n>v->pcm_current)return(OV_EINVAL);
- v->pcm_returned+=n;
- return(0);
-}
-
-/* intended for use with a specific vorbisfile feature; we want access
- to the [usually synthetic/postextrapolated] buffer and lapping at
- the end of a decode cycle, specifically, a half-short-block worth.
- This funtion works like pcmout above, except it will also expose
- this implicit buffer data not normally decoded. */
-int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm){
- vorbis_info *vi=v->vi;
- codec_setup_info *ci=vi->codec_setup;
- int hs=ci->halfrate_flag;
-
- int n=ci->blocksizes[v->W]>>(hs+1);
- int n0=ci->blocksizes[0]>>(hs+1);
- int n1=ci->blocksizes[1]>>(hs+1);
- int i,j;
-
- if(v->pcm_returned<0)return 0;
-
- /* our returned data ends at pcm_returned; because the synthesis pcm
- buffer is a two-fragment ring, that means our data block may be
- fragmented by buffering, wrapping or a short block not filling
- out a buffer. To simplify things, we unfragment if it's at all
- possibly needed. Otherwise, we'd need to call lapout more than
- once as well as hold additional dsp state. Opt for
- simplicity. */
-
- /* centerW was advanced by blockin; it would be the center of the
- *next* block */
- if(v->centerW==n1){
- /* the data buffer wraps; swap the halves */
- /* slow, sure, small */
- for(j=0;j<vi->channels;j++){
- float *p=v->pcm[j];
- for(i=0;i<n1;i++){
- float temp=p[i];
- p[i]=p[i+n1];
- p[i+n1]=temp;
- }
- }
-
- v->pcm_current-=n1;
- v->pcm_returned-=n1;
- v->centerW=0;
- }
-
- /* solidify buffer into contiguous space */
- if((v->lW^v->W)==1){
- /* long/short or short/long */
- for(j=0;j<vi->channels;j++){
- float *s=v->pcm[j];
- float *d=v->pcm[j]+(n1-n0)/2;
- for(i=(n1+n0)/2-1;i>=0;--i)
- d[i]=s[i];
- }
- v->pcm_returned+=(n1-n0)/2;
- v->pcm_current+=(n1-n0)/2;
- }else{
- if(v->lW==0){
- /* short/short */
- for(j=0;j<vi->channels;j++){
- float *s=v->pcm[j];
- float *d=v->pcm[j]+n1-n0;
- for(i=n0-1;i>=0;--i)
- d[i]=s[i];
- }
- v->pcm_returned+=n1-n0;
- v->pcm_current+=n1-n0;
- }
- }
-
- if(pcm){
- int i;
- for(i=0;i<vi->channels;i++)
- v->pcmret[i]=v->pcm[i]+v->pcm_returned;
- *pcm=v->pcmret;
- }
-
- return(n1+n-v->pcm_returned);
-
-}
-
-const float *vorbis_window(vorbis_dsp_state *v,int W){
- vorbis_info *vi=v->vi;
- codec_setup_info *ci=vi->codec_setup;
- int hs=ci->halfrate_flag;
- private_state *b=v->backend_state;
-
- if(b->window[W]-1<0)return NULL;
- return _vorbis_window_get(b->window[W]-hs);
-}
diff --git a/drivers/vorbis/books/coupled/res_books_51.h b/drivers/vorbis/books/coupled/res_books_51.h
deleted file mode 100644
index 93910ff481..0000000000
--- a/drivers/vorbis/books/coupled/res_books_51.h
+++ /dev/null
@@ -1,12274 +0,0 @@
-/********************************************************************
- * *
- * 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-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
- *
- * function: static codebooks for 5.1 surround
- * last modified: $Id: res_books_51.h 19057 2014-01-22 12:32:31Z xiphmont $
- *
- ********************************************************************/
-
-static const long _vq_quantlist__44p0_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44p0_l0_0[] = {
- 1, 3, 4, 7, 7, 8, 8, 9, 9, 9,10,10,10, 5, 6, 5,
- 8, 7, 9, 8, 9, 9,10, 9,11,10, 5, 5, 7, 7, 8, 8,
- 9, 9, 9, 9,10,10,11, 8, 9, 8,10, 9,10, 9,10, 9,
- 11,10,11,10, 8, 8, 9, 9,10, 9,10, 9,11,10,11,10,
- 11,10,11,11,11,11,11,11,11,11,11,11,11,11,10,11,
- 11,11,12,11,11,11,11,11,11,10,12,12,12,12,12,12,
- 12,11,12,12,12,11,11,11,12,12,12,12,12,12,12,11,
- 12,11,12,11,11,13,12,12,12,13,12,12,12,12,11,12,
- 11,11,13,13,13,12,12,12,12,12,12,11,11,11,10,13,
- 13,13,12,13,12,13,11,13,10,12,11,11,13,13,12,13,
- 12,12,12,12,11,12,11,11,11,
-};
-
-static const static_codebook _44p0_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44p0_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44p0_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44p0_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p0_l0_1[] = {
- 1, 4, 4, 6, 6, 5, 5, 5, 7, 5, 5, 5, 5, 6, 7, 7,
- 6, 7, 7, 7, 6, 7, 7, 7, 7,
-};
-
-static const static_codebook _44p0_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44p0_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p0_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44p0_l1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p0_l1_0[] = {
- 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p0_l1_0 = {
- 2, 9,
- (char *)_vq_lengthlist__44p0_l1_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p0_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44p0_lfe[] = {
- 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p0_lfe = {
- 2, 4,
- (char *)_huff_lengthlist__44p0_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44p0_long[] = {
- 2, 3, 6, 7,10,14,16, 3, 2, 5, 7,11,14,17, 6, 5,
- 5, 7,10,12,14, 7, 7, 6, 6, 7, 9,13,10,11, 9, 6,
- 6, 9,11,15,15,13,10, 9,10,12,18,18,16,14,12,13,
- 16,
-};
-
-static const static_codebook _huff_book__44p0_long = {
- 2, 49,
- (char *)_huff_lengthlist__44p0_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p0_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p0_p1_0[] = {
- 1, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,
-};
-
-static const static_codebook _44p0_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p0_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p0_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44p0_p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p0_p2_0[] = {
- 1, 5, 5, 0, 7, 7, 0, 8, 8, 0, 9, 9, 0,12,12, 0,
- 8, 8, 0, 9, 9, 0,12,12, 0, 8, 8, 0, 6, 6, 0,11,
- 11, 0,12,12, 0,12,12, 0,15,15, 0,11,11, 0,12,12,
- 0,15,15, 0,12,12, 0, 5, 5, 0, 5, 5, 0, 6, 6, 0,
- 7, 7, 0,11,11, 0, 6, 6, 0, 7, 7, 0,10,11, 0, 6,
- 6, 0, 7, 7, 0,11,11, 0,12,12, 0,11,11, 0,15,15,
- 0,10,10, 0,12,12, 0,15,15, 0,12,12, 0, 6, 6, 0,
- 12,12, 0,12,12, 0,12,12, 0,15,15, 0,11,11, 0,12,
- 12, 0,15,15, 0,12,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, 8, 8, 0,12,12, 0,12,12, 0,12,12, 0,15,
- 15, 0,12,12, 0,11,12, 0,15,16, 0,11,11, 0, 6, 6,
- 0,11,12, 0,12,12, 0,12,12, 0,16,15, 0,12,12, 0,
- 13,12, 0,15,14, 0,12,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,
-};
-
-static const static_codebook _44p0_p2_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p0_p2_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44p0_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44p0_p2_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p0_p2_1[] = {
- 1, 3, 3, 0, 9, 9, 0, 9, 9, 0,10,10, 0, 9, 9, 0,
- 10,10, 0,10,10, 0, 9, 9, 0,10,10, 0, 7, 7, 0, 7,
- 7, 0, 6, 6, 0, 8, 8, 0, 7, 7, 0, 8, 8, 0, 8, 9,
- 0, 8, 8, 0, 8, 8, 0, 7, 7, 0, 9, 9, 0, 8, 8, 0,
- 10,10, 0, 9, 9, 0,10,10, 0,10,10, 0, 9, 9, 0,10,
- 10, 0, 9, 9, 0,11,11, 0,11,11, 0,12,12, 0,11,11,
- 0,12,12, 0,13,13, 0,12,12, 0,13,12, 0, 8, 8, 0,
- 12,12, 0,12,12, 0,13,13, 0,12,12, 0,13,13, 0,13,
- 13, 0,13,13, 0,13,13, 0, 7, 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, 9, 9, 0,11,11, 0,12,12, 0,13,13, 0,12,
- 12, 0,13,13, 0,13,13, 0,12,12, 0,12,12, 0, 8, 8,
- 0,12,12, 0,12,12, 0,13,13, 0,13,13, 0,13,14, 0,
- 14,13, 0,13,13, 0,13,13, 0, 7, 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,
-};
-
-static const static_codebook _44p0_p2_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p0_p2_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p0_p2_1,
- 0
-};
-
-static const long _vq_quantlist__44p0_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p0_p3_0[] = {
- 1, 6, 6, 7, 8, 8, 7, 8, 8, 7, 9, 9,10,12,11, 9,
- 8, 8, 7, 9, 9,11,12,12, 9, 9, 9, 6, 7, 7,10,11,
- 11,10,11,11,10,11,11,13,13,14,12,12,12,11,11,11,
- 14,14,14,12,12,12, 6, 5, 5, 9, 6, 5, 9, 6, 6, 9,
- 7, 7,12,10,10,11, 6, 6,10, 7, 7,13,10,10,12, 7,
- 7, 7, 8, 8,12,10,10,12,10,10,11,10,10,15,13,13,
- 13, 9, 9,12,11,11,16,13,13,15,11,11, 8, 7, 7,12,
- 12,12,12,11,11,12,11,11,14,14,14,14,12,12,12,12,
- 12,16,15,15,14,12,12, 0,10,10, 0,12,12, 0,12,12,
- 0,11,11, 0,14,14, 0,11,11, 0,12,12, 0,15,15, 0,
- 11,11, 8, 8, 8,13,11,11,13,10,10,13,11,11,15,13,
- 13,14,11,11,12,10,10,16,14,14,14,10,10, 9, 7, 7,
- 13,11,11,13,11,11,12,11,11,16,14,14,14,12,12,13,
- 12,12,15,14,14,15,13,12, 0,11,11, 0,12,12, 0,12,
- 12, 0,12,12, 0,15,15, 0,12,12, 0,13,12, 0,14,15,
- 0,12,12,
-};
-
-static const static_codebook _44p0_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p0_p3_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44p0_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44p0_p3_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p0_p3_1[] = {
- 2, 4, 4, 8, 8,10,12,12,11,11, 9,11,11,12,13,11,
- 12,12,11,11,11,12,12,12,12,10,13,12,13,13,11,12,
- 12,13,13,11,12,12,13,13,11,12,13,13,13,11,13,13,
- 13,13,10,13,13,12,13,11,12,12,14,14,11,13,12,12,
- 12,11,12,12,13,13,11,13,13,12,12,11,13,13,13,13,
- 11,12,12,13,13,11,13,13,12,12,11,12,12,13,13,11,
- 13,13,12,12,11,13,13,13,13,11,12,12,14,14,11,13,
- 13,12,12,11,12,12,13,13,11,13,13,12,12,11,10,10,
- 10,10,12,10,10,11,11,11, 8, 8,11,11,13,10,10,10,
- 10,12,10,10,10,10,13,11,11,11,11,13,10,10,11,11,
- 13,11,11,12,12,13,11,11,11,11,13,11,11,12,12,13,
- 11,11,12,12,13,10,10,11,11,13,11,11,11,11,13,11,
- 10,11,11,13,11,11,11,11,13,11,11,11,11,13,10,10,
- 11,11,13,11,11,11,11,12,10,11,11,11,13,11,11,11,
- 11,13,11,11,11,11,13,10,10,11,11,13,11,11,11,11,
- 13,11,11,11,11,13,11,11,11,11,11,10,10,10,10,12,
- 10,10, 9, 9,12,12,12,11,11,13,12,12, 9, 9,13,12,
- 12,10,10,12,12,12,12,12,13,13,13,14,14,13,12,12,
- 11,11,13,13,13,12,12,13,12,12,11,11,13,12,13,11,
- 11,13,13,13,14,14,13,12,12,10,10,13,13,13,11,11,
- 13,12,12,10,10,13,13,13,11,11,13,13,13,14,14,13,
- 12,12,10,10,13,13,13,11,11,13,12,13,10,10,13,13,
- 13,11,11,13,13,13,14,14,13,12,12,10,10,13,13,13,
- 11,11,13,13,12,10,10,14,12,12, 8, 8,14,12,12, 9,
- 9,14,11,11, 9, 9,14,12,12, 8, 8,14,11,11, 7, 7,
- 14,13,13,10,10,15,12,12,10,10,15,13,13,10,10,15,
- 12,12, 9, 9,15,13,13,10,10,15,13,13,10,10,15,12,
- 12,10,10,15,13,13,10,10,14,12,12, 9, 9,14,13,13,
- 9, 9,14,13,13, 9, 9,15,12,12, 9, 9,15,13,13, 9,
- 9,14,12,12, 9, 9,14,13,13, 9, 9,14,13,13, 9, 9,
- 15,12,12, 9, 9,14,13,13, 9, 9,14,12,12, 9, 9,14,
- 13,13, 9, 9,13,12,12, 8, 8,13,13,13, 8, 8,14,13,
- 13, 9, 9,13,13,13, 7, 7,14,13,13, 8, 8,14,14,14,
- 10,10,14,14,14,11,11,14,14,14, 9, 9,14,14,14,10,
- 10,14,14,14, 9, 9,14,14,14,10, 9,15,14,14,11,11,
- 14,14,14, 9, 9,14,14,14,10,10,14,14,14, 9, 9,14,
- 14,14, 9, 9,15,14,14,11,11,14,14,14, 8, 8,14,14,
- 14, 9, 9,14,14,14, 8, 8,14,14,14, 9, 9,15,14,14,
- 11,11,14,14,14, 8, 8,14,14,14, 9, 9,14,14,14, 8,
- 8,12,12,12,13,13,16,15,15,11,11,16,15,16,12,12,
- 17,16,16,11,11,17,15,15,12,11,16,16,16,12,13,16,
- 15,15,13,13,16,16,16,12,12,16,16,15,13,13,16,16,
- 16,12,12,16,16,16,13,13,17,16,16,14,14,17,17,16,
- 12,12,17,16,16,13,13,17,17,16,12,13,16,16,17,13,
- 12,17,16,16,14,13,17,16,16,12,12,17,16,16,12,12,
- 17,16,17,12,12,17,17,17,13,13,16,16,16,13,14,17,
- 17,16,12,12,16,16,16,13,13,17,17,17,12,12,13,14,
- 14,10,10,16,14,14,12,12,16,15,15,14,14,16,14,14,
- 12,12,15,14,14,13,13,17,15,15,14,13,16,16,15,15,
- 15,16,15,15,14,14,16,15,15,14,14,17,15,15,14,14,
- 16,15,15,14,14,16,16,15,15,15,17,15,15,13,13,16,
- 15,15,14,14,17,15,15,13,13,17,15,15,14,14,16,15,
- 15,15,15,16,14,14,13,13,16,15,15,14,14,16,14,14,
- 13,13,17,15,15,14,14,16,16,15,15,15,17,14,14,13,
- 13,16,15,15,14,14,17,14,14,13,13,13,11,11,10,10,
- 16,14,14,13,13,15,14,14,13,13,16,14,14,12,12,16,
- 14,14,12,12,15,15,15,14,14,16,14,14,14,14,16,15,
- 14,14,14,16,14,14,14,14,16,15,15,14,13,16,15,15,
- 14,14,16,14,14,14,14,17,15,15,14,14,16,14,14,14,
- 14,16,15,15,13,14,16,15,15,14,14,16,14,14,14,14,
- 16,15,15,13,13,16,14,14,13,13,16,15,15,13,13,16,
- 15,15,14,14,16,14,14,14,14,17,15,15,13,13,16,15,
- 14,13,13,17,15,15,13,13,14,14,14, 9, 9,14,14,14,
- 17,17,14,15,15,18,18,14,14,14,18,19,14,14,14,18,
- 18,15,15,15,19,18,15,16,15,18,20,15,15,15,18,19,
- 15,15,15,19,19,15,15,15,18,20,15,15,15,18,19,15,
- 15,16,20,18,15,15,15,18,18,15,15,15,19,19,15,15,
- 15,18,19,15,15,15,18,19,15,15,15,19,19,14,15,14,
- 19,19,15,15,15,20,19,15,14,14,19,18,14,15,15,18,
- 19,15,15,16,20,20,14,14,14,18,19,15,15,15,19,18,
- 14,14,14,18,18,14,12,12, 9, 9,13,14,14,18,18,14,
- 13,13,18,19,14,14,14,18,18,14,14,14,18,18,15,15,
- 15,19,19,15,14,14,19,18,14,15,15,19,18,15,14,14,
- 18,18,15,15,15,19,18,14,15,15,19,19,15,14,14,19,
- 18,14,15,15,19,18,15,14,14,19,18,14,15,15,19,18,
- 15,15,15,21,18,15,14,14,19,18,14,15,15,18,19,14,
- 15,14,20,19,14,15,15,18,19,14,15,15,19,19,15,14,
- 14,19,20,14,15,15,18,18,14,14,14,19,19,14,15,15,
- 19,18,12,12,12,13,13,16,15,15,11,11,16,15,15,12,
- 12,16,16,16,11,11,16,15,15,11,11,16,16,16,13,13,
- 17,16,16,13,13,17,17,17,12,12,16,16,16,13,13,17,
- 16,17,13,12,15,16,16,12,12,16,15,15,13,13,17,16,
- 16,12,12,16,16,15,12,12,16,16,16,12,12,17,17,16,
- 13,12,16,16,16,13,13,17,16,16,12,12,17,16,16,12,
- 12,17,17,16,12,12,16,17,16,12,12,17,15,15,13,13,
- 17,16,16,12,12,16,16,16,12,12,16,16,16,12,12,13,
- 13,13, 9, 9,15,14,14,13,13,16,15,14,14,14,16,14,
- 14,13,13,15,14,14,13,13,17,15,15,14,14,16,15,15,
- 15,15,16,15,15,14,14,16,15,15,15,15,17,15,15,14,
- 14,16,15,15,14,14,16,15,15,15,15,17,14,15,14,14,
- 16,15,15,14,14,17,15,15,13,14,17,15,15,14,14,16,
- 15,15,15,15,17,14,14,13,13,16,15,15,14,14,17,14,
- 14,13,13,17,15,15,14,14,16,15,16,15,15,17,14,14,
- 13,13,16,15,15,14,14,18,14,14,13,13,13,11,11,11,
- 11,15,14,14,12,12,15,14,14,13,13,16,14,14,12,12,
- 16,13,14,12,12,16,15,15,13,13,16,14,14,14,14,16,
- 15,15,13,13,16,14,14,13,13,16,14,15,13,13,15,15,
- 15,13,13,16,14,14,14,13,16,14,14,13,13,16,14,14,
- 13,13,16,15,15,13,13,16,15,15,13,13,16,14,14,14,
- 14,16,15,15,12,12,16,14,14,13,13,16,15,15,12,12,
- 16,15,15,13,13,16,14,14,14,14,17,15,14,12,12,16,
- 14,14,13,13,16,15,15,12,12,14,14,14, 8, 8,14,14,
- 14,17,18,14,15,15,17,18,14,14,14,17,18,14,14,14,
- 18,18,14,15,15,18,18,14,16,15,19,19,15,15,15,18,
- 19,15,16,15,20,19,15,15,15,18,18,14,15,15,18,19,
- 15,16,16,20,19,15,15,15,19,17,14,15,15,20,18,14,
- 15,15,18,18,14,15,15,18,19,14,15,15,19,20,14,14,
- 14,18,18,14,15,15,18,19,14,14,14,18,19,14,15,15,
- 19,18,15,16,16,20,21,14,14,15,19,19,14,15,15,19,
- 19,14,14,14,19,18,13,12,12, 9, 9,13,14,14,18,19,
- 14,14,14,18,19,14,14,14,18,18,14,14,14,18,18,14,
- 15,15,19,19,15,14,14,19,18,15,15,15,19,19,15,14,
- 14,19,20,14,15,15,18,19,14,15,15,20,18,15,14,14,
- 18,18,14,15,15,18,18,14,14,14,19,19,14,15,15,18,
- 18,14,15,15,19,18,15,14,14,19,19,14,15,15,19,18,
- 15,14,14,19,18,14,14,15,18,19,14,15,15,19,18,15,
- 14,14,18,19,14,15,14,19,20,14,14,14,19,19,14,15,
- 15,19,19,12,12,12,13,13,16,16,16,11,11,16,16,16,
- 12,12,17,16,16,11,11,17,15,15,11,11,16,16,16,13,
- 13,17,15,16,13,13,16,16,16,12,12,17,16,16,13,13,
- 17,17,16,12,12,17,17,16,13,13,17,16,16,13,13,17,
- 17,17,12,12,17,16,16,13,13,17,17,17,12,12,16,16,
- 16,12,12,17,15,15,13,13,17,16,16,11,11,17,16,16,
- 12,12,16,16,16,11,11,16,17,16,12,12,17,16,16,13,
- 13,17,17,16,12,12,17,17,16,12,12,17,16,16,11,11,
- 13,14,14, 9, 9,16,14,14,13,13,16,14,15,14,14,16,
- 14,14,12,12,16,14,14,13,13,17,15,15,14,14,16,15,
- 15,15,15,17,15,15,14,14,16,15,15,14,14,17,15,15,
- 14,14,16,15,15,14,14,16,15,15,15,16,17,14,15,14,
- 14,16,15,15,14,14,17,15,15,14,14,16,15,15,14,14,
- 16,15,15,15,15,17,14,14,13,13,16,15,15,14,14,16,
- 14,14,13,13,17,15,15,14,14,16,16,15,15,15,17,14,
- 14,13,13,16,15,15,14,14,17,14,14,13,13,13,11,11,
- 10,10,16,14,14,12,12,15,13,13,13,12,16,14,14,11,
- 11,16,14,14,11,11,16,14,15,13,14,16,14,14,13,13,
- 16,15,15,13,13,16,14,14,13,13,16,15,15,13,13,16,
- 15,15,13,13,17,14,14,14,14,17,15,15,13,13,16,14,
- 15,13,13,16,15,15,13,13,16,15,15,13,13,16,14,14,
- 13,13,17,15,15,12,12,16,14,14,12,12,16,15,15,12,
- 12,16,15,15,13,13,16,14,14,13,13,17,15,15,12,12,
- 17,14,14,12,12,16,15,15,12,12,13,14,14, 8, 8,13,
- 14,14,18,18,13,15,15,17,18,14,14,14,18,19,14,14,
- 14,19,18,14,15,15,19,18,15,15,16,21,18,15,15,15,
- 19,19,14,16,16,19,19,14,15,15,18,19,14,15,15,19,
- 20,14,16,16,19,18,15,15,15,18,19,14,15,15,19,18,
- 15,15,15,18,18,15,15,15,20,18,15,16,16,20,19,14,
- 15,14,18,19,14,15,16,19,20,14,15,15,19,18,15,15,
- 15,19,18,15,16,16,20,19,15,14,14,18,18,14,15,15,
- 19,19,14,15,15,18,18,13,12,12, 8, 8,13,14,14,19,
- 18,14,13,13,20,18,14,14,14,19,18,14,13,13,18,19,
- 14,15,15,20,19,15,14,14,19,19,14,15,15,19,18,15,
- 14,14,20,20,15,15,15,19,18,14,15,15,19,18,15,14,
- 14,19,18,14,15,15,20,19,14,14,14,20,19,14,15,15,
- 19,18,15,15,15,18,18,15,14,14,18,18,14,15,15,19,
- 19,14,14,14,19,19,14,15,15,19,19,15,15,15,19,18,
- 15,14,14,20,19,15,15,15,19,19,14,14,14,20,19,14,
- 15,15,20,20,12,12,12,13,13,17,16,16,11,11,16,16,
- 15,12,12,17,16,16,11,11,17,15,15,11,11,17,17,17,
- 13,13,17,16,16,13,13,17,17,17,12,12,17,16,16,13,
- 13,17,17,16,12,13,16,17,16,13,13,17,16,15,13,13,
- 17,16,16,12,12,17,16,16,12,13,17,16,17,12,12,17,
- 17,17,12,12,17,16,15,13,13,17,16,16,12,12,17,16,
- 16,12,12,17,16,16,11,11,16,16,16,12,12,17,15,15,
- 13,13,17,16,15,11,11,16,16,16,12,12,17,16,16,11,
- 11,13,14,14, 9, 9,16,14,14,13,13,16,14,15,14,14,
- 16,14,14,12,12,16,14,14,13,13,17,15,15,14,15,16,
- 15,15,15,15,17,15,15,14,14,16,15,15,15,14,16,15,
- 15,14,14,16,15,15,14,14,16,15,16,15,15,17,15,14,
- 14,14,16,15,15,14,14,17,15,15,13,13,16,15,15,14,
- 14,16,16,16,15,15,17,14,14,13,13,16,15,15,14,14,
- 18,14,15,13,13,16,15,15,14,14,16,16,15,15,15,16,
- 14,14,13,13,16,15,15,14,14,17,14,15,13,13,13,11,
- 11,10,10,15,14,14,12,12,15,14,14,13,13,16,14,14,
- 12,12,16,13,14,12,12,16,14,15,14,13,16,14,14,14,
- 14,16,15,15,13,13,16,14,14,13,13,16,15,15,13,13,
- 15,15,15,13,13,16,14,14,14,14,17,15,15,13,13,16,
- 14,14,13,13,16,15,15,13,13,16,15,15,13,13,16,14,
- 14,13,13,17,15,15,12,12,16,14,14,12,12,16,14,15,
- 12,12,16,15,15,13,13,16,14,14,13,13,17,15,15,12,
- 12,16,14,14,12,12,16,15,15,12,12,14,14,14, 8, 8,
- 14,14,14,17,17,14,15,15,18,18,14,14,14,18,17,14,
- 14,14,18,18,14,15,15,18,20,15,16,15,19,18,15,15,
- 15,19,18,15,15,16,19,18,15,15,15,18,18,14,15,15,
- 18,18,15,16,16,18,19,15,15,15,18,18,15,15,15,19,
- 20,15,15,15,18,18,15,15,15,18,18,15,16,16,19,19,
- 15,14,15,19,19,15,15,15,19,20,14,14,15,18,18,15,
- 15,15,19,19,15,16,16,19,19,15,15,14,18,19,15,15,
- 15,20,20,15,15,14,18,18,13,12,12, 8, 8,13,14,14,
- 18,18,14,14,14,18,18,14,14,14,18,20,14,14,14,18,
- 18,14,15,15,19,18,15,14,14,18,19,15,15,15,18,19,
- 15,14,14,18,19,15,15,15,18,18,14,15,14,18,19,15,
- 14,14,21,19,15,15,15,19,18,14,14,14,19,18,14,15,
- 15,19,18,15,15,15,20,19,15,14,14,20,18,14,15,15,
- 18,19,14,14,14,19,18,14,15,15,18,19,15,15,15,18,
- 19,15,14,14,19,19,15,15,15,19,19,14,14,14,19,20,
- 14,15,15,18,19,
-};
-
-static const static_codebook _44p0_p3_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p0_p3_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p0_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44p0_p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p0_p4_0[] = {
- 2, 6, 6,14,14, 6, 8, 8,14,14, 7, 7, 7,14,14, 0,
- 13,13,15,16, 0,13,13,15,15, 7, 8, 8,15,15, 9,10,
- 10,16,16, 9, 8, 8,14,15, 0,13,13,17,17, 0,13,13,
- 16,16, 8, 8, 8,15,15,12,11,11,16,16, 9, 8, 8,14,
- 14, 0,13,13,17,17, 0,13,13,15,15, 0,14,14,16,16,
- 0, 0, 0,18,19, 0,12,12,16,15, 0,16,16, 0,20, 0,
- 14,14,16,16, 0,14,14,17,17, 0, 0, 0,19,19, 0,12,
- 12,15,15, 0,18,17,21,21, 0,14,14,16,16, 5, 7, 7,
- 12,13, 9,10, 9,14,14,11,10,10,14,14, 0, 0, 0,18,
- 17, 0,20,21,18,18, 9,10,10,14,14,12,12,12,17,16,
- 12,10,10,14,14, 0,20,20,18,17, 0,21,21,17,17,11,
- 10,10,14,14,15,13,13,18,18,13,11,11,14,14, 0,20,
- 0,18,18, 0,20,21,18,17, 0,21, 0,18,19, 0, 0, 0,
- 0,21, 0,21,20,16,17, 0, 0, 0,21,21, 0, 0, 0,20,
- 18, 0,20, 0,17,18, 0, 0, 0, 0, 0, 0, 0,20,16,17,
- 0, 0, 0,20, 0, 0, 0, 0,18,18, 6, 6, 6,13,13, 8,
- 5, 5,11,11, 9, 6, 6,13,13, 0, 9, 9,12,12, 0,10,
- 10,14,14, 9, 7, 7,13,13,12, 9, 9,13,13,10, 6, 6,
- 13,13, 0,10,10,14,14, 0,10,10,13,13, 9, 7, 7,13,
- 13,13,10,10,13,13,11, 6, 6,13,13, 0,10,10,15,15,
- 0,10,10,13,13, 0,12,11,15,15, 0,20,19,17,16, 0,
- 9, 9,13,13, 0,13,13,20,19, 0,11,11,13,13, 0,11,
- 11,15,15, 0,20,19,17,17, 0,10,10,13,13, 0,14,15,
- 0,21, 0,12,12,13,13, 0,10,10,12,12, 0,11,11,15,
- 15, 0,11,11,15,15, 0,15,15,20,20, 0,16,16, 0, 0,
- 0,11,11,15,15, 0,14,14,17,17, 0,11,11,15,15, 0,
- 15,15,20,21, 0,16,16,21,21, 0,12,12,15,15, 0,15,
- 15,18,20, 0,11,11,16,15, 0,15,15,21,21, 0,16,16,
- 0,21, 0,16,16, 0, 0, 0, 0, 0, 0, 0, 0,14,14,21,
- 21, 0,17,18, 0, 0, 0,16,17,20, 0, 0,16,16, 0, 0,
- 0, 0, 0, 0, 0, 0,15,15,20,20, 0,19,18, 0,21, 0,
- 18,17, 0, 0, 0,10,10,11,11, 0,10,10,10,10, 0,11,
- 11,12,12, 0,11,11, 9, 9, 0,13,13,12,12, 0,11,11,
- 12,12, 0,13,13,12,12, 0,10,10,12,12, 0,12,12,13,
- 13, 0,12,12,12,12, 0,11,11,12,12, 0,13,13,12,12,
- 0,10,10,12,12, 0,13,13,13,13, 0,12,12,12,12, 0,
- 14,13,13,13, 0,19,21,15,15, 0,12,11,12,12, 0,16,
- 15,19,19, 0,13,13,11,11, 0,13,13,13,13, 0, 0,21,
- 15,16, 0,12,12,12,12, 0,16,16,19,21, 0,13,13,12,
- 12, 7, 7, 7,16,16,11, 9, 9,16,16,12, 9, 9,16,16,
- 0,13,13,16,16, 0,14,14,17,16,11, 9, 9,16,16,14,
- 12,11,17,17,13, 8, 9,15,15, 0,13,13,19,19, 0,13,
- 13,16,15,12,10,10,17,17,15,12,12,19,18,14, 9, 9,
- 17,16, 0,14,14,18, 0, 0,14,13,16,16, 0,14,15,18,
- 17, 0,21, 0,19,21, 0,12,12,16,16, 0,16,16, 0, 0,
- 0,14,14,16,16, 0,14,14,18,18, 0, 0,21,20, 0, 0,
- 13,13,16,17, 0,18,18, 0, 0, 0,15,14,17,16, 8, 7,
- 7,14,14,11,10,10,15,15,13,10,10,15,15, 0,21,20,
- 19,19, 0,21, 0,17,18,11,10,10,15,16,14,12,12,18,
- 18,14,11,11,15,14, 0,21,20,18,19, 0, 0,21,18,18,
- 12,11,11,16,16,16,14,14,18,20,14,11,11,16,15, 0,
- 20,20,19,19, 0, 0,20,18,18, 0,21, 0,18,19, 0, 0,
- 0, 0, 0, 0,20,20,17,18, 0, 0, 0,20,20, 0, 0, 0,
- 19,19, 0, 0, 0,20,18, 0, 0, 0, 0, 0, 0, 0,21,18,
- 18, 0,21,21, 0,21, 0, 0, 0,19,20,11, 9, 9,14,14,
- 13,10,10,14,14,13,11,11,15,15, 0,13,13,13,13, 0,
- 14,14,16,16,13,11,11,15,15,16,12,12,15,15,14,10,
- 10,14,14, 0,14,14,16,16, 0,14,14,15,15,13,10,10,
- 15,15,17,13,14,15,16,15,10,10,15,15, 0,14,14,17,
- 16, 0,14,14,15,15, 0,15,15,17,17, 0, 0,21,18,18,
- 0,13,13,15,15, 0,16,16,21,20, 0,14,14,15,14, 0,
- 15,14,16,17, 0, 0,20,20,19, 0,13,13,15,15, 0,19,
- 18, 0, 0, 0,15,15,15,15, 0,11,11,14,14, 0,12,12,
- 16,16, 0,12,12,16,16, 0,15,16,21,21, 0,16,17,21,
- 0, 0,12,12,17,16, 0,14,14,18,19, 0,11,11,16,16,
- 0,15,15,20,21, 0,16,16,21, 0, 0,12,12,17,16, 0,
- 15,15,19,19, 0,12,12,16,17, 0,16,15, 0, 0, 0,16,
- 16, 0, 0, 0,17,17, 0,21, 0, 0, 0, 0, 0, 0,14,15,
- 20, 0, 0,17,17, 0, 0, 0,17,17, 0, 0, 0,17,16, 0,
- 0, 0, 0, 0, 0, 0, 0,15,15, 0, 0, 0,18,18, 0, 0,
- 0,18,17, 0, 0, 0,11,11,14,14, 0,12,12,15,15, 0,
- 12,12,15,15, 0,13,13,14,14, 0,14,14,17,17, 0,12,
- 12,16,16, 0,14,14,16,16, 0,11,11,15,15, 0,13,13,
- 16,17, 0,13,13,16,16, 0,12,12,15,15, 0,14,14,17,
- 16, 0,11,11,15,15, 0,14,14,17,17, 0,13,13,16,16,
- 0,15,15,17,18, 0,21,20,20,21, 0,12,12,15,15, 0,
- 16,16,20,21, 0,14,14,15,15, 0,14,14,17,17, 0, 0,
- 0,18,19, 0,12,13,15,15, 0,18,17,21, 0, 0,14,15,
- 15,15, 8, 8, 8,16,16,12,10,10,16,16,13, 9, 9,16,
- 16, 0,14,14,18,17, 0,14,14,16,17,12,10,10,18,17,
- 14,12,11,18,18,14, 9, 9,16,16, 0,13,13,18,18, 0,
- 13,13,17,16,12, 9, 9,16,17,17,13,13,17,17,14, 9,
- 9,15,15, 0,14,14,20,19, 0,13,13,16,16, 0,15,15,
- 19,18, 0, 0, 0,20,19, 0,12,13,17,17, 0,16,16,20,
- 0, 0,14,14,16,17, 0,14,14,19,18, 0, 0, 0,20,20,
- 0,13,13,16,16, 0,18,17, 0, 0, 0,15,15,16,16, 9,
- 7, 7,14,14,12,10,10,15,15,13,10,10,15,15, 0,21,
- 0,18,19, 0,20,21,19,18,12,10,10,16,15,15,13,13,
- 18,18,14,11,11,15,15, 0, 0, 0,19,18, 0, 0,21,18,
- 18,13,11,11,15,15,16,14,14,17,19,15,11,11,15,15,
- 0,21,21,20,18, 0, 0,21,18,18, 0, 0,21,21,19, 0,
- 0, 0, 0, 0, 0,19,20,18,17, 0, 0, 0,21,21, 0,21,
- 0,20,18, 0, 0,21,19,19, 0, 0, 0, 0, 0, 0,20,21,
- 17,17, 0, 0, 0, 0, 0, 0,21, 0,18,20, 0,10,10,14,
- 14, 0,11,11,15,15, 0,11,11,15,15, 0,14,14,15,15,
- 0,15,15,16,16, 0,11,12,16,16, 0,13,13,16,16, 0,
- 11,11,15,15, 0,14,14,17,17, 0,14,14,15,15, 0,11,
- 11,16,15, 0,14,14,15,15, 0,11,11,15,15, 0,15,15,
- 17,17, 0,14,14,15,15, 0,16,16,18,18, 0, 0, 0,20,
- 19, 0,14,13,16,15, 0,17,17,21, 0, 0,15,15,15,15,
- 0,16,15,17,16, 0,20, 0,20,18, 0,13,14,15,15, 0,
- 19,18, 0,21, 0,15,15,15,15, 0,11,11,14,14, 0,12,
- 12,16,16, 0,12,12,16,16, 0,16,15,20,21, 0,17,16,
- 0, 0, 0,12,12,16,16, 0,14,14,18,18, 0,11,11,16,
- 16, 0,15,15,21,20, 0,16,16, 0, 0, 0,12,12,16,17,
- 0,15,14,19,19, 0,11,12,16,16, 0,15,15,21, 0, 0,
- 16,16, 0, 0, 0,16,17, 0, 0, 0, 0, 0, 0, 0, 0,15,
- 15,21, 0, 0,17,17, 0, 0, 0,17,17, 0, 0, 0,17,16,
- 0, 0, 0, 0, 0, 0, 0, 0,15,15, 0,20, 0,19,20, 0,
- 0, 0,17,17, 0, 0, 0,12,12,15,15, 0,12,12,15,15,
- 0,12,12,16,16, 0,13,13,15,15, 0,15,15,17,17, 0,
- 13,13,17,16, 0,14,14,17,17, 0,11,11,16,16, 0,14,
- 14,17,17, 0,13,13,16,16, 0,12,12,16,16, 0,15,15,
- 16,17, 0,11,11,15,16, 0,14,14,17,17, 0,13,14,16,
- 16, 0,15,15,18,18, 0,21,20,20,19, 0,13,13,16,17,
- 0,16,16, 0, 0, 0,14,14,16,16, 0,15,15,18,18, 0,
- 0, 0,20,19, 0,13,13,16,16, 0,17,17, 0, 0, 0,14,
- 14,16,16, 0,11,11,16,16, 0,13,13,18,17, 0,13,13,
- 17,17, 0,16,16,17,17, 0,16,16,17,18, 0,12,12,17,
- 17, 0,15,15,18,18, 0,12,12,16,16, 0,16,16,19,19,
- 0,15,15,16,17, 0,12,12,17,17, 0,17,17,18,18, 0,
- 12,12,17,17, 0,16,16,19,19, 0,15,16,17,17, 0,16,
- 16,18,17, 0, 0, 0,21,21, 0,13,13,16,16, 0,17,17,
- 0,20, 0,15,15,16,17, 0,16,16,19,18, 0, 0,21,20,
- 21, 0,14,14,17,16, 0,20, 0, 0, 0, 0,15,16,16,17,
- 0, 9, 9,14,14, 0,13,13,16,16, 0,14,14,15,15, 0,
- 0,20,19,19, 0, 0, 0,19,19, 0,12,12,15,15, 0,15,
- 16,19,18, 0,14,14,15,15, 0,21, 0,18,18, 0,20, 0,
- 17,18, 0,13,13,16,16, 0,17,17,17,19, 0,14,14,16,
- 15, 0,21,20,20,19, 0, 0, 0,19,19, 0, 0, 0,19,18,
- 0, 0, 0, 0, 0, 0,20,20,17,18, 0, 0, 0,21,21, 0,
- 0, 0,18,18, 0,21, 0,18,19, 0, 0, 0, 0, 0, 0,20,
- 21,18,18, 0, 0, 0,20,21, 0, 0, 0,19,19, 0,18,18,
- 15,15, 0,20,21,17,17, 0,19,21,17,17, 0, 0, 0,17,
- 18, 0, 0, 0,20,19, 0,19,19,17,17, 0, 0, 0,18,18,
- 0,19,20,16,17, 0, 0,21,20,20, 0,19,20,19,18, 0,
- 19,20,16,16, 0, 0, 0,18,19, 0,19,20,17,17, 0, 0,
- 21, 0,20, 0,21,21,17,19, 0,20, 0,19,20, 0, 0, 0,
- 20, 0, 0,19,18,17,16, 0, 0, 0, 0, 0, 0, 0,20,17,
- 17, 0,20,21,18,20, 0, 0, 0, 0,21, 0,19,20,17,17,
- 0, 0, 0, 0, 0, 0,20,21,17,17, 0,11,11,14,14, 0,
- 13,13,16,17, 0,13,13,16,16, 0,17,17, 0,21, 0,18,
- 17,21, 0, 0,13,13,16,16, 0,15,15,18,18, 0,12,12,
- 16,16, 0,17,16,21, 0, 0,17,17, 0, 0, 0,12,12,17,
- 17, 0,17,17,19,21, 0,13,12,16,16, 0,17,17, 0, 0,
- 0,17,17, 0, 0, 0,18,17, 0,21, 0, 0, 0, 0, 0, 0,
- 15,15,20, 0, 0,20,18, 0, 0, 0,17,18, 0, 0, 0,16,
- 17, 0, 0, 0, 0, 0, 0, 0, 0,15,15, 0, 0, 0,19,19,
- 0, 0, 0,18,18, 0, 0, 0,14,14,18,18, 0,16,16, 0,
- 21, 0,16,16,21,21, 0,17,17, 0,20, 0,17,17,20, 0,
- 0,16,15, 0, 0, 0,20,20, 0, 0, 0,15,15,20,20, 0,
- 17,17,21, 0, 0,17,18,20,20, 0,15,15,20,20, 0,18,
- 18, 0, 0, 0,15,15,19,20, 0,17,18, 0, 0, 0,17,17,
- 20,20, 0,18,17,21, 0, 0, 0, 0, 0,21, 0,15,15,20,
- 20, 0,19,19, 0, 0, 0,17,17,21, 0, 0,17,17, 0, 0,
- 0, 0, 0,21, 0, 0,15,15,19,19, 0,20,21, 0, 0, 0,
- 18,17,21,21, 0,12,12,16,16, 0,14,14,17,17, 0,13,
- 13,17,18, 0,16,16,18,17, 0,16,16,18,18, 0,13,13,
- 18,18, 0,15,16,19,18, 0,13,13,16,16, 0,16,16,20,
- 18, 0,16,16,17,17, 0,12,13,17,17, 0,17,16,18,18,
- 0,12,12,16,16, 0,17,16,20,19, 0,16,16,16,16, 0,
- 16,17,18,20, 0, 0, 0,21,20, 0,14,14,17,16, 0,19,
- 18, 0,20, 0,16,16,17,16, 0,16,16,17,18, 0, 0,21,
- 21,21, 0,14,14,16,16, 0,20,20,21, 0, 0,16,16,16,
- 16, 0,10,10,14,14, 0,14,14,15,16, 0,14,14,15,15,
- 0, 0,21,18,18, 0, 0,21,18,19, 0,13,13,16,16, 0,
- 16,16,18,18, 0,14,14,15,15, 0,21, 0,18,18, 0,21,
- 0,18,18, 0,13,13,16,16, 0,17,17,19,20, 0,14,14,
- 15,15, 0, 0, 0,18,20, 0, 0,21,18,18, 0, 0,21,19,
- 18, 0, 0, 0, 0, 0, 0,20,21,18,17, 0, 0, 0,21,21,
- 0, 0, 0,19,19, 0,21, 0,18,19, 0, 0, 0, 0, 0, 0,
- 21,20,17,17, 0, 0,21,20, 0, 0, 0, 0,19,19, 0,19,
- 20,15,16, 0, 0,20,18,17, 0,20,21,17,18, 0,21, 0,
- 18,18, 0, 0, 0,19,19, 0,20,20,17,18, 0, 0, 0,18,
- 19, 0,20,20,18,17, 0, 0, 0, 0,20, 0, 0,21,17,18,
- 0,20,21,17,17, 0, 0, 0,18,18, 0,19,19,17,17, 0,
- 0, 0,21,21, 0,20,20,17,17, 0, 0, 0,21,19, 0, 0,
- 0,20,19, 0,21,20,17,18, 0, 0, 0, 0, 0, 0, 0,20,
- 18,17, 0,21,20,18,18, 0, 0, 0,20,21, 0,20,20,17,
- 17, 0, 0, 0, 0, 0, 0,20, 0,17,17, 0,11,11,13,14,
- 0,13,13,16,16, 0,13,13,16,16, 0,17,17, 0, 0, 0,
- 17,18, 0, 0, 0,13,13,16,16, 0,15,16,18,18, 0,13,
- 13,16,17, 0,16,17,20, 0, 0,17,18,20, 0, 0,13,13,
- 17,17, 0,16,16,20,21, 0,13,13,16,16, 0,17,17,21,
- 0, 0,17,18, 0, 0, 0,17,18, 0,21, 0, 0, 0, 0, 0,
- 0,15,15,20, 0, 0,19,19, 0, 0, 0,17,17, 0, 0, 0,
- 18,17,21,20, 0, 0, 0, 0, 0, 0,16,16,20,21, 0,21,
- 20, 0,21, 0,19,21, 0, 0, 0,15,15, 0, 0, 0,16,17,
- 0,19, 0,16,16, 0, 0, 0,17,17, 0, 0, 0,19,18, 0,
- 0, 0,16,16,20,20, 0,20,18,21, 0, 0,15,15,21,21,
- 0,18,18, 0, 0, 0,18,19, 0, 0, 0,16,15, 0,21, 0,
- 20,19, 0, 0, 0,16,16, 0, 0, 0,20,18, 0,21, 0,17,
- 18,21, 0, 0,18,19, 0, 0, 0, 0, 0, 0, 0, 0,16,16,
- 20,20, 0,19,20, 0, 0, 0,17,17, 0, 0, 0,18,17,20,
- 21, 0, 0, 0, 0, 0, 0,16,16, 0,20, 0,20,22, 0, 0,
- 0,18,18, 0,22,
-};
-
-static const static_codebook _44p0_p4_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p0_p4_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44p0_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44p0_p4_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44p0_p4_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p0_p4_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44p0_p4_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p0_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44p0_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p0_p5_0[] = {
- 1, 6, 6, 6, 8, 8, 7, 8, 8, 7, 9, 8,10,11,11, 9,
- 8, 8, 7, 8, 8,11,11,11, 9, 8, 8, 6, 7, 7,10,10,
- 10,10,10,10,10,10,10,14,13,13,12,11,11,10,10,10,
- 14,14,13,13,11,11, 6, 6, 6, 8, 5, 5, 8, 7, 7, 8,
- 7, 7,11, 9, 9, 9, 7, 7, 8, 7, 7,12,10,10,10, 7,
- 7, 7, 8, 8,12,11,11,12,10,10,11,10,10,14,13,13,
- 13,10,10,11,10,11,16,14,14,13,10,10, 7, 8, 7,12,
- 12,12,12,11,11,12,11,11,16,14,15,13,12,12,11,11,
- 11,17,15,14,14,13,13,10, 9, 9,13,11,11,13,11,11,
- 12,11,11,16,14,13,14,11,11,12,11,11,16,15,14,14,
- 11,11, 7, 8, 8,12,11,11,12,10,10,12,10,10,16,14,
- 13,13,11,11,12,10,10,16,14,14,13,10,10, 8, 8, 8,
- 12,12,12,12,11,11,12,11,11,16,14,15,14,12,12,12,
- 11,11,16,15,15,14,12,12,10,10,10,13,11,11,13,11,
- 11,12,12,12,16,14,14,14,11,11,12,11,11,17,14,15,
- 14,11,11,
-};
-
-static const static_codebook _44p0_p5_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p0_p5_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44p0_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44p0_p5_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p0_p5_1[] = {
- 2, 7, 7, 7, 8, 8, 7, 7, 7, 7, 8, 8, 8, 8, 9, 8,
- 7, 7, 8, 8, 8, 9, 9, 9, 9, 7, 7, 6, 6, 6, 9, 7,
- 7, 9, 7, 7, 9, 8, 8,10, 8, 8,10, 8, 8,10, 8, 8,
- 10, 8, 8,10, 8, 8, 7, 6, 6, 9, 6, 6, 9, 6, 6, 9,
- 7, 7,10, 8, 8, 9, 6, 6, 9, 7, 7,10, 8, 8, 9, 7,
- 7, 7, 8, 8,11, 9, 9,11, 9, 9,11, 9, 9,12, 9, 9,
- 12, 8, 8,12, 9, 9,12,10, 9,12, 8, 8, 8, 7, 7,10,
- 9, 9,11, 9, 9,11, 9, 9,11,11,10,11, 9, 9,11,10,
- 9,11,10,11,11, 9, 9,10, 8, 8,11, 9, 9,11, 9, 9,
- 11, 9, 9,11,10,10,11, 9, 9,11, 9, 9,11,10,10,11,
- 9, 9, 9, 8, 8,12, 9, 9,12, 9, 9,11, 9, 9,12, 9,
- 9,12, 8, 8,12, 9, 9,12, 9, 9,12, 8, 8, 9, 7, 7,
- 11, 9,10,11,10, 9,11, 9, 9,11,11,11,11, 9, 9,11,
- 10,10,11,11,11,11, 9, 9,10, 9, 9,11, 9, 9,11,10,
- 10,11,10, 9,11,10,10,11, 9, 9,11,10,10,11,10,11,
- 11, 9, 9,
-};
-
-static const static_codebook _44p0_p5_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p0_p5_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44p0_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44p0_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p0_p6_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p0_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p0_p6_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p0_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44p0_p6_1[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p0_p6_1[] = {
- 1, 3, 2, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
- 11,12,12,12,14,14,14,15,15,
-};
-
-static const static_codebook _44p0_p6_1 = {
- 1, 25,
- (char *)_vq_lengthlist__44p0_p6_1,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44p0_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44p0_p6_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p0_p6_2[] = {
- 3, 4, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p0_p6_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44p0_p6_2,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44p0_p6_2,
- 0
-};
-
-static const char _huff_lengthlist__44p0_short[] = {
- 3, 3, 7, 8,10,13,16, 3, 2, 5, 7, 9,13,16, 6, 4,
- 4, 6,10,14,15, 7, 5, 5, 7,10,13,14, 9, 8, 9, 9,
- 9,11,13,12,11,12, 9, 7, 8,11,14,12,10, 6, 5, 7,
- 10,
-};
-
-static const static_codebook _huff_book__44p0_short = {
- 2, 49,
- (char *)_huff_lengthlist__44p0_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p1_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44p1_l0_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 9, 9,10,10,11,11, 4, 6, 5,
- 8, 6, 9, 8,10, 9,10,10,11,10, 5, 5, 6, 6, 8, 8,
- 9, 9,10,10,10,10,11, 7, 8, 8, 9, 8,10, 9,10, 9,
- 11,10,11,10, 7, 8, 8, 8,10, 9,10,10,10,10,11,10,
- 11, 9,10,10,11,11,11,11,12,11,12,11,12,11, 9,10,
- 10,11,11,11,11,11,11,11,12,11,12,11,11,11,12,12,
- 12,12,12,12,12,12,12,11,11,12,11,12,12,12,12,12,
- 12,12,12,11,12,12,12,12,12,13,12,13,12,12,12,12,
- 12,12,12,12,12,13,13,13,13,12,13,12,12,12,12,12,
- 13,13,12,13,12,13,12,13,12,12,12,12,13,13,13,13,
- 13,13,12,12,12,12,12,11,12,
-};
-
-static const static_codebook _44p1_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44p1_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44p1_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44p1_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p1_l0_1[] = {
- 1, 4, 4, 6, 6, 5, 5, 5, 6, 6, 5, 6, 5, 6, 6, 6,
- 6, 7, 7, 7, 6, 7, 6, 7, 7,
-};
-
-static const static_codebook _44p1_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44p1_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p1_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44p1_l1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p1_l1_0[] = {
- 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p1_l1_0 = {
- 2, 9,
- (char *)_vq_lengthlist__44p1_l1_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p1_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44p1_lfe[] = {
- 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p1_lfe = {
- 2, 4,
- (char *)_huff_lengthlist__44p1_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44p1_long[] = {
- 3, 3, 7, 7, 9,13,16, 3, 2, 4, 6,10,13,17, 7, 4,
- 4, 6, 9,12,14, 7, 6, 6, 5, 7, 9,12,10,10, 9, 6,
- 6, 9,12,14,14,13, 9, 8,10,11,18,18,15,13,11,10,
- 11,
-};
-
-static const static_codebook _huff_book__44p1_long = {
- 2, 49,
- (char *)_huff_lengthlist__44p1_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p1_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p1_p1_0[] = {
- 1, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,
-};
-
-static const static_codebook _44p1_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p1_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p1_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44p1_p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p1_p2_0[] = {
- 1, 4, 4, 0, 7, 7, 0, 8, 8, 0, 9, 9, 0,12,12, 0,
- 8, 8, 0, 9, 9, 0,12,12, 0, 8, 8, 0, 6, 6, 0,11,
- 11, 0,11,11, 0,12,12, 0,14,14, 0,11,11, 0,12,12,
- 0,14,14, 0,11,11, 0, 6, 6, 0, 6, 5, 0, 7, 6, 0,
- 7, 7, 0,10,10, 0, 6, 6, 0, 7, 7, 0,10,10, 0, 7,
- 7, 0, 7, 7, 0,10,10, 0,11,11, 0,11,11, 0,14,14,
- 0,10,10, 0,12,12, 0,14,14, 0,12,12, 0, 6, 6, 0,
- 11,11, 0,11,11, 0,12,12, 0,14,14, 0,11,11, 0,12,
- 12, 0,15,15, 0,11,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, 8, 8, 0,11,11, 0,11,11, 0,12,12, 0,15,
- 15, 0,12,12, 0,11,11, 0,15,15, 0,11,11, 0, 6, 6,
- 0,11,11, 0,12,12, 0,12,12, 0,15,15, 0,11,11, 0,
- 12,12, 0,14,14, 0,12,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,
-};
-
-static const static_codebook _44p1_p2_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p1_p2_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44p1_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44p1_p2_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p1_p2_1[] = {
- 1, 3, 3, 0, 8, 8, 0, 8, 8, 0,10,10, 0, 9, 9, 0,
- 10,10, 0,10,10, 0, 9, 9, 0,10,10, 0, 7, 7, 0, 7,
- 7, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0, 8, 8, 0, 9, 9,
- 0, 8, 8, 0, 8, 8, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0,
- 10,10, 0, 9, 9, 0, 9, 9, 0,10,10, 0, 9, 9, 0,10,
- 10, 0, 8, 8, 0,11,11, 0,11,11, 0,12,12, 0,11,11,
- 0,12,12, 0,12,12, 0,12,12, 0,12,12, 0, 8, 8, 0,
- 11,11, 0,11,11, 0,13,12, 0,12,12, 0,13,12, 0,13,
- 13, 0,12,12, 0,13,13, 0, 7, 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, 8, 8, 0,11,11, 0,11,11, 0,13,12, 0,12,
- 12, 0,12,12, 0,12,12, 0,11,11, 0,12,12, 0, 8, 8,
- 0,12,12, 0,12,12, 0,13,13, 0,12,12, 0,13,13, 0,
- 13,13, 0,12,13, 0,13,13, 0, 7, 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,
-};
-
-static const static_codebook _44p1_p2_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p1_p2_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p1_p2_1,
- 0
-};
-
-static const long _vq_quantlist__44p1_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p1_p3_0[] = {
- 1, 6, 6, 6, 7, 7, 7, 8, 8, 7, 8, 8,10,11,11, 9,
- 8, 8, 7, 9, 9,11,12,12, 9, 8, 8, 6, 7, 7, 9,11,
- 11,10,11,11,10,11,11,13,13,13,11,12,12,10,11,11,
- 13,14,14,12,12,12, 6, 6, 6, 8, 6, 6, 8, 6, 6, 9,
- 7, 7,12,10,10,10, 6, 6, 9, 7, 7,12,10,10,11, 7,
- 6, 7, 8, 8,12,10,10,12,10,10,11,10,10,15,13,13,
- 13,10,10,12,11,11,15,13,13,14,11,11, 8, 7, 7,12,
- 11,11,12,11,11,11,11,11,14,14,14,13,12,12,12,11,
- 11,16,15,15,14,12,12, 0,10,10, 0,11,11, 0,12,12,
- 0,11,11, 0,14,14, 0,11,11, 0,11,11, 0,15,15, 0,
- 11,11, 7, 8, 8,13,10,10,12,10,10,12,11,11,15,13,
- 13,14,11,11,12,10,10,16,14,14,14,10,10, 8, 7, 7,
- 12,11,11,13,11,11,12,11,11,15,14,14,14,12,12,13,
- 12,12,15,14,14,15,12,12, 0,11,11, 0,12,12, 0,12,
- 12, 0,12,12, 0,15,15, 0,12,12, 0,12,12, 0,15,14,
- 0,12,12,
-};
-
-static const static_codebook _44p1_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p1_p3_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44p1_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44p1_p3_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p1_p3_1[] = {
- 2, 3, 4, 7, 7,10,12,12,12,12,10,11,11,13,13,11,
- 12,12,11,11,12,12,12,12,12,11,13,13,13,13,12,12,
- 12,13,14,12,13,13,13,13,12,13,13,13,13,12,13,13,
- 13,13,11,13,13,13,13,12,12,12,14,14,12,13,13,12,
- 12,12,12,13,13,13,12,13,13,13,13,12,13,13,13,13,
- 12,12,12,14,14,12,13,13,12,12,12,13,13,13,13,12,
- 13,13,12,12,12,13,13,13,13,12,12,12,14,14,12,13,
- 13,12,12,12,13,13,13,13,12,13,13,12,12,10,10,11,
- 10,10,11,11,11,11,11,11, 9, 9,10,10,12,11,11,10,
- 10,12,10,10,10,10,13,12,12,12,12,13,11,11,11,11,
- 13,12,12,12,12,13,11,11,11,11,13,12,12,12,12,13,
- 12,12,12,12,13,11,11,11,11,13,12,12,12,12,13,11,
- 11,11,11,13,12,12,11,11,13,12,12,11,11,13,11,11,
- 11,11,13,12,12,11,11,13,11,11,11,11,13,12,12,11,
- 11,13,12,12,11,11,13,11,11,11,11,13,12,12,11,11,
- 13,11,11,11,11,13,12,12,11,11,11,11,11,10,10,11,
- 11,11, 9, 9,11,12,12,11,11,12,12,12, 9, 9,13,13,
- 13,10,10,13,13,13,11,11,13,13,13,14,14,13,13,13,
- 11,10,13,13,14,12,12,13,13,13,11,11,13,13,13,11,
- 11,13,13,13,14,14,13,13,13,10,10,13,13,13,11,11,
- 13,13,13,10,10,13,14,13,11,11,13,14,14,14,14,13,
- 13,13,10,10,13,14,14,11,11,13,13,13,10,10,13,14,
- 14,11,11,13,13,13,14,14,14,13,13,10,10,13,14,14,
- 11,11,13,13,13,10,10,14,12,12, 9, 9,14,12,12, 9,
- 9,14,11,11, 9, 9,14,12,12, 8, 8,14,11,11, 7, 7,
- 15,13,13,10,10,15,12,12,10,10,15,13,13,10,10,15,
- 12,12,10,10,15,13,13,10,10,15,13,13,10,10,15,12,
- 12,10,10,15,13,13,10,10,15,12,12,10,10,15,13,13,
- 10,10,15,13,13,10,10,15,12,12,10,10,15,13,13, 9,
- 9,15,12,12, 9, 9,14,13,13, 9, 9,15,13,13,10,10,
- 15,12,12,10,10,15,13,13, 9, 9,15,12,12, 9, 9,15,
- 13,13, 9, 9,13,12,12, 9, 9,13,13,13, 8, 8,13,13,
- 13, 9, 9,13,13,13, 7, 7,14,13,13, 8, 8,14,14,14,
- 10,10,15,14,14,11,11,14,14,14, 9, 9,15,14,14,10,
- 10,15,14,14, 9, 9,14,14,14,10,10,15,14,14,11,11,
- 15,14,14, 9, 9,14,14,14,10,10,14,14,14, 9, 9,15,
- 14,15,10,10,15,14,14,11,11,14,14,14, 9, 9,14,14,
- 14, 9, 9,14,14,14, 8, 8,15,14,14,10,10,15,14,14,
- 11,11,14,14,14, 9, 9,15,14,14, 9, 9,14,14,14, 8,
- 8,12,12,12,13,13,16,16,16,11,11,17,16,16,12,12,
- 17,16,16,11,11,17,16,16,11,11,17,17,16,13,13,17,
- 16,16,13,13,18,17,16,12,12,17,16,16,13,13,17,16,
- 17,12,12,18,17,17,13,13,17,16,16,14,14,18,17,17,
- 12,12,18,16,16,13,13,17,17,17,13,12,17,17,17,13,
- 13,17,16,16,13,13,18,17,17,12,12,17,16,16,13,12,
- 17,17,17,12,12,18,17,17,13,13,18,16,16,14,14,18,
- 17,17,12,12,17,17,17,13,13,18,17,18,12,12,13,14,
- 14,10,10,16,14,14,13,13,17,15,15,14,14,17,14,14,
- 12,13,16,14,14,13,13,17,15,15,14,14,16,16,16,15,
- 15,17,15,15,14,14,17,16,16,14,15,17,15,15,14,14,
- 17,15,16,14,14,17,16,16,15,15,17,15,15,13,13,17,
- 15,15,14,14,18,15,15,13,14,17,15,15,14,14,16,16,
- 16,15,15,17,15,15,13,13,17,15,15,14,14,17,15,15,
- 13,13,17,15,15,14,14,16,16,16,15,15,17,15,15,13,
- 13,17,15,15,14,14,18,15,15,13,13,13,11,11,10,10,
- 16,14,14,13,12,16,14,14,13,13,16,15,14,12,12,16,
- 14,14,12,12,16,15,15,14,14,16,14,14,14,14,17,15,
- 15,13,13,16,15,15,14,14,17,15,15,13,14,17,15,15,
- 14,14,17,15,14,14,14,17,15,15,13,13,17,15,15,14,
- 14,17,15,15,13,13,17,15,15,14,14,17,14,14,14,14,
- 17,15,15,13,13,17,15,15,13,13,17,15,15,13,13,17,
- 15,15,14,14,17,15,15,14,14,17,15,15,13,13,17,15,
- 15,13,13,17,15,15,13,13,14,14,15, 8, 8,14,14,14,
- 19,19,14,15,15,18,19,14,14,14,19,18,14,14,14,19,
- 19,15,15,15,19,18,15,16,16,19,19,15,15,15,19,19,
- 15,16,16,20,19,15,15,15,19,19,15,15,15,19,19,16,
- 16,16,20,19,15,15,15,19,18,15,16,16,20,19,15,15,
- 15,18,18,15,15,15,19,20,15,16,16,19,19,15,15,15,
- 20,19,15,15,15,20,19,15,15,15,19,18,15,15,15,19,
- 19,15,16,16,19,20,15,15,15,19,19,15,15,15,19,20,
- 15,15,15,19,19,14,12,12, 9, 9,14,14,14,19,19,14,
- 14,14,19,19,14,14,15,20,19,15,14,14,18,19,15,15,
- 15,19,19,15,15,14,20,19,15,15,15,20,19,15,15,14,
- 20,19,15,15,15,20,19,15,15,15,19,20,15,14,14,19,
- 20,15,15,15,20,20,15,14,14,20,19,15,15,15,19,19,
- 15,15,15,19,19,15,14,14,19,19,15,15,15,19,20,15,
- 15,15,20,20,15,15,15,19,19,15,15,15,20,19,16,14,
- 14,19,19,15,15,15,20,19,15,14,15,20,19,14,15,15,
- 20,19,12,12,12,13,13,16,16,16,11,11,16,16,16,12,
- 12,17,16,16,11,11,17,15,16,11,11,17,17,17,13,13,
- 18,16,17,13,13,18,17,17,13,12,17,16,17,13,13,17,
- 17,17,13,13,16,16,16,12,12,17,16,16,13,13,17,16,
- 16,12,12,17,16,16,12,13,17,17,17,12,12,17,17,17,
- 13,13,18,16,16,13,13,18,17,17,12,12,18,17,17,12,
- 12,17,17,17,12,12,17,17,17,12,12,17,16,16,13,13,
- 17,17,17,12,12,17,16,16,12,12,17,17,17,12,12,13,
- 14,14, 9, 9,16,14,14,13,13,16,15,15,14,14,17,14,
- 14,13,13,16,14,14,13,13,17,15,15,15,15,16,16,16,
- 15,15,17,15,15,14,14,17,15,15,15,15,17,15,15,14,
- 14,17,15,15,14,14,16,16,16,15,15,17,15,15,14,14,
- 17,15,15,14,14,17,15,15,14,14,17,15,15,14,14,16,
- 16,16,15,15,18,15,15,14,13,17,15,15,14,14,17,15,
- 15,13,13,17,15,15,14,14,16,16,16,15,15,17,15,15,
- 14,13,17,15,15,14,14,17,15,15,13,13,13,11,11,11,
- 11,16,14,14,12,12,16,14,14,13,13,16,15,14,12,12,
- 17,14,14,12,12,17,15,15,13,13,17,14,14,14,14,17,
- 15,15,13,13,17,14,15,14,13,17,15,15,13,13,16,15,
- 15,13,13,16,14,14,14,14,17,15,15,13,13,16,14,14,
- 13,13,16,15,15,13,13,17,15,15,13,13,17,14,14,14,
- 14,17,15,15,12,12,17,15,15,13,13,17,15,15,12,12,
- 16,15,15,13,13,17,14,14,13,14,17,15,15,12,12,17,
- 14,14,13,13,17,15,15,12,12,14,14,14, 8, 8,14,14,
- 14,18,18,14,15,15,19,19,14,14,14,19,19,14,15,14,
- 18,19,15,15,15,18,19,15,16,16,20,20,15,15,15,19,
- 20,15,16,16,19,20,15,15,15,19,20,15,15,16,19,19,
- 15,16,16,20,20,15,15,15,20,19,15,16,16,20,19,15,
- 15,15,19,20,15,15,15,19,19,15,16,16,20,19,15,15,
- 15,19,19,15,16,15,20,19,15,15,15,19,19,15,15,15,
- 19,20,15,16,16,20,20,15,15,15,19,19,15,15,15,20,
- 20,15,15,15,19,19,14,12,12, 9, 9,14,14,14,18,18,
- 14,14,14,19,20,14,14,14,18,18,14,14,14,18,19,15,
- 15,15,19,20,15,14,14,19,19,15,15,15,19,19,15,14,
- 15,19,19,15,15,15,18,20,15,15,15,19,19,15,14,14,
- 19,19,15,15,15,20,19,15,15,14,20,20,15,15,15,19,
- 19,15,15,15,19,19,15,14,14,19,19,15,15,15,19,19,
- 15,14,14,19,20,14,15,15,19,19,15,15,15,19,19,15,
- 14,14,20,19,15,15,15,19,19,15,14,14,20,19,15,15,
- 15,19,19,13,12,12,13,13,17,17,16,11,11,16,16,16,
- 12,12,17,17,16,11,11,17,16,16,11,11,17,17,17,13,
- 13,17,16,16,13,13,18,17,17,12,12,17,16,16,13,13,
- 18,17,17,12,12,18,17,17,13,13,18,16,17,13,13,17,
- 17,17,12,12,18,17,17,13,13,18,17,17,12,12,17,16,
- 17,12,12,17,16,16,13,13,17,16,16,11,11,17,16,16,
- 12,12,17,17,17,11,11,17,17,17,12,12,18,16,16,13,
- 13,18,17,17,12,11,17,16,16,12,12,18,17,17,11,11,
- 13,14,14, 9, 9,16,14,14,13,13,16,15,15,14,14,17,
- 14,14,12,12,16,14,14,13,13,17,15,15,14,14,17,16,
- 16,15,16,18,15,15,14,14,17,15,15,14,14,17,15,15,
- 14,14,18,15,15,14,14,16,16,16,15,16,18,15,15,14,
- 14,17,16,15,14,14,18,15,15,14,14,17,15,15,14,14,
- 17,16,16,15,15,18,14,15,13,13,17,15,15,14,14,18,
- 15,15,13,13,17,15,15,14,14,17,16,15,15,15,17,15,
- 15,13,13,17,15,15,14,14,18,15,15,13,13,13,11,11,
- 10,10,16,14,14,12,12,16,14,14,12,12,17,14,15,11,
- 11,17,14,14,11,11,17,15,15,13,13,17,14,14,14,13,
- 17,15,15,13,13,16,15,15,13,13,17,15,15,13,13,17,
- 15,15,13,13,17,14,14,14,14,17,15,15,13,13,17,14,
- 15,13,13,16,15,15,13,13,17,15,15,13,13,17,14,14,
- 13,13,17,15,15,12,12,16,14,14,12,12,17,15,15,12,
- 12,17,15,15,13,13,17,14,14,13,13,17,15,15,12,12,
- 17,14,14,12,12,17,15,15,12,12,13,15,14, 8, 8,14,
- 14,14,19,19,14,15,15,18,19,14,14,14,18,19,14,15,
- 14,19,19,15,16,15,19,19,15,16,16,19,20,15,15,15,
- 19,19,15,16,16,19,19,15,16,16,19,19,15,15,15,19,
- 19,15,16,16,20,20,15,15,15,19,19,15,15,15,19,19,
- 15,15,15,19,19,15,15,15,19,19,15,16,16,20,19,15,
- 15,15,19,19,15,15,15,19,19,15,15,15,19,19,15,16,
- 15,19,19,15,16,16,21,19,15,15,15,20,20,15,15,15,
- 20,21,15,15,15,19,20,14,12,12, 8, 8,14,14,14,19,
- 19,14,13,13,19,19,14,14,14,19,19,14,13,14,19,19,
- 15,15,15,20,20,15,14,14,20,19,15,15,15,19,20,15,
- 14,14,19,20,15,15,15,20,19,15,15,15,19,20,15,14,
- 14,20,20,15,15,15,20,19,15,14,14,19,19,15,15,15,
- 19,19,15,15,15,20,19,15,14,14,21,19,15,15,15,20,
- 21,15,14,14,21,19,15,15,15,19,19,15,15,15,20,20,
- 15,14,14,19,21,15,15,15,19,19,15,14,14,19,20,15,
- 15,15,19,19,13,12,12,13,13,17,16,16,11,11,17,16,
- 15,12,12,18,16,16,11,11,17,16,16,11,11,18,17,17,
- 13,13,18,16,16,13,13,17,17,17,12,13,18,17,16,13,
- 13,18,17,17,13,13,17,17,17,13,13,17,16,16,13,13,
- 18,16,17,12,12,17,16,16,13,12,17,17,17,12,12,18,
- 17,17,13,12,18,16,16,13,13,18,17,17,12,12,17,16,
- 16,12,12,17,17,17,11,11,17,16,16,12,12,17,16,16,
- 13,13,17,16,16,11,11,17,16,16,12,12,17,17,17,11,
- 11,13,14,14, 9, 9,16,14,14,13,13,16,15,15,14,14,
- 17,14,14,12,12,16,14,14,13,13,17,15,15,14,14,17,
- 15,16,15,15,17,15,15,14,14,17,15,16,14,15,18,15,
- 15,14,14,17,15,15,14,14,16,16,16,15,15,18,15,15,
- 13,14,17,15,15,14,14,18,15,15,14,14,17,15,15,14,
- 14,17,16,16,15,15,17,15,15,13,13,17,15,15,14,14,
- 18,15,15,13,13,17,15,15,14,14,17,16,16,15,15,17,
- 15,15,13,13,17,15,15,14,14,18,15,15,13,13,13,11,
- 11,10,10,16,14,14,12,12,16,14,14,13,13,17,14,14,
- 11,11,17,14,14,12,12,17,15,15,14,14,17,14,14,14,
- 14,17,15,15,13,13,17,15,14,13,13,16,15,15,13,13,
- 16,15,15,13,13,17,14,14,14,14,17,15,15,13,13,17,
- 14,14,13,13,16,15,15,13,13,16,15,15,13,13,17,14,
- 14,13,13,17,15,15,12,12,17,14,14,12,12,16,15,15,
- 12,12,17,15,15,13,13,17,14,14,13,13,17,15,15,12,
- 12,17,14,14,12,12,16,15,15,12,12,14,14,14, 8, 8,
- 14,14,14,18,18,14,15,15,19,18,14,14,14,18,18,14,
- 14,14,18,19,15,16,15,19,19,15,17,16,20,20,15,15,
- 15,19,19,15,16,16,19,19,15,15,15,19,19,15,16,15,
- 18,19,15,16,16,20,20,15,15,15,19,19,15,16,16,19,
- 20,15,15,15,19,19,15,15,16,19,19,15,16,16,20,20,
- 15,15,15,19,19,15,15,15,19,20,15,15,15,19,19,15,
- 15,15,19,19,15,16,16,20,20,15,15,15,19,20,15,16,
- 16,20,20,15,15,15,19,19,13,12,12, 8, 8,14,14,14,
- 19,20,14,14,14,19,19,14,14,14,18,19,14,14,14,19,
- 20,15,15,15,19,20,15,14,14,21,20,15,15,15,20,20,
- 15,15,14,19,19,15,15,15,19,19,15,15,15,19,19,15,
- 14,14,19,20,15,15,15,19,20,15,14,14,19,19,15,15,
- 15,19,19,15,15,15,19,19,16,14,14,19,19,15,15,15,
- 20,20,15,14,14,21,19,15,15,15,19,19,15,15,15,19,
- 20,16,14,14,19,20,15,15,15,19,19,15,14,14,19,19,
- 15,15,15,20,19,
-};
-
-static const static_codebook _44p1_p3_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p1_p3_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p1_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44p1_p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p1_p4_0[] = {
- 2, 6, 6,14,14, 6, 7, 7,14,14, 7, 7, 7,14,14, 0,
- 13,13,16,16, 0,13,13,15,14, 7, 8, 8,15,15, 9,10,
- 10,16,16, 9, 8, 8,15,15, 0,13,13,17,16, 0,13,13,
- 15,16, 8, 8, 8,15,15,12,11,11,16,16, 9, 8, 8,14,
- 14, 0,13,13,17,18, 0,13,13,15,15, 0,14,14,16,16,
- 0, 0, 0,19,18, 0,12,12,16,15, 0,15,16, 0,20, 0,
- 14,14,16,16, 0,14,14,17,17, 0, 0, 0,19,18, 0,12,
- 12,15,15, 0,17,17, 0,20, 0,14,14,16,16, 5, 6, 7,
- 12,12, 9, 9, 9,14,14,10,10,10,14,14, 0,21,21,18,
- 17, 0,20,20,18,17, 9,10,10,14,14,12,12,12,16,16,
- 12,10,10,14,14, 0,20,19,18,17, 0, 0,20,17,18,11,
- 10,10,14,14,14,13,13,18,18,13,11,11,14,14, 0,20,
- 20,17,18, 0,21,21,17,17, 0,21, 0,18,18, 0, 0, 0,
- 0, 0, 0,20,19,16,17, 0, 0, 0,19,19, 0, 0, 0,18,
- 18, 0,21,21,18,18, 0, 0, 0, 0, 0, 0,20,20,16,17,
- 0, 0, 0,21,21, 0, 0, 0,18,19, 6, 6, 6,13,12, 8,
- 6, 6,11,11, 8, 6, 6,13,13, 0, 9, 9,11,11, 0,11,
- 10,14,14, 9, 7, 7,13,13,11, 9, 9,13,13,10, 6, 6,
- 13,13, 0,10,10,14,15, 0,10,10,13,13, 9, 7, 7,13,
- 13,13,10, 9,13,13,10, 6, 6,13,13, 0,10,10,15,14,
- 0,10,10,13,13, 0,11,11,15,15, 0,19,20,17,17, 0,
- 9, 9,13,13, 0,13,13,20,20, 0,11,11,13,13, 0,11,
- 11,15,15, 0,19,19,17,17, 0,10,10,13,13, 0,15,15,
- 20,20, 0,12,12,13,13, 0,10,10,12,12, 0,11,11,15,
- 15, 0,11,11,15,15, 0,15,15,20, 0, 0,16,16, 0,21,
- 0,11,11,15,15, 0,14,14,18,17, 0,11,11,15,15, 0,
- 15,16,19,20, 0,16,16,21,21, 0,12,12,15,15, 0,15,
- 14,18,18, 0,11,11,16,16, 0,15,15,21,21, 0,16,15,
- 0, 0, 0,16,16,21, 0, 0, 0, 0, 0, 0, 0,14,14,20,
- 20, 0,18,18, 0, 0, 0,16,17,21, 0, 0,16,16,21,21,
- 0, 0, 0, 0, 0, 0,15,15,21,21, 0,20,19, 0,21, 0,
- 17,17, 0, 0, 0,10,10,12,11, 0,10,10,10,11, 0,11,
- 11,12,12, 0,11,11, 9, 9, 0,13,13,11,12, 0,11,11,
- 12,12, 0,13,13,12,12, 0,10,10,12,12, 0,12,12,13,
- 13, 0,12,12,12,12, 0,11,11,12,12, 0,13,13,12,12,
- 0,10,10,12,12, 0,13,13,14,14, 0,12,12,12,12, 0,
- 14,14,14,13, 0,19,20,15,15, 0,12,11,12,12, 0,15,
- 15,21,20, 0,13,13,11,11, 0,13,13,13,13, 0,19, 0,
- 15,15, 0,12,12,12,12, 0,17,16,19, 0, 0,13,13,12,
- 12, 7, 7, 7,16,16,11, 9, 9,15,15,12, 9, 9,16,16,
- 0,13,13,15,14, 0,14,14,17,16,10, 9, 9,16,16,14,
- 11,11,17,16,12, 9, 8,15,15, 0,13,13,18,18, 0,13,
- 13,15,15,12,10,10,18,17,15,12,12,17,17,14, 9, 9,
- 16,16, 0,13,13,18,19, 0,14,13,17,16, 0,14,14,18,
- 18, 0, 0, 0,20,21, 0,12,12,16,16, 0,16,16,20,21,
- 0,14,14,17,16, 0,14,14,18,19, 0, 0, 0,19,21, 0,
- 13,13,17,17, 0,17,17, 0,21, 0,15,15,16,16, 8, 7,
- 7,14,14,11,10,10,15,15,12,10,10,15,15, 0,20,20,
- 18,18, 0, 0, 0,17,17,11,10,10,16,16,14,12,12,18,
- 17,14,11,11,15,15, 0,20,21,18,18, 0, 0,19,18,17,
- 12,10,10,16,16,17,14,14,19,19,14,11,11,15,15, 0,
- 21,21,19,19, 0,21,20,19,18, 0,21, 0,18,19, 0, 0,
- 0, 0, 0, 0,20,20,18,17, 0,21, 0, 0, 0, 0, 0, 0,
- 19,18, 0, 0, 0,18,19, 0, 0, 0, 0, 0, 0, 0,21,17,
- 18, 0, 0, 0, 0,21, 0, 0,21,18,19,11, 9, 9,14,14,
- 13,10,10,13,13,13,11,11,15,15, 0,13,13,12,12, 0,
- 15,15,16,16,13,10,10,15,15,16,12,12,15,15,15,10,
- 10,15,15, 0,14,13,16,15, 0,14,13,15,15,13,10,10,
- 15,15,18,14,14,15,15,15,10,10,14,15, 0,14,14,16,
- 16, 0,14,14,16,15, 0,15,15,17,16, 0,21, 0,18,18,
- 0,12,13,15,15, 0,16,16, 0, 0, 0,14,14,15,15, 0,
- 15,15,16,16, 0,21,20,18,18, 0,13,13,15,15, 0,19,
- 18, 0, 0, 0,15,15,15,15, 0,11,11,13,13, 0,12,12,
- 16,16, 0,12,12,16,16, 0,15,16,20, 0, 0,16,17, 0,
- 0, 0,12,12,16,16, 0,14,14,18,18, 0,11,11,16,17,
- 0,15,15,20, 0, 0,16,16, 0, 0, 0,12,12,16,16, 0,
- 15,15,19,19, 0,11,11,17,17, 0,16,16,21, 0, 0,16,
- 16, 0, 0, 0,17,17,20,20, 0, 0, 0, 0, 0, 0,15,15,
- 20, 0, 0,17,18, 0, 0, 0,17,17, 0, 0, 0,16,16, 0,
- 21, 0, 0, 0, 0, 0, 0,15,15,21, 0, 0,19,18, 0, 0,
- 0,18,17, 0, 0, 0,11,11,14,14, 0,11,11,15,15, 0,
- 12,12,16,16, 0,13,13,14,14, 0,14,14,17,17, 0,12,
- 12,16,16, 0,14,14,16,16, 0,11,11,16,15, 0,13,13,
- 16,17, 0,13,13,16,16, 0,12,12,15,16, 0,15,14,16,
- 16, 0,11,11,15,15, 0,14,14,17,17, 0,13,13,16,16,
- 0,15,14,18,18, 0,21, 0,19,19, 0,13,13,15,15, 0,
- 16,16,20,20, 0,14,14,16,15, 0,14,14,17,17, 0,21,
- 0,20,18, 0,13,13,15,15, 0,17,17, 0, 0, 0,14,14,
- 16,15, 8, 8, 8,16,16,12, 9, 9,16,16,13, 9, 9,16,
- 16, 0,14,14,18,17, 0,14,14,16,17,12,10,10,18,17,
- 14,11,11,18,18,14, 9, 9,16,16, 0,13,13,18,18, 0,
- 13,13,17,16,12, 9, 9,16,17,17,13,13,16,16,14, 9,
- 9,15,15, 0,14,14,20,20, 0,13,13,15,15, 0,15,14,
- 18,18, 0, 0, 0,20,21, 0,12,13,16,17, 0,16,16,20,
- 21, 0,14,14,16,17, 0,14,14,18,17, 0, 0, 0,20,21,
- 0,13,13,16,16, 0,19,17, 0,21, 0,14,15,16,16, 8,
- 7, 7,14,13,12,10,10,15,15,13,10,10,15,15, 0,21,
- 21,18,19, 0,20,21,18,18,12,10,10,16,15,15,12,12,
- 17,17,14,11,11,15,15, 0,21,21,19,18, 0, 0,21,17,
- 18,13,11,11,15,15,16,13,13,18,19,15,11,11,15,14,
- 0,21, 0,19,19, 0, 0,21,18,18, 0, 0,21,19,19, 0,
- 0, 0, 0, 0, 0,20,19,17,17, 0, 0, 0,21, 0, 0,21,
- 0,18,19, 0, 0,20,20,19, 0, 0, 0, 0, 0, 0,21,20,
- 18,17, 0, 0, 0, 0,20, 0, 0, 0,18,19, 0,10,10,15,
- 14, 0,11,11,14,14, 0,11,11,15,16, 0,14,14,15,15,
- 0,15,15,16,16, 0,11,11,16,16, 0,14,13,16,16, 0,
- 11,11,15,15, 0,14,14,16,16, 0,14,14,15,15, 0,11,
- 11,15,15, 0,13,13,15,15, 0,11,11,15,15, 0,15,15,
- 18,17, 0,14,14,15,15, 0,15,16,18,18, 0, 0, 0,20,
- 20, 0,14,13,16,15, 0,17,17,21, 0, 0,15,15,15,15,
- 0,16,15,17,17, 0, 0, 0,19,19, 0,13,13,15,15, 0,
- 20,19, 0, 0, 0,15,15,15,15, 0,11,11,13,13, 0,12,
- 12,16,16, 0,12,12,16,16, 0,15,15,21,21, 0,17,16,
- 0, 0, 0,12,12,16,16, 0,14,14,17,17, 0,11,11,16,
- 16, 0,15,15, 0, 0, 0,16,16,21, 0, 0,12,12,17,16,
- 0,14,15,20,20, 0,11,11,16,16, 0,15,15, 0,20, 0,
- 16,16, 0,21, 0,16,17,21, 0, 0, 0, 0, 0, 0, 0,15,
- 15, 0,21, 0,18,18, 0, 0, 0,17,16, 0, 0, 0,17,17,
- 21, 0, 0, 0, 0, 0, 0, 0,15,15, 0,20, 0,19,20,21,
- 0, 0,17,18, 0, 0, 0,12,12,15,15, 0,12,12,15,15,
- 0,12,12,16,16, 0,13,13,15,15, 0,15,15,17,17, 0,
- 13,12,17,16, 0,14,14,17,16, 0,11,11,16,16, 0,14,
- 14,17,17, 0,14,14,17,17, 0,12,12,16,16, 0,15,15,
- 17,17, 0,11,11,16,16, 0,14,14,17,17, 0,14,14,16,
- 16, 0,15,15,18,17, 0, 0, 0,19, 0, 0,13,13,16,16,
- 0,16,16, 0,21, 0,14,14,16,16, 0,15,15,18,17, 0,
- 0, 0,19,19, 0,13,13,16,16, 0,18,17, 0,21, 0,14,
- 15,16,16, 0,11,11,16,16, 0,13,13,17,17, 0,13,13,
- 17,17, 0,16,16,16,17, 0,16,16,18,18, 0,12,12,17,
- 17, 0,16,15,18,17, 0,12,12,16,16, 0,16,15,19,19,
- 0,16,15,17,17, 0,12,12,17,18, 0,16,16,18,18, 0,
- 12,12,16,16, 0,16,16,19,19, 0,15,16,17,17, 0,15,
- 16,18,18, 0, 0, 0,20,20, 0,13,13,16,16, 0,18,18,
- 21,20, 0,15,15,16,16, 0,16,16,19,18, 0, 0, 0,19,
- 20, 0,14,14,17,17, 0,19,19, 0,21, 0,15,16,16,16,
- 0, 9, 9,14,14, 0,13,13,15,15, 0,14,14,15,15, 0,
- 0,21,19,19, 0, 0,21,18,18, 0,12,12,15,15, 0,15,
- 15,18,18, 0,14,13,15,15, 0,21,21,18,19, 0,21,20,
- 18,18, 0,13,13,16,16, 0,17,17,18,19, 0,14,14,15,
- 15, 0, 0,21,19,19, 0,21,20,18,19, 0,20,20,19,19,
- 0, 0, 0, 0, 0, 0,19,20,17,17, 0, 0, 0,21,21, 0,
- 21, 0,18,20, 0,21, 0,18,21, 0, 0, 0, 0, 0, 0,21,
- 21,19,18, 0, 0, 0, 0, 0, 0, 0, 0,19,19, 0,18,18,
- 15,15, 0,18,20,17,16, 0,20, 0,17,17, 0,21, 0,17,
- 17, 0,21,20,19,20, 0,19,19,16,16, 0,21,21,17,18,
- 0,19,19,17,17, 0,20,21,21,21, 0,20,20,18,18, 0,
- 19,19,16,16, 0, 0,21,18,19, 0,18,19,16,17, 0,21,
- 21,19,20, 0,21,19,18,18, 0,21,20,19,21, 0, 0, 0,
- 20,21, 0,19,19,17,16, 0, 0, 0, 0, 0, 0,21,20,17,
- 17, 0,20,21,19,18, 0, 0, 0, 0,21, 0,19,18,16,17,
- 0, 0, 0, 0, 0, 0,20,20,17,17, 0,11,11,14,14, 0,
- 13,13,16,16, 0,13,13,16,16, 0,17,17,21, 0, 0,17,
- 18, 0, 0, 0,12,12,16,16, 0,15,15,17,18, 0,12,12,
- 16,16, 0,16,16, 0,20, 0,17,17, 0,21, 0,12,12,17,
- 17, 0,16,16,19,20, 0,12,12,17,17, 0,17,17, 0,20,
- 0,17,17, 0, 0, 0,17,17,21, 0, 0, 0, 0, 0, 0, 0,
- 15,15, 0,20, 0,19,19, 0, 0, 0,18,18, 0, 0, 0,17,
- 17, 0, 0, 0, 0, 0, 0, 0, 0,15,15, 0, 0, 0,20,19,
- 0, 0, 0,19,18, 0, 0, 0,14,14,21,19, 0,16,16,20,
- 21, 0,16,16,20,20, 0,17,17,20, 0, 0,17,17,20,20,
- 0,15,15,20,20, 0,19,18,20, 0, 0,15,15,20,20, 0,
- 17,18,21,20, 0,17,17,20,21, 0,15,15,19,19, 0,19,
- 18,21,21, 0,15,15,19,20, 0,17,18, 0, 0, 0,17,17,
- 20,20, 0,17,18,20,21, 0, 0, 0, 0, 0, 0,15,15,20,
- 20, 0,19,19, 0, 0, 0,17,17,19,21, 0,17,17, 0,21,
- 0, 0, 0, 0,21, 0,15,15,20,19, 0, 0,20, 0, 0, 0,
- 17,17,21,20, 0,12,12,16,16, 0,14,14,17,17, 0,13,
- 13,17,17, 0,16,16,17,18, 0,17,16,18,18, 0,13,13,
- 18,17, 0,15,16,19,18, 0,13,13,16,16, 0,16,16,19,
- 19, 0,16,16,17,17, 0,13,12,17,17, 0,16,16,18,17,
- 0,12,12,16,16, 0,17,17,19,18, 0,16,15,16,16, 0,
- 16,17,18,19, 0, 0, 0,20,20, 0,14,14,17,16, 0,18,
- 18,21, 0, 0,16,16,16,16, 0,16,16,18,17, 0, 0,21,
- 21,21, 0,14,14,16,16, 0,21,20,21, 0, 0,16,16,16,
- 16, 0,10,10,14,14, 0,14,14,15,16, 0,14,14,15,15,
- 0, 0,21,18,18, 0, 0,21,18,19, 0,13,13,16,16, 0,
- 16,16,18,17, 0,14,14,15,15, 0,20, 0,18,18, 0,21,
- 0,18,17, 0,13,13,16,15, 0,17,17,19,19, 0,14,14,
- 15,15, 0,20,20,18,19, 0, 0, 0,18,17, 0, 0,21,18,
- 18, 0, 0, 0, 0, 0, 0,20,21,18,17, 0, 0, 0, 0, 0,
- 0, 0, 0,19,19, 0, 0,21,18,18, 0, 0, 0, 0, 0, 0,
- 21, 0,18,17, 0, 0, 0, 0,21, 0, 0, 0,19,20, 0,19,
- 19,16,16, 0, 0,21,18,17, 0,21, 0,18,18, 0,20, 0,
- 19,18, 0,21,20,19,19, 0,21,19,17,18, 0, 0,21,19,
- 19, 0,21,19,18,18, 0,21, 0,20,18, 0, 0,21,18,18,
- 0,20,21,17,17, 0,21, 0,18,18, 0,21,19,17,17, 0,
- 21, 0, 0,20, 0, 0,20,17,18, 0, 0, 0,19,20, 0, 0,
- 0,20,19, 0,19,21,17,18, 0,21, 0, 0, 0, 0,21,21,
- 18,17, 0, 0,21,18,18, 0, 0, 0, 0,21, 0,20,19,16,
- 17, 0, 0, 0, 0, 0, 0,21,20,17,17, 0,11,11,13,13,
- 0,13,13,16,16, 0,13,13,16,16, 0,17,17, 0,21, 0,
- 18,19,21, 0, 0,12,12,16,16, 0,15,15,19,18, 0,13,
- 13,16,16, 0,16,17,21,19, 0,17,17,21,21, 0,13,13,
- 16,16, 0,16,16,20,18, 0,13,13,16,16, 0,17,17, 0,
- 0, 0,18,18, 0, 0, 0,18,17, 0,20, 0, 0, 0, 0, 0,
- 0,15,15,21,21, 0,19,18, 0, 0, 0,17,17,21,21, 0,
- 17,17, 0, 0, 0, 0, 0, 0, 0, 0,15,15,20,21, 0,20,
- 20, 0, 0, 0,19,19, 0, 0, 0,14,15,21,19, 0,16,16,
- 0,21, 0,17,16,21,21, 0,17,18,21,20, 0,18,18, 0,
- 21, 0,16,16, 0,20, 0,19,19, 0, 0, 0,16,15, 0,20,
- 0,18,18, 0, 0, 0,17,17, 0,21, 0,16,16,20,20, 0,
- 20,19, 0, 0, 0,15,16,21,22, 0,18,18, 0, 0, 0,18,
- 17, 0, 0, 0,18,18, 0, 0, 0, 0, 0, 0, 0, 0,16,16,
- 21,20, 0,19,20, 0, 0, 0,18,17,21, 0, 0,17,18, 0,
- 0, 0, 0, 0, 0, 0, 0,16,16, 0,20, 0, 0,20, 0, 0,
- 0,18,18,22, 0,
-};
-
-static const static_codebook _44p1_p4_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p1_p4_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44p1_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44p1_p4_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44p1_p4_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p1_p4_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44p1_p4_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p1_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44p1_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p1_p5_0[] = {
- 1, 6, 6, 7, 8, 8, 7, 8, 8, 7, 9, 8,10,11,11, 9,
- 8, 8, 7, 8, 8,11,11,11, 9, 8, 8, 6, 7, 7,10,10,
- 10,10,10,10,10,10,10,14,13,13,12,11,11,10,10,10,
- 14,14,13,12,11,11, 6, 6, 6, 8, 5, 5, 8, 7, 7, 9,
- 7, 7,11,10,10, 9, 7, 7, 9, 7, 7,12,10,10,10, 7,
- 7, 7, 8, 8,12,11,10,12,10,10,11,10,10,15,13,13,
- 13,10,10,11,10,10,17,14,13,13,10,10, 7, 7, 7,12,
- 11,12,12,11,11,12,11,11,16,14,14,13,12,12,12,11,
- 11,17,15,14,14,12,12,10, 9, 9,13,11,11,13,11,11,
- 13,11,11,17,14,13,14,11,11,12,11,11,16,15,14,14,
- 11,11, 7, 8, 8,12,11,11,12,10,10,12,10,10,15,13,
- 13,14,11,10,12,10,10,16,14,14,14,10,10, 8, 7, 7,
- 12,11,11,12,11,11,12,11,11,17,14,14,14,12,12,12,
- 11,11,16,15,15,14,12,12,10,10,10,13,11,11,13,11,
- 11,13,11,12,16,14,14,14,11,11,13,12,11,16,15,15,
- 14,11,11,
-};
-
-static const static_codebook _44p1_p5_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p1_p5_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44p1_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44p1_p5_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p1_p5_1[] = {
- 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 8, 8, 8,
- 7, 7, 8, 8, 8, 9, 8, 8, 9, 7, 7, 6, 6, 6, 9, 8,
- 7, 9, 7, 7, 9, 8, 8,10, 8, 8,10, 8, 8,10, 8, 8,
- 10, 8, 8,10, 8, 8, 7, 6, 6, 9, 6, 6, 9, 7, 7, 9,
- 7, 7,10, 8, 8, 9, 6, 6, 9, 7, 7,10, 8, 8, 9, 7,
- 7, 7, 8, 8,11, 9, 9,11, 9, 9,11, 8, 9,12, 9, 9,
- 12, 8, 8,11, 9, 9,12, 9, 9,12, 8, 8, 8, 7, 7,10,
- 9, 9,10,10, 9,10, 9, 9,11,10,10,11, 9, 9,11, 9,
- 9,11,10,11,11, 9, 9,10, 8, 8,11, 9, 9,10, 9, 9,
- 11, 9, 9,11,10,10,11, 9, 9,11, 9, 9,11,10,10,11,
- 9, 9, 9, 8, 8,11, 9, 9,12, 9, 9,11, 9, 9,12, 9,
- 9,12, 8, 8,12, 9, 9,12, 9, 9,12, 8, 8, 9, 7, 7,
- 11, 9, 9,11,10,10,11, 9, 9,11,11,11,11, 9, 9,11,
- 10,10,11,11,11,11, 9, 9,10, 9, 9,11, 9, 9,11,10,
- 10,11, 9, 9,11,10,10,11, 9, 9,11, 9,10,11,10,10,
- 11, 9, 9,
-};
-
-static const static_codebook _44p1_p5_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p1_p5_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44p1_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44p1_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p1_p6_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p1_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p1_p6_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p1_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44p1_p6_1[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p1_p6_1[] = {
- 1, 3, 2, 5, 4, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
- 12,13,13,13,14,16,16,16,16,
-};
-
-static const static_codebook _44p1_p6_1 = {
- 1, 25,
- (char *)_vq_lengthlist__44p1_p6_1,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44p1_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44p1_p6_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p1_p6_2[] = {
- 3, 4, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p1_p6_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44p1_p6_2,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44p1_p6_2,
- 0
-};
-
-static const char _huff_lengthlist__44p1_short[] = {
- 4, 5, 7, 8,10,13,14, 4, 2, 4, 6, 8,11,12, 7, 4,
- 3, 5, 8,12,14, 8, 5, 4, 4, 8,12,12, 9, 7, 7, 7,
- 9,10,11,13,11,11, 9, 7, 8,10,13,11,10, 6, 5, 7,
- 9,
-};
-
-static const static_codebook _huff_book__44p1_short = {
- 2, 49,
- (char *)_huff_lengthlist__44p1_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p2_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44p2_l0_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 9, 9,10,10,11,11, 4, 6, 5,
- 8, 7, 9, 8,10, 9,11,10,11,11, 4, 5, 6, 7, 8, 8,
- 9, 9,10,10,10,10,11, 8, 9, 8,10, 8,10, 9,11,10,
- 11,11,11,11, 8, 8, 9, 8,10, 9,10,10,11,11,11,11,
- 11, 9,10,10,11,11,11,11,11,11,12,11,12,11, 9,10,
- 10,10,11,11,11,11,11,11,12,11,12,10,11,11,12,11,
- 12,12,12,12,12,12,12,12,10,11,11,11,11,12,12,12,
- 13,12,12,12,12,11,12,12,12,12,13,13,12,12,12,12,
- 12,12,11,12,12,12,12,13,13,12,13,12,12,12,12,12,
- 13,13,13,13,13,13,12,13,12,13,12,12,12,13,13,13,
- 13,13,13,13,12,13,12,12,12,
-};
-
-static const static_codebook _44p2_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44p2_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44p2_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44p2_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p2_l0_1[] = {
- 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
- 5, 6, 6, 6, 5, 6, 5, 6, 6,
-};
-
-static const static_codebook _44p2_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44p2_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p2_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44p2_l1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p2_l1_0[] = {
- 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p2_l1_0 = {
- 2, 9,
- (char *)_vq_lengthlist__44p2_l1_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p2_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44p2_lfe[] = {
- 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p2_lfe = {
- 2, 4,
- (char *)_huff_lengthlist__44p2_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44p2_long[] = {
- 3, 4, 9, 8, 8,10,13,16, 4, 2, 9, 5, 7,10,14,18,
- 9, 7, 6, 5, 7, 9,12,16, 7, 5, 5, 3, 5, 8,11,13,
- 8, 7, 7, 5, 5, 7, 9,11,10,10, 9, 8, 6, 6, 8,10,
- 13,14,13,11, 9, 8, 9,10,17,18,16,14,11,10,10,10,
-};
-
-static const static_codebook _huff_book__44p2_long = {
- 2, 64,
- (char *)_huff_lengthlist__44p2_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p2_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p2_p1_0[] = {
- 1, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,
-};
-
-static const static_codebook _44p2_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p2_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p2_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44p2_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p2_p2_0[] = {
- 1, 4, 4, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
- 10,10, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 0, 0, 0,11,11, 0, 0, 0, 0, 0,
- 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0,
- 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0, 0,
- 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0,11,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, 7, 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 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, 7, 0, 0, 0,
- 6, 6, 0, 0, 0, 7, 7, 0, 0, 0, 8, 8, 0, 0, 0, 0,
- 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0,
- 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 0, 0, 0, 9, 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, 8, 8, 0, 0, 0, 8, 8, 0,
- 0, 0,10,10, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0,
- 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
- 11,11, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 0, 0, 0,11,10, 0, 0, 0, 0, 0,
- 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
- 0, 0,11,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, 0, 0, 0, 0, 0, 0, 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, 8, 0, 0, 0,10,10, 0, 0, 0,11,11, 0, 0,
- 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0,
- 0, 0, 0, 0, 0,10,10, 0, 0, 0,13,13, 0, 0, 0, 0,
- 0, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,12,
- 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,13,13, 0,
- 0, 0, 0, 0, 0, 0, 0,12,12, 0, 0, 0,13,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, 6,
- 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 9, 0, 0, 0,11,11,
- 0, 0, 0,12,12, 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0,
- 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,11, 0, 0,
- 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,13,13, 0, 0, 0,
- 0, 0, 0, 0, 0,12,12, 0, 0, 0,13,13, 0, 0, 0, 0,
- 0, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,12,
- 0, 0, 0,13,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, 0, 0, 0, 0, 0, 0, 0, 0, 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, 8, 0, 0, 0,10,10, 0, 0, 0,11,11, 0,
- 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,13,13, 0, 0,
- 0, 0, 0, 0, 0, 0,12,12, 0, 0, 0,13,13, 0, 0, 0,
- 0, 0, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,10,
- 10, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,14,13,
- 0, 0, 0, 0, 0, 0, 0, 0,13,12, 0, 0, 0,13,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,
- 6, 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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 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, 9, 0, 0, 0,11,
- 11, 0, 0, 0,12,12, 0, 0, 0,12,12, 0, 0, 0, 0, 0,
- 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,12,12, 0,
- 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,13,13, 0, 0,
- 0, 0, 0, 0, 0, 0,12,12, 0, 0, 0,12,12, 0, 0, 0,
- 0, 0, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,
- 12, 0, 0, 0,13,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, 0, 0, 0, 0, 0, 0, 0, 0, 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, 9, 0, 0, 0,11,11, 0, 0, 0,12,12,
- 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,12,12, 0,
- 0, 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0,14,14, 0, 0,
- 0, 0, 0, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,
- 12,12, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0,12,
- 12, 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0,14,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, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 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, 9, 0, 0, 0,
- 11,11, 0, 0, 0,12,12, 0, 0, 0,13,13, 0, 0, 0, 0,
- 0, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,12,
- 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0,12,12, 0,
- 0, 0, 0, 0, 0, 0, 0,12,12, 0, 0, 0,14,14, 0, 0,
- 0, 0, 0, 0, 0, 0,14,14, 0, 0, 0, 0, 0, 0, 0, 0,
- 12,12, 0, 0, 0,13,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44p2_p2_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p2_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p2_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44p2_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p2_p3_0[] = {
- 1, 5, 5, 6, 7, 7, 0, 8, 8, 6, 9, 9, 8,11,11, 0,
- 8, 8, 0, 9, 9, 0,12,12, 0, 8, 8, 5, 7, 7, 7,10,
- 10, 0,12,12, 8,11,11, 9,12,12, 0,11,12, 0,12,12,
- 0,15,15, 0,12,12, 0, 6, 6, 0, 6, 6, 0, 7, 7, 0,
- 7, 7, 0,10,10, 0, 7, 7, 0, 8, 8, 0,11,11, 0, 7,
- 7, 6, 7, 7,10, 9, 9, 0,11,10,10, 9, 9,12,12,12,
- 0,10,10, 0,11,11, 0,13,13, 0,11,11, 7, 6, 6,10,
- 10,10, 0,11,11,11,11,11,12,12,12, 0,11,11, 0,12,
- 12, 0,15,15, 0,11,11, 0,11,11, 0,11,11, 0,12,12,
- 0,12,12, 0,14,14, 0,12,12, 0,12,12, 0,15,15, 0,
- 11,11, 0, 8, 8, 0,10,10, 0,11,11, 0,11,11, 0,12,
- 12, 0,12,12, 0,11,11, 0,15,15, 0,11,11, 0, 6, 6,
- 0,10,10, 0,12,12, 0,10,10, 0,13,13, 0,12,12, 0,
- 13,13, 0,14,14, 0,12,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,
-};
-
-static const static_codebook _44p2_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p2_p3_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44p2_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44p2_p3_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p2_p3_1[] = {
- 2, 3, 3, 0, 8, 8, 0, 8, 8, 0, 9, 9, 0, 9, 9, 0,
- 9, 9, 0, 9, 9, 0, 9, 9, 0, 8, 8, 0, 6, 6, 0, 7,
- 7, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0, 8, 8, 0, 8, 8,
- 0, 8, 8, 0, 8, 8, 0, 6, 6, 0, 6, 6, 0, 6, 6, 0,
- 8, 8, 0, 9, 9, 0, 7, 7, 0, 8, 8, 0, 9, 9, 0, 6,
- 6, 0, 8, 8, 0, 9, 9, 0, 9, 9, 0,10,10, 0,10,10,
- 0,10,10, 0,10,10, 0,11,11, 0, 9, 9, 0, 7, 7, 0,
- 10,10, 0,10,10, 0,12,11, 0,12,12, 0,11,11, 0,11,
- 11, 0,12,12, 0,10,10, 0, 7, 7, 0,10,10, 0,10,10,
- 0,12,12, 0,11,12, 0,11,11, 0,11,11, 0,11,11, 0,
- 10,10, 0, 8, 8, 0, 9, 9, 0, 9, 9, 0,10,10, 0,10,
- 10, 0,10, 9, 0,10,10, 0,10,10, 0, 9, 9, 0, 6, 6,
- 0,10,10, 0,10,10, 0,11,11, 0,12,12, 0,11,11, 0,
- 11,11, 0,12,12, 0,11,11, 0, 7, 7, 0, 9, 9, 0, 9,
- 9, 0,11,11, 0,11,11, 0,10,10, 0,10,10, 0,11,11,
- 0, 9, 9,
-};
-
-static const static_codebook _44p2_p3_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p2_p3_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p2_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44p2_p4_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p2_p4_0[] = {
- 1, 6, 6, 6, 7, 7, 7, 8, 8, 7, 8, 8,10,11,11, 9,
- 8, 8, 7, 8, 8,11,11,11, 9, 8, 8, 6, 7, 7, 9,11,
- 11, 9,11,11,10,11,11,12,13,13,11,12,12,10,11,11,
- 13,14,14,12,12,12, 6, 6, 6, 8, 6, 6, 8, 7, 7, 9,
- 7, 7,11,10,10,10, 6, 6, 9, 7, 7,12,10,10,11, 6,
- 7, 7, 7, 7,11,10,10,12,10,10,11,10,10,14,13,13,
- 13,10,10,12,11,11,15,13,13,14,10,10, 8, 7, 7,12,
- 11,11,12,11,11,11,11,11,14,14,14,13,12,12,12,11,
- 11,15,15,15,13,12,12, 0,10,10, 0,11,11, 0,11,11,
- 0,11,11, 0,14,14, 0,11,11, 0,11,11, 0,15,15, 0,
- 11,11, 7, 8, 8,12,10,10,12,10,10,12,11,11,15,13,
- 13,14,11,11,12,10,10,16,14,14,14,10,10, 8, 7, 7,
- 12,11,11,12,11,11,12,11,11,16,14,14,14,12,12,13,
- 12,12,15,14,14,15,12,12, 0,11,11, 0,12,12, 0,12,
- 12, 0,12,12, 0,15,15, 0,12,12, 0,12,12, 0,14,14,
- 0,12,12,
-};
-
-static const static_codebook _44p2_p4_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p2_p4_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44p2_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44p2_p4_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p2_p4_1[] = {
- 3, 4, 4, 8, 8,11, 9, 9,12,12,11,10,10,12,12,12,
- 10,10,11,11,12,12,12,12,12,12,11,11,13,13,12,12,
- 12,13,13,12,10,10,12,12,12,11,11,13,13,12,13,13,
- 13,13,12,11,11,13,13,12,12,12,13,13,12,10,10,12,
- 12,12,11,11,13,13,12,13,13,12,12,12,11,11,13,13,
- 12,13,13,13,13,12,11,11,12,12,12,11,11,12,12,12,
- 13,13,12,12,12,13,13,13,13,12,13,13,13,13,13,13,
- 13,12,12,12,13,13,13,13,12,13,13,12,12,11, 8, 8,
- 10,10,12,11,11,11,11,12,10,10,10,10,13,11,11,10,
- 10,13,11,11,10,10,13,12,12,12,12,13,11,11,11,11,
- 13,12,12,11,11,13,12,12,11,11,13,12,12,12,11,13,
- 12,12,12,12,13,11,11,11,11,13,12,12,11,11,13,11,
- 12,11,11,13,12,12,11,11,14,12,12,11,11,13,11,11,
- 11,11,14,12,12,11,11,13,11,12,10,10,14,12,12,11,
- 11,14,12,12,11,11,14,11,11,11,11,14,12,12,11,11,
- 13,12,12,11,11,14,12,12,11,11,11, 8, 8,10,10,12,
- 7, 7,10,10,12, 9, 9,11,11,13, 9, 9, 9, 9,13,13,
- 13,10,10,13, 9, 9,12,12,13,13,13,12,12,13, 9, 8,
- 11,11,13,10,10,12,12,14,13,13,11,11,13, 9, 9,11,
- 11,13,13,13,12,12,13, 9, 9,10,10,13,10,10,11,11,
- 13,13,13,10,10,14,10,10,11,11,14,14,14,12,12,13,
- 9, 9,10,10,13,10,10,11,11,14,13,14,10,10,14,14,
- 14,11,12,14,14,14,14,14,14,13,13,10,10,13,14,14,
- 11,11,14,14,14,10,10,14, 9, 9, 9, 9,14, 9, 9, 9,
- 9,14,10,10, 9, 9,14,10,10, 8, 8,14,11,11, 8, 8,
- 15,11,11,10,10,15,12,12,10,10,15,10,10,10,10,15,
- 11,11,10,10,15,13,13,10,10,15,11,11,10,10,15,12,
- 12,10,10,15,10,10,10,10,15,11,11,10,10,15,13,13,
- 10,10,15,11,11,10,10,15,12,12,10,10,15,11,11, 9,
- 9,15,11,11, 9, 9,15,13,13, 9, 9,15,13,13,10,10,
- 15,12,12,10,10,15,13,13,10,10,15,13,12, 9, 9,15,
- 13,13, 9, 9,14,12,12, 9, 9,14,13,13, 9, 9,14,13,
- 13, 9, 9,14,13,13, 7, 7,14,13,13, 8, 8,15,14,14,
- 10,10,15,14,14,10,10,15,14,14,10,10,15,14,14,10,
- 10,15,14,14, 9, 9,15,14,14,10,10,15,14,14,10,10,
- 14,14,14, 9, 9,15,14,14,10,10,14,14,14, 9, 9,15,
- 14,14,10,10,15,14,14,10,10,14,14,14, 9, 9,14,14,
- 14, 9, 9,14,14,14, 8, 8,15,14,14,10,10,15,14,14,
- 11,11,15,14,14, 9, 9,15,14,14, 9, 9,14,14,14, 8,
- 8,13, 9, 9,12,12,17,11,11,12,12,17,12,12,12,12,
- 17,12,12,11,11,18,15,15,12,12,17,12,12,12,12,17,
- 14,15,13,13,17,12,12,12,12,17,13,13,12,13,17,15,
- 15,12,12,18,13,13,13,13,18,15,15,13,13,18,12,12,
- 12,12,18,13,13,13,13,18,15,15,12,12,18,13,13,12,
- 12,18,15,15,13,13,18,13,13,12,12,17,13,13,12,12,
- 17,15,15,12,12,18,15,15,13,13,18,15,15,13,14,18,
- 15,16,12,12,18,15,15,12,12,18,16,16,12,12,13, 8,
- 8,10,10,14,15,14,11,11,14,15,15,12,12,15,14,14,
- 12,11,15,15,15,12,12,15,15,15,12,12,15,15,15,13,
- 13,15,15,15,12,12,15,15,15,13,13,15,15,15,13,13,
- 15,15,15,13,13,15,15,16,13,13,15,15,15,12,12,15,
- 15,15,13,13,15,15,15,13,13,15,15,15,13,13,15,15,
- 15,13,13,15,15,14,12,12,15,15,15,12,12,16,15,14,
- 12,12,16,15,15,13,13,16,16,16,13,13,16,15,15,12,
- 12,15,15,15,13,13,15,15,15,12,12,13,12,12,10,10,
- 14,14,14,11,11,15,14,14,12,12,15,14,14,11,11,15,
- 14,14,11,11,15,15,15,13,13,15,14,14,13,13,15,15,
- 15,12,12,15,14,15,13,13,16,15,15,12,12,15,15,15,
- 13,13,16,14,14,13,13,15,15,15,12,12,15,15,15,13,
- 13,16,15,15,12,12,16,15,15,12,12,16,14,14,13,13,
- 15,15,15,11,11,15,15,15,12,12,16,15,15,11,11,16,
- 15,15,13,13,16,14,15,14,14,16,15,15,12,12,16,15,
- 14,12,12,16,15,15,12,12,14,10,10, 9, 9,14,11,11,
- 12,12,14,12,12,13,13,14,12,12,12,12,15,14,14,13,
- 13,15,13,13,14,14,15,14,14,15,15,15,12,12,13,13,
- 15,13,13,14,14,15,14,14,13,13,15,13,13,13,14,15,
- 14,14,15,15,15,12,12,13,13,15,13,13,14,14,15,14,
- 14,13,13,15,13,13,14,14,15,14,14,15,15,15,13,13,
- 12,12,15,13,13,13,13,15,14,14,13,12,15,15,15,14,
- 15,15,15,14,20,20,15,14,14,13,13,15,14,14,13,13,
- 15,14,14,13,13,14,12,12, 9, 9,14,14,14,12,12,14,
- 13,13,12,13,14,14,14,12,12,15,14,14,12,12,15,14,
- 14,14,13,15,14,14,14,14,15,14,14,13,13,15,14,14,
- 13,13,15,15,15,14,14,15,14,14,13,13,15,14,14,14,
- 14,15,14,14,13,13,15,14,14,13,13,15,15,15,15,14,
- 15,15,15,13,13,15,14,14,14,14,15,14,14,13,13,15,
- 14,14,13,13,14,15,15,14,14,15,15,15,14,14,15,14,
- 14,14,14,15,15,15,14,14,15,14,14,13,14,15,15,15,
- 14,14,13,10,10,12,12,17,11,11,12,12,17,12,12,12,
- 12,17,12,12,11,11,17,15,15,12,11,18,13,13,13,13,
- 18,15,15,13,13,17,12,12,12,12,18,13,13,13,13,17,
- 15,15,12,12,17,12,12,12,12,17,15,15,13,13,17,12,
- 12,12,12,17,13,13,12,12,17,15,15,12,12,18,14,13,
- 12,12,18,15,15,13,13,18,13,13,12,12,18,13,13,12,
- 12,18,16,16,12,12,18,16,16,12,12,18,15,15,13,13,
- 18,16,16,12,12,17,15,15,12,12,17,16,16,12,12,13,
- 8, 8,10,10,14,14,15,12,12,14,15,15,12,12,15,14,
- 14,12,12,15,15,14,12,12,15,15,15,13,13,15,15,15,
- 13,13,15,15,15,12,12,16,15,15,13,13,16,15,15,13,
- 13,15,15,15,12,12,15,15,15,14,14,15,15,15,12,12,
- 15,15,15,13,13,16,15,15,13,13,15,15,15,13,13,16,
- 15,15,13,13,15,15,14,12,12,15,15,15,12,12,16,14,
- 15,13,13,16,15,15,13,13,15,16,15,13,13,16,15,14,
- 13,13,16,15,15,13,13,16,15,15,13,13,13,12,12,11,
- 11,14,14,14,11,11,14,14,14,12,12,15,14,14,11,11,
- 16,14,14,11,11,15,15,15,12,13,16,14,14,13,13,15,
- 15,15,12,12,15,14,14,13,13,16,15,15,12,12,15,15,
- 15,12,12,15,14,14,13,13,15,15,15,12,12,15,14,14,
- 12,12,16,15,15,12,12,16,15,15,12,12,16,14,14,13,
- 13,15,15,15,11,11,15,15,14,12,12,16,15,15,11,11,
- 16,15,15,12,12,16,14,14,13,13,16,15,15,11,11,16,
- 14,14,12,12,16,15,15,11,11,14,10,10, 9, 9,14,11,
- 11,12,12,14,12,12,13,14,14,12,12,12,12,14,14,14,
- 13,13,15,13,13,14,14,15,14,14,15,15,15,12,12,13,
- 13,15,13,13,14,14,15,15,15,14,14,15,13,13,14,14,
- 15,15,15,15,15,15,12,12,13,13,15,13,13,14,14,15,
- 14,14,13,13,15,13,13,14,14,15,14,14,15,15,15,12,
- 12,13,13,15,13,13,13,13,14,14,14,13,13,15,15,15,
- 14,15,15,15,15,21,19,15,14,14,13,13,15,14,14,14,
- 14,14,14,14,13,13,14,12,12, 9, 9,14,14,14,12,12,
- 14,14,13,13,13,14,14,14,12,12,14,14,14,12,12,15,
- 14,14,13,13,15,14,14,14,14,15,14,14,13,13,15,14,
- 14,13,13,15,15,15,15,15,15,14,14,13,13,15,14,14,
- 14,14,15,14,14,13,13,15,14,14,13,13,14,15,15,15,
- 15,15,14,15,13,13,15,14,14,14,14,15,14,14,13,13,
- 15,14,14,13,13,14,15,15,14,14,15,15,15,14,14,15,
- 14,14,14,14,15,15,15,15,15,15,14,14,14,13,14,15,
- 15,14,14,13,10,10,12,12,18,12,12,12,12,17,12,12,
- 12,12,18,13,13,11,11,18,15,14,11,11,17,13,13,13,
- 13,18,15,15,12,12,18,12,12,12,12,17,13,13,12,12,
- 18,15,15,12,12,18,13,13,13,12,18,15,15,13,13,18,
- 13,13,12,12,18,13,13,12,12,18,15,15,12,12,17,13,
- 13,12,12,17,15,15,12,12,17,12,12,11,11,17,13,13,
- 11,11,17,15,15,11,11,18,16,16,12,12,18,15,15,13,
- 13,18,15,15,11,11,17,15,15,12,12,18,15,15,11,11,
- 13, 8, 8,10,10,14,14,14,11,11,15,15,15,12,12,15,
- 14,14,11,11,16,14,14,12,12,15,15,15,12,12,15,15,
- 15,13,13,15,15,15,12,12,15,15,15,12,12,16,15,15,
- 13,13,15,15,15,12,12,15,15,15,13,13,16,15,15,12,
- 12,15,15,15,12,12,16,15,15,13,13,16,15,15,12,12,
- 15,15,15,13,13,15,14,14,12,12,15,15,15,12,12,16,
- 15,14,12,12,16,15,15,13,13,16,16,16,13,13,16,14,
- 15,13,13,15,15,15,13,13,16,15,15,12,12,13,12,12,
- 10,10,14,14,14,11,11,15,14,14,12,12,15,14,14,11,
- 11,16,14,14,11,11,15,14,15,12,12,15,14,14,13,13,
- 15,15,15,12,12,15,14,14,12,12,15,14,15,12,12,15,
- 15,15,12,12,16,14,14,13,13,15,15,15,11,12,16,14,
- 14,12,12,16,15,15,12,12,15,15,15,12,12,16,14,14,
- 12,12,15,15,15,11,11,15,14,14,11,12,15,15,14,11,
- 11,16,15,15,12,12,16,14,14,13,13,16,15,15,11,11,
- 16,14,14,12,12,16,15,15,11,11,13,10,10, 8, 8,14,
- 12,12,12,12,14,12,12,13,13,14,12,12,12,12,14,14,
- 14,13,13,15,13,13,14,14,15,15,14,15,15,15,13,13,
- 13,13,15,13,13,14,14,15,14,15,14,14,15,13,13,13,
- 13,15,15,15,15,15,15,12,12,13,12,15,13,13,14,14,
- 15,14,14,13,13,15,13,13,14,13,15,15,15,16,16,15,
- 13,13,12,12,15,13,13,13,13,14,14,14,12,12,15,15,
- 15,14,14,15,15,15,20,20,15,14,14,13,13,15,15,14,
- 14,14,15,14,14,13,13,13,12,12, 9, 9,14,13,13,12,
- 12,14,13,13,12,12,14,14,14,12,12,14,14,14,13,13,
- 15,14,14,13,13,15,14,14,14,14,15,15,14,12,12,15,
- 14,14,13,13,15,14,15,14,15,15,14,14,13,13,15,14,
- 14,14,14,15,14,14,12,12,15,14,14,13,13,14,15,14,
- 15,14,15,14,14,13,13,15,14,14,14,14,15,14,14,12,
- 12,15,14,14,13,13,15,15,15,14,14,15,15,15,14,14,
- 16,14,14,14,14,15,15,15,14,14,15,14,14,14,14,14,
- 15,15,14,14,13,13,13,12,13,17,15,15,12,12,17,15,
- 15,12,12,18,15,15,11,11,17,16,16,11,11,18,16,16,
- 13,13,18,17,16,13,13,18,16,16,12,12,18,16,16,12,
- 12,18,17,17,12,12,17,16,16,12,13,17,16,16,12,13,
- 17,16,16,12,12,17,16,16,12,12,18,17,16,12,12,18,
- 16,16,12,12,17,16,17,12,12,18,15,15,11,11,18,15,
- 15,12,12,17,17,17,11,11,17,17,17,12,12,17,16,16,
- 13,13,18,16,16,11,11,18,16,16,12,12,18,17,16,11,
- 11,14,14,14,10,10,16,15,14,11,11,16,15,15,12,12,
- 16,14,14,12,12,17,14,14,13,13,17,15,15,13,13,17,
- 15,15,14,14,16,15,15,12,12,16,15,15,13,13,18,15,
- 15,14,14,16,15,15,12,12,16,15,15,14,14,16,15,15,
- 12,12,16,15,15,13,13,17,15,15,13,13,17,15,15,13,
- 13,17,15,15,14,14,16,14,14,12,12,17,15,15,12,12,
- 18,15,15,13,13,17,15,15,14,14,17,16,16,15,15,17,
- 15,14,13,13,17,15,15,14,14,17,15,15,13,13,14,12,
- 12,11,11,15,14,14,12,12,16,14,14,12,12,16,14,14,
- 11,11,17,14,14,12,12,16,15,14,13,13,16,14,14,13,
- 13,16,15,15,12,12,16,14,14,13,13,17,15,15,13,13,
- 16,15,15,13,13,17,14,14,13,13,16,15,15,12,12,16,
- 14,14,12,12,16,15,15,12,12,17,15,15,12,12,17,14,
- 14,13,13,16,15,15,12,12,16,14,14,12,12,16,15,15,
- 12,12,17,15,15,13,13,17,14,14,13,13,17,15,15,12,
- 12,17,14,14,12,12,17,15,15,12,12,14,14,14, 8, 8,
- 14,14,14,13,13,14,15,15,14,14,14,14,14,14,14,15,
- 15,15,19,19,15,15,15,14,14,15,15,16,20,19,15,15,
- 15,14,14,15,16,16,15,15,15,15,15,19,19,15,15,15,
- 14,14,15,16,16,19,20,15,15,15,14,14,15,15,15,15,
- 15,15,15,15,19,19,15,15,15,15,15,15,15,16,19,20,
- 15,14,15,14,14,15,15,15,15,15,15,15,15,20,19,15,
- 15,15,21,19,15,16,16,20,20,15,15,14,19,19,15,15,
- 16,20,21,15,15,15,20,19,13,12,12, 9, 9,14,14,14,
- 12,12,14,13,13,13,13,14,14,14,13,13,15,14,14,20,
- 19,15,14,14,14,13,15,14,14,19,19,15,15,14,13,13,
- 15,14,14,14,14,15,15,15,19,20,15,14,14,13,13,15,
- 14,14,20,19,14,15,14,13,13,15,14,14,14,13,15,15,
- 15,19,20,15,15,14,14,14,15,14,14,21,19,15,15,15,
- 13,13,15,14,14,14,14,14,15,15,20,20,15,15,15,21,
- 20,15,14,14,19,20,15,15,15,20,20,15,14,14,19,20,
- 15,15,15,21,19,
-};
-
-static const static_codebook _44p2_p4_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p2_p4_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p2_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44p2_p5_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p2_p5_0[] = {
- 2, 6, 6,14,14, 6, 7, 7,14,14, 7, 7, 7,15,15, 0,
- 13,13,16,16, 0,13,13,15,15, 7, 8, 8,15,15, 9,10,
- 10,17,16, 9, 8, 8,15,15, 0,13,13,18,17, 0,13,13,
- 16,16, 8, 8, 8,15,15,12,11,11,16,17, 9, 8, 8,14,
- 14, 0,13,13,18,17, 0,13,13,16,15, 0,14,14,18,17,
- 0,20,22,18,20, 0,12,12,16,16, 0,16,16,22,20, 0,
- 14,14,16,16, 0,14,14,17,17, 0,22,22,22,19, 0,12,
- 13,16,16, 0,17,17, 0, 0, 0,15,15,16,16, 5, 7, 7,
- 13,13, 9, 9, 9,15,14,10,10,10,14,14, 0,21,21,18,
- 17, 0,21,22,18,17, 9,10,10,14,14,12,12,12,17,17,
- 12,10,10,14,14, 0,19,21,18,17, 0,20,22,18,18,11,
- 10,10,14,14,14,13,13,18,17,12,11,11,14,14, 0,22,
- 19,17,18, 0,20, 0,18,17, 0,22,21,17,17, 0, 0, 0,
- 0, 0, 0,20,22,17,17, 0,22, 0,21,19, 0,22, 0,18,
- 18, 0, 0,22,18,19, 0, 0, 0, 0, 0, 0,19,21,17,17,
- 0, 0, 0,20,20, 0, 0, 0,18,18, 6, 6, 6,13,12, 8,
- 6, 6,11,11, 8, 6, 6,13,13, 0, 9, 9,11,11, 0,11,
- 11,14,14, 9, 7, 7,13,13,11, 9, 9,13,13,10, 6, 6,
- 13,13, 0,10,10,14,14, 0,10,10,13,13, 9, 7, 7,13,
- 14,13, 9, 9,13,13,10, 6, 6,13,12, 0,11,11,15,15,
- 0,10,10,13,13, 0,12,12,15,15, 0,19, 0,17,17, 0,
- 9, 9,13,13, 0,13,14,19,20, 0,11,11,13,13, 0,11,
- 11,14,14, 0,19,20,17,18, 0,10,10,13,13, 0,15,15,
- 21,19, 0,12,12,13,13, 0,10,10,12,13, 0,11,11,15,
- 15, 0,11,11,15,15, 0,15,15,22, 0, 0,16,17,22, 0,
- 0,11,11,15,15, 0,14,14,18,17, 0,11,11,15,16, 0,
- 15,15,22,21, 0,16,16, 0,20, 0,12,12,16,15, 0,15,
- 14,19,19, 0,11,11,16,16, 0,15,15,21, 0, 0,16,15,
- 0, 0, 0,16,16,22,21, 0, 0, 0, 0, 0, 0,15,15,20,
- 20, 0,18,18, 0, 0, 0,16,17, 0, 0, 0,17,17, 0,22,
- 0, 0, 0, 0, 0, 0,15,15,21,22, 0,20,18, 0, 0, 0,
- 18,17,22, 0, 0,10,10,12,11, 0,10,10,10,10, 0,11,
- 11,12,12, 0,11,11, 9, 9, 0,13,13,12,12, 0,11,11,
- 12,12, 0,13,13,12,12, 0,10,10,12,12, 0,13,12,13,
- 13, 0,12,12,12,12, 0,11,11,12,12, 0,13,13,12,12,
- 0,10,10,12,12, 0,13,13,13,14, 0,12,12,12,12, 0,
- 13,14,14,14, 0,20,21,15,15, 0,12,11,12,12, 0,15,
- 16,20,22, 0,13,12,11,11, 0,13,13,14,13, 0,20, 0,
- 16,15, 0,12,12,12,12, 0,16,16,22,21, 0,13,13,12,
- 12, 6, 7, 7,16,16,11, 9, 9,15,15,12, 9, 9,16,16,
- 0,13,13,14,14, 0,14,14,16,17,10, 9, 9,16,16,14,
- 12,12,16,16,12, 9, 9,15,15, 0,13,13,18,18, 0,13,
- 13,15,16,12,10,10,17,18,15,12,12,17,17,13, 9, 9,
- 16,16, 0,13,13,17,18, 0,14,14,16,16, 0,15,15,18,
- 18, 0,22, 0,20,20, 0,12,12,16,16, 0,16,16,20,22,
- 0,14,14,16,16, 0,15,14,18,18, 0, 0,22,19,21, 0,
- 13,13,16,17, 0,17,17,22,22, 0,15,15,16,16, 7, 7,
- 7,14,14,11,10,10,15,15,12,10,10,15,14, 0,22, 0,
- 18,18, 0, 0,21,17,18,11,10,10,15,15,14,12,12,17,
- 17,14,11,11,15,15, 0,22,20,18,18, 0, 0,20,18,17,
- 12,10,10,16,16,17,14,14,19,18,14,11,11,15,15, 0,
- 21,22,19,19, 0,21,22,18,18, 0,22, 0,19,21, 0, 0,
- 0, 0, 0, 0,22,22,18,17, 0, 0, 0,21,20, 0,22,22,
- 20,19, 0, 0,22,20,20, 0, 0, 0, 0, 0, 0,20,21,17,
- 17, 0, 0,22,21,21, 0, 0, 0,18,18,10, 9, 9,14,14,
- 13,10,10,13,13,13,10,11,14,14, 0,13,13,12,12, 0,
- 15,15,16,16,13,10,10,15,15,15,12,12,14,14,15,10,
- 10,14,15, 0,14,14,16,15, 0,14,14,15,15,13,10,10,
- 15,15,18,13,13,15,15,15,10,10,14,15, 0,14,14,16,
- 16, 0,14,14,15,15, 0,15,15,16,16, 0,22, 0,18,18,
- 0,12,13,14,14, 0,17,17,22, 0, 0,14,14,14,14, 0,
- 15,15,16,16, 0,22, 0,18,17, 0,13,13,14,14, 0,19,
- 18,21,22, 0,15,15,14,14, 0,11,11,13,13, 0,12,12,
- 16,16, 0,12,12,16,16, 0,15,16,21, 0, 0,16,17, 0,
- 22, 0,12,12,16,16, 0,14,14,17,18, 0,11,11,16,16,
- 0,15,15,21,22, 0,16,16, 0, 0, 0,12,12,16,16, 0,
- 15,15, 0,19, 0,12,12,16,17, 0,16,16,22, 0, 0,16,
- 16, 0,22, 0,17,17, 0,22, 0, 0, 0, 0, 0, 0,15,15,
- 20,19, 0,18,18, 0, 0, 0,17,18, 0, 0, 0,17,17, 0,
- 0, 0, 0, 0, 0, 0, 0,15,15, 0,22, 0,20,18, 0, 0,
- 0,18,18,22,22, 0,11,11,14,14, 0,12,12,14,14, 0,
- 12,12,15,15, 0,13,13,14,14, 0,14,14,17,16, 0,12,
- 12,16,16, 0,14,14,16,16, 0,11,11,15,15, 0,13,13,
- 16,16, 0,13,13,15,15, 0,12,12,15,15, 0,15,14,16,
- 16, 0,11,11,15,15, 0,14,14,17,17, 0,13,13,15,15,
- 0,15,15,17,17, 0, 0, 0,19,18, 0,13,12,15,15, 0,
- 16,16, 0, 0, 0,14,14,15,15, 0,14,14,16,17, 0,22,
- 0,18,18, 0,13,13,15,15, 0,17,17, 0, 0, 0,14,14,
- 15,15, 8, 8, 8,16,16,12,10,10,16,16,13, 9, 9,16,
- 16, 0,14,14,17,17, 0,14,14,17,16,12,10,10,18,17,
- 14,11,11,18,18,14, 9,10,16,16, 0,13,13,18,19, 0,
- 14,13,16,16,12, 9, 9,16,16,17,13,13,17,17,14, 9,
- 9,15,15, 0,14,14,19,20, 0,13,13,15,15, 0,15,15,
- 18,19, 0, 0,22,22,22, 0,13,13,17,17, 0,16,16,19,
- 21, 0,14,14,16,16, 0,14,14,18,18, 0, 0, 0, 0, 0,
- 0,13,13,16,16, 0,18,18, 0, 0, 0,15,15,16,16, 8,
- 7, 7,14,14,12,10,10,15,15,13,10,10,15,14, 0,22,
- 0,18,18, 0,22, 0,18,18,12,10,10,16,15,15,12,12,
- 17,17,14,11,11,15,15, 0,20,21,19,18, 0, 0, 0,17,
- 18,13,11,11,15,15,16,13,13,18,18,15,11,11,14,14,
- 0,22,21,19,19, 0,21,22,18,18, 0,22,22,20,18, 0,
- 0, 0, 0, 0, 0,22,19,17,17, 0, 0, 0,22,21, 0, 0,
- 22,19,17, 0, 0,22,19,19, 0, 0, 0, 0, 0, 0,22,21,
- 18,17, 0, 0, 0,22, 0, 0, 0, 0,19,19, 0,10,10,14,
- 14, 0,11,11,15,14, 0,11,11,15,15, 0,14,14,15,14,
- 0,15,15,16,16, 0,11,11,16,16, 0,13,13,16,16, 0,
- 11,11,15,15, 0,14,14,17,16, 0,14,14,15,15, 0,11,
- 11,16,16, 0,14,13,15,15, 0,11,11,15,15, 0,15,15,
- 17,17, 0,14,14,15,14, 0,16,16,17,17, 0, 0,22,18,
- 18, 0,13,13,15,15, 0,17,17,22, 0, 0,15,15,15,14,
- 0,15,16,16,17, 0, 0,22,18,19, 0,13,13,15,15, 0,
- 20,18,21, 0, 0,15,15,14,14, 0,11,11,13,13, 0,12,
- 12,16,16, 0,12,12,16,15, 0,15,16,22,22, 0,17,17,
- 0, 0, 0,12,12,16,16, 0,14,14,18,18, 0,11,11,16,
- 16, 0,15,16,22,20, 0,16,16, 0,22, 0,12,12,16,16,
- 0,15,15,18,20, 0,11,11,16,16, 0,15,15, 0, 0, 0,
- 16,16, 0, 0, 0,17,17,22, 0, 0, 0, 0, 0, 0, 0,15,
- 15, 0,21, 0,18,18, 0, 0, 0,17,16, 0, 0, 0,17,17,
- 22,22, 0, 0, 0, 0, 0, 0,15,15,21, 0, 0,20,22, 0,
- 0, 0,18,18, 0, 0, 0,12,12,15,15, 0,12,12,15,15,
- 0,12,12,16,16, 0,13,13,15,15, 0,15,15,17,17, 0,
- 13,12,16,16, 0,14,14,16,16, 0,12,11,16,16, 0,14,
- 14,17,17, 0,14,14,16,16, 0,12,12,16,16, 0,15,15,
- 17,16, 0,11,11,15,16, 0,14,14,17,17, 0,14,14,16,
- 16, 0,15,15,18,18, 0, 0, 0,22,19, 0,13,13,15,16,
- 0,16,17, 0, 0, 0,14,14,16,16, 0,15,15,18,17, 0,
- 0, 0,20,20, 0,13,13,16,15, 0,17,17,22,22, 0,14,
- 14,15,15, 0,11,11,16,16, 0,13,13,16,17, 0,13,13,
- 17,18, 0,16,16,17,17, 0,17,17,18,18, 0,12,12,17,
- 17, 0,16,15,18,18, 0,12,12,16,16, 0,16,16,18,18,
- 0,15,15,17,17, 0,12,12,17,17, 0,16,16,19,18, 0,
- 12,12,16,17, 0,16,16,19,19, 0,15,16,16,17, 0,16,
- 16,19,17, 0, 0, 0,20,22, 0,13,13,16,16, 0,19,18,
- 21, 0, 0,15,15,16,16, 0,16,16,18,18, 0, 0, 0,22,
- 21, 0,14,14,16,16, 0,21,19,21,22, 0,16,16,16,16,
- 0, 9, 9,14,14, 0,13,13,15,15, 0,14,14,15,15, 0,
- 0,20,18,19, 0, 0,22,18,18, 0,12,12,15,15, 0,15,
- 15,17,18, 0,14,13,14,14, 0,20, 0,18,18, 0,21, 0,
- 18,17, 0,13,13,15,16, 0,17,17,18,18, 0,14,14,15,
- 15, 0,22,22,20,19, 0,20,21,18,18, 0,20,22,19,19,
- 0, 0, 0, 0, 0, 0,20,20,17,17, 0, 0,22,22,21, 0,
- 22, 0,18,18, 0,20,22,19,19, 0, 0, 0, 0, 0, 0,21,
- 21,17,18, 0, 0, 0,21,20, 0, 0,22,19,18, 0,18,18,
- 15,15, 0,22,21,17,16, 0, 0,22,17,17, 0,20,22,18,
- 18, 0, 0,22,20,20, 0,21,19,16,16, 0,21,21,18,18,
- 0,19,19,17,17, 0, 0,22,19,19, 0,22,20,17,17, 0,
- 21,19,16,16, 0,22,22,19,18, 0,19,20,16,16, 0,22,
- 21,19,21, 0,21,22,17,18, 0,21,20,18,18, 0, 0, 0,
- 19,20, 0,20,19,16,16, 0,22,22, 0, 0, 0,21,21,17,
- 16, 0,22,20,19,18, 0, 0, 0,20,20, 0,20,19,16,16,
- 0, 0, 0, 0, 0, 0,21,22,17,17, 0,11,11,13,13, 0,
- 13,13,15,16, 0,13,13,16,16, 0,17,18,21, 0, 0,17,
- 18, 0, 0, 0,12,12,15,16, 0,15,15,19,18, 0,12,12,
- 16,16, 0,17,17,22, 0, 0,17,17, 0,22, 0,12,12,17,
- 16, 0,16,16,19,20, 0,12,12,16,16, 0,17,17, 0, 0,
- 0,17,17, 0,21, 0,17,16,22, 0, 0, 0, 0, 0, 0, 0,
- 15,15,20,22, 0,20,18, 0, 0, 0,18,18, 0, 0, 0,17,
- 17,21, 0, 0, 0, 0, 0, 0, 0,15,15,21,22, 0,19,20,
- 22, 0, 0,19,18, 0, 0, 0,14,14,18,18, 0,16,16,22,
- 20, 0,16,16,22,19, 0,17,17,20,22, 0,19,19, 0, 0,
- 0,15,15,20, 0, 0,18,21, 0,20, 0,15,15,21,20, 0,
- 18,17, 0, 0, 0,17,17, 0,22, 0,15,15,19,19, 0,19,
- 18, 0, 0, 0,15,15,20, 0, 0,18,18,22,22, 0,17,17,
- 0,20, 0,18,18, 0, 0, 0, 0,22, 0, 0, 0,15,15,19,
- 20, 0,20,19, 0, 0, 0,17,17,20,21, 0,17,18,20,22,
- 0, 0, 0, 0,22, 0,15,15,20,20, 0,22,20, 0, 0, 0,
- 17,18,20, 0, 0,12,12,17,16, 0,14,14,17,17, 0,13,
- 13,17,17, 0,16,16,18,18, 0,17,16,17,17, 0,13,13,
- 17,17, 0,15,16,18,18, 0,13,13,16,16, 0,16,16,18,
- 18, 0,16,16,17,16, 0,13,13,16,16, 0,17,17,18,17,
- 0,12,12,15,16, 0,17,17,19,19, 0,16,16,16,16, 0,
- 16,17,19,18, 0, 0, 0,21,22, 0,14,14,16,16, 0,18,
- 18, 0,22, 0,16,16,16,16, 0,16,16,18,17, 0, 0, 0,
- 21,20, 0,14,14,16,16, 0,21,22,22, 0, 0,16,16,16,
- 16, 0, 9, 9,14,13, 0,13,14,15,16, 0,14,13,15,14,
- 0,22, 0,18,18, 0,21, 0,17,18, 0,13,13,15,15, 0,
- 15,16,18,17, 0,14,14,15,14, 0,20,22,18,18, 0,22,
- 21,17,17, 0,13,13,15,15, 0,17,17,19,19, 0,14,14,
- 14,14, 0, 0,22,18,18, 0, 0,22,17,17, 0, 0,22,19,
- 20, 0, 0, 0, 0, 0, 0,21,20,17,16, 0, 0, 0,21,22,
- 0, 0, 0,18,19, 0, 0, 0,18,18, 0, 0, 0, 0, 0, 0,
- 22, 0,17,17, 0, 0, 0,20,22, 0, 0, 0,18,19, 0,18,
- 19,16,16, 0,22,20,17,17, 0,22,22,17,18, 0,22,22,
- 18,17, 0, 0,22,18,19, 0,20,20,17,18, 0, 0,22,19,
- 18, 0,22,22,17,17, 0,22, 0,19,19, 0, 0,22,18,18,
- 0,20,22,17,17, 0, 0,22,18,18, 0,19,20,17,17, 0,
- 22, 0,20,19, 0,22,21,17,17, 0, 0, 0,18,18, 0, 0,
- 0,22,19, 0,20, 0,17,17, 0,22, 0, 0,22, 0, 0,20,
- 17,18, 0,22, 0,19,19, 0, 0, 0, 0,19, 0,19,21,17,
- 17, 0, 0, 0, 0, 0, 0,20,21,17,16, 0,11,11,13,13,
- 0,13,13,16,16, 0,13,13,15,16, 0,17,17,21,22, 0,
- 17,18, 0, 0, 0,12,12,16,16, 0,15,15,18,18, 0,13,
- 13,16,16, 0,17,16,21,21, 0,17,17, 0, 0, 0,13,13,
- 16,16, 0,16,16,19,18, 0,13,13,16,16, 0,17,17, 0,
- 22, 0,17,18,20,22, 0,17,18, 0, 0, 0, 0, 0, 0, 0,
- 0,15,15,20, 0, 0,18,19, 0, 0, 0,17,17, 0, 0, 0,
- 18,17,22, 0, 0, 0, 0, 0, 0, 0,15,16,21,20, 0,20,
- 20, 0, 0, 0,18,19, 0, 0, 0,15,15,22,22, 0,17,16,
- 20,22, 0,17,17,20,22, 0,18,18, 0,21, 0,19,18, 0,
- 0, 0,16,16,20,20, 0,19,19,22, 0, 0,15,16,21,22,
- 0,18,19,22, 0, 0,17,18, 0, 0, 0,16,16,22, 0, 0,
- 19,19, 0,21, 0,15,16,20, 0, 0,18,18, 0,22, 0,18,
- 17, 0, 0, 0,18,18, 0, 0, 0, 0, 0, 0, 0, 0,16,16,
- 22,21, 0,20,21, 0, 0, 0,17,18,22, 0, 0,18,18, 0,
- 0, 0, 0, 0, 0, 0, 0,16,16,20,19, 0,22,21, 0, 0,
- 0,18,18,22,22,
-};
-
-static const static_codebook _44p2_p5_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p2_p5_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44p2_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44p2_p5_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44p2_p5_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p2_p5_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44p2_p5_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p2_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44p2_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p2_p6_0[] = {
- 1, 7, 7, 7, 8, 8, 7, 8, 8, 7, 9, 9,10,11,11, 9,
- 8, 8, 7, 8, 9,11,11,11, 9, 8, 8, 6, 7, 7,10,10,
- 10,10,10,10,10,10,10,14,14,14,12,11,11,10,11,11,
- 15,14,14,13,11,11, 6, 6, 6, 8, 5, 5, 8, 7, 7, 8,
- 7, 7,11,10,10, 9, 7, 7, 9, 7, 7,12,10,10,10, 7,
- 7, 6, 8, 7,12,10,10,12,10,10,11,10,10,15,14,13,
- 13,10,10,11,10,10,16,14,14,14,10,10, 7, 7, 7,12,
- 11,11,12,11,11,11,11,11,16,14,14,13,12,12,11,11,
- 11,17,15,15,14,12,12,10, 9, 9,13,11,11,13,11,11,
- 12,11,11,16,14,13,14,11,11,12,11,11,17,15,14,14,
- 11,11, 7, 8, 8,12,11,11,12,10,10,12,10,10,16,13,
- 14,13,10,10,11,10,10,17,14,14,14,10,10, 7, 7, 7,
- 12,11,11,12,11,11,12,11,11,15,14,15,14,12,12,12,
- 11,11,17,15,15,14,12,12,10,10, 9,13,11,11,13,11,
- 11,13,11,11,16,14,14,14,11,11,13,11,11,16,15,15,
- 15,11,11,
-};
-
-static const static_codebook _44p2_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p2_p6_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44p2_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44p2_p6_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p2_p6_1[] = {
- 2, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 8,
- 7, 7, 8, 8, 8, 9, 9, 9, 9, 8, 8, 6, 7, 7, 9, 8,
- 8, 9, 7, 7, 9, 8, 8,10, 8, 8,10, 8, 8,10, 8, 8,
- 10, 8, 9,10, 8, 8, 7, 6, 6, 8, 6, 6, 9, 6, 6, 9,
- 7, 7,10, 8, 8, 9, 6, 6, 9, 7, 7,10, 9, 8, 9, 7,
- 7, 7, 7, 7,11, 8, 8,11, 9, 9,10, 9, 9,12, 9, 9,
- 12, 8, 8,11, 9, 9,12, 9, 9,12, 8, 8, 8, 7, 7,10,
- 9, 9,10, 9, 9,10, 9, 9,11,10,11,11, 9, 9,11, 9,
- 9,11,11,11,11, 9, 9,10, 8, 8,11, 9, 9,10, 9, 9,
- 11, 9, 9,11,10,10,11, 9, 9,11, 9, 9,12,10,10,11,
- 9, 9, 8, 8, 8,11, 9, 9,12, 9, 9,11, 9, 9,12, 9,
- 9,12, 8, 8,12, 9, 9,12, 9,10,12, 8, 8, 9, 7, 7,
- 11, 9, 9,11,10,10,11, 9, 9,11,11,11,11, 9, 9,11,
- 10,10,12,11,11,11, 9,10,10, 9, 9,11, 9, 9,11,10,
- 10,11,10,10,11,11,11,11, 9, 9,11, 9,10,11,11,11,
- 11, 9, 9,
-};
-
-static const static_codebook _44p2_p6_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p2_p6_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44p2_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44p2_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p2_p7_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p2_p7_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p2_p7_0,
- 1, -513979392, 1633504256, 2, 0,
- (long *)_vq_quantlist__44p2_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44p2_p7_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p2_p7_1[] = {
- 1, 9, 9, 6, 9, 9, 5, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,
-};
-
-static const static_codebook _44p2_p7_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p2_p7_1,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p2_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44p2_p7_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p2_p7_2[] = {
- 1, 3, 2, 5, 4, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
- 12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p2_p7_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44p2_p7_2,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44p2_p7_2,
- 0
-};
-
-static const long _vq_quantlist__44p2_p7_3[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p2_p7_3[] = {
- 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p2_p7_3 = {
- 1, 25,
- (char *)_vq_lengthlist__44p2_p7_3,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44p2_p7_3,
- 0
-};
-
-static const char _huff_lengthlist__44p2_short[] = {
- 4, 4,12, 9, 8,12,15,17, 4, 2,11, 6, 5, 9,13,15,
- 11, 7, 8, 7, 7,10,14,13, 8, 5, 7, 5, 5, 8,12,12,
- 8, 4, 7, 4, 3, 6,11,12,11, 8, 9, 7, 6, 8,11,12,
- 15,13,14,12, 9, 7,10,13,16,12,17,12, 7, 5, 8,11,
-};
-
-static const static_codebook _huff_book__44p2_short = {
- 2, 64,
- (char *)_huff_lengthlist__44p2_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p3_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44p3_l0_0[] = {
- 1, 4, 4, 8, 8, 8, 8, 9, 9,10,10,10,10, 4, 6, 5,
- 8, 7, 9, 9, 9, 9,10, 9,11, 9, 4, 5, 6, 7, 8, 9,
- 9, 9, 9, 9,10, 9,10, 8, 9, 8, 9, 8,10, 9,11, 9,
- 12,10,12,10, 8, 8, 9, 8, 9, 9,10, 9,11,10,12,10,
- 12, 9,10,10,11,10,12,11,12,11,12,12,12,12, 9,10,
- 10,11,11,11,11,11,12,12,12,12,12,10,11,11,12,12,
- 12,12,12,12,12,12,12,12,10,11,11,12,12,12,12,12,
- 12,12,12,12,12,11,12,12,12,12,12,13,12,13,12,13,
- 12,12,11,12,12,12,12,12,12,13,12,12,12,12,12,12,
- 12,12,13,13,12,13,12,13,12,13,12,12,12,13,12,13,
- 12,13,12,13,12,13,12,12,12,
-};
-
-static const static_codebook _44p3_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44p3_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44p3_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44p3_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p3_l0_1[] = {
- 3, 4, 4, 5, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5,
- 5, 6, 5, 6, 5, 6, 5, 6, 5,
-};
-
-static const static_codebook _44p3_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44p3_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p3_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44p3_l1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p3_l1_0[] = {
- 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p3_l1_0 = {
- 2, 9,
- (char *)_vq_lengthlist__44p3_l1_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p3_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44p3_lfe[] = {
- 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p3_lfe = {
- 2, 4,
- (char *)_huff_lengthlist__44p3_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44p3_long[] = {
- 3, 4,13, 9, 9,12,15,17, 4, 2,18, 5, 7,10,14,18,
- 11, 8, 6, 5, 6, 8,11,14, 8, 5, 5, 3, 5, 8,11,13,
- 9, 6, 7, 5, 5, 7, 9,10,11,10, 9, 8, 6, 6, 8,10,
- 14,14,11,11, 9, 8, 9,10,17,17,14,13,10, 9,10,10,
-};
-
-static const static_codebook _huff_book__44p3_long = {
- 2, 64,
- (char *)_huff_lengthlist__44p3_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p3_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p3_p1_0[] = {
- 1, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,
-};
-
-static const static_codebook _44p3_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p3_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p3_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44p3_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p3_p2_0[] = {
- 3, 7, 7, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,
- 11,11, 0, 0, 0, 0, 0, 0, 0, 0,10, 9, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 0, 0, 0,10,11, 0, 0, 0, 0, 0,
- 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0,
- 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,12,12, 0, 0,
- 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0,12,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, 7, 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 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, 7, 0, 0, 0,
- 5, 5, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
- 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0,
- 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 7, 7, 0, 0,
- 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 0, 0, 0, 9, 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,11,11, 0, 0, 0, 9, 9, 0,
- 0, 0,10,10, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0,
- 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
- 10,10, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
- 0, 0, 0,11,12, 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0,
- 0, 0,12,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 9, 0, 0, 0, 7, 7, 0, 0, 0, 8, 8, 0, 0,
- 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,
- 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
- 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,11,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, 5,
- 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 9, 0, 0, 0, 7, 7,
- 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0,
- 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0,
- 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0,
- 0, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
- 0, 0, 0,10,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 9, 0, 0, 0, 7, 7, 0, 0, 0, 8, 8, 0,
- 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 7, 0, 0, 0, 9, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,11,11,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,10,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,
- 5, 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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 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, 9, 0, 0, 0, 7,
- 7, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
- 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0,
- 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
- 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9,
- 9, 0, 0, 0,11,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, 0, 0, 0, 0, 0, 0, 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,10, 0, 0, 0, 9, 9, 0, 0, 0,10,10,
- 0, 0, 0,11,12, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0,11,11, 0, 0,
- 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,11,
- 11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,12,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, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 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,10, 0, 0, 0,
- 9, 9, 0, 0, 0,10,10, 0, 0, 0,12,12, 0, 0, 0, 0,
- 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
- 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
- 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,11,11, 0, 0,
- 0, 0, 0, 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,
- 10,10, 0, 0, 0,11,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44p3_p2_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p3_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p3_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44p3_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p3_p3_0[] = {
- 1, 5, 5, 5, 8, 8, 0, 8, 8, 6, 9, 9, 8,10,10, 0,
- 8, 8, 0, 9, 9, 0,12,12, 0, 8, 8, 4, 7, 7, 6,10,
- 10, 0,12,12, 7,11,11, 9,12,12, 0,12,12, 0,13,13,
- 0,15,15, 0,12,12, 0, 7, 7, 0, 7, 7, 0, 8, 8, 0,
- 8, 8, 0,10,10, 0, 7, 7, 0, 8, 8, 0,11,11, 0, 7,
- 7, 5, 7, 7, 9, 9, 9, 0,11,10, 9, 9, 9,11,12,12,
- 0,10,10, 0,11,11, 0,13,13, 0,11,11, 6, 7, 7, 9,
- 10,10, 0,12,12,10,11,11,11,12,12, 0,12,12, 0,13,
- 13, 0,15,15, 0,12,12, 0,10,10, 0,11,11, 0,11,11,
- 0,12,12, 0,13,13, 0,11,11, 0,12,12, 0,15,15, 0,
- 11,11, 0, 8, 8, 0,10,10, 0,12,12, 0,11,11, 0,12,
- 12, 0,12,12, 0,12,12, 0,15,15, 0,11,11, 0, 7, 7,
- 0,10,10, 0,12,12, 0,10,10, 0,12,13, 0,12,12, 0,
- 13,13, 0,14,14, 0,12,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,
-};
-
-static const static_codebook _44p3_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p3_p3_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44p3_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44p3_p3_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p3_p3_1[] = {
- 3, 4, 4, 0, 8, 8, 0, 8, 8, 0, 9, 9, 0,10,10, 0,
- 8, 8, 0, 9, 9, 0,10,10, 0, 8, 8, 0, 7, 7, 0, 8,
- 8, 0, 8, 8, 0, 8, 8, 0, 8, 8, 0, 8, 8, 0, 8, 8,
- 0, 8, 8, 0, 8, 8, 0, 7, 7, 0, 6, 6, 0, 7, 7, 0,
- 7, 7, 0,10,10, 0, 6, 6, 0, 7, 7, 0,10,10, 0, 6,
- 5, 0, 8, 8, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0, 9, 9,
- 0, 7, 7, 0, 8, 8, 0, 9, 9, 0, 7, 7, 0, 6, 6, 0,
- 9,10, 0,10,10, 0,10,10, 0,11,11, 0, 9, 9, 0,10,
- 10, 0,11,11, 0, 9, 9, 0, 8, 8, 0, 8, 8, 0, 8, 8,
- 0, 9, 9, 0, 9, 9, 0, 8, 8, 0, 8, 8, 0, 9, 9, 0,
- 7, 7, 0, 8, 8, 0, 7, 7, 0, 7, 7, 0, 8, 8, 0, 9,
- 9, 0, 7, 7, 0, 7, 7, 0, 9, 9, 0, 6, 6, 0, 6, 6,
- 0,10,10, 0,10,10, 0,10,10, 0,12,12, 0, 9, 9, 0,
- 10,10, 0,12,12, 0, 9, 9, 0, 8, 8, 0, 7, 7, 0, 8,
- 8, 0, 8, 8, 0, 9, 9, 0, 7, 7, 0, 8, 8, 0, 9, 9,
- 0, 7, 7,
-};
-
-static const static_codebook _44p3_p3_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p3_p3_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p3_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44p3_p4_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p3_p4_0[] = {
- 1, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8,10,11,11, 9,
- 8, 8, 8, 8, 8,11,11,11,10, 8, 8, 5, 7, 7, 9,11,
- 11,10,11,11,10,11,11,12,13,14,11,12,12,10,11,11,
- 13,14,14,12,12,12, 5, 6, 6, 8, 6, 6, 8, 7, 7, 8,
- 7, 7,11,10,10,10, 7, 7, 9, 7, 7,12,11,11,11, 7,
- 7, 7, 7, 7,11,10,10,12,10,10,11,10,10,15,13,13,
- 13,10,10,12,11,11,15,13,13,14,11,11, 7, 7, 7,11,
- 11,11,12,11,11,12,11,11,14,14,14,14,12,12,12,12,
- 12,16,15,15,14,12,12, 0,10,10, 0,11,11, 0,11,12,
- 0,11,11, 0,14,14, 0,11,11, 0,12,12, 0,15,15, 0,
- 11,11, 8, 8, 8,12,10,10,12,10,10,13,11,11,15,13,
- 13,14,11,11,12,10,10,16,14,14,14,10,10, 8, 7, 7,
- 12,11,11,13,11,11,12,11,11,15,14,14,14,12,12,13,
- 12,12,15,14,14,15,12,12, 0,11,11, 0,12,12, 0,12,
- 12, 0,12,12, 0,15,15, 0,12,12, 0,13,13, 0,14,15,
- 0,12,12,
-};
-
-static const static_codebook _44p3_p4_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p3_p4_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44p3_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44p3_p4_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p3_p4_1[] = {
- 3, 4, 5, 8, 8,12,10,10,12,12,12,10,10,12,12,13,
- 11,11,12,12,13,12,12,12,12,13,10,10,13,13,13,13,
- 13,13,13,13,10,10,13,13,13,11,11,13,13,14,13,13,
- 12,12,13,10,10,13,13,13,13,13,13,13,13,10,10,12,
- 12,13,11,11,13,13,13,13,13,12,12,13,12,12,13,13,
- 13,13,13,13,13,14,11,11,12,12,14,12,12,13,12,14,
- 14,14,12,12,13,14,14,13,13,14,13,13,13,13,14,14,
- 14,12,12,14,13,13,13,13,14,14,14,12,12,12, 8, 8,
- 11,11,12,12,12,11,11,12,11,11,10,10,13,12,12,10,
- 10,13,12,12,10,10,13,12,12,12,12,14,12,12,12,12,
- 13,13,13,11,11,14,12,12,11,11,14,12,12,12,12,14,
- 12,12,12,12,13,12,12,12,12,13,13,13,11,11,14,12,
- 12,11,11,14,12,12,12,12,14,13,13,12,12,14,12,12,
- 12,11,14,13,13,11,11,14,13,12,11,11,14,13,13,11,
- 11,14,13,13,12,12,14,12,12,12,12,15,13,13,12,12,
- 14,12,12,11,11,14,13,13,11,11,12, 9, 9,10,10,12,
- 7, 7,11,11,12, 9, 9,12,12,13,10,10,10,10,14,14,
- 14,11,11,13, 9, 9,12,12,14,14,14,12,12,13, 8, 8,
- 11,11,14, 9, 9,12,12,14,14,14,11,11,13, 9, 9,12,
- 12,14,14,14,12,12,14, 8, 8,11,11,14, 9, 9,12,12,
- 14,14,14,11,11,14,10,10,12,12,14,14,14,13,13,14,
- 9, 9,11,11,14,10,10,12,12,14,14,14,11,11,14,14,
- 15,12,12,15,14,14,14,14,15,14,14,11,11,14,14,14,
- 12,12,14,14,14,11,11,14,11,11,10,10,14,10,10,10,
- 10,14,10,10,10,10,15,11,11, 9, 9,14,12,12, 9, 9,
- 15,11,11,11,11,15,13,13,11,11,15,10,10,10,10,15,
- 11,11,10,10,15,13,13,11,11,15,11,11,11,11,15,13,
- 13,11,11,15,10,10,10,10,15,11,11,10,10,15,13,13,
- 11,11,15,12,12,11,11,15,13,13,11,11,15,11,11,10,
- 10,15,12,12,10,10,15,13,13,10,10,15,14,14,11,11,
- 15,13,13,11,11,15,14,14,10,11,15,13,13,10,10,15,
- 13,14,10,10,14,13,13,10,10,14,13,13,10,10,14,13,
- 13,10,10,14,13,13, 9, 9,14,14,14, 9, 9,15,14,14,
- 11,11,15,14,14,10,10,15,14,14,10,10,15,14,14,11,
- 11,15,14,14,10,10,15,14,14,11,11,15,14,14,10,10,
- 14,14,14,10,10,15,14,14,10,10,14,14,14,10,10,15,
- 14,14,11,11,15,14,14,11,11,14,14,14,10,10,15,14,
- 14,10,10,14,14,14, 9, 9,15,15,15,11,11,15,14,14,
- 12,12,15,15,14,10,10,15,14,14,10,10,14,15,15, 9,
- 9,14,10,10,12,12,17, 9, 9,12,12,17,10,10,13,13,
- 17,11,11,12,12,18,14,14,12,12,17,10,10,13,13,17,
- 14,14,12,12,17, 9, 9,12,12,17,11,11,12,12,17,14,
- 14,12,12,18,10,10,13,13,18,14,14,13,13,18, 9, 9,
- 12,12,18,10,10,13,13,18,14,14,12,12,18,11,11,13,
- 13,18,14,14,13,13,18,10,10,12,12,17,11,11,12,12,
- 17,14,14,12,12,18,15,15,13,13,18,14,14,14,14,18,
- 15,15,12,12,18,14,14,12,12,18,15,15,12,12,13, 7,
- 7,11,11,14,15,15,11,11,14,15,15,12,12,14,15,15,
- 11,11,15,15,15,11,11,14,15,15,12,12,14,15,15,12,
- 12,14,15,15,11,11,14,15,15,11,11,15,15,15,12,12,
- 14,15,15,12,12,14,15,15,12,12,14,15,15,11,11,14,
- 15,15,11,11,15,15,15,12,12,15,15,15,12,12,14,15,
- 15,12,12,14,15,14,12,12,14,15,15,11,11,15,14,14,
- 12,12,15,15,15,12,12,15,16,16,12,12,15,15,15,12,
- 12,15,15,15,12,12,15,15,15,12,12,13,13,13,11,10,
- 14,14,15,11,11,14,14,14,12,12,15,14,14,10,10,15,
- 15,15,11,11,14,15,15,12,12,14,14,14,11,11,14,15,
- 15,11,11,14,15,15,12,12,15,15,15,11,11,14,15,15,
- 12,12,14,14,14,12,12,14,15,15,11,11,14,15,15,12,
- 12,15,15,15,11,11,15,15,15,12,12,15,14,14,12,12,
- 14,15,15,11,11,14,15,15,11,11,15,15,15,10,10,15,
- 15,16,12,12,15,15,15,14,14,15,15,15,11,11,15,15,
- 15,12,12,15,15,15,11,11,14,11,11,10,10,15, 9, 9,
- 12,12,15,10,10,12,12,15,11,11,11,11,15,14,14,12,
- 12,15,10,10,13,13,15,14,14,12,12,15, 9, 9,12,12,
- 15,10,10,13,13,15,13,13,12,11,15,10,10,12,12,15,
- 14,14,12,12,15, 9, 9,11,11,15,11,11,12,12,15,13,
- 13,11,11,15,11,11,13,13,15,13,14,13,14,15,11,11,
- 11,11,15,11,11,12,12,15,14,14,11,11,15,14,14,13,
- 13,15,14,14,20,20,15,14,14,12,12,15,14,14,12,12,
- 15,14,14,11,11,14,13,13,10,10,14,13,13,12,12,14,
- 14,13,12,12,15,14,14,12,12,15,14,14,11,11,15,14,
- 14,12,12,15,14,14,13,13,15,14,14,12,11,15,14,14,
- 11,11,15,14,14,13,13,15,14,14,12,12,15,14,14,13,
- 13,15,14,14,12,11,15,14,14,12,12,15,14,14,13,13,
- 15,14,14,13,13,15,14,14,12,12,15,14,14,12,12,15,
- 14,14,12,12,15,15,15,13,13,15,15,15,13,13,15,14,
- 14,13,13,15,15,15,13,13,15,14,15,12,12,15,15,15,
- 13,13,14,10,10,12,13,17, 9, 9,12,12,17,10,10,13,
- 13,17,11,11,12,12,18,14,14,12,12,18,10,10,13,13,
- 18,14,14,12,12,17, 9, 9,12,12,18,10,11,13,13,18,
- 14,14,12,12,17,10,10,12,12,17,14,14,12,12,17, 9,
- 9,12,12,17,11,11,12,12,17,14,14,12,12,18,11,11,
- 12,12,18,14,14,13,13,18,11,11,12,12,18,11,11,12,
- 12,18,14,14,12,12,18,15,15,12,12,18,14,14,13,13,
- 18,15,15,12,12,17,14,14,12,12,17,15,15,12,12,13,
- 7, 7,11,11,14,15,15,11,11,14,15,15,11,11,14,15,
- 14,12,12,15,15,15,12,11,14,15,15,12,12,14,15,15,
- 12,12,14,15,15,11,11,14,15,15,11,11,15,15,15,13,
- 13,14,15,15,11,11,14,15,15,13,12,14,15,15,11,11,
- 14,15,15,11,11,15,15,15,13,13,14,15,15,12,12,15,
- 15,15,12,12,15,15,15,11,11,15,15,15,11,11,15,15,
- 15,12,12,15,15,15,13,13,15,16,16,12,12,15,15,15,
- 12,13,15,15,15,12,12,15,15,15,12,12,13,13,13,11,
- 11,14,14,14,11,11,14,14,14,12,12,14,14,14,10,10,
- 15,14,14,11,11,14,15,15,12,12,14,14,14,12,12,14,
- 15,15,11,11,14,15,14,12,12,15,14,14,11,11,14,15,
- 15,12,12,14,14,14,11,11,14,15,15,11,11,14,14,14,
- 12,12,15,15,14,11,11,15,15,15,12,12,15,14,14,12,
- 12,14,15,15,11,11,14,15,14,11,11,15,15,15,10,10,
- 15,15,15,12,12,15,14,14,14,13,15,15,15,11,11,15,
- 15,15,11,11,15,15,15,10,10,14,11,11,10,10,15, 9,
- 9,12,12,15,10,10,12,12,15,11,11,11,11,15,14,14,
- 12,12,15,10,10,13,13,15,13,13,12,12,15, 9, 9,12,
- 12,15,11,11,13,13,15,14,14,12,12,15,10,10,13,13,
- 15,13,14,12,12,15, 9, 9,12,12,15,10,10,13,13,15,
- 13,13,11,11,15,11,11,13,13,15,14,14,13,13,15,10,
- 10,11,11,15,11,11,12,12,15,14,14,11,11,15,14,14,
- 13,13,15,14,14,21,20,15,14,14,11,11,15,14,14,12,
- 12,15,14,14,11,11,14,13,13,10,10,14,13,13,11,11,
- 15,14,14,12,12,15,14,14,12,12,14,14,14,12,12,15,
- 14,14,12,12,15,14,14,13,13,14,14,14,11,11,15,14,
- 14,11,11,15,14,14,13,13,15,14,14,12,12,15,14,14,
- 13,13,14,14,14,11,11,15,14,14,11,11,14,14,14,13,
- 13,15,14,14,12,12,15,14,14,12,12,15,14,14,12,12,
- 15,14,14,12,12,14,14,14,13,13,15,15,15,13,13,16,
- 14,14,12,13,15,15,15,13,13,15,14,14,12,12,15,15,
- 15,13,13,15,11,11,13,12,18,10,10,12,12,17,11,11,
- 12,12,18,12,12,11,11,18,14,14,12,12,18,11,11,13,
- 13,17,14,14,12,12,18,10,10,12,12,18,12,12,12,12,
- 18,14,15,12,12,18,11,11,13,13,18,14,14,12,12,17,
- 10,10,12,12,18,11,11,12,12,18,15,14,12,12,17,12,
- 12,12,12,17,14,14,12,12,17,11,11,11,11,17,12,12,
- 12,11,17,15,15,11,11,18,15,15,12,12,18,14,15,13,
- 13,18,15,15,11,11,17,15,15,12,12,18,15,15,11,11,
- 14, 9, 9,11,11,14,15,15,11,11,15,15,15,11,11,15,
- 15,15,12,11,15,15,15,12,12,15,15,15,11,11,15,15,
- 15,13,13,14,15,15,11,11,15,15,15,11,11,15,15,15,
- 13,13,15,15,15,11,11,15,15,15,13,13,15,15,15,11,
- 11,15,15,15,11,11,15,15,15,13,13,15,15,15,12,12,
- 15,15,15,13,13,15,15,14,11,11,15,15,15,12,12,15,
- 15,15,12,12,16,15,15,13,13,15,16,16,13,13,16,15,
- 15,12,12,15,15,15,13,12,15,15,15,12,12,13,12,12,
- 11,11,14,14,14,11,11,14,14,14,12,12,15,14,14,11,
- 11,15,14,14,12,12,15,14,14,12,12,15,14,14,12,12,
- 14,15,15,11,11,15,14,14,12,12,15,14,14,11,11,15,
- 14,14,12,12,15,14,14,12,12,14,15,15,11,11,15,14,
- 14,12,12,15,14,14,11,11,15,15,15,12,12,15,14,14,
- 12,12,15,15,15,11,11,15,14,14,11,11,15,14,15,11,
- 11,15,15,15,12,12,15,14,14,13,13,16,15,15,11,11,
- 15,14,14,12,12,15,15,15,11,11,14,11,11, 9, 9,15,
- 10,10,12,12,14,11,11,12,12,15,12,12,12,12,15,14,
- 14,13,13,15,11,11,13,13,15,14,14,13,13,15,10,10,
- 12,12,15,12,12,13,13,15,14,14,13,13,15,11,11,12,
- 12,15,14,14,13,13,14,10,10,12,12,15,12,12,13,13,
- 15,14,14,12,12,15,12,12,13,13,15,14,14,15,15,15,
- 11,11,12,12,15,12,12,12,13,15,14,14,12,12,15,15,
- 15,14,14,15,14,14,20,20,15,14,14,12,12,15,14,14,
- 13,13,15,14,14,12,12,14,13,13,10,10,14,13,13,11,
- 11,14,13,13,12,12,14,14,14,12,12,15,14,14,13,13,
- 15,14,14,12,12,14,14,14,14,14,14,14,14,11,11,15,
- 14,14,12,12,15,14,14,14,14,15,14,14,12,12,14,14,
- 14,14,14,14,14,14,11,11,15,14,14,12,12,14,14,14,
- 14,14,15,14,14,12,12,15,14,14,13,13,15,14,14,12,
- 12,15,14,14,12,12,14,14,14,14,13,15,15,15,14,14,
- 15,14,14,13,13,15,15,15,14,14,15,14,14,13,13,15,
- 15,15,13,13,14,13,13,13,13,18,15,15,12,12,18,15,
- 15,13,12,18,15,16,11,11,18,16,17,12,12,18,15,15,
- 13,13,18,17,17,12,12,18,15,15,12,12,17,15,15,12,
- 12,18,17,17,12,12,18,15,15,13,13,18,16,17,12,12,
- 17,15,15,12,12,18,15,15,12,12,18,16,17,11,12,18,
- 16,16,12,12,17,16,17,12,12,18,15,15,11,11,18,15,
- 15,12,12,18,17,17,11,11,17,17,17,12,12,18,16,16,
- 13,13,18,17,17,11,11,18,16,16,12,12,18,17,17,11,
- 11,15,14,14,11,11,16,15,15,11,11,16,15,15,12,12,
- 16,15,15,12,12,17,15,15,14,13,16,15,15,12,12,17,
- 15,15,14,14,16,15,15,11,11,16,15,15,12,12,18,15,
- 15,13,13,16,15,15,11,11,17,15,15,14,14,16,15,15,
- 11,11,16,15,15,12,12,17,15,15,13,13,16,15,15,12,
- 12,17,16,15,14,14,16,14,15,12,12,16,15,15,12,12,
- 18,15,15,13,13,17,15,15,14,14,17,16,16,15,15,17,
- 15,15,13,13,17,15,15,14,14,18,15,15,13,13,15,12,
- 13,11,11,15,14,14,12,12,16,14,14,12,12,16,14,14,
- 12,12,16,14,14,12,12,16,14,14,13,12,17,14,14,13,
- 13,16,15,15,12,12,16,14,14,12,12,17,14,14,12,12,
- 16,14,14,12,12,17,14,14,13,13,15,15,15,12,12,16,
- 14,14,12,12,17,14,14,12,12,17,15,15,12,12,17,14,
- 14,13,13,16,15,15,12,12,16,14,14,12,12,17,15,15,
- 12,12,18,15,15,13,13,17,14,14,13,13,17,15,15,12,
- 12,17,14,14,12,12,17,15,15,12,12,14,15,15, 9, 9,
- 15,15,15,12,12,15,15,15,13,13,15,15,15,14,14,15,
- 15,15,19,19,15,15,16,13,13,15,15,16,19,20,15,15,
- 15,13,12,15,16,16,14,14,15,15,15,19,19,15,15,15,
- 13,13,15,16,15,20,19,14,15,15,13,13,15,15,15,14,
- 14,15,15,15,19,19,15,15,15,14,14,15,16,16,19,20,
- 15,15,15,14,14,15,15,15,14,14,15,15,15,19,19,15,
- 15,15,20,19,15,16,16,20,19,15,15,15,19,19,15,16,
- 16,20,20,15,15,15,19,20,14,13,13,10,10,14,14,14,
- 11,11,14,14,14,12,12,15,14,14,13,13,15,14,14,19,
- 20,15,14,14,12,12,14,14,14,20,19,14,14,14,11,11,
- 15,14,14,12,12,15,14,14,20,20,15,14,14,12,12,14,
- 14,14,20,19,14,14,14,11,11,15,14,14,12,12,15,14,
- 14,19,20,15,14,14,13,13,15,14,14,22,19,15,15,14,
- 12,12,15,14,14,13,13,14,15,15,22,20,15,15,15,20,
- 20,15,14,14,21,20,15,15,15,20,21,15,14,14,20,20,
- 14,15,15,20,20,
-};
-
-static const static_codebook _44p3_p4_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p3_p4_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p3_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44p3_p5_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p3_p5_0[] = {
- 2, 6, 6,14,14, 6, 7, 7,14,14, 7, 7, 7,15,15, 0,
- 12,12,15,15, 0,13,13,15,15, 7, 8, 8,15,15,10,10,
- 10,16,16, 9, 8, 8,15,15, 0,13,13,18,17, 0,13,13,
- 16,16, 8, 8, 8,15,15,12,11,11,16,16, 9, 8, 8,15,
- 15, 0,13,13,18,18, 0,13,13,16,16, 0,14,14,17,17,
- 0,20, 0,19,20, 0,12,12,16,16, 0,16,16,20,22, 0,
- 14,14,16,16, 0,14,14,17,17, 0,20,22,20,19, 0,13,
- 13,15,16, 0,17,18, 0,21, 0,15,15,16,16, 5, 7, 7,
- 13,13, 8, 9, 9,14,14,10,10,10,14,14, 0,20,22,18,
- 18, 0,22,21,18,17, 9,10,10,14,14,12,12,12,17,17,
- 12,10,10,14,14, 0, 0,20,17,17, 0,22,21,17,18,11,
- 10,10,14,14,14,13,13,18,18,12,11,11,14,14, 0,22,
- 21,18,19, 0,20, 0,17,17, 0,22, 0,18,18, 0, 0, 0,
- 0, 0, 0,20,20,17,17, 0,22, 0,22,21, 0,21, 0,19,
- 18, 0,22,22,18,18, 0, 0, 0, 0, 0, 0,21, 0,17,17,
- 0,22, 0,20,20, 0, 0, 0,19,18, 6, 6, 6,12,12, 8,
- 6, 6,10,10, 8, 6, 6,13,12, 0,10,10,11,11, 0,11,
- 11,13,13, 8, 7, 7,13,13,11, 9, 9,13,13,10, 6, 6,
- 12,12, 0,10,10,14,14, 0,10,10,13,13, 9, 7, 7,13,
- 13,12,10,10,13,13,10, 6, 6,12,12, 0,11,11,15,15,
- 0,10,10,13,13, 0,12,12,15,14, 0,19,20,16,17, 0,
- 9, 9,13,13, 0,14,14,20,21, 0,12,11,13,12, 0,12,
- 12,15,14, 0,20,19,17,17, 0,10,10,12,13, 0,15,15,
- 22,21, 0,12,12,12,13, 0,10,10,12,12, 0,11,11,15,
- 15, 0,11,11,15,15, 0,15,15,22,22, 0,16,17, 0, 0,
- 0,11,11,15,15, 0,14,14,18,18, 0,11,11,16,16, 0,
- 16,15, 0,21, 0,16,16, 0, 0, 0,12,12,15,15, 0,14,
- 14,19,19, 0,11,11,15,15, 0,15,15,22, 0, 0,16,16,
- 22, 0, 0,16,16, 0,21, 0, 0, 0, 0, 0, 0,15,15,19,
- 20, 0,18,18, 0, 0, 0,17,17, 0, 0, 0,17,17, 0, 0,
- 0, 0, 0, 0, 0, 0,16,15,22,21, 0,20,20, 0, 0, 0,
- 18,18, 0, 0, 0,10,10,12,12, 0,10,10,11,11, 0,11,
- 11,12,12, 0,11,11, 9, 9, 0,13,12,12,12, 0,11,11,
- 13,13, 0,13,13,12,12, 0,10,10,12,12, 0,13,12,13,
- 13, 0,12,12,12,12, 0,11,11,13,13, 0,13,13,12,12,
- 0,10,10,12,12, 0,13,13,14,13, 0,12,12,12,12, 0,
- 14,13,13,14, 0,20,21,15,15, 0,11,11,12,12, 0,15,
- 16,20,20, 0,12,13,10,10, 0,13,13,14,13, 0,20,20,
- 15,15, 0,11,11,12,12, 0,16,17,21,21, 0,13,13,11,
- 11, 6, 7, 7,16,15,11, 9, 9,14,15,12, 9, 9,16,16,
- 0,13,13,15,15, 0,14,14,17,17,10, 9, 9,16,16,14,
- 12,12,16,16,12, 9, 9,15,15, 0,13,13,17,18, 0,13,
- 13,15,15,12,10,10,17,17,15,12,12,17,17,13, 9, 9,
- 16,16, 0,13,13,18,19, 0,14,14,16,16, 0,15,15,18,
- 18, 0, 0, 0,20,19, 0,12,12,17,16, 0,16,17, 0,21,
- 0,14,15,16,16, 0,15,15,18,18, 0, 0,22,19,21, 0,
- 13,13,16,16, 0,18,17,22,22, 0,15,15,16,16, 7, 7,
- 7,13,13,11,10,10,15,15,12,10,10,14,14, 0,21, 0,
- 18,17, 0,21,22,18,18,11,10,10,15,15,14,12,12,17,
- 17,14,11,11,14,14, 0,21,20,18,18, 0,22,21,18,17,
- 12,11,10,16,16,16,14,14,17,19,14,11,11,15,15, 0,
- 0,22,19,19, 0,21,22,18,18, 0,21, 0,18,19, 0, 0,
- 0,22, 0, 0,22,21,17,17, 0, 0, 0,20,22, 0, 0,21,
- 18,18, 0, 0, 0,19,20, 0, 0, 0, 0, 0, 0, 0,21,17,
- 17, 0, 0, 0,22,21, 0, 0, 0,19,19,10, 9, 9,14,13,
- 13,10,10,12,12,13,10,10,14,14, 0,13,13,12,12, 0,
- 15,14,16,15,13,10,10,14,14,15,12,12,14,14,15,10,
- 10,14,14, 0,14,14,15,15, 0,14,13,14,14,13,10,10,
- 15,15,17,13,13,15,15,14,10,10,14,14, 0,14,14,15,
- 16, 0,14,14,15,15, 0,15,15,16,16, 0,21,22,17,18,
- 0,12,12,14,14, 0,17,17,20,21, 0,14,14,14,14, 0,
- 15,15,16,16, 0,21,22,18,18, 0,13,13,14,14, 0,18,
- 18,22, 0, 0,15,15,14,14, 0,11,11,13,13, 0,12,12,
- 16,15, 0,12,12,16,16, 0,16,16, 0, 0, 0,16,17, 0,
- 22, 0,12,12,16,16, 0,14,14,17,18, 0,11,11,16,16,
- 0,15,15, 0,21, 0,16,16,21,22, 0,12,12,16,16, 0,
- 15,15,19,19, 0,12,12,17,16, 0,16,16,21,22, 0,16,
- 16, 0, 0, 0,17,17, 0,22, 0, 0, 0, 0, 0, 0,15,15,
- 19,20, 0,17,19, 0, 0, 0,17,17,22, 0, 0,17,17, 0,
- 22, 0, 0, 0, 0, 0, 0,15,15,21, 0, 0,19,20, 0, 0,
- 0,19,18,22, 0, 0,11,12,14,14, 0,11,11,14,14, 0,
- 12,12,15,15, 0,13,13,13,13, 0,14,14,16,16, 0,12,
- 12,15,15, 0,14,14,16,15, 0,11,11,15,15, 0,13,13,
- 16,16, 0,13,13,15,15, 0,12,12,15,15, 0,15,14,16,
- 16, 0,11,11,15,15, 0,14,14,17,17, 0,13,13,15,15,
- 0,15,15,16,16, 0, 0, 0,18,18, 0,12,12,14,14, 0,
- 16,16,22, 0, 0,14,14,15,15, 0,15,15,16,17, 0,21,
- 22,18,18, 0,13,13,15,14, 0,18,17,22, 0, 0,14,14,
- 15,15, 8, 8, 8,16,15,12,10,10,16,15,12,10,10,16,
- 16, 0,14,14,16,17, 0,14,14,17,16,12,10,10,17,18,
- 14,12,12,18,18,14,10,10,16,16, 0,14,14,18,18, 0,
- 14,14,16,16,12, 9, 9,16,16,17,13,13,16,17,14, 9,
- 9,15,15, 0,14,14,18,19, 0,13,13,15,15, 0,15,15,
- 18,19, 0, 0, 0,22,21, 0,13,13,16,16, 0,16,16,22,
- 0, 0,15,15,16,16, 0,14,14,18,17, 0, 0, 0,20, 0,
- 0,13,13,16,16, 0,18,18, 0, 0, 0,15,15,16,16, 8,
- 7, 7,13,13,12,10,10,15,15,12,10,10,14,14, 0,22,
- 22,19,18, 0, 0, 0,18,18,12,10,10,15,15,14,13,13,
- 17,17,14,11,11,15,15, 0,19,20,18,18, 0,22,21,17,
- 18,13,11,11,15,15,16,13,13,18,18,14,11,11,14,15,
- 0,22,21,20,19, 0,22,21,17,17, 0, 0,22,19,18, 0,
- 0, 0, 0, 0, 0,22,20,17,17, 0, 0, 0,21,20, 0, 0,
- 0,19,17, 0, 0,22,19,19, 0, 0, 0, 0, 0, 0,22,20,
- 18,17, 0, 0, 0, 0, 0, 0, 0, 0,18,18, 0,10,10,14,
- 14, 0,11,11,14,14, 0,11,11,15,15, 0,14,14,14,14,
- 0,15,15,16,16, 0,11,11,16,16, 0,13,13,16,16, 0,
- 11,11,15,15, 0,14,14,16,16, 0,14,14,15,15, 0,11,
- 11,15,15, 0,13,13,15,15, 0,10,10,15,15, 0,15,15,
- 17,17, 0,14,14,14,14, 0,16,16,16,16, 0, 0,22,19,
- 19, 0,13,13,14,14, 0,17,17, 0, 0, 0,15,15,14,14,
- 0,16,16,17,17, 0, 0,22,18,18, 0,13,13,14,14, 0,
- 21,18, 0, 0, 0,15,15,14,14, 0,11,11,13,13, 0,12,
- 12,15,15, 0,12,12,16,15, 0,16,16, 0, 0, 0,17,17,
- 22,22, 0,12,12,16,16, 0,14,14,18,18, 0,11,12,16,
- 16, 0,15,16, 0,21, 0,16,16,22,21, 0,12,12,16,16,
- 0,15,15,19,20, 0,11,12,16,16, 0,15,15,20,22, 0,
- 16,16, 0,22, 0,17,17,22, 0, 0, 0, 0, 0, 0, 0,15,
- 15,21,22, 0,19,18, 0, 0, 0,17,17, 0, 0, 0,17,17,
- 0,22, 0, 0, 0, 0, 0, 0,16,15,22, 0, 0,19,19, 0,
- 0, 0,17,18, 0, 0, 0,12,12,15,15, 0,12,12,15,15,
- 0,12,12,15,15, 0,13,13,14,14, 0,15,15,16,17, 0,
- 12,12,16,16, 0,14,14,16,16, 0,12,11,15,16, 0,14,
- 14,16,17, 0,14,14,16,16, 0,13,12,16,16, 0,15,15,
- 16,16, 0,11,11,15,15, 0,14,14,16,16, 0,14,14,15,
- 15, 0,15,15,18,17, 0, 0,22, 0,20, 0,13,13,15,15,
- 0,16,17,22,22, 0,14,14,15,15, 0,15,15,17,18, 0,
- 20, 0,19,19, 0,13,13,15,15, 0,18,18,22, 0, 0,14,
- 14,15,15, 0,11,11,16,16, 0,14,14,17,16, 0,13,13,
- 17,17, 0,16,16,17,17, 0,17,17,18,19, 0,12,12,16,
- 17, 0,15,15,18,18, 0,12,12,16,16, 0,16,16,19,18,
- 0,16,16,17,16, 0,12,13,17,17, 0,17,16,18,17, 0,
- 13,12,16,16, 0,16,16,18,19, 0,16,16,16,17, 0,16,
- 16,18,18, 0,22, 0,22,22, 0,13,13,16,16, 0,19,18,
- 22,20, 0,16,15,16,16, 0,16,17,18,18, 0, 0, 0,22,
- 20, 0,14,14,16,16, 0,19,19, 0, 0, 0,16,16,16,16,
- 0, 9, 9,13,13, 0,13,13,15,15, 0,14,14,15,15, 0,
- 0,22,17,18, 0,22, 0,18,19, 0,12,12,15,15, 0,15,
- 16,17,17, 0,14,14,14,14, 0,22, 0,18,18, 0,21,22,
- 17,17, 0,13,13,15,15, 0,17,17,17,18, 0,14,14,15,
- 15, 0,22,21,21,19, 0,20,21,17,17, 0,21,21,19,18,
- 0, 0, 0, 0, 0, 0,21,21,17,17, 0, 0, 0,22,22, 0,
- 0,22,19,18, 0, 0,21,19,18, 0, 0, 0, 0,22, 0,19,
- 20,17,17, 0, 0, 0, 0,22, 0, 0, 0,19,18, 0,19,19,
- 15,16, 0,21,19,16,17, 0, 0,21,17,17, 0, 0,22,17,
- 17, 0,22,22,18,19, 0,20,20,16,16, 0, 0,22,18,18,
- 0,20,19,16,17, 0,22,21,20,19, 0, 0,21,17,17, 0,
- 21,20,17,17, 0, 0, 0,18,18, 0,19,19,17,16, 0,22,
- 0,19,19, 0,21,22,17,18, 0, 0,22,19,18, 0, 0, 0,
- 19,20, 0,19,19,16,16, 0,22,22,22, 0, 0,20,22,16,
- 16, 0,22,20,18,19, 0, 0, 0,20,19, 0,20,20,16,16,
- 0, 0, 0, 0, 0, 0,22,20,17,16, 0,11,11,13,13, 0,
- 14,13,15,15, 0,13,13,16,15, 0,18,17,21, 0, 0,18,
- 18,21, 0, 0,12,12,15,15, 0,15,16,17,18, 0,12,12,
- 15,15, 0,17,17,22,20, 0,17,18,22, 0, 0,12,12,17,
- 16, 0,16,17,19,19, 0,13,13,16,16, 0,17,17, 0,22,
- 0,17,17, 0,21, 0,18,18,20,22, 0, 0, 0, 0, 0, 0,
- 15,15,21,20, 0,20,19, 0, 0, 0,18,18,22, 0, 0,17,
- 17,22, 0, 0, 0, 0, 0, 0, 0,15,16,20,22, 0,20,21,
- 0, 0, 0,19,18, 0, 0, 0,15,15,19,19, 0,17,16,20,
- 20, 0,16,17,20,21, 0,18,17, 0, 0, 0,19,19, 0, 0,
- 0,15,15,21,19, 0,19,19, 0, 0, 0,15,15,22,22, 0,
- 18,18, 0,22, 0,17,18,22,21, 0,15,15,20,19, 0,19,
- 19, 0, 0, 0,15,15,20,22, 0,18,19,20, 0, 0,18,17,
- 21,21, 0,18,18,19,22, 0, 0, 0, 0, 0, 0,15,15,20,
- 19, 0,19,19, 0, 0, 0,18,18,21,22, 0,18,18,22, 0,
- 0, 0, 0, 0, 0, 0,15,15,19,20, 0,21,21, 0, 0, 0,
- 17,17,20,20, 0,12,12,17,17, 0,14,14,16,17, 0,13,
- 14,17,17, 0,16,16,17,17, 0,17,17,17,19, 0,13,13,
- 17,17, 0,16,16,18,18, 0,13,13,16,16, 0,16,16,18,
- 18, 0,16,16,17,17, 0,13,13,17,17, 0,17,17,18,17,
- 0,12,12,15,16, 0,17,18,19,20, 0,16,16,16,16, 0,
- 17,16,18,19, 0, 0,22,21,22, 0,14,14,16,16, 0,19,
- 19, 0, 0, 0,16,16,16,16, 0,16,16,18,17, 0, 0,22,
- 21,21, 0,14,14,16,16, 0,22,20,22, 0, 0,16,16,15,
- 15, 0, 9, 9,13,13, 0,14,14,15,15, 0,14,14,14,14,
- 0,22,22,18,18, 0, 0,22,18,18, 0,12,12,15,15, 0,
- 16,16,18,17, 0,14,14,14,14, 0,20,21,18,18, 0,22,
- 21,17,17, 0,13,13,15,15, 0,17,17,18,18, 0,14,14,
- 14,14, 0, 0,21,18,19, 0, 0,22,17,17, 0,22,22,19,
- 18, 0, 0, 0, 0, 0, 0,19,21,17,17, 0, 0, 0,22,20,
- 0, 0,21,18,19, 0, 0,22,18,18, 0, 0, 0, 0,22, 0,
- 20,22,17,17, 0, 0, 0,20,22, 0, 0, 0,18,18, 0,19,
- 21,16,16, 0,20,22,16,17, 0,20, 0,17,17, 0,22, 0,
- 18,17, 0,21, 0,18,19, 0,20,20,17,17, 0,22, 0,18,
- 18, 0,21,20,17,17, 0, 0,20,20,19, 0, 0,21,18,17,
- 0,21,21,17,17, 0,22, 0,18,17, 0,19,19,17,17, 0,
- 0,22,20,21, 0, 0,21,17,17, 0,22, 0,18,18, 0, 0,
- 0,20,22, 0,20,19,16,16, 0, 0, 0, 0, 0, 0,22,22,
- 17,17, 0,22, 0,18,19, 0, 0, 0,21,20, 0,19,21,16,
- 17, 0, 0, 0, 0, 0, 0,22,22,17,16, 0,11,11,13,13,
- 0,13,13,15,15, 0,13,13,15,15, 0,17,17,22,21, 0,
- 18,18,22, 0, 0,12,13,16,15, 0,15,16,18,18, 0,13,
- 13,16,16, 0,17,17, 0,22, 0,17,17,22,22, 0,13,13,
- 16,16, 0,16,16,19,18, 0,13,13,16,16, 0,18,17, 0,
- 20, 0,18,17,20, 0, 0,17,17,21, 0, 0, 0, 0, 0, 0,
- 0,15,15,21,22, 0,19,20, 0, 0, 0,18,18, 0, 0, 0,
- 18,17, 0, 0, 0, 0, 0, 0, 0, 0,16,16,22,22, 0,20,
- 20, 0, 0, 0,21,19, 0, 0, 0,15,15,20,19, 0,16,16,
- 22,20, 0,17,17, 0,22, 0,18,18, 0,22, 0,19,17, 0,
- 0, 0,15,16,22,20, 0,18,19, 0, 0, 0,16,16,22,20,
- 0,18,18, 0,22, 0,18,18,22, 0, 0,16,16,21,20, 0,
- 19,20, 0,22, 0,16,16, 0,22, 0,18,18, 0,22, 0,18,
- 18, 0,21, 0,19,18, 0,22, 0, 0, 0, 0, 0, 0,16,16,
- 21,20, 0,20, 0, 0, 0, 0,18,18,21, 0, 0,18,18, 0,
- 0, 0, 0, 0, 0, 0, 0,16,16,21,19, 0, 0, 0, 0, 0,
- 0,18,18, 0,21,
-};
-
-static const static_codebook _44p3_p5_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p3_p5_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44p3_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44p3_p5_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44p3_p5_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p3_p5_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44p3_p5_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p3_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44p3_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p3_p6_0[] = {
- 1, 6, 6, 7, 7, 7, 7, 8, 8, 7, 9, 9,11,11,11, 9,
- 8, 8, 8, 9, 9,12,11,11, 9, 8, 8, 6, 7, 7,10,11,
- 10,10,10,10,11,11,10,14,13,14,12,11,11,11,11,11,
- 15,14,14,13,12,12, 5, 6, 6, 8, 5, 5, 8, 7, 7, 8,
- 8, 8,12,10,10, 9, 7, 7, 9, 7, 8,12,10,10,10, 7,
- 7, 7, 8, 8,12,10,10,12,10,10,11,10,10,15,13,13,
- 13,10,10,11,10,10,16,13,14,14,10,10, 7, 7, 7,12,
- 11,11,12,11,11,11,11,11,16,15,15,14,12,12,12,11,
- 11,16,15,16,14,12,12,10, 9, 9,14,11,11,13,11,11,
- 12,11,11,16,14,14,14,11,11,12,11,11,17,15,15,14,
- 11,11, 7, 8, 8,12,11,11,12,10,10,12,10,10,16,14,
- 13,14,10,10,12,10,10,17,14,14,14,10,10, 8, 7, 7,
- 13,11,11,12,11,11,12,11,11,16,15,14,14,12,12,12,
- 11,11,16,15,14,15,12,12,11,10,10,13,11,11,13,12,
- 11,13,11,11,17,14,14,14,11,11,13,11,11,17,14,15,
- 14,11,11,
-};
-
-static const static_codebook _44p3_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p3_p6_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44p3_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44p3_p6_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p3_p6_1[] = {
- 2, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,
- 7, 7, 8, 8, 8, 9, 9, 9, 9, 7, 8, 6, 7, 7, 8, 8,
- 8, 8, 8, 8, 9, 8, 8,10, 9, 9,10, 8, 8,10, 8, 8,
- 10, 9, 9,10, 8, 8, 6, 6, 6, 8, 6, 6, 8, 7, 7, 8,
- 7, 7,10, 8, 8, 9, 7, 7, 9, 7, 7,10, 8, 9, 9, 7,
- 7, 7, 7, 7,10, 8, 8,11, 8, 8,10, 8, 8,12, 9, 9,
- 12, 8, 8,11, 9, 9,12, 9, 9,11, 8, 8, 7, 7, 7,10,
- 9, 9,10, 9, 9,10, 9, 9,11,10,10,10, 9, 9,11, 9,
- 9,11,10,10,11, 9, 9, 9, 8, 8,10, 9, 9,10, 9, 9,
- 11, 9, 9,11,10,10,11, 9, 9,11, 9, 9,11,10,10,11,
- 9, 9, 8, 8, 8,11, 9, 9,11, 9, 9,11, 9, 9,12, 9,
- 9,12, 8, 8,12, 9, 9,12, 9, 9,12, 8, 8, 8, 7, 7,
- 10, 9, 9,10, 9, 9,11, 9, 9,11,11,11,11, 9, 9,11,
- 10,10,11,11,11,11, 9, 9,10, 9, 9,11, 9, 9,11, 9,
- 10,11,10, 9,11,10,10,11, 9, 9,11, 9,10,11,10,10,
- 11, 9, 9,
-};
-
-static const static_codebook _44p3_p6_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p3_p6_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44p3_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44p3_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p3_p7_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p3_p7_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p3_p7_0,
- 1, -513979392, 1633504256, 2, 0,
- (long *)_vq_quantlist__44p3_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44p3_p7_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p3_p7_1[] = {
- 1, 9, 9, 6, 9, 9, 5, 9, 9, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,
-};
-
-static const static_codebook _44p3_p7_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p3_p7_1,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p3_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44p3_p7_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p3_p7_2[] = {
- 1, 3, 2, 5, 4, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
- 12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p3_p7_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44p3_p7_2,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44p3_p7_2,
- 0
-};
-
-static const long _vq_quantlist__44p3_p7_3[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p3_p7_3[] = {
- 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p3_p7_3 = {
- 1, 25,
- (char *)_vq_lengthlist__44p3_p7_3,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44p3_p7_3,
- 0
-};
-
-static const char _huff_lengthlist__44p3_short[] = {
- 4, 5,16, 9, 9,12,17,18, 4, 2,18, 6, 5, 9,13,15,
- 10, 7, 7, 6, 7, 9,13,13, 8, 5, 6, 5, 5, 7,11,12,
- 8, 4, 7, 4, 3, 6,10,12,11, 8, 9, 7, 6, 8,11,12,
- 15,13,13,11, 9, 7,10,12,16,12,16,12, 6, 5, 8,11,
-};
-
-static const static_codebook _huff_book__44p3_short = {
- 2, 64,
- (char *)_huff_lengthlist__44p3_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p4_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44p4_l0_0[] = {
- 1, 4, 4, 8, 8, 9, 8, 9, 9,10,10,10,10, 4, 6, 5,
- 8, 7, 9, 9, 9, 9,10, 9,10,10, 4, 5, 6, 7, 8, 9,
- 9, 9, 9, 9,10, 9,10, 8, 9, 8, 9, 8,10, 9,11, 9,
- 12,10,11,10, 8, 8, 9, 8, 9, 9,10, 9,11,10,11,10,
- 12, 9,10,10,11,10,11,11,12,11,12,12,12,12, 9,10,
- 10,11,11,11,11,11,12,12,12,12,12,10,11,11,12,12,
- 12,12,12,12,12,12,12,12,10,11,11,12,12,12,12,12,
- 12,12,12,12,12,11,12,12,12,12,12,12,12,12,12,13,
- 12,12,11,12,11,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,13,12,12,12,12,12,12,11,13,12,12,
- 12,13,12,12,12,12,12,12,12,
-};
-
-static const static_codebook _44p4_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44p4_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44p4_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44p4_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p4_l0_1[] = {
- 3, 4, 4, 5, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5,
- 5, 6, 5, 6, 5, 6, 5, 6, 5,
-};
-
-static const static_codebook _44p4_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44p4_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p4_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44p4_l1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p4_l1_0[] = {
- 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p4_l1_0 = {
- 2, 9,
- (char *)_vq_lengthlist__44p4_l1_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p4_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44p4_lfe[] = {
- 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p4_lfe = {
- 2, 4,
- (char *)_huff_lengthlist__44p4_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44p4_long[] = {
- 3, 5,13, 9, 9,12,16,18, 4, 2,20, 6, 7,10,15,20,
- 10, 7, 5, 5, 6, 8,10,13, 8, 5, 5, 3, 5, 7,10,11,
- 9, 7, 6, 5, 5, 7, 9, 9,11,10, 8, 7, 6, 6, 8, 8,
- 15,15,10,10, 9, 7, 8, 9,17,19,13,12,10, 8, 9, 9,
-};
-
-static const static_codebook _huff_book__44p4_long = {
- 2, 64,
- (char *)_huff_lengthlist__44p4_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p4_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p4_p1_0[] = {
- 1, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,
-};
-
-static const static_codebook _44p4_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p4_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p4_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44p4_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p4_p2_0[] = {
- 3, 9, 9, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
- 12,12, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 0, 0, 0,11,11, 0, 0, 0, 0, 0,
- 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0,
- 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,12,12, 0, 0,
- 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0,12,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, 7, 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 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, 7, 0, 0, 0,
- 5, 5, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
- 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0,
- 0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0, 7, 7, 0, 0,
- 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 0, 0, 0, 9, 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,11,11, 0, 0, 0, 9, 9, 0,
- 0, 0,10,10, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0,
- 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
- 10,10, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
- 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0,11,11, 0,
- 0, 0,12,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 9, 0, 0, 0, 7, 7, 0, 0, 0, 8, 8, 0, 0,
- 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0,
- 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0,
- 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,
- 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
- 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,11,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, 5,
- 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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,10, 0, 0, 0, 7, 7,
- 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0,
- 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0,
- 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0, 0,
- 0, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
- 0, 0, 0,10,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 9, 0, 0, 0, 7, 7, 0, 0, 0, 8, 8, 0,
- 0, 0,10,11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
- 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 7,
- 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0,11,11,
- 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,10,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,
- 5, 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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 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,10, 0, 0, 0, 7,
- 7, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
- 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0,
- 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0,
- 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
- 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9,
- 9, 0, 0, 0,11,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, 0, 0, 0, 0, 0, 0, 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,10, 0, 0, 0, 9, 9, 0, 0, 0,10,10,
- 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0,
- 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,11,
- 11, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0,12,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, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 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,10, 0, 0, 0,
- 9, 9, 0, 0, 0,10,10, 0, 0, 0,12,12, 0, 0, 0, 0,
- 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9,
- 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,
- 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0,
- 0, 0, 0, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0,
- 10,10, 0, 0, 0,11,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44p4_p2_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p4_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p4_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44p4_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p4_p3_0[] = {
- 1, 6, 6, 5, 7, 8, 0, 8, 8, 6, 9, 9, 7,10,10, 0,
- 8, 8, 0, 9, 9, 0,12,12, 0, 8, 8, 4, 7, 7, 6,10,
- 10, 0,12,12, 7,11,11, 8,12,12, 0,12,12, 0,13,12,
- 0,15,15, 0,12,12, 0, 7, 7, 0, 7, 7, 0, 7, 7, 0,
- 8, 8, 0,10,10, 0, 7, 7, 0, 8, 8, 0,11,11, 0, 7,
- 7, 5, 7, 7, 8, 9, 9, 0,10,10, 8, 9, 9,11,11,11,
- 0,10, 9, 0,11,11, 0,13,13, 0,10,10, 6, 7, 7, 8,
- 10,10, 0,12,12, 9,10,10,10,12,12, 0,12,12, 0,12,
- 12, 0,15,15, 0,12,12, 0,10,10, 0,11,11, 0,11,11,
- 0,11,11, 0,13,13, 0,11,11, 0,11,11, 0,15,15, 0,
- 10,10, 0, 8, 8, 0,10,10, 0,12,12, 0,11,11, 0,12,
- 12, 0,12,12, 0,12,12, 0,15,15, 0,11,11, 0, 7, 7,
- 0,10,10, 0,12,12, 0,10,10, 0,12,12, 0,12,12, 0,
- 13,13, 0,14,14, 0,12,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,
-};
-
-static const static_codebook _44p4_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p4_p3_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44p4_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44p4_p3_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p4_p3_1[] = {
- 3, 5, 5, 0, 8, 8, 0, 8, 8, 0, 9, 9, 0,10,10, 0,
- 8, 8, 0, 8, 8, 0,10,10, 0, 8, 8, 0, 7, 7, 0, 8,
- 8, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0, 8, 8, 0, 8, 8,
- 0, 8, 8, 0, 8, 8, 0, 7, 7, 0, 6, 6, 0, 7, 7, 0,
- 7, 7, 0,10,10, 0, 6, 6, 0, 7, 7, 0,10,10, 0, 5,
- 5, 0, 8, 8, 0, 7, 7, 0, 8, 8, 0, 8, 8, 0, 9, 9,
- 0, 7, 7, 0, 8, 8, 0, 9, 9, 0, 7, 7, 0, 6, 6, 0,
- 9,10, 0,10,10, 0,10,10, 0,11,11, 0, 9, 9, 0,10,
- 10, 0,11,11, 0, 9, 9, 0, 8, 8, 0, 8, 8, 0, 8, 8,
- 0, 9, 9, 0, 9, 9, 0, 7, 7, 0, 8, 8, 0, 9, 9, 0,
- 7, 7, 0, 8, 8, 0, 7, 7, 0, 7, 7, 0, 8, 8, 0, 9,
- 9, 0, 7, 7, 0, 7, 7, 0, 8, 8, 0, 6, 6, 0, 6, 6,
- 0,10,10, 0,10,10, 0,10,10, 0,12,12, 0, 9, 9, 0,
- 10,10, 0,12,12, 0, 9, 9, 0, 8, 8, 0, 7, 7, 0, 7,
- 7, 0, 8, 8, 0, 9, 9, 0, 7, 7, 0, 8, 8, 0, 9, 9,
- 0, 6, 6,
-};
-
-static const static_codebook _44p4_p3_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p4_p3_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p4_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44p4_p4_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p4_p4_0[] = {
- 1, 6, 6, 6, 7, 7, 7, 8, 8, 7, 8, 8,10,11,11, 9,
- 8, 8, 8, 8, 8,11,11,12, 9, 8, 8, 5, 7, 7, 9,11,
- 11,10,11,11,10,11,11,12,14,14,11,12,12,10,12,12,
- 13,14,14,12,12,12, 5, 6, 6, 7, 6, 6, 8, 7, 7, 8,
- 7, 7,11,10,10,10, 7, 7, 9, 8, 8,12,11,11,10, 7,
- 7, 7, 7, 7,11,10,10,12,10,10,11,10,10,15,13,13,
- 13,10,10,12,11,11,15,13,13,14,11,11, 7, 7, 7,11,
- 11,11,12,11,11,12,11,11,14,14,14,13,12,12,12,12,
- 12,16,15,15,14,12,12, 0,10,10, 0,11,11, 0,12,12,
- 0,11,11, 0,14,14, 0,11,11, 0,12,12, 0,15,15, 0,
- 11,11, 7, 8, 8,12,11,10,12,10,10,12,11,11,15,13,
- 13,14,11,11,12,10,10,16,14,14,14,10,10, 8, 7, 7,
- 12,11,11,12,11,11,12,11,11,15,14,14,14,12,12,13,
- 12,12,15,14,14,15,13,13, 0,11,11, 0,12,12, 0,12,
- 12, 0,12,12, 0,15,15, 0,12,12, 0,13,13, 0,15,14,
- 0,12,12,
-};
-
-static const static_codebook _44p4_p4_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p4_p4_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44p4_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44p4_p4_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p4_p4_1[] = {
- 4, 5, 5, 9, 9,12, 9, 9,12,12,12,10,10,13,13,13,
- 11,11,12,12,13,13,13,12,12,13,10,10,13,13,13,13,
- 13,13,13,13,10,10,13,12,13,11,11,13,13,13,14,14,
- 13,12,13,10,10,13,13,12,13,13,13,13,13,10,10,12,
- 12,13,11,11,13,13,13,14,14,12,12,13,12,12,13,13,
- 13,13,13,13,13,13,11,11,12,12,13,11,11,13,13,13,
- 14,14,12,12,13,14,14,13,13,14,13,13,14,14,14,14,
- 14,12,12,13,14,14,13,13,14,14,14,12,12,12, 8, 8,
- 12,12,13,12,12,11,11,13,11,11,11,11,14,12,12,11,
- 11,14,12,12,10,11,14,12,12,12,12,14,12,12,12,12,
- 13,13,13,11,11,14,12,12,11,11,14,12,12,12,12,14,
- 12,12,12,12,14,12,12,12,12,14,13,13,11,11,14,12,
- 12,11,11,14,12,12,12,12,14,13,13,12,12,14,12,12,
- 12,12,14,13,13,11,11,14,12,12,11,11,14,13,13,11,
- 11,15,13,13,12,12,14,12,12,12,12,15,13,13,12,12,
- 14,12,12,11,11,15,13,13,11,11,12, 9, 9,11,11,13,
- 7, 7,11,11,13, 8, 8,12,12,14,10,10,10,10,14,14,
- 14,11,11,14, 8, 8,12,12,14,14,14,12,12,14, 7, 7,
- 11,11,14, 9, 9,12,12,14,14,14,11,11,14, 8, 8,12,
- 12,14,14,14,12,12,14, 7, 7,11,11,14, 9, 9,12,12,
- 14,14,14,11,11,14,10,10,12,12,14,14,14,13,13,14,
- 9, 9,11,11,14,10,10,12,11,15,14,14,11,11,14,15,
- 15,12,12,15,14,14,14,14,15,14,14,11,11,15,14,14,
- 12,12,15,14,14,11,11,14,11,11,10,10,15,10,10,10,
- 10,15,10,10,10,10,15,11,11, 9, 9,15,12,13, 9, 9,
- 15,11,11,11,11,15,13,13,11,11,15,10,10,10,10,15,
- 11,11,10,10,15,13,13,11,11,15,11,11,11,11,15,13,
- 13,11,11,15,10,10,10,10,15,11,11,10,10,15,13,13,
- 10,11,15,12,12,11,11,15,13,13,11,10,15,11,11,10,
- 10,15,11,12,10, 9,15,13,13,10,10,15,14,14,11,11,
- 15,13,13,11,11,15,14,14,10,10,15,13,13,10,10,15,
- 14,14,10,10,14,13,13,10,10,15,13,13,10,10,15,13,
- 13,10,10,14,14,14, 8, 9,15,14,14, 9, 9,15,14,14,
- 11,11,15,14,14,10,10,15,14,14,10,10,15,14,14,11,
- 11,15,14,14,10,10,15,14,14,11,11,15,14,14,10,10,
- 15,14,14,10,10,15,14,14,10,10,15,14,14, 9, 9,15,
- 14,14,11,11,15,14,14,11,11,15,14,14,10,10,15,14,
- 14,10,10,14,14,14, 9, 9,15,15,15,11,11,15,14,14,
- 12,12,15,15,15,10,10,15,14,15,10,10,15,15,15, 9,
- 9,15,10,10,13,13,17, 8, 8,12,12,17,10, 9,13,13,
- 18,11,11,12,12,18,14,14,12,12,17, 9, 9,13,13,17,
- 13,13,12,12,18, 8, 8,12,12,18,10,10,12,12,18,14,
- 14,12,12,18,10,10,13,13,18,13,13,13,13,18, 9, 9,
- 12,12,18,10,10,13,13,18,14,14,12,12,18,11,11,13,
- 13,18,14,14,13,13,18,10,10,12,12,17,11,11,12,12,
- 18,14,14,12,12,18,14,14,13,13,18,14,14,13,13,19,
- 14,15,12,12,18,14,14,12,12,18,15,15,12,12,13, 7,
- 7,11,11,14,15,15,11,11,14,16,15,11,11,14,15,15,
- 11,11,14,15,15,11,11,14,15,15,11,12,14,15,15,12,
- 12,13,15,15,11,11,14,15,15,11,11,15,15,15,12,12,
- 14,15,15,12,12,14,16,16,12,12,14,15,15,11,11,14,
- 15,15,11,11,15,15,15,12,12,15,15,15,12,12,14,15,
- 15,12,12,14,15,15,11,11,14,15,15,11,11,15,14,15,
- 12,12,15,15,15,12,12,15,16,16,12,12,15,15,15,12,
- 12,14,15,15,12,12,15,15,15,12,12,13,13,13,11,11,
- 14,14,15,11,11,14,14,14,12,12,14,15,15,10,10,15,
- 15,15,11,11,14,15,15,12,12,14,14,14,11,11,14,15,
- 15,11,11,14,15,15,12,12,15,15,15,11,11,14,15,15,
- 12,12,14,14,15,11,11,14,15,15,11,11,14,15,15,12,
- 12,15,15,15,11,11,15,15,15,12,12,14,15,15,12,12,
- 14,15,15,10,10,14,15,15,11,11,15,15,15,10,10,15,
- 15,15,12,12,15,15,15,14,14,15,15,15,11,11,15,15,
- 15,11,11,15,15,15,11,11,14,10,10,10,10,15, 9, 9,
- 12,11,15,10,10,12,12,15,11,11,11,11,15,13,13,12,
- 12,16,10,10,12,12,15,13,13,12,12,15, 9, 9,11,11,
- 15,10,10,13,12,15,13,13,11,11,15,10,10,12,12,15,
- 13,13,12,12,15, 9, 9,11,11,15,10,10,12,12,15,13,
- 13,11,11,15,11,11,12,12,15,13,13,13,13,15,10,10,
- 11,11,15,11,11,12,12,15,13,14,11,11,15,14,14,13,
- 13,16,14,14,20,19,15,14,14,11,11,15,13,14,12,12,
- 15,14,14,11,11,14,13,13,10,10,14,14,13,11,11,15,
- 13,14,12,12,15,14,14,12,12,15,14,14,11,11,15,14,
- 14,12,12,15,15,14,13,13,15,14,14,11,11,15,14,14,
- 11,11,15,14,14,13,13,15,14,14,12,12,15,14,14,13,
- 13,15,14,14,11,11,15,14,14,11,11,15,14,14,13,13,
- 15,14,14,12,12,15,14,14,12,12,15,14,14,12,12,15,
- 14,14,11,11,15,15,15,12,12,15,15,15,13,13,16,14,
- 14,12,12,15,15,15,13,13,15,15,15,12,12,15,15,15,
- 12,12,14,10,10,13,13,17, 9, 9,12,12,17, 9, 9,13,
- 13,17,11,11,12,12,18,14,14,12,12,18,10,10,13,13,
- 18,14,13,12,12,18, 9, 9,12,12,18,10,10,12,13,18,
- 14,14,12,12,17, 9, 9,12,12,17,13,14,12,12,17, 9,
- 9,12,12,17,10,10,12,12,17,14,14,11,11,18,11,11,
- 12,12,18,14,14,12,13,18,10,10,12,12,18,11,11,12,
- 12,18,14,14,11,11,18,15,15,12,12,18,14,14,13,13,
- 18,14,15,12,12,17,14,14,12,12,17,15,15,12,12,13,
- 7, 7,11,11,14,15,15,11,11,14,15,15,11,11,14,15,
- 15,11,11,14,15,15,11,11,14,15,15,11,11,14,15,15,
- 12,12,14,15,15,11,11,14,15,15,11,11,15,15,15,12,
- 12,14,15,15,11,11,14,15,15,12,12,14,15,15,11,11,
- 15,15,15,11,11,15,15,15,12,12,14,15,15,12,12,14,
- 15,16,12,12,14,15,15,11,11,14,15,15,11,11,15,15,
- 15,12,12,15,15,15,12,12,15,16,16,12,12,15,15,15,
- 12,12,15,15,15,12,12,15,15,15,12,12,13,13,13,12,
- 12,14,14,14,11,11,14,14,14,12,12,14,14,14,10,10,
- 15,15,15,11,11,14,15,15,12,12,14,14,14,11,11,14,
- 15,15,11,11,14,14,14,12,12,15,15,14,11,11,14,15,
- 15,12,12,14,14,14,11,11,14,15,15,11,11,14,14,14,
- 11,11,15,14,14,10,10,14,15,15,12,12,14,14,14,12,
- 12,14,15,15,10,10,14,15,15,11,11,15,15,15,10,10,
- 15,15,15,12,12,15,14,14,13,13,15,15,15,10,10,15,
- 14,14,11,11,15,15,15,10,10,14,10,10,10,10,14, 9,
- 9,12,12,15,10,10,12,12,14,11,11,11,11,15,13,14,
- 12,12,15,10,10,13,13,15,13,13,12,12,15, 9, 9,12,
- 12,15,10,10,13,13,15,13,14,11,11,15,10,10,12,12,
- 15,13,13,12,12,15, 9, 9,11,11,15,10,10,12,12,15,
- 13,13,11,11,15,11,11,12,12,15,13,13,13,13,15,10,
- 10,11,11,15,11,11,12,12,15,14,14,11,11,15,14,14,
- 13,13,15,14,14,20,19,15,14,14,11,11,15,14,14,12,
- 12,15,14,14,11,11,14,13,13,11,11,15,13,13,11,11,
- 15,14,13,12,12,15,14,14,11,12,15,14,14,11,11,15,
- 14,14,12,12,14,14,14,13,13,15,14,14,11,11,15,14,
- 14,11,11,15,14,14,13,13,15,14,14,12,12,15,14,14,
- 13,13,14,14,14,11,11,15,14,14,11,11,15,14,14,13,
- 13,15,14,14,12,12,15,14,14,12,12,15,14,14,12,12,
- 15,14,14,11,11,14,14,14,12,12,15,15,15,13,13,16,
- 14,14,12,12,15,15,15,13,13,15,14,14,12,12,15,15,
- 15,12,12,15,11,11,13,13,18,10,10,12,12,17,11,11,
- 12,12,18,12,12,11,11,18,14,14,12,12,18,10,10,13,
- 13,18,14,14,12,12,18,10,10,12,12,18,11,11,12,12,
- 18,14,14,12,12,18,11,11,12,13,18,14,14,12,12,18,
- 10,10,12,12,18,11,11,12,12,18,14,14,11,11,18,11,
- 11,12,12,18,14,14,12,12,17,10,10,11,11,17,12,12,
- 11,11,17,14,14,11,11,18,15,15,12,12,18,14,14,13,
- 13,18,15,15,11,11,18,15,14,12,12,18,15,15,11,11,
- 14, 8, 8,11,11,14,15,15,10,10,14,15,15,11,11,14,
- 15,15,11,11,15,15,15,12,12,15,15,15,11,11,15,15,
- 15,12,12,14,15,15,10,10,15,15,15,11,11,15,15,15,
- 12,12,15,15,15,11,11,15,15,15,13,13,14,15,15,10,
- 10,15,15,15,11,11,15,15,15,12,12,15,15,15,12,12,
- 15,16,16,12,12,15,14,14,11,11,15,15,15,11,11,15,
- 15,15,12,12,16,15,15,13,13,15,16,16,13,13,16,15,
- 15,12,12,15,15,15,12,12,15,15,15,12,12,14,13,13,
- 11,11,14,14,14,11,11,14,14,14,12,12,15,14,14,11,
- 11,15,15,14,11,11,15,14,14,12,12,15,14,14,12,12,
- 14,15,15,11,11,15,14,14,12,12,15,14,14,11,11,15,
- 14,15,12,12,15,14,14,12,12,14,15,15,11,11,15,14,
- 14,11,11,15,14,14,11,11,15,15,14,12,12,15,14,14,
- 12,12,15,15,15,10,11,15,14,14,11,11,15,15,15,10,
- 10,15,15,15,12,12,16,14,14,13,13,15,15,15,11,11,
- 15,14,14,11,11,15,15,15,11,11,14,11,11, 9, 9,14,
- 10,10,12,12,15,11,11,12,12,15,12,12,12,12,15,14,
- 14,13,13,15,11,11,12,12,15,14,14,13,13,14,10,10,
- 12,12,15,11,11,13,13,15,14,14,12,12,15,10,10,12,
- 12,14,14,14,13,13,14,10,10,11,11,15,11,11,12,12,
- 15,14,14,12,12,15,12,12,13,13,15,14,14,14,14,15,
- 11,11,11,11,15,12,11,12,12,15,14,14,11,11,15,15,
- 15,13,14,15,14,14,20,19,15,14,14,12,12,15,14,14,
- 13,13,15,14,14,12,12,14,13,13,10,10,14,13,13,11,
- 11,14,13,13,11,11,15,14,14,12,12,15,14,14,12,12,
- 15,14,14,12,11,14,14,14,13,13,15,14,14,11,11,15,
- 14,14,11,11,15,14,14,14,14,15,14,14,11,12,15,14,
- 14,13,13,14,14,14,11,11,15,14,14,11,11,15,14,14,
- 14,14,15,14,14,12,12,15,14,14,13,13,15,14,14,11,
- 11,14,14,14,12,12,15,14,14,13,13,15,15,15,13,13,
- 15,14,14,13,13,15,15,15,13,13,15,14,14,13,13,15,
- 15,15,13,13,15,14,14,13,13,18,15,15,12,12,18,15,
- 15,12,12,18,16,16,11,11,18,17,17,12,12,18,15,15,
- 13,13,18,17,17,12,12,18,15,15,12,12,18,15,16,12,
- 12,18,17,17,12,12,18,15,15,13,12,17,16,17,12,12,
- 17,15,15,11,12,18,15,15,12,12,18,17,17,11,11,18,
- 16,16,12,12,18,17,16,12,12,18,15,15,11,11,18,15,
- 15,12,12,18,17,17,11,11,18,17,17,12,12,18,16,16,
- 13,13,18,17,17,11,11,17,16,16,11,11,18,17,17,11,
- 11,15,15,15,11,11,16,15,15,11,11,16,15,15,11,11,
- 16,15,15,12,12,17,15,15,14,14,16,15,15,11,11,17,
- 15,15,14,14,16,15,15,11,11,16,15,15,12,12,18,15,
- 15,13,13,16,15,15,11,11,17,15,15,14,14,16,15,15,
- 11,11,16,15,15,12,12,17,15,15,13,13,16,15,15,12,
- 12,17,16,15,14,14,16,15,15,11,11,16,15,15,12,12,
- 18,15,15,13,13,17,15,15,14,14,17,16,16,15,15,18,
- 14,15,13,13,18,15,15,14,14,18,15,15,13,13,15,13,
- 13,12,12,15,14,14,12,12,16,14,14,12,12,16,14,14,
- 12,12,17,14,15,12,12,16,14,14,12,12,17,14,14,13,
- 13,16,15,15,12,12,16,14,14,12,12,17,14,14,12,12,
- 16,14,14,12,12,17,14,14,13,13,15,15,15,11,11,16,
- 14,14,12,12,17,14,14,12,12,16,15,15,12,12,17,14,
- 14,13,12,16,15,15,11,11,16,14,14,12,12,17,15,15,
- 11,11,17,15,15,13,13,17,14,14,13,13,18,15,15,12,
- 12,17,14,14,12,12,17,15,15,12,12,14,15,15, 9, 9,
- 14,15,15,12,12,15,16,15,13,13,15,15,15,14,14,15,
- 15,15,21,19,15,15,15,13,13,15,15,15,19,19,15,15,
- 15,12,12,15,16,16,14,14,15,15,15,19,19,15,16,15,
- 13,13,15,16,16,19,20,15,15,15,12,13,15,16,16,14,
- 14,15,15,15,20,19,15,15,15,14,14,15,16,16,19,19,
- 15,15,15,14,13,15,15,15,14,14,15,15,15,19,19,15,
- 16,16,20,19,15,17,16,21,20,15,15,15,20,19,15,16,
- 16,20,20,15,15,15,19,20,14,13,13,10,10,14,14,14,
- 11,11,14,14,14,12,12,15,14,14,13,13,15,15,14,20,
- 20,15,14,14,12,12,14,14,14,19,19,15,14,14,11,11,
- 15,14,14,12,12,15,14,14,20,19,15,14,14,12,12,14,
- 14,14,20,20,14,14,14,11,11,15,14,14,12,12,15,14,
- 14,20,21,15,14,14,13,13,15,14,14,20,20,15,14,14,
- 12,12,15,14,14,13,13,14,15,15,20,20,15,15,15,20,
- 19,15,14,14,20,19,15,15,15,20,20,15,14,14,21,20,
- 15,15,15,20,20,
-};
-
-static const static_codebook _44p4_p4_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p4_p4_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p4_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44p4_p5_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p4_p5_0[] = {
- 1, 7, 6,15,15, 7, 8, 8,15,15, 8, 8, 8,15,15, 0,
- 13,13,16,16, 0,14,14,16,16, 7, 9, 9,16,16,10,11,
- 11,17,17,10, 8, 8,15,16, 0,14,14,18,18, 0,14,14,
- 16,16, 9, 9, 9,16,16,12,11,11,17,17,10, 9, 9,15,
- 15, 0,14,14,19,19, 0,14,14,16,16, 0,15,15,18,17,
- 0, 0, 0,20,20, 0,13,13,16,16, 0,17,17,22,20, 0,
- 15,15,17,17, 0,15,15,18,18, 0,22,21,20,21, 0,13,
- 13,16,16, 0,18,18, 0,22, 0,15,15,17,17, 6, 7, 7,
- 13,13, 9,10,10,15,15,11,10,10,15,15, 0,21,22,18,
- 18, 0, 0, 0,18,18,10,10,10,15,15,12,13,13,17,17,
- 12,11,11,15,15, 0,22,22,18,18, 0, 0,21,18,18,12,
- 11,11,15,15,15,14,14,18,18,13,11,11,15,15, 0, 0,
- 21,18,19, 0,21,22,18,19, 0,22, 0,18,19, 0, 0, 0,
- 0, 0, 0,21,21,18,18, 0,22, 0, 0,21, 0, 0, 0,19,
- 18, 0, 0, 0,18,19, 0, 0, 0, 0, 0, 0,20,20,18,17,
- 0, 0,22, 0,21, 0, 0, 0,19,19, 6, 6, 6,13,13, 8,
- 6, 6,11,11, 9, 7, 7,13,13, 0,10,10,11,11, 0,12,
- 12,14,14, 9, 8, 8,14,14,12,10,10,13,13,10, 7, 7,
- 13,13, 0,11,11,15,15, 0,11,11,13,13, 9, 8, 8,14,
- 14,13,10,10,13,14,11, 7, 7,13,13, 0,11,11,15,15,
- 0,11,11,13,13, 0,12,12,15,15, 0,21,21,17,17, 0,
- 10,10,13,13, 0,14,14,20,20, 0,12,12,13,13, 0,12,
- 12,15,15, 0,21,22,17,18, 0,10,10,13,13, 0,16,16,
- 20,21, 0,12,12,13,13, 0,11,11,13,13, 0,12,12,16,
- 16, 0,12,12,16,16, 0,16,16, 0,21, 0,17,18, 0, 0,
- 0,12,12,15,15, 0,15,15,18,18, 0,12,12,16,16, 0,
- 16,16,21,22, 0,17,17,22,21, 0,12,12,16,16, 0,15,
- 15,19,19, 0,12,12,16,16, 0,16,16,22,22, 0,17,16,
- 22, 0, 0,17,18, 0, 0, 0, 0, 0, 0, 0, 0,15,15,21,
- 20, 0,19,20, 0,22, 0,18,18, 0, 0, 0,18,17, 0, 0,
- 0, 0, 0, 0, 0, 0,16,16,22,21, 0,20,20, 0,22, 0,
- 20,19, 0, 0, 0,11,11,12,12, 0,10,10,11,11, 0,11,
- 11,12,12, 0,12,12,10,10, 0,13,13,12,12, 0,11,11,
- 13,13, 0,13,13,12,12, 0,10,10,12,12, 0,13,13,14,
- 13, 0,12,12,12,12, 0,12,12,13,13, 0,14,14,13,13,
- 0,10,10,12,12, 0,13,13,14,14, 0,13,12,12,12, 0,
- 14,14,14,14, 0,21,21,16,16, 0,12,12,12,12, 0,16,
- 16,20,21, 0,13,13,11,11, 0,14,14,14,14, 0,20,20,
- 16,15, 0,12,12,12,12, 0,17,17,20,20, 0,13,13,11,
- 11, 7, 8, 8,16,16,11,10,10,15,15,12,10,10,17,17,
- 0,14,14,16,15, 0,15,15,17,17,11, 9, 9,16,16,14,
- 12,12,17,17,13, 9, 9,16,15, 0,14,14,19,18, 0,14,
- 14,16,16,12,10,10,17,18,16,13,13,17,18,14,10,10,
- 16,16, 0,14,14,19,19, 0,14,15,17,17, 0,15,15,18,
- 19, 0, 0, 0,20,20, 0,13,13,17,17, 0,17,18, 0,22,
- 0,15,15,16,17, 0,15,15,18,18, 0, 0, 0,20,21, 0,
- 14,14,17,17, 0,19,18, 0, 0, 0,16,16,17,17, 8, 7,
- 7,14,14,12,11,11,15,15,13,11,11,15,15, 0, 0, 0,
- 18,19, 0,21,20,18,18,12,10,11,15,16,14,13,13,18,
- 18,14,11,11,15,15, 0,20,20,19,18, 0,20, 0,18,18,
- 13,11,11,16,16,17,15,15,19,19,14,12,12,15,15, 0,
- 21, 0,18,20, 0,22,22,18,19, 0,22,22,19,19, 0, 0,
- 0, 0, 0, 0,21,22,19,18, 0, 0, 0, 0,21, 0, 0, 0,
- 19,19, 0, 0,22,20,20, 0, 0, 0, 0, 0, 0,22, 0,18,
- 18, 0, 0, 0, 0,22, 0, 0, 0,19,20,11,10,10,14,14,
- 14,11,11,13,13,14,11,11,15,15, 0,14,13,12,12, 0,
- 15,15,16,16,13,11,11,15,15,16,13,13,15,15,15,10,
- 10,14,15, 0,14,14,16,16, 0,14,14,15,15,13,11,11,
- 15,15,18,14,14,15,15,15,10,10,15,14, 0,14,14,16,
- 16, 0,14,14,15,15, 0,15,15,17,16, 0,21,22,18,18,
- 0,13,13,14,14, 0,18,17,20,21, 0,15,15,14,14, 0,
- 15,16,16,17, 0, 0, 0,19,18, 0,13,13,15,14, 0,19,
- 19, 0, 0, 0,15,15,14,14, 0,12,12,14,13, 0,13,13,
- 16,16, 0,12,12,16,16, 0,16,16,22, 0, 0,17,18, 0,
- 22, 0,13,13,16,16, 0,15,15,18,18, 0,12,12,16,16,
- 0,16,16,22,22, 0,17,17, 0, 0, 0,13,13,17,17, 0,
- 16,16,19,20, 0,12,12,17,17, 0,17,17,22, 0, 0,17,
- 17,22,21, 0,18,18, 0, 0, 0, 0, 0, 0, 0, 0,16,16,
- 21,21, 0,19,19, 0, 0, 0,18,18, 0,22, 0,18,18, 0,
- 22, 0, 0, 0, 0, 0, 0,16,16,22, 0, 0,20,20, 0, 0,
- 0,19,18, 0, 0, 0,12,12,15,15, 0,12,12,15,14, 0,
- 13,13,15,15, 0,14,14,14,14, 0,15,15,16,16, 0,13,
- 13,15,16, 0,15,15,16,16, 0,12,12,15,15, 0,14,14,
- 16,16, 0,14,14,15,15, 0,13,13,15,16, 0,15,15,16,
- 16, 0,12,12,15,15, 0,15,15,17,17, 0,14,14,15,15,
- 0,15,15,17,17, 0,21,21,19,19, 0,13,13,14,14, 0,
- 17,17,22, 0, 0,14,14,15,15, 0,15,15,17,17, 0,22,
- 0,18,20, 0,13,13,15,15, 0,18,18, 0,22, 0,15,15,
- 14,15, 8, 8, 8,17,16,12,10,10,16,16,13,10,10,17,
- 16, 0,15,15,17,17, 0,15,15,17,17,12,11,11,18,18,
- 15,12,12,18,18,15,10,10,16,17, 0,14,14,18,18, 0,
- 14,14,17,17,13,10,10,16,16,17,14,14,17,17,15,10,
- 10,16,15, 0,15,15,19,20, 0,14,14,15,16, 0,16,16,
- 19,19, 0, 0, 0,21,22, 0,13,13,17,17, 0,18,17, 0,
- 21, 0,15,15,17,17, 0,15,15,18,19, 0, 0,22, 0,21,
- 0,13,13,16,17, 0,19,19, 0,22, 0,16,15,16,16, 9,
- 8, 8,14,14,12,11,11,15,15,13,11,11,15,15, 0,21,
- 20,19,18, 0, 0, 0,19,18,12,11,11,16,15,15,13,13,
- 17,18,14,11,11,15,15, 0,22,22,19,18, 0,22,21,18,
- 18,14,11,11,15,15,17,14,14,18,18,15,12,12,15,15,
- 0,22,22,20,19, 0, 0,21,18,18, 0, 0,22,20,20, 0,
- 0, 0, 0, 0, 0,20,21,18,18, 0, 0, 0,21,21, 0, 0,
- 0,20,19, 0,22,21,19,19, 0, 0, 0, 0, 0, 0, 0,22,
- 17,18, 0, 0,22, 0,22, 0,22, 0,19,19, 0,11,11,15,
- 15, 0,11,11,14,14, 0,12,12,15,15, 0,15,15,14,14,
- 0,16,16,16,16, 0,12,12,16,16, 0,14,14,16,16, 0,
- 11,11,15,15, 0,15,15,17,17, 0,15,15,15,15, 0,12,
- 12,16,16, 0,14,14,15,15, 0,11,11,15,15, 0,15,15,
- 17,17, 0,15,15,14,15, 0,16,16,17,17, 0, 0, 0,19,
- 19, 0,14,14,15,15, 0,18,18,21, 0, 0,15,15,14,15,
- 0,16,16,17,17, 0,21, 0,19,19, 0,14,14,15,15, 0,
- 20,20,22, 0, 0,16,15,14,14, 0,12,12,13,13, 0,12,
- 12,16,16, 0,12,12,16,16, 0,16,16,22,21, 0,18,17,
- 21, 0, 0,13,13,16,16, 0,15,15,18,19, 0,12,12,16,
- 16, 0,16,17,22, 0, 0,17,17, 0,22, 0,13,13,17,16,
- 0,15,15,19,19, 0,12,12,16,16, 0,16,16,21,20, 0,
- 17,16,22, 0, 0,18,18,22,21, 0, 0, 0, 0, 0, 0,15,
- 16,21,21, 0,19,19, 0, 0, 0,18,17, 0, 0, 0,18,18,
- 21, 0, 0, 0, 0, 0, 0, 0,16,16,22,22, 0,20,21, 0,
- 0, 0,18,19, 0,22, 0,13,13,16,16, 0,12,12,15,15,
- 0,13,13,16,16, 0,14,14,15,15, 0,15,15,17,17, 0,
- 13,13,17,16, 0,15,15,17,17, 0,12,12,16,16, 0,15,
- 15,17,17, 0,14,14,16,16, 0,13,13,16,17, 0,15,15,
- 17,17, 0,12,12,16,16, 0,14,14,17,17, 0,14,14,16,
- 16, 0,16,16,17,17, 0,21, 0,21,19, 0,13,13,16,16,
- 0,17,17, 0, 0, 0,15,15,16,16, 0,16,15,18,18, 0,
- 22, 0,20,20, 0,13,13,15,15, 0,18,18, 0, 0, 0,15,
- 15,15,15, 0,12,12,17,17, 0,14,14,17,17, 0,14,14,
- 17,17, 0,17,17,18,17, 0,17,17,19,18, 0,13,13,17,
- 17, 0,16,16,18,18, 0,13,13,16,16, 0,17,17,19,19,
- 0,16,16,17,17, 0,13,13,18,18, 0,17,17,18,18, 0,
- 13,13,17,17, 0,17,17,19,19, 0,16,17,17,17, 0,17,
- 17,19,19, 0,21, 0,21,19, 0,14,14,16,16, 0,20,19,
- 0,21, 0,16,16,16,16, 0,17,18,19,19, 0, 0, 0, 0,
- 21, 0,15,15,16,17, 0,21,20, 0, 0, 0,17,18,16,17,
- 0, 9, 9,14,14, 0,14,14,15,16, 0,14,14,15,15, 0,
- 0, 0,18,18, 0,21, 0,18,19, 0,12,12,15,15, 0,16,
- 16,17,17, 0,14,14,14,14, 0,22, 0,19,18, 0,22, 0,
- 17,18, 0,14,14,16,15, 0,18,18,19,18, 0,14,15,15,
- 15, 0, 0,21,20,20, 0, 0, 0,18,18, 0,21,21,19,19,
- 0, 0, 0, 0, 0, 0,21,21,18,18, 0,22, 0,20,20, 0,
- 22, 0,19,19, 0,22, 0,19,20, 0, 0, 0, 0, 0, 0, 0,
- 21,17,18, 0, 0, 0,22,22, 0, 0, 0,19,18, 0,18,20,
- 16,16, 0,21,20,17,17, 0, 0,21,18,18, 0,22,21,18,
- 18, 0, 0,22,19,19, 0,20,20,17,17, 0, 0, 0,18,18,
- 0,19,20,17,17, 0,22, 0,19,21, 0,22,21,18,18, 0,
- 20,19,17,18, 0, 0, 0,19,19, 0,20,20,17,17, 0,22,
- 22,21,21, 0,20, 0,18,18, 0,22,22,18,18, 0, 0, 0,
- 20,22, 0,20,20,16,16, 0, 0, 0,21, 0, 0,21,20,16,
- 17, 0,22, 0,19,20, 0, 0, 0,21,20, 0,19,21,17,17,
- 0, 0, 0, 0, 0, 0,21,21,17,17, 0,12,12,13,13, 0,
- 14,14,16,16, 0,14,14,16,16, 0,18,18, 0, 0, 0,19,
- 18,22, 0, 0,13,13,16,16, 0,16,16,18,18, 0,13,13,
- 16,16, 0,17,18,21, 0, 0,18,18,21, 0, 0,13,13,16,
- 16, 0,17,17,19,20, 0,13,13,16,17, 0,18,18,21, 0,
- 0,18,18,21, 0, 0,18,19, 0,21, 0, 0, 0, 0, 0, 0,
- 16,16,21,20, 0,20,20, 0, 0, 0,18,19, 0, 0, 0,18,
- 18, 0, 0, 0, 0, 0, 0, 0, 0,16,16, 0,21, 0,22,22,
- 0, 0, 0,19,19, 0, 0, 0,16,16,19,20, 0,17,16,22,
- 21, 0,17,17,21,20, 0,19,18, 0,22, 0,19,19,22,22,
- 0,16,15,22,22, 0,19,19, 0,21, 0,15,15,20,20, 0,
- 18,19, 0,21, 0,18,18,22,22, 0,16,16,21,20, 0,20,
- 19,21,22, 0,16,15,20,20, 0,19,19, 0,22, 0,18,18,
- 21, 0, 0,19,18,21,22, 0, 0, 0, 0, 0, 0,16,16,19,
- 21, 0,20,22, 0,22, 0,18,18,20,21, 0,19,18, 0,22,
- 0, 0, 0,22, 0, 0,16,16,20,20, 0,21,21, 0, 0, 0,
- 18,18,21, 0, 0,12,12,17,17, 0,15,14,17,17, 0,14,
- 14,18,18, 0,17,17,17,18, 0,18,18,18,18, 0,13,13,
- 18,18, 0,16,17,19,18, 0,13,13,16,17, 0,17,17,18,
- 19, 0,17,17,17,17, 0,13,13,17,17, 0,17,18,18,18,
- 0,13,13,16,16, 0,18,18,19,20, 0,16,17,17,16, 0,
- 17,18,19,18, 0, 0, 0,22,21, 0,15,15,16,16, 0,20,
- 20,21,22, 0,17,17,16,16, 0,16,17,18,18, 0, 0, 0,
- 21,21, 0,15,15,16,16, 0,21,20, 0, 0, 0,17,17,16,
- 16, 0,10,10,14,14, 0,14,14,15,15, 0,14,14,15,15,
- 0,22, 0,18,18, 0, 0, 0,19,19, 0,13,13,15,16, 0,
- 17,16,18,18, 0,14,14,15,15, 0,21,21,19,18, 0,22,
- 21,18,17, 0,14,14,15,15, 0,18,18,19,18, 0,15,15,
- 14,14, 0,22,21,19,19, 0,22,21,17,18, 0, 0, 0,19,
- 19, 0, 0, 0, 0, 0, 0,20,22,17,17, 0, 0,22,22,20,
- 0, 0, 0,19,18, 0,21,22,19,18, 0, 0, 0, 0, 0, 0,
- 22,22,17,18, 0, 0, 0,21,22, 0, 0, 0,19,18, 0,20,
- 20,17,17, 0,21,21,17,18, 0,21,22,18,18, 0,21, 0,
- 18,18, 0,22, 0,19,19, 0,19,21,18,18, 0, 0,22,18,
- 18, 0,22,21,17,17, 0,22, 0,20,20, 0, 0, 0,18,18,
- 0,22,21,18,18, 0,21, 0,19,19, 0,20,21,17,17, 0,
- 0,22,22,20, 0,21,22,17,17, 0, 0,21,19,18, 0, 0,
- 0,21,21, 0,21,20,16,17, 0, 0, 0, 0, 0, 0,21, 0,
- 17,17, 0,21, 0,19,20, 0, 0, 0,20,22, 0,20,20,17,
- 17, 0, 0, 0, 0, 0, 0,21,21,17,17, 0,12,12,13,13,
- 0,14,14,16,16, 0,14,14,16,16, 0,18,18,21, 0, 0,
- 19,19,22, 0, 0,13,13,16,16, 0,16,16,18,18, 0,13,
- 13,16,16, 0,18,18,21,22, 0,18,18, 0,22, 0,13,13,
- 16,16, 0,17,17,20,18, 0,13,13,16,16, 0,19,18, 0,
- 22, 0,18,18,22,21, 0,18,19, 0, 0, 0, 0, 0, 0, 0,
- 0,16,16,21,21, 0,21,21, 0, 0, 0,18,19, 0, 0, 0,
- 19,19,21, 0, 0, 0, 0, 0, 0, 0,16,16, 0,21, 0,20,
- 20, 0, 0, 0,20,20, 0, 0, 0,16,16,21,20, 0,18,17,
- 21,22, 0,17,18, 0,21, 0,18,19,22,22, 0,19,19, 0,
- 22, 0,16,17,21,22, 0,20,19, 0, 0, 0,16,16,20,21,
- 0,19,19, 0, 0, 0,19,19, 0,22, 0,17,17,21,21, 0,
- 19,20, 0, 0, 0,16,16, 0,20, 0,19,20, 0,21, 0,18,
- 18, 0,22, 0,19,20,22,22, 0, 0, 0, 0,22, 0,17,17,
- 0,21, 0,21,21, 0, 0, 0,18,19,23,21, 0,20,19, 0,
- 0, 0, 0, 0, 0, 0, 0,17,17, 0,20, 0, 0, 0, 0, 0,
- 0,19,19,23,22,
-};
-
-static const static_codebook _44p4_p5_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p4_p5_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44p4_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44p4_p5_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44p4_p5_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p4_p5_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44p4_p5_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p4_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44p4_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p4_p6_0[] = {
- 1, 7, 7, 7, 8, 8, 7, 8, 8, 7, 9, 9,11,11,11, 9,
- 8, 8, 8, 9, 9,12,11,12, 9, 8, 8, 6, 7, 7,10,11,
- 11,10,10,10,11,11,11,14,14,14,12,11,12,11,11,11,
- 15,15,14,13,12,12, 5, 6, 6, 8, 5, 5, 8, 7, 7, 8,
- 7, 7,12,10,10,10, 7, 6, 9, 8, 8,12,10,10,10, 6,
- 6, 7, 8, 8,12,10,10,12,10,10,11,10,10,16,14,14,
- 13,10,10,12,10,10,15,14,14,14,10,10, 7, 7, 7,13,
- 11,11,13,11,11,12,11,11,16,14,14,14,12,12,12,11,
- 11,18,15,15,14,12,12,10, 9,10,14,11,11,13,11,11,
- 12,11,11,17,14,14,14,11,11,13,11,11,16,15,15,14,
- 11,11, 7, 8, 8,13,11,11,12,10,10,12,10,10,16,14,
- 13,13,10,10,12,10,10,17,14,14,14,10,10, 8, 7, 7,
- 12,11,11,13,11,11,12,11,11,16,15,14,14,12,12,12,
- 11,11,16,15,15,14,12,12,11,10,10,14,11,11,13,11,
- 11,13,11,11,17,14,14,14,11,11,13,11,11,18,14,15,
- 15,11,10,
-};
-
-static const static_codebook _44p4_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p4_p6_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44p4_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44p4_p6_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p4_p6_1[] = {
- 2, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,
- 7, 7, 8, 8, 8, 9, 9, 9, 9, 8, 8, 6, 7, 7, 8, 8,
- 8, 8, 8, 8, 9, 8, 8, 9, 8, 9, 9, 8, 8,10, 8, 8,
- 10, 9, 9,10, 8, 8, 6, 6, 6, 8, 6, 6, 8, 7, 7, 8,
- 7, 7,10, 8, 8, 9, 7, 7, 9, 7, 7,10, 8, 8, 9, 7,
- 7, 7, 7, 7,10, 8, 8,11, 9, 9,10, 9, 9,11, 9, 9,
- 11, 8, 8,11, 9, 9,12, 9, 9,12, 8, 8, 7, 7, 7,10,
- 9, 9,10, 9, 9,10, 9, 9,11,10,10,10, 9, 9,11, 9,
- 10,11,10,11,10, 9, 9, 9, 8, 8,10, 9, 9,10, 9, 9,
- 11, 9, 9,11,10,10,11, 9, 9,11, 9, 9,11,10,10,11,
- 9, 9, 8, 8, 8,11, 9, 9,11, 9, 9,11, 9, 9,12, 9,
- 9,12, 8, 8,11, 9, 9,12, 9, 9,12, 8, 8, 8, 7, 7,
- 10, 9, 9,10, 9, 9,10, 9, 9,11,11,11,11, 9, 9,11,
- 10,10,11,11,11,11, 9, 9,10, 9, 9,11, 9, 9,11, 9,
- 10,11,10,10,11,10,10,11, 9, 9,11,10,10,11,10,10,
- 11, 9, 9,
-};
-
-static const static_codebook _44p4_p6_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p4_p6_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44p4_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44p4_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p4_p7_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p4_p7_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p4_p7_0,
- 1, -513979392, 1633504256, 2, 0,
- (long *)_vq_quantlist__44p4_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44p4_p7_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p4_p7_1[] = {
- 1, 9, 9, 7, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8,
- 9, 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 7, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 6, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 5, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 5,10, 9,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10, 8,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,
-};
-
-static const static_codebook _44p4_p7_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p4_p7_1,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p4_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44p4_p7_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p4_p7_2[] = {
- 1, 3, 2, 5, 4, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
- 12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p4_p7_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44p4_p7_2,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44p4_p7_2,
- 0
-};
-
-static const long _vq_quantlist__44p4_p7_3[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p4_p7_3[] = {
- 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p4_p7_3 = {
- 1, 25,
- (char *)_vq_lengthlist__44p4_p7_3,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44p4_p7_3,
- 0
-};
-
-static const char _huff_lengthlist__44p4_short[] = {
- 3, 5,16, 9, 9,13,18,21, 4, 2,21, 6, 6,10,15,21,
- 16,19, 6, 5, 7,10,13,16, 8, 6, 5, 4, 4, 8,13,16,
- 8, 5, 6, 4, 4, 7,12,15,13,10, 9, 7, 7, 9,13,16,
- 18,15,13,12, 9, 7,10,14,21,18,13,13, 7, 5, 8,12,
-};
-
-static const static_codebook _huff_book__44p4_short = {
- 2, 64,
- (char *)_huff_lengthlist__44p4_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p5_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44p5_l0_0[] = {
- 1, 4, 4, 8, 8,10,10,10,10, 9, 8,11,11, 4, 6, 5,
- 8, 6,10,10,10,10,10, 9,10, 9, 4, 5, 6, 6, 9,10,
- 10,10,10, 9,10, 9,10, 8, 9, 8, 9, 8, 9, 9,10, 9,
- 11,10,12,10, 8, 8, 9, 8, 9, 9, 9, 9,10,10,11,10,
- 12, 9,10,10,11,10,11,10,12,11,12,11,13,11, 9,10,
- 10,10,11,10,11,11,12,11,12,11,12,11,12,12,12,12,
- 13,12,13,12,13,12,13,13,11,12,12,12,12,12,12,12,
- 13,13,13,13,13,12,12,12,13,13,13,13,13,13,13,13,
- 13,13,12,13,12,13,13,13,13,13,13,13,13,13,13,12,
- 13,13,13,14,14,13,13,13,13,13,13,13,12,13,12,13,
- 13,13,13,13,13,13,13,13,13,
-};
-
-static const static_codebook _44p5_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44p5_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44p5_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44p5_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p5_l0_1[] = {
- 4, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 4, 4, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p5_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44p5_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p5_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44p5_l1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p5_l1_0[] = {
- 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44p5_l1_0 = {
- 2, 9,
- (char *)_vq_lengthlist__44p5_l1_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p5_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44p5_lfe[] = {
- 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44p5_lfe = {
- 2, 4,
- (char *)_huff_lengthlist__44p5_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44p5_long[] = {
- 3, 7,12,14,14,16,18,19, 6, 2, 4, 6, 8, 9,12,14,
- 12, 3, 3, 5, 7, 8,11,13,13, 6, 4, 5, 7, 8,10,11,
- 14, 8, 7, 7, 7, 7, 9,10,15, 9, 8, 7, 7, 6, 8, 9,
- 17,11,11,10, 9, 8, 9, 9,19,14,13,11,10, 9, 9, 9,
-};
-
-static const static_codebook _huff_book__44p5_long = {
- 2, 64,
- (char *)_huff_lengthlist__44p5_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p5_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p5_p1_0[] = {
- 2, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 8, 9, 7,
- 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 5, 7, 8, 8, 9,
- 10, 8, 9,10, 8, 9,10, 9,10,12,10,11,11, 8,10,10,
- 10,11,11, 9,11,11, 5, 8, 7, 8, 9, 9, 8,10, 9, 8,
- 10,10, 9,11,11,10,11,11, 8,10, 9,10,11,11, 9,12,
- 10, 5, 8, 8, 7, 9,10, 8,10, 9, 7, 9, 9, 9,10,11,
- 9,11,11, 8,10, 9,10,11,11,10,11,11, 7, 9, 9, 9,
- 10,11, 9,11,11, 9, 9,11,10,10,13,11,11,12, 9,11,
- 11,11,12,13,11,13,12, 7, 9, 9, 9,11,11, 9,11,10,
- 9,11,10,10,11,12,11,13,12, 9,11,11,11,12,13,11,
- 13,11, 5, 8, 8, 8, 9,10, 7,10, 9, 8, 9,10,10,11,
- 11,10,11,11, 7, 9, 9, 9,11,11, 9,11,10, 7, 9, 9,
- 9,10,11, 9,11,11, 9,11,11,11,11,13,11,13,12, 9,
- 10,11,11,12,13,10,12,11, 7, 9, 9, 9,11,11, 9,11,
- 10, 9,11,11,11,12,13,11,13,12, 9,11, 9,11,12,11,
- 10,13,10,
-};
-
-static const static_codebook _44p5_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p5_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p5_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44p5_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p5_p2_0[] = {
- 4, 6, 6, 9, 9, 6, 7, 8,10,10, 6, 8, 7,10,10, 8,
- 10,10,12,13, 8,10,10,13,12, 6, 7, 8,10,10, 7, 8,
- 9,10,11, 8, 9, 9,11,11,10,10,11,12,14,10,11,11,
- 14,13, 6, 8, 7,10,10, 8, 9, 9,11,11, 7, 9, 8,11,
- 10,10,11,11,13,14,10,11,10,14,12, 9,10,10,12,12,
- 10,10,11,12,13,10,11,11,13,13,12,12,13,12,15,13,
- 14,13,15,14, 9,10,10,12,12,10,11,11,13,13,10,11,
- 10,13,12,13,13,14,14,15,12,13,12,15,12, 6, 7, 8,
- 10,11, 8, 9,10,11,12, 8, 9, 9,11,12,10,11,12,13,
- 14,10,11,11,14,13, 8, 9,10,11,12, 9,10,11,12,13,
- 9,10,11,12,13,11,12,13,13,15,12,12,13,15,14, 8,
- 9, 9,12,12, 9,10,11,12,13, 9,10,10,13,12,12,12,
- 13,14,15,11,12,12,14,14,11,11,12,13,14,11,12,13,
- 13,15,12,13,13,14,15,14,13,15,14,16,14,15,15,16,
- 16,11,12,11,14,13,12,13,13,15,14,11,13,12,14,13,
- 14,15,15,15,16,13,14,14,16,14, 6, 8, 7,11,10, 8,
- 9, 9,11,12, 8,10, 9,12,11,10,11,11,13,14,10,12,
- 11,14,13, 8, 9, 9,12,12, 9,10,10,12,13, 9,11,10,
- 13,12,11,12,12,13,14,12,13,12,15,14, 8,10, 9,12,
- 11, 9,11,10,13,12, 9,11,10,13,12,12,13,12,14,15,
- 11,13,12,15,13,11,11,12,13,14,11,12,13,13,15,12,
- 13,13,14,15,13,14,14,14,16,14,15,15,16,16,11,12,
- 11,14,13,12,13,13,15,14,11,13,12,15,13,14,15,15,
- 16,16,13,15,13,16,14, 9,10,11,12,14,11,11,12,13,
- 15,11,12,12,13,14,13,14,15,15,17,13,14,14,15,16,
- 11,11,12,13,15,12,12,13,14,16,12,13,13,14,15,14,
- 14,16,15,17,15,15,15,16,17,11,12,12,14,14,12,13,
- 13,15,16,12,13,13,15,15,15,15,15,16,17,14,15,15,
- 16,16,14,14,15,15,17,14,15,15,15,17,15,15,16,16,
- 17,16,16,17,16,18,17,17,17,18,18,14,15,14,16,16,
- 15,15,16,17,17,14,15,15,17,16,17,17,17,18,18,16,
- 16,16,17,17, 9,11,10,14,12,11,12,12,14,13,11,12,
- 11,15,13,13,14,14,16,15,13,15,14,17,15,11,12,12,
- 15,14,12,13,13,15,15,12,13,13,15,15,14,15,15,16,
- 16,15,15,15,17,16,11,12,11,15,13,12,13,13,15,14,
- 12,13,12,16,14,15,15,15,17,16,14,15,14,17,15,14,
- 14,15,16,16,14,15,15,16,16,15,16,15,17,17,16,16,
- 16,17,17,17,17,17,18,17,14,15,14,16,15,15,15,15,
- 17,16,15,15,15,17,15,17,17,17,18,18,16,17,16,18,
- 16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,11,
- 10,11,11,13,14,10,12,11,14,13, 7, 9, 9,11,12, 9,
- 10,10,12,13, 9,10,10,13,13,11,11,12,13,15,11,12,
- 12,15,14, 8, 9, 9,12,11, 9,11,10,13,13, 9,11,10,
- 13,12,12,13,12,14,15,11,13,12,15,13,10,11,12,13,
- 14,11,12,12,13,15,12,12,13,14,15,13,13,14,14,16,
- 14,15,15,16,16,11,12,11,14,13,12,13,13,15,14,11,
- 13,12,15,13,14,15,15,15,16,13,14,14,16,14, 7, 9,
- 9,11,12, 9,10,11,12,13, 9,10,10,13,12,11,12,12,
- 14,15,11,12,12,15,14, 9, 9,11,11,13,10,10,12,12,
- 14,10,11,12,13,14,12,12,13,14,16,12,13,13,15,15,
- 9,11,10,13,13,10,12,12,13,14,10,12,11,14,13,12,
- 13,13,15,16,12,13,13,15,14,11,11,13,13,15,12,12,
- 14,13,16,13,13,13,14,15,14,14,15,14,17,15,15,15,
- 16,16,12,13,12,15,14,13,14,14,15,15,12,14,13,16,
- 14,15,15,16,16,17,14,15,14,17,15, 7, 9, 9,12,11,
- 9,10,10,12,13, 9,11,10,13,12,11,12,12,14,14,11,
- 13,12,15,14, 9,10,10,13,12,10,10,11,12,13,10,12,
- 11,14,13,12,12,13,13,15,12,14,13,16,15, 9,10,10,
- 13,12,11,11,12,13,13,10,12,10,14,12,13,13,13,15,
- 15,12,13,12,15,13,11,12,12,14,14,12,12,13,14,15,
- 13,14,13,15,15,14,13,15,13,16,15,16,15,17,16,12,
- 13,12,14,14,13,14,14,15,15,12,13,12,15,14,15,15,
- 16,16,17,14,15,13,16,13,10,11,12,13,14,11,12,13,
- 14,15,12,13,13,15,15,14,14,15,15,17,14,15,15,16,
- 16,12,12,13,12,15,12,12,14,13,16,13,13,14,14,16,
- 14,14,16,15,17,15,15,16,16,17,12,13,13,15,15,13,
- 14,14,16,16,13,14,13,16,15,15,16,16,17,17,14,15,
- 15,17,16,14,14,15,14,17,15,15,16,15,17,15,15,16,
- 15,17,16,16,17,16,18,17,17,17,17,18,14,15,15,17,
- 16,15,16,16,17,17,15,16,15,17,16,17,17,17,18,18,
- 16,17,16,18,17,10,12,11,14,14,12,13,13,15,15,12,
- 13,12,15,14,14,15,15,16,16,14,15,15,17,16,11,13,
- 12,15,14,12,13,13,15,15,13,14,13,16,14,15,15,15,
- 16,16,15,16,15,17,16,12,13,13,15,15,13,14,14,16,
- 16,12,14,13,16,15,15,16,16,17,17,15,16,15,17,16,
- 14,15,15,16,16,14,15,15,16,16,15,16,16,17,16,16,
- 16,16,16,17,17,18,17,18,17,14,15,15,17,16,15,16,
- 16,17,17,15,16,15,17,16,17,17,18,18,18,16,17,16,
- 18,16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,
- 11,10,11,12,13,14,10,11,11,14,13, 8, 9, 9,11,12,
- 9,10,11,12,13, 9,10,11,13,13,11,12,13,13,15,12,
- 12,12,15,14, 7, 9, 9,12,11, 9,10,10,13,13, 9,10,
- 10,13,12,11,12,12,14,15,11,12,11,15,13,11,11,12,
- 13,14,11,12,13,13,15,12,13,13,14,15,13,14,14,14,
- 16,14,15,15,16,16,10,12,11,14,13,12,13,12,14,14,
- 11,12,12,15,13,14,15,15,16,16,13,14,13,16,14, 7,
- 9, 9,11,12, 9,10,11,12,13, 9,10,10,13,12,11,12,
- 13,14,15,11,12,12,14,14, 9,10,10,12,13,10,10,12,
- 12,14,11,12,11,13,13,12,12,14,13,15,13,13,13,15,
- 15, 9,10,10,12,13,10,11,12,13,14,10,11,10,13,12,
- 13,13,14,15,16,12,13,12,15,13,12,13,13,14,14,12,
- 12,13,14,15,13,14,14,15,15,14,13,15,13,16,15,16,
- 15,17,16,11,12,12,14,14,13,13,14,15,15,12,13,12,
- 15,14,15,15,16,16,17,14,14,13,16,13, 7, 9, 9,12,
- 11, 9,10,10,12,13, 9,11,10,13,12,11,12,12,14,15,
- 11,12,12,15,14, 9,10,11,13,13,10,11,12,13,14,10,
- 12,12,14,13,12,13,13,14,16,12,13,13,16,15, 9,11,
- 9,13,11,10,12,11,13,13,10,12,10,14,12,12,13,13,
- 15,15,12,13,12,16,14,12,12,13,14,15,12,13,14,14,
- 15,13,14,14,15,15,14,14,15,15,17,15,16,15,17,16,
- 11,13,11,15,13,13,14,13,15,14,12,14,12,16,13,15,
- 15,15,16,16,14,15,14,17,14,10,11,12,14,14,12,12,
- 13,14,15,12,13,13,15,15,14,15,15,16,17,14,15,15,
- 16,16,12,12,13,15,15,13,13,14,15,16,13,14,14,16,
- 16,15,15,16,16,17,15,16,16,17,17,11,12,13,14,15,
- 13,13,14,15,16,12,13,13,15,15,15,15,16,16,17,15,
- 15,15,16,16,14,15,15,16,17,15,15,16,16,17,15,16,
- 16,17,17,16,16,17,16,18,17,17,17,18,18,14,15,15,
- 16,16,15,16,16,16,17,15,15,15,16,16,17,17,17,18,
- 18,16,16,16,17,16,10,12,11,14,13,12,13,13,15,15,
- 11,13,12,15,14,14,15,15,16,16,14,15,14,17,15,12,
- 13,13,15,15,13,13,14,16,16,13,14,14,16,16,15,15,
- 15,16,17,15,16,16,17,17,12,13,12,15,12,13,14,13,
- 16,14,12,14,12,16,13,15,16,15,17,16,14,16,14,17,
- 15,14,15,15,16,17,15,15,16,17,17,15,16,16,17,17,
- 16,16,17,17,18,17,18,17,18,18,14,15,14,17,14,15,
- 16,15,17,15,15,16,15,17,15,17,17,17,18,17,16,17,
- 16,18,16, 9,11,11,14,14,11,12,12,14,14,11,12,12,
- 15,14,13,14,14,16,16,13,15,14,16,16,10,11,12,14,
- 14,11,12,13,15,15,12,13,13,15,15,13,14,15,16,17,
- 14,15,15,17,16,11,12,12,15,14,12,13,13,15,15,12,
- 13,13,15,15,14,15,15,16,16,14,15,15,17,16,12,13,
- 14,15,16,13,14,14,15,16,13,14,15,16,16,15,15,16,
- 16,18,16,16,16,18,17,14,14,14,16,15,15,15,15,17,
- 16,14,15,15,17,16,16,17,17,18,17,16,16,16,18,16,
- 10,12,12,14,14,11,12,13,15,15,12,13,13,15,15,13,
- 14,15,16,17,14,15,15,17,16,11,12,13,14,15,12,12,
- 14,15,16,13,13,14,15,16,14,14,15,16,17,15,15,16,
- 17,17,12,13,13,15,15,13,14,14,16,16,13,14,13,16,
- 15,15,16,15,17,17,15,16,15,17,16,13,13,15,14,17,
- 14,13,16,15,17,15,14,16,15,17,15,15,17,16,18,16,
- 16,17,17,18,14,15,15,17,16,15,16,16,17,17,15,16,
- 15,17,16,17,17,17,18,18,16,17,16,18,17,10,12,11,
- 14,14,11,12,13,15,15,12,13,12,15,15,14,15,15,16,
- 16,14,15,15,17,16,11,12,12,15,15,12,13,13,15,15,
- 13,14,13,16,15,14,15,15,16,16,15,16,15,17,16,11,
- 13,13,15,15,13,14,14,15,15,12,14,13,16,15,15,16,
- 15,17,17,15,16,15,17,16,13,15,14,16,16,14,15,14,
- 16,16,15,16,15,17,16,15,16,16,16,17,16,17,16,18,
- 17,14,15,15,16,16,15,16,16,17,17,15,15,15,17,16,
- 17,17,17,18,18,16,16,16,18,16,12,13,13,15,16,13,
- 14,14,15,16,13,14,14,16,16,15,15,16,16,18,15,16,
- 16,17,17,13,13,14,15,16,14,14,15,15,17,14,15,15,
- 16,17,15,15,17,16,18,16,16,17,17,17,13,14,14,16,
- 16,14,15,15,17,17,14,15,14,17,16,16,17,16,17,18,
- 16,17,16,18,17,15,15,16,14,17,16,15,17,14,18,16,
- 16,16,15,18,16,16,18,15,19,18,18,18,17,19,15,16,
- 16,18,17,16,17,17,18,17,16,17,16,18,17,18,18,18,
- 19,19,17,18,16,18,17,11,12,12,15,15,13,13,14,15,
- 16,13,14,13,16,15,15,16,16,16,17,15,16,16,17,16,
- 12,14,13,16,15,13,13,14,15,16,14,15,14,17,15,15,
- 15,16,16,17,16,17,16,18,17,12,13,14,15,16,14,15,
- 15,16,16,13,14,13,16,15,16,16,16,17,17,15,16,15,
- 17,15,15,16,15,17,16,15,15,15,16,16,16,17,16,18,
- 16,16,15,16,15,17,17,18,17,18,17,15,15,16,17,17,
- 16,16,17,17,17,15,16,15,17,16,18,18,18,18,18,16,
- 17,16,18,15, 9,11,11,14,14,11,12,12,14,15,10,12,
- 12,15,14,13,14,15,16,16,13,14,14,16,16,11,12,12,
- 14,15,12,12,13,15,15,12,13,13,15,15,14,15,15,16,
- 17,14,15,15,16,16,10,12,12,14,14,12,13,13,15,15,
- 11,13,12,15,15,14,15,15,16,17,13,15,14,16,16,14,
- 14,14,15,16,14,15,15,16,17,14,15,15,16,17,16,16,
- 17,16,18,16,17,17,17,17,12,14,13,16,15,13,15,14,
- 16,16,13,14,14,16,15,16,16,16,17,17,15,16,15,17,
- 16,10,11,11,14,14,12,12,13,14,15,11,13,12,15,14,
- 14,15,15,16,17,14,15,15,16,16,12,13,13,15,15,12,
- 13,14,15,16,13,14,14,15,15,15,15,16,16,17,15,15,
- 16,17,17,11,12,12,15,15,13,13,14,15,16,12,13,13,
- 15,15,15,15,16,16,17,14,15,15,16,16,14,15,15,16,
- 16,15,15,15,16,17,15,16,16,17,17,16,16,17,16,18,
- 17,17,17,17,18,13,14,15,16,16,15,15,16,16,17,14,
- 14,14,16,16,16,16,17,17,18,16,16,16,17,16,10,12,
- 12,14,14,12,13,13,15,15,11,13,12,15,15,14,15,15,
- 16,17,13,15,14,17,16,12,13,13,15,15,13,13,14,15,
- 16,13,14,14,16,16,15,15,16,16,17,15,15,16,17,17,
- 11,13,12,15,14,13,14,13,16,15,12,14,12,16,15,15,
- 16,15,17,17,14,15,14,17,16,14,15,15,16,17,15,15,
- 16,16,17,15,16,16,17,17,16,16,17,17,18,17,17,17,
- 18,18,13,15,13,17,14,14,16,14,17,16,14,15,13,17,
- 15,16,17,16,18,17,15,17,15,18,16,11,12,12,15,15,
- 13,13,14,15,16,13,14,13,16,15,15,16,16,16,17,15,
- 16,16,17,16,12,14,13,16,15,13,13,14,15,16,14,15,
- 15,16,16,16,15,16,16,17,16,16,16,17,17,12,13,14,
- 15,16,14,14,15,15,17,13,14,13,16,15,16,16,17,17,
- 18,15,16,15,17,15,15,16,15,17,17,15,15,16,16,17,
- 16,17,16,17,17,16,15,17,15,18,17,18,17,18,18,15,
- 15,16,16,17,16,16,17,16,18,15,15,15,16,16,17,17,
- 18,17,18,16,16,15,17,15,12,13,13,15,15,13,14,14,
- 16,16,13,14,14,16,16,15,16,16,17,18,15,16,15,18,
- 16,13,14,14,16,16,14,14,15,16,17,14,15,15,17,17,
- 16,16,17,17,18,16,16,17,18,17,13,14,13,16,14,14,
- 15,15,17,16,14,15,14,17,15,16,17,17,18,17,15,17,
- 15,18,16,15,16,16,17,17,16,16,17,17,18,16,17,17,
- 18,18,17,16,18,17,19,18,18,18,18,18,15,16,15,17,
- 14,16,16,16,18,15,16,17,15,18,14,18,18,18,18,17,
- 17,18,16,19,15,
-};
-
-static const static_codebook _44p5_p2_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p5_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p5_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44p5_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p5_p3_0[] = {
- 1, 5, 6, 5, 7, 8, 5, 8, 7, 5, 7, 8, 7, 8,10, 8,
- 10,10, 5, 8, 7, 8,10,10, 7,10, 8, 6, 8, 9, 8,10,
- 11, 9,10,10, 9,10,11,10,11,12,11,12,12, 9,11,10,
- 11,12,12,10,12,11, 6, 9, 8, 9,10,10, 8,11,10, 9,
- 10,11,10,11,12,11,12,12, 9,11,10,11,12,12,10,12,
- 11, 6, 9, 9, 8,10,11, 9,11,10, 8,10,10,10,10,12,
- 11,12,12, 9,11,10,11,12,12,10,12,11, 8,10,10,10,
- 11,12,10,12,11,10,10,12,11,11,13,12,13,13,10,12,
- 11,12,13,13,11,13,11, 7,10,10,10,11,12,10,12,11,
- 10,12,11,11,11,12,12,14,13,10,12,12,12,14,14,11,
- 13,11, 6, 9, 9, 9,10,11, 8,11,10, 9,10,11,10,11,
- 12,11,12,12, 8,11,10,11,12,12,10,12,10, 7,10,10,
- 10,11,12,10,12,11,10,12,12,11,11,13,12,13,13,10,
- 11,12,12,13,14,11,12,11, 8,10,10,10,11,12,10,12,
- 11,10,11,12,11,11,13,12,13,13,10,12,10,12,13,13,
- 11,13,11,
-};
-
-static const static_codebook _44p5_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p5_p3_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44p5_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44p5_p3_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p5_p3_1[] = {
- 5, 6, 6, 6, 7, 7, 6, 7, 7, 6, 7, 7, 7, 7, 8, 7,
- 8, 8, 6, 7, 7, 7, 8, 8, 7, 8, 7, 7, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8,
- 8, 9, 9, 8, 9, 9, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9,
- 8, 6, 8, 8, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 9,
- 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8, 8,
- 9, 9, 8, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 7, 8, 8, 8, 8, 9, 8, 9, 8,
- 8, 8, 8, 8, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9, 8,
- 9, 9, 6, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
- 9, 8, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8,
- 8, 8, 9, 8, 9, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 8,
- 8, 8, 9, 9, 9, 8, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9,
- 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p5_p3_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p5_p3_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p5_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44p5_p4_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p5_p4_0[] = {
- 1, 5, 5, 5, 7, 9, 5, 9, 7, 5, 7, 8, 7, 7,10, 9,
- 10,10, 5, 8, 7, 9,10,10, 7,10, 7, 6, 8, 9, 9,10,
- 12, 9,11,11, 9,10,11,11,11,13,12,13,13, 9,11,11,
- 11,12,13,11,13,11, 6, 9, 8, 9,11,11, 9,12,10, 9,
- 11,11,11,11,13,11,13,12, 9,11,10,12,13,13,11,13,
- 11, 6, 9, 9, 8,10,11, 9,12,11, 9,10,11,10,10,12,
- 11,13,13, 9,11,11,11,13,12,11,13,11, 8,10,10, 9,
- 10,12,10,12,11,10,10,12,10,10,13,12,13,13,10,12,
- 11,12,13,13,10,13,10, 7,10,10,11,11,13,11,14,11,
- 10,12,11,11,11,13,13,14,13,10,12,12,14,14,14,11,
- 14,11, 6, 9, 9, 9,11,12, 8,11,10, 9,11,11,11,11,
- 13,11,12,13, 8,11,10,11,13,13,10,12,10, 7,10,10,
- 11,11,14,11,13,11,10,12,12,11,11,14,14,14,14,10,
- 11,12,13,13,14,11,13,11, 8,10,10,10,11,12, 9,12,
- 10,10,11,12,11,10,13,12,13,13,10,12,10,12,13,13,
- 11,13,10,
-};
-
-static const static_codebook _44p5_p4_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p5_p4_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44p5_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44p5_p4_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p5_p4_1[] = {
- 5, 7, 7,10,10, 7, 8, 9,10,11, 7, 9, 8,11,10, 9,
- 10,10,11,11, 9,10,10,11,11, 7, 9, 9,10,10, 8, 9,
- 10,10,11, 9,10,10,11,11,10,10,11,11,11,10,11,11,
- 12,12, 7, 9, 9,10,10, 9,10,10,11,11, 8,10, 9,11,
- 10,10,11,11,11,11,10,11,10,11,11,10,10,10,11,11,
- 10,10,11,11,11,11,11,11,11,11,11,11,12,11,12,11,
- 12,11,12,12,10,10,10,11,11,10,11,11,11,11,10,11,
- 10,11,11,11,12,11,12,12,11,12,11,12,11, 8, 9, 9,
- 11,11, 9,10,10,11,12, 9,10,10,11,11,10,11,11,12,
- 12,10,11,11,12,12, 9,10,10,11,11,10,10,11,11,12,
- 10,11,11,12,12,11,11,12,12,12,11,12,12,12,12, 9,
- 10,10,11,11,10,11,11,12,12,10,11,10,12,12,11,12,
- 12,12,12,11,12,12,12,12,11,11,11,12,12,11,11,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12, 8, 9, 9,11,11, 9,
- 10,10,11,11, 9,10,10,11,11,10,11,11,12,12,10,11,
- 11,12,12, 9,10,10,11,11,10,10,11,12,12,10,11,11,
- 12,12,11,12,12,12,12,11,12,12,12,12, 9,10,10,11,
- 11,10,11,11,12,12,10,11,10,12,11,11,12,12,12,12,
- 11,12,11,12,12,11,11,11,12,12,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,
- 11,12,12,11,12,12,12,12,11,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,10,11,11,12,12,11,12,12,12,
- 12,11,12,12,12,12,12,12,13,13,13,12,12,12,13,13,
- 11,12,12,12,12,12,12,12,12,13,12,12,12,13,13,12,
- 12,13,13,13,12,13,13,13,13,11,12,12,12,12,12,12,
- 12,13,13,12,12,12,13,13,12,13,13,13,13,12,13,13,
- 13,13,12,12,12,12,13,12,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,12,12,12,13,12,
- 13,13,13,13,13,12,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,10,11,11,12,12,11,12,12,12,12,11,12,
- 11,12,12,12,12,12,13,12,12,12,12,13,13,11,12,12,
- 12,12,12,12,12,13,13,12,12,12,13,13,12,13,13,13,
- 13,12,13,13,13,13,11,12,12,12,12,12,12,12,13,13,
- 12,12,12,13,12,12,13,13,13,13,12,13,12,13,13,12,
- 12,12,12,13,12,13,13,13,13,12,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,12,12,12,13,12,13,13,13,
- 13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13, 8, 9, 9,11,11, 9,10,10,11,11, 9,10,10,12,11,
- 10,11,11,12,12,10,11,11,12,12, 9,10,10,11,11,10,
- 10,11,11,12,10,11,11,12,12,11,11,12,12,12,11,12,
- 12,12,12, 9,10,10,11,11,10,11,11,12,12,10,11,10,
- 12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,12,
- 12,11,11,12,12,12,11,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12, 9,10,
- 10,11,11,10,10,11,12,12,10,11,11,12,12,11,11,12,
- 12,12,11,12,12,12,12,10,10,11,11,12,11,11,12,12,
- 12,11,11,12,12,12,11,11,12,12,13,12,12,12,12,12,
- 10,11,11,12,12,11,12,11,12,12,11,12,11,12,12,12,
- 12,12,12,12,12,12,12,12,12,11,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,13,12,12,13,12,13,12,12,13,
- 13,13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,13,12,12,12,12,13,12, 8,10,10,11,11,
- 10,11,11,12,12,10,11,10,12,12,11,12,12,12,12,11,
- 12,12,12,12,10,11,10,12,12,10,10,11,12,12,11,12,
- 12,12,12,12,12,12,12,13,12,12,12,13,13,10,11,11,
- 12,12,11,12,12,12,12,10,12,11,12,12,12,12,12,13,
- 13,12,13,12,13,12,11,12,12,12,12,11,12,12,12,13,
- 12,12,12,13,13,12,12,13,12,13,12,13,13,13,13,11,
- 12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,13,
- 13,13,13,12,13,12,13,12,11,11,11,12,12,11,12,12,
- 12,13,11,12,12,12,12,12,12,12,13,13,12,12,13,13,
- 13,11,12,12,12,12,12,12,12,12,13,12,12,13,13,13,
- 12,12,13,13,13,13,13,13,13,13,11,12,12,12,12,12,
- 13,12,13,13,12,12,12,13,13,12,13,13,13,13,12,13,
- 13,13,13,12,12,12,12,13,12,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,10,11,11,12,12,11,12,12,12,13,11,
- 12,12,13,12,12,13,13,13,13,12,13,13,13,13,11,12,
- 12,12,12,12,12,12,13,13,12,13,12,13,13,13,13,13,
- 13,13,13,13,13,13,13,11,12,12,13,12,12,13,12,13,
- 13,12,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
- 12,13,13,13,13,12,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,12,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13, 8, 9, 9,11,11, 9,10,10,11,12, 9,10,10,11,
- 11,10,11,11,12,12,10,11,11,12,12, 9,10,10,11,11,
- 10,10,11,12,12,10,11,11,12,12,11,11,12,12,12,11,
- 12,12,12,12, 9,10,10,11,11,10,11,11,12,12,10,11,
- 10,12,12,11,12,12,12,12,11,12,11,12,12,11,11,11,
- 12,12,11,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,
- 11,12,11,12,12,12,12,12,12,12,12,12,12,12,12, 8,
- 10,10,11,11,10,10,11,12,12,10,11,11,12,12,11,12,
- 12,12,12,11,12,12,12,12,10,11,11,12,12,10,11,12,
- 12,12,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
- 13,10,10,11,12,12,11,12,12,12,12,10,11,10,12,12,
- 12,12,12,13,13,12,12,12,13,12,11,12,12,12,12,11,
- 12,12,12,13,12,12,12,13,13,12,12,13,12,13,12,13,
- 13,13,13,11,12,12,12,12,12,12,12,13,13,11,12,12,
- 13,12,12,13,13,13,13,12,13,12,13,12, 9,10,10,11,
- 11,10,11,11,12,12,10,11,11,12,12,11,12,12,12,12,
- 11,12,11,12,12,10,11,11,12,12,11,11,12,12,12,11,
- 11,12,12,12,12,12,12,12,13,12,12,12,13,12,10,11,
- 10,12,11,11,12,11,12,12,11,12,11,12,12,12,12,12,
- 12,12,12,12,11,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,13,12,13,12,13,13,13,13,
- 11,12,11,12,12,12,12,12,13,12,12,12,12,12,12,12,
- 13,12,13,13,12,12,12,13,12,10,11,11,12,12,11,12,
- 12,12,13,11,12,12,13,12,12,12,13,13,13,12,13,13,
- 13,13,11,12,12,12,13,12,12,13,13,13,12,12,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,11,12,12,12,12,
- 12,12,13,13,13,12,13,12,13,13,13,13,13,13,13,13,
- 13,13,13,13,12,13,13,13,13,12,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,13,
- 13,13,13,13,13,13,13,12,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,11,11,11,12,12,11,12,12,12,12,
- 11,12,12,12,12,12,12,13,13,13,12,13,12,13,13,11,
- 12,12,12,12,12,12,13,13,13,12,12,13,13,13,12,13,
- 13,13,13,12,13,13,13,13,11,12,12,12,12,12,13,12,
- 13,13,12,12,12,13,12,13,13,13,13,13,12,13,12,13,
- 13,12,12,12,13,13,12,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,12,12,12,13,12,13,
- 13,13,13,13,12,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,10,11,11,12,12,11,12,12,12,12,11,12,12,
- 12,12,12,12,12,13,13,12,12,12,13,13,11,12,12,12,
- 12,11,12,12,13,13,12,12,12,13,13,12,12,13,13,13,
- 12,13,13,13,13,11,12,12,12,12,12,12,12,13,13,12,
- 12,12,13,12,12,13,13,13,13,12,13,12,13,13,12,12,
- 12,12,12,12,12,13,13,13,12,13,13,13,13,12,13,13,
- 13,13,13,13,13,13,13,12,12,12,13,12,12,13,13,13,
- 13,12,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
- 10,11,11,12,12,11,12,12,12,13,11,12,12,13,12,12,
- 12,12,13,13,12,12,12,13,13,11,12,12,12,12,12,12,
- 13,13,13,12,12,12,13,13,12,12,13,13,13,12,13,13,
- 13,13,11,12,12,12,12,12,12,12,13,13,12,12,12,13,
- 13,12,13,13,13,13,12,13,13,13,13,12,12,12,12,13,
- 12,12,13,13,13,12,13,13,13,13,12,13,13,13,13,13,
- 13,13,13,13,12,12,12,13,13,13,13,13,13,13,12,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,10,11,11,
- 12,12,11,12,12,12,13,11,12,12,13,12,12,13,13,13,
- 13,12,13,12,13,13,11,12,12,13,13,12,12,12,13,13,
- 12,12,13,13,13,12,13,13,13,13,13,13,13,13,13,11,
- 12,12,13,12,12,13,12,13,13,12,13,12,13,13,13,13,
- 13,13,13,12,13,13,13,13,12,12,12,13,13,12,13,13,
- 13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,12,12,12,13,13,12,13,13,13,13,12,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,11,11,11,12,12,11,
- 12,12,12,12,11,12,12,12,12,12,12,12,13,13,12,12,
- 12,13,13,11,12,12,12,12,12,12,12,12,13,12,12,12,
- 13,13,12,12,13,13,13,12,13,13,13,13,11,12,12,12,
- 12,12,12,12,13,13,12,12,12,13,12,12,13,13,13,13,
- 12,13,12,13,13,12,12,12,12,12,12,12,13,12,13,12,
- 13,13,13,13,12,13,13,12,13,13,13,13,13,13,12,12,
- 12,12,12,12,13,13,13,13,12,13,12,13,13,13,13,13,
- 13,13,12,13,13,13,12,10,11,11,12,12,11,12,12,12,
- 12,11,12,12,12,12,12,12,12,13,13,12,13,12,13,13,
- 11,12,12,12,12,12,12,12,13,13,12,12,12,13,13,12,
- 12,13,13,13,13,13,13,13,13,11,12,12,12,12,12,13,
- 12,13,13,12,13,12,13,13,12,13,13,13,13,12,13,12,
- 13,13,12,12,12,12,12,12,13,13,13,13,12,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,12,12,12,13,12,
- 12,13,13,13,13,12,13,12,13,13,13,13,13,13,13,13,
- 13,13,13,13,10,11,11,12,12,11,12,12,12,12,11,12,
- 12,12,12,12,12,12,13,13,12,12,12,13,13,11,12,12,
- 12,12,12,12,12,13,13,12,12,12,13,13,12,12,13,13,
- 13,12,12,13,13,13,11,12,11,12,12,12,12,12,13,13,
- 11,12,12,13,13,12,13,13,13,13,12,13,12,13,13,12,
- 12,12,12,12,12,13,13,13,13,12,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,12,12,12,13,12,12,13,13,
- 13,13,12,13,12,13,13,13,13,13,13,13,12,13,13,13,
- 13,10,11,11,12,12,11,12,12,12,13,11,12,12,13,12,
- 12,12,13,13,13,12,13,13,13,13,11,12,12,13,13,12,
- 12,13,13,13,12,12,13,13,13,12,13,13,13,13,13,13,
- 13,13,13,11,12,12,13,12,12,13,12,13,13,12,12,12,
- 13,13,12,13,13,13,13,13,13,13,13,13,12,12,13,13,
- 13,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,12,12,12,13,13,13,13,13,13,13,12,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,10,12,
- 11,12,12,11,12,12,12,13,11,12,12,12,12,12,12,12,
- 13,13,12,12,12,13,13,11,12,12,12,13,12,12,12,13,
- 13,12,12,12,13,13,12,13,13,13,13,12,13,13,13,13,
- 11,12,12,13,12,12,12,12,13,13,12,12,12,13,13,12,
- 13,13,13,13,12,13,12,13,13,12,13,12,13,13,12,13,
- 13,13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,12,12,12,13,12,13,13,13,13,13,12,13,12,13,
- 13,13,13,13,13,13,12,13,13,13,13,10,11,11,12,12,
- 11,12,12,12,13,11,12,12,12,12,12,12,12,13,13,12,
- 12,12,13,13,11,12,12,12,12,12,12,13,13,13,12,13,
- 13,13,13,12,12,13,13,13,13,13,13,13,13,11,12,12,
- 12,12,12,13,12,13,13,12,12,12,13,13,12,13,13,13,
- 13,12,13,12,13,13,12,12,12,12,13,12,13,13,13,13,
- 12,13,13,13,13,12,13,13,13,13,13,13,13,13,13,12,
- 12,12,12,12,12,13,13,13,13,12,13,13,13,13,13,13,
- 13,13,13,12,13,13,13,13,11,12,11,12,12,11,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
- 12,11,12,12,12,12,12,12,12,12,13,12,12,12,13,13,
- 12,12,13,13,13,12,13,13,13,13,11,12,12,12,12,12,
- 12,12,13,13,12,12,12,13,12,12,13,13,13,13,12,13,
- 12,13,13,12,12,12,12,12,12,12,13,13,13,12,13,13,
- 13,13,13,13,13,12,13,13,13,13,13,13,12,12,12,12,
- 12,12,13,13,13,13,12,13,12,13,12,13,13,13,13,13,
- 13,13,13,13,12,
-};
-
-static const static_codebook _44p5_p4_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p5_p4_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p5_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44p5_p5_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p5_p5_0[] = {
- 1, 6, 6,10,10, 6, 7, 9,11,13, 5, 9, 7,13,11, 8,
- 11,12,13,15, 8,12,11,15,13, 6, 7, 8,11,11, 7, 8,
- 10,11,13, 9,10,10,13,13,11,11,13,12,16,12,13,13,
- 16,15, 6, 8, 7,11,11, 9,10,10,13,13, 7,10, 7,13,
- 11,12,13,13,15,16,11,13,11,16,12,10,11,11,11,13,
- 11,11,13,12,15,13,13,13,14,15,13,12,15,12,17,15,
- 16,16,16,16,10,11,11,14,11,13,13,13,15,14,11,13,
- 11,15,12,15,15,16,16,16,13,15,12,17,12, 6, 8, 9,
- 12,12, 9,10,12,13,15, 9,11,11,15,14,12,13,15,16,
- 18,13,14,14,17,16, 9,10,11,13,14,11,10,13,14,16,
- 11,12,12,15,15,14,13,16,15,18,14,15,15,17,17, 9,
- 11,11,14,14,11,12,13,15,16,11,13,11,15,14,15,15,
- 15,17,18,14,15,14,17,15,13,14,14,15,16,14,14,15,
- 15,17,15,16,15,17,17,16,16,17,15,19,17,18,18,19,
- 18,13,14,14,16,15,15,15,16,17,17,14,15,14,18,15,
- 17,17,17,19,19,16,17,15,19,16, 6, 9, 8,13,12, 9,
- 11,11,14,15, 9,12,10,15,13,13,14,14,16,17,12,15,
- 13,18,16, 9,11,11,14,14,11,11,13,14,15,11,13,12,
- 16,15,14,14,15,15,18,14,15,15,18,17, 9,11,10,14,
- 13,11,12,12,15,15,11,13,10,16,14,14,15,15,16,18,
- 14,16,13,18,15,13,14,14,16,16,14,14,15,15,17,15,
- 16,15,17,17,16,16,17,16,19,17,18,17,18,19,13,14,
- 14,16,15,15,15,15,17,17,14,15,14,17,15,17,17,17,
- 18,19,16,17,15,19,15,11,13,13,15,16,13,14,15,16,
- 18,14,15,15,17,17,16,16,18,18,20,17,18,17,19,20,
- 13,14,14,16,17,15,15,16,17,18,15,16,16,17,17,18,
- 17,19,18,19,18,18,18,19,21,14,14,15,16,17,15,15,
- 16,18,18,15,16,16,17,18,18,18,19,19,21,18,19,19,
- 22,20,16,16,17,17,19,17,17,17,18,20,17,18,18,20,
- 19,19,19,20,19, 0,19,19,20,20,21,17,17,17,19,18,
- 18,18,20,19,19,18,18,18,20,20,19,19,20,20,20,20,
- 21,20,21,19,11,13,13,16,15,14,15,15,17,17,14,15,
- 14,18,16,16,18,18,20,19,16,19,17,21,18,13,14,15,
- 16,17,15,15,16,18,18,15,16,15,19,18,18,18,18,19,
- 19,18,18,18,22,20,13,14,14,16,16,15,16,16,18,17,
- 15,16,15,18,17,18,18,18,19,19,17,18,17,21,18,16,
- 17,17,18,18,17,18,19,19,19,18,20,18,19,19,19,20,
- 21,19,21,20,20,20, 0,21,16,17,17,19,19,18,18,18,
- 19,21,17,18,18,19,18,20,19,21,20,21,19,20,20,22,
- 19, 7, 9, 9,13,13, 8,10,11,14,15, 9,12,11,15,14,
- 11,13,14,16,17,13,15,14,17,16, 8,10,11,14,14,10,
- 10,12,14,16,11,12,12,16,15,13,12,15,15,18,14,15,
- 15,19,17, 9,11,11,14,14,11,12,12,15,15,11,13,11,
- 16,14,14,15,14,17,17,14,16,14,18,15,12,13,14,15,
- 16,13,13,15,14,17,15,15,15,17,17,15,14,17,14,19,
- 17,18,18,19,18,13,14,14,16,16,15,15,15,17,17,14,
- 15,14,18,15,17,18,17,18,17,16,18,16,19,15, 7,10,
- 10,13,13, 9,10,12,14,15,10,12,11,15,14,12,13,14,
- 16,17,13,15,14,18,16,10,10,12,13,14,10,10,13,13,
- 16,12,12,13,15,15,13,12,15,15,18,15,15,16,18,17,
- 10,11,11,14,14,12,13,13,15,16,10,13,10,16,14,14,
- 15,15,17,17,14,15,13,17,15,13,13,14,15,16,14,13,
- 15,14,18,15,15,16,16,17,16,15,18,15,18,17,18,18,
- 18,18,13,15,14,17,16,15,16,16,17,17,14,15,13,17,
- 15,17,17,18,18,18,16,17,14,20,14, 8,10,10,14,14,
- 11,11,13,14,16,11,13,11,16,14,14,15,16,16,18,14,
- 16,15,18,16,10,12,11,15,14,11,11,13,14,16,13,14,
- 13,16,15,15,14,16,15,19,16,17,16,20,18,10,11,12,
- 14,15,13,13,14,16,16,11,14,11,16,14,16,16,17,18,
- 19,15,17,14,20,15,14,15,14,17,16,13,14,15,15,18,
- 16,17,16,19,18,16,15,18,15,19,18,19,18,21,21,14,
- 14,15,16,17,16,16,17,18,18,13,15,14,17,15,18,18,
- 19,18,22,16,18,15,21,15,12,13,14,16,16,14,14,16,
- 16,18,14,15,15,17,18,16,16,18,18,20,18,18,17,20,
- 20,13,14,15,15,17,15,14,16,16,18,16,16,16,17,19,
- 17,15,18,17,21,18,18,18,19,19,14,15,15,18,17,15,
- 16,16,18,19,15,16,15,18,18,17,18,18,20,21,17,19,
- 17,20,19,16,16,17,16,19,17,17,18,17,20,18,18,18,
- 18,19,19,18,20,17,22,20,20,19,20,20,17,17,18,18,
- 19,18,18,20,21,20,17,18,17,20,20,21,21,21,21,21,
- 19,21,18,22,20,11,13,13,17,16,14,14,16,16,18,14,
- 16,14,18,16,17,18,19,19,20,18,19,18,21,19,14,15,
- 14,17,16,14,14,16,18,18,16,17,16,18,17,18,17,19,
- 18,20,19,19,18,20,20,13,14,15,16,17,16,16,17,18,
- 19,14,16,14,19,17,18,19,18,20,20,18,20,17,21,18,
- 17,17,17,19,18,16,17,18,18,19,18,19,18,21,21,18,
- 18,20,17,21,19,20,20,22,21,16,17,18,18,19,18,18,
- 19,21,20,16,17,17,20,18,21,21,22,21,22,18,21,18,
- 0,18, 7, 9, 9,13,13, 9,11,12,14,15, 8,11,10,15,
- 14,13,14,15,16,18,11,14,13,17,15, 9,11,11,14,14,
- 11,11,13,14,16,11,12,12,15,15,14,14,16,15,18,14,
- 14,15,17,17, 8,11,10,14,14,11,12,12,15,15,10,12,
- 10,16,14,14,15,15,17,18,13,15,12,18,15,13,14,14,
- 16,16,14,14,15,15,17,15,15,15,16,17,16,15,17,15,
- 19,17,17,17,18,18,12,14,13,16,15,15,15,15,17,17,
- 13,15,13,17,14,17,18,18,18,19,15,17,14,19,14, 8,
- 10,10,14,14,11,11,13,14,16,11,13,11,16,14,14,15,
- 16,17,19,14,16,15,18,17,10,12,11,15,14,11,11,14,
- 14,17,13,14,13,17,15,15,14,17,15,19,16,17,16,19,
- 17,10,11,12,14,15,13,13,14,15,17,11,13,11,17,14,
- 16,16,17,18,19,15,16,14,18,15,14,15,14,16,16,13,
- 14,15,15,18,16,16,16,18,18,16,15,18,15,20,18,19,
- 18,21,18,14,14,15,16,17,16,16,17,17,18,13,15,14,
- 17,16,19,19,19,19,19,15,18,15,20,15, 7,10,10,13,
- 13,10,11,12,14,15, 9,12,10,15,14,13,14,15,16,17,
- 12,15,13,17,16,10,11,11,14,14,10,10,13,14,16,12,
- 13,13,16,15,14,13,16,15,18,15,15,16,17,17,10,12,
- 10,14,13,12,13,12,15,15,10,13,10,16,13,15,16,15,
- 17,18,13,16,12,18,15,13,14,14,16,17,14,13,15,15,
- 18,15,16,15,17,17,16,14,17,15,19,17,18,18,19,19,
- 13,15,13,17,14,15,15,15,18,17,14,15,13,17,14,18,
- 17,18,18,19,15,17,15,19,15,11,13,13,16,17,14,14,
- 16,16,18,14,16,15,18,17,17,18,19,18,21,18,18,17,
- 20,18,13,15,14,17,16,14,14,16,17,18,16,17,16,19,
- 17,18,17,19,18,22,18,19,19,21,21,13,14,15,16,18,
- 16,16,17,17,20,14,16,14,18,17,18,18,19,19,21,17,
- 18,17,21,18,17,18,17,19,18,16,17,17,18,19,18,18,
- 18,22,22,18,17,19,17, 0,20,21,19,21,20,17,17,18,
- 18,21,18,18,18,19,21,17,17,17,19,19,20,20,22,21,
- 21,19,20,18,20,17,12,14,13,17,16,14,15,15,17,18,
- 14,16,14,18,16,17,18,18,21,20,16,18,16,21,18,14,
- 15,15,17,17,15,15,16,18,18,15,17,16,18,18,17,17,
- 19,19,20,18,19,18,20,19,14,15,14,17,15,15,16,16,
- 18,17,15,16,14,19,15,18,18,18,19,20,17,20,15,21,
- 17,16,17,18,18,19,17,17,18,18,20,18,19,18,19,21,
- 19,18,19,19,21,20, 0,19,21,20,16,17,16,19,16,18,
- 18,18,19,19,17,18,17,20,17,19,20,20,22, 0,19,20,
- 17,21,17,11,13,14,16,17,14,15,15,17,18,14,15,15,
- 18,18,16,17,17,19,20,16,18,17,19,21,13,14,15,17,
- 17,14,15,16,17,19,15,16,16,18,19,16,17,18,19,21,
- 17,18,20,21,21,13,15,15,17,17,15,16,16,18,19,15,
- 16,16,18,19,17,17,18,19,22,17,19,18,22,19,15,16,
- 17,19,19,16,17,18,18,20,17,18,18,19,20,19,18,20,
- 18,22,20,19,19,22,21,16,17,17,18,19,18,18,18,19,
- 20,17,18,18,20,19,20,19,20,22,20,19,20,21,21,20,
- 12,14,14,16,16,13,14,16,17,18,14,16,15,18,18,15,
- 17,17,19,19,17,18,18,19,19,13,14,15,16,17,14,14,
- 16,16,20,15,16,16,17,19,16,15,18,17,20,18,17,19,
- 19,19,14,15,15,17,17,16,16,16,18,18,15,16,15,19,
- 18,17,18,18,20,21,17,18,17,21,18,16,15,17,17,19,
- 17,15,18,17,20,19,17,18,19,20,18,16,19,17,22,20,
- 19,20,19,20,17,17,18,19,19,18,18,19,20,20,17,18,
- 17,18,18,21,21,20,20,21,18,20,17,21,19,11,14,14,
- 16,17,15,14,16,17,19,14,16,14,18,17,18,18,19,19,
- 21,17,19,18,20,20,13,15,14,17,17,14,14,16,17,18,
- 16,17,16,19,18,18,17,19,18,20,18,21,18,20,20,13,
- 15,15,16,17,16,16,17,18,19,14,16,15,19,18,19,19,
- 19,21,20,18,19,17,20,18,16,17,16,19,18,16,17,17,
- 19,20,17,19,18,20,19,18,17,21,18, 0,21,20,20, 0,
- 20,17,17,18,18,19,18,19,19,20,22,16,17,17,20,18,
- 21,22,20,20,22,18,22,18,22,18,12,14,14,17,17,14,
- 15,16,17,19,14,16,15,17,17,17,17,18,18,21,17,19,
- 17,20,19,14,15,15,16,18,15,14,16,16,19,16,17,16,
- 19,18,17,16,20,17,20,18,20,19,19,20,14,15,15,18,
- 17,16,16,17,18,19,14,16,15,19,17,18,21,18,19,21,
- 17,18,17,19,18,17,17,18,17,20,17,16,18,17,21,18,
- 19,19,19,19,18,17,19,17,20,20,21,20,21,20,17,17,
- 17,19,19,19,18,18,20,21,16,18,16,19,18,20,20,21,
- 21,20,18,19,16, 0,17,12,14,14,17,17,15,15,18,17,
- 19,15,18,15,20,16,20,19,21,18,22,20,20,20,22,19,
- 14,16,14,20,17,14,15,17,17,20,18,18,17,20,18,18,
- 17,19,17,21,20,21,20, 0,21,14,15,16,17,19,18,17,
- 19,18,21,14,18,15,21,17,21,20,21,20, 0,18,21,17,
- 21,17,18,19,17,20,18,16,17,17,19,19,19,21,20, 0,
- 20,18,17,21,17, 0,22, 0,21, 0,22,17,17,19,18,20,
- 20,20,21,19,22,16,17,18,20,18,22,22, 0,22, 0,17,
- 21,17,22,17,11,14,13,16,16,14,15,15,17,18,14,15,
- 14,18,17,17,18,18,19,20,16,17,17,21,19,13,14,15,
- 17,17,15,16,16,18,18,15,16,16,19,18,18,18,18,19,
- 20,17,18,18,20,19,13,15,14,17,17,15,16,16,17,18,
- 14,16,15,19,17,17,18,19,21,21,17,18,17,20,18,16,
- 17,17,19,19,17,18,19,19,20,18,19,18,21,21,21,20,
- 19,21,22,20,20,19,21,20,15,17,16,19,19,17,18,18,
- 20,21,16,18,17,20,18,19,19,21,21,21,19,19,19,20,
- 18,11,14,13,17,16,14,14,16,16,19,14,16,15,19,16,
- 18,18,18,19,22,17,18,17,20,19,13,15,14,17,17,15,
- 15,16,17,19,16,17,16,20,18,18,17,19,18,21,19,19,
- 18,22, 0,13,14,15,17,18,16,16,17,17,19,14,16,15,
- 19,18,18,19,19,20,21,18,18,17,20,18,17,18,17,20,
- 18,16,17,17,18,20,18,19,18,20,20,18,18,21,17,21,
- 20,21,21, 0,19,16,16,18,18,19,19,18,20,19,20,16,
- 17,17,20,18,21,20,21,22,22,18,20,17,21,17,12,14,
- 14,17,16,14,15,16,18,18,13,15,14,18,17,17,18,18,
- 19,19,15,17,16,19,19,14,15,15,17,17,15,15,16,18,
- 19,15,16,16,19,18,17,17,18,18,20,18,18,18,21,20,
- 13,15,14,17,16,15,16,15,18,18,14,16,14,18,17,18,
- 18,18,19,21,16,18,16,20,17,17,18,17,18,19,17,17,
- 18,18,19,18,19,19,21,19,19,18,20,18,21,21,20,20,
- 21,20,16,17,15,20,17,17,19,17,19,19,17,18,15,20,
- 17,19,20,19,21,22,17,20,16, 0,17,12,14,14,17,18,
- 16,15,18,16,20,16,18,15,21,17,20,18,21,19,22,19,
- 21,19, 0,19,14,16,15,19,17,14,15,17,16,21,18,19,
- 18,21,17,19,17,21,17,22,20,21,21, 0,21,14,15,16,
- 17,19,18,17,19,18,21,14,17,15,20,17,21,22,21,20,
- 22,18,21,17,21,17,17,19,17,21,18,16,17,17,19,20,
- 19,21,20,21,20,17,18,20,17,21, 0,22,20,21,22,17,
- 17,20,18,21,21,20,22,20,21,16,17,17,21,19, 0,22,
- 0,21,21,18,22,17,21,17,12,14,14,17,16,14,15,16,
- 17,18,14,16,15,18,17,17,17,20,19,20,16,18,17,21,
- 18,14,15,15,17,17,14,15,16,17,19,16,17,16,18,18,
- 17,16,19,18,19,18,19,18,21,20,14,15,15,18,17,16,
- 16,16,19,18,15,16,14,20,16,18,18,19,19,20,16,19,
- 16,21,17,17,17,18,19,19,16,16,18,18,19,19,19,18,
- 20,20,18,16,19,18,20,22,21,20,19,20,16,18,17,20,
- 16,18,19,18,19,18,16,18,16,20,17,21,20,21,20,20,
- 18,19,17,21,16,
-};
-
-static const static_codebook _44p5_p5_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p5_p5_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44p5_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44p5_p5_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44p5_p5_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p5_p5_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44p5_p5_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p5_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44p5_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p5_p6_0[] = {
- 1, 5, 5, 5, 7, 9, 5, 9, 7, 5, 7, 8, 7, 7,10, 9,
- 9,10, 5, 8, 7, 9,10, 9, 7,10, 7, 6, 9, 9, 9,10,
- 12,10,12,11, 9,10,11,11,10,13,12,12,13,10,11,11,
- 12,13,13,11,13,11, 6, 9, 9,10,11,12, 9,12,11,10,
- 11,11,11,11,13,12,13,13, 9,11,10,12,13,13,11,13,
- 10, 6, 9,10, 9,11,12,10,12,11, 9,10,11,10,10,13,
- 11,13,13,10,11,11,12,13,12,11,13,11, 7, 9,10, 9,
- 10,12,10,11,11,10,10,11,10,10,12,12,11,12,10,11,
- 10,12,12,12,10,12,10, 7,10,10,11,11,13,11,13,11,
- 10,12,11,11,10,13,13,14,13,10,11,12,13,13,14,11,
- 13,10, 6,10, 9,10,11,12, 9,12,11, 9,11,11,11,11,
- 13,12,12,13, 9,11,10,12,13,13,10,13,10, 7,10,10,
- 11,11,14,11,13,11,10,12,11,11,10,14,13,14,13,10,
- 11,12,13,13,14,11,13,10, 7,10, 9,10,10,12, 9,12,
- 10,10,11,11,10,10,12,12,12,12, 9,11,10,11,12,12,
- 10,12, 9,
-};
-
-static const static_codebook _44p5_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p5_p6_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44p5_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44p5_p6_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p5_p6_1[] = {
- 2, 6, 6, 5, 7, 8, 5, 8, 7, 6, 7, 7, 7, 7, 8, 8,
- 8, 8, 6, 7, 7, 7, 8, 8, 7, 8, 7, 6, 8, 8, 8, 9,
- 10, 8, 9, 9, 8, 9, 9, 9, 9,10,10,10,10, 8, 9, 9,
- 10,10,10, 9,10,10, 6, 8, 8, 8, 9, 9, 8,10, 9, 9,
- 9, 9, 9, 9,10,10,10,10, 8, 9, 9,10,10,10, 9,10,
- 9, 6, 8, 9, 8, 9, 9, 8, 9, 9, 8, 9, 9, 9, 9,10,
- 9,10,10, 8, 9, 9, 9,10,10, 9,10, 9, 7, 8, 9, 8,
- 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 7, 9, 9, 9,10,10, 9,10,10,
- 9,10, 9, 9, 9,10,10,10,10, 9,10, 9,10,10,10, 9,
- 10, 9, 6, 8, 8, 8, 9, 9, 8, 9, 9, 8, 9, 9, 9, 9,
- 10, 9,10,10, 8, 9, 9, 9,10,10, 9,10, 9, 7, 9, 9,
- 9,10,10, 9,10, 9, 9, 9,10,10, 9,10,10,10,10, 9,
- 9, 9,10,10,10, 9,10, 9, 7, 9, 8, 8, 9, 9, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p5_p6_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p5_p6_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44p5_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44p5_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p5_p7_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p5_p7_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p5_p7_0,
- 1, -513979392, 1633504256, 2, 0,
- (long *)_vq_quantlist__44p5_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44p5_p7_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p5_p7_1[] = {
- 1, 7, 7, 6, 9, 9, 7, 9, 9, 6, 9, 9, 9, 9, 9, 9,
- 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,
-};
-
-static const static_codebook _44p5_p7_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p5_p7_1,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p5_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44p5_p7_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p5_p7_2[] = {
- 1, 2, 3, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
- 11,12,12,13,13,14,14,14,14,
-};
-
-static const static_codebook _44p5_p7_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44p5_p7_2,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44p5_p7_2,
- 0
-};
-
-static const long _vq_quantlist__44p5_p7_3[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p5_p7_3[] = {
- 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p5_p7_3 = {
- 1, 25,
- (char *)_vq_lengthlist__44p5_p7_3,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44p5_p7_3,
- 0
-};
-
-static const char _huff_lengthlist__44p5_short[] = {
- 4, 7,12,14,15,18,20,20, 5, 3, 4, 6, 9,11,15,19,
- 9, 4, 3, 4, 7, 9,13,18,11, 6, 3, 3, 5, 8,13,19,
- 14, 9, 6, 5, 7,10,16,20,16,11, 9, 8,10,10,14,16,
- 21,14,13,11, 8, 7,11,14,21,14,13, 9, 6, 5,10,12,
-};
-
-static const static_codebook _huff_book__44p5_short = {
- 2, 64,
- (char *)_huff_lengthlist__44p5_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p6_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44p6_l0_0[] = {
- 1, 4, 4, 7, 7,10,10,12,12,12,12,13,12, 5, 5, 5,
- 8, 6,11, 9,12,12,13,12,12,12, 4, 5, 5, 6, 8, 9,
- 11,12,12,13,12,12,12, 7, 7, 8, 9, 9,11, 8,12, 9,
- 12,12,12,12, 7, 8, 8, 9, 9, 8,11, 9,12,12,12,11,
- 12,10,10,10,11,11,11,11,11,10,11,11,12,11,10,10,
- 10,11,11,11,11,10,11,11,11,11,12,11,11,11,12,11,
- 12,11,12,11,13,11,13,11,11,11,11,11,12,11,12,10,
- 13,11,12,11,13,12,12,12,13,12,13,13,13,12,14,12,
- 14,13,12,12,12,12,13,13,13,12,14,12,14,13,14,13,
- 14,14,14,14,14,14,14,14,15,14,15,14,13,14,13,14,
- 14,14,14,14,15,14,14,14,15,
-};
-
-static const static_codebook _44p6_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44p6_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44p6_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44p6_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p6_l0_1[] = {
- 4, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5,
- 5, 5, 4, 5, 5, 5, 5, 5, 4,
-};
-
-static const static_codebook _44p6_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44p6_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p6_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44p6_l1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p6_l1_0[] = {
- 1, 3, 2, 5, 5, 6, 6, 6, 6,
-};
-
-static const static_codebook _44p6_l1_0 = {
- 2, 9,
- (char *)_vq_lengthlist__44p6_l1_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p6_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44p6_lfe[] = {
- 2, 3, 1, 3,
-};
-
-static const static_codebook _huff_book__44p6_lfe = {
- 2, 4,
- (char *)_huff_lengthlist__44p6_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44p6_long[] = {
- 2, 7,13,15,16,17,19,20, 6, 3, 4, 7, 9,10,12,15,
- 13, 4, 3, 4, 7, 8,11,13,14, 7, 4, 4, 6, 7,10,11,
- 16, 9, 7, 6, 7, 8, 9,10,16, 9, 8, 7, 7, 6, 8, 8,
- 18,12,10,10, 9, 8, 8, 9,20,14,13,12,11, 8, 9, 9,
-};
-
-static const static_codebook _huff_book__44p6_long = {
- 2, 64,
- (char *)_huff_lengthlist__44p6_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p6_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p6_p1_0[] = {
- 2, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 8, 9, 7,
- 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 5, 7, 8, 8, 9,
- 10, 8, 9, 9, 8, 9,10, 9,10,12,10,11,11, 8, 9,10,
- 10,11,11, 9,11,11, 5, 8, 7, 8, 9, 9, 8,10, 9, 8,
- 10, 9, 9,11,11,10,11,11, 8,10, 9,10,11,11, 9,12,
- 10, 5, 8, 8, 7, 9,10, 8,10, 9, 7, 9, 9, 9,10,11,
- 9,11,11, 8,10,10,10,11,11,10,12,11, 7, 9, 9, 9,
- 10,11, 9,11,11, 9, 9,11,10,10,13,11,11,12, 9,11,
- 11,11,12,13,11,13,12, 7, 9, 9, 9,11,11, 9,12,10,
- 9,11,10,10,11,12,11,13,12, 9,11,11,11,13,13,11,
- 13,11, 5, 8, 8, 8, 9,10, 7,10, 9, 8,10,10,10,11,
- 11,10,11,11, 7, 9, 9, 9,11,11, 9,11,10, 7, 9, 9,
- 9,10,12, 9,11,11, 9,11,11,11,11,13,11,13,13, 9,
- 10,11,11,12,13,10,12,11, 7, 9, 9, 9,11,11, 9,11,
- 10, 9,11,11,11,12,13,11,13,12, 9,11, 9,11,12,11,
- 10,13,10,
-};
-
-static const static_codebook _44p6_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p6_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p6_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44p6_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p6_p2_0[] = {
- 4, 6, 6, 9, 9, 6, 7, 8,10,10, 6, 8, 7,10,10, 8,
- 10,10,12,13, 8,10,10,13,12, 6, 8, 8,10,10, 7, 8,
- 9,10,11, 8, 9, 9,11,11,10,10,11,12,13,10,11,11,
- 14,13, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 9, 8,11,
- 10,10,11,11,13,14,10,11,10,13,12, 9,10,10,12,12,
- 10,10,11,12,13,10,11,11,13,13,12,12,13,12,15,13,
- 14,13,15,14, 9,10,10,13,12,10,11,11,13,13,10,11,
- 10,13,12,13,13,14,14,15,12,13,12,15,12, 6, 8, 8,
- 10,11, 8, 9,10,11,12, 8, 9, 9,11,11,10,11,12,13,
- 14,10,11,11,14,13, 8, 9, 9,11,12, 9,10,11,12,13,
- 9,10,11,12,13,11,11,13,13,15,11,12,12,14,14, 8,
- 9, 9,12,12, 9,10,11,12,13, 9,10,10,13,12,11,12,
- 13,14,15,11,12,12,14,14,11,11,12,13,14,11,12,13,
- 13,15,12,13,13,14,15,13,13,14,14,16,14,15,15,16,
- 16,11,12,11,14,13,12,13,13,14,14,11,13,12,14,13,
- 14,15,15,16,16,13,14,14,16,14, 6, 8, 8,11,10, 8,
- 9, 9,12,11, 8,10, 9,12,11,10,11,11,13,13,10,12,
- 11,14,13, 8, 9, 9,12,12, 9,10,10,12,13, 9,11,10,
- 13,12,11,12,12,14,14,11,13,12,15,14, 8, 9, 9,12,
- 11, 9,10,10,13,12, 9,11,10,13,12,12,12,12,14,14,
- 11,13,12,15,13,11,11,12,13,14,11,12,13,13,14,12,
- 13,13,14,15,13,13,14,14,16,14,15,15,16,16,11,12,
- 11,14,13,12,13,13,15,14,11,13,12,15,13,14,15,15,
- 16,16,13,15,13,16,14, 9,10,11,12,13,11,11,12,13,
- 14,11,12,12,13,14,13,13,14,14,16,13,14,14,15,16,
- 11,11,12,13,14,12,12,13,14,15,12,13,13,14,15,14,
- 14,15,15,17,14,15,15,16,17,11,12,12,14,14,12,13,
- 13,14,15,12,13,12,15,15,14,15,15,16,17,14,15,15,
- 16,16,13,14,14,15,16,14,14,15,15,17,15,15,15,16,
- 17,16,16,17,16,18,16,17,17,18,18,13,14,14,16,15,
- 14,15,15,17,16,14,15,15,16,16,16,17,17,18,18,16,
- 16,16,17,16, 9,11,10,13,12,11,12,12,14,13,11,12,
- 11,15,13,13,14,14,16,15,13,14,13,17,14,11,12,12,
- 14,14,12,12,13,15,15,12,13,13,15,14,14,14,15,16,
- 16,14,15,15,17,16,11,12,11,14,13,12,13,13,15,14,
- 12,13,12,15,13,14,15,15,16,16,14,15,14,17,15,13,
- 14,14,15,16,14,15,15,16,17,14,15,15,16,17,16,16,
- 16,17,17,16,17,17,18,18,13,15,14,16,15,15,15,15,
- 17,16,14,15,14,17,15,16,17,17,18,18,16,17,16,18,
- 16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,11,
- 10,11,11,13,14,10,12,11,14,13, 7, 9, 9,11,12, 9,
- 10,10,12,13, 9,10,10,13,12,11,11,12,13,15,11,12,
- 12,15,14, 8, 9, 9,12,11, 9,10,10,13,13, 9,11,10,
- 13,12,12,12,12,14,15,11,13,12,15,13,10,11,11,13,
- 14,11,12,12,13,15,11,12,12,14,14,13,13,14,14,16,
- 14,15,14,16,16,11,12,11,14,13,12,13,13,15,14,11,
- 13,12,15,13,14,15,15,16,16,13,14,14,16,14, 8, 9,
- 9,11,12, 9,10,11,12,13, 9,10,10,13,12,11,12,13,
- 14,15,11,12,12,15,14, 9, 9,11,11,13,10,10,12,12,
- 14,10,10,11,13,14,12,12,13,14,16,12,13,13,15,15,
- 9,11,10,13,12,10,11,11,13,14,10,12,11,14,13,12,
- 13,13,15,16,12,13,13,15,15,11,11,13,13,15,12,12,
- 14,13,15,13,13,14,14,15,14,14,15,14,17,15,15,15,
- 16,16,12,13,12,15,14,13,14,14,15,15,12,14,13,15,
- 14,15,15,15,17,17,14,15,14,17,15, 7, 9, 9,12,11,
- 9,10,10,12,12, 9,11,10,13,12,11,12,12,14,14,11,
- 13,12,15,14, 9,10,10,12,12,10,10,11,12,13,10,11,
- 11,14,13,12,12,13,14,15,12,13,13,16,15, 9,10,10,
- 13,12,10,11,11,13,13,10,11,10,14,12,13,13,13,15,
- 15,12,13,12,15,14,11,12,12,14,14,12,12,13,14,15,
- 13,14,13,15,15,14,13,15,14,16,15,16,15,17,16,12,
- 12,12,14,14,13,13,14,15,15,12,13,12,15,14,15,15,
- 16,16,17,14,15,14,17,14,10,11,12,13,14,11,12,13,
- 14,15,11,12,13,14,15,13,14,15,15,17,14,15,15,16,
- 16,11,12,13,12,15,12,12,14,13,16,13,13,14,13,16,
- 14,14,16,14,18,15,15,16,16,17,12,13,12,15,15,13,
- 14,14,15,16,13,14,13,16,15,15,15,16,17,18,15,15,
- 15,17,16,14,14,15,14,17,15,14,16,14,17,15,15,16,
- 15,18,16,16,17,16,19,17,17,17,17,18,14,15,15,17,
- 16,15,16,16,17,17,15,16,15,18,16,17,17,18,18,18,
- 16,17,16,18,17,10,11,11,14,13,11,12,12,15,14,11,
- 13,12,15,14,14,15,15,16,16,14,15,15,17,16,11,12,
- 12,15,14,12,13,13,15,14,13,14,13,16,14,14,15,15,
- 16,16,15,16,15,18,16,11,13,12,15,15,13,14,14,15,
- 15,12,14,13,16,15,15,16,16,17,17,15,16,15,17,16,
- 14,15,14,16,16,14,15,15,16,16,15,16,15,17,16,16,
- 16,17,16,17,17,18,17,19,18,14,15,15,17,16,15,16,
- 16,17,17,15,15,15,18,16,17,18,18,18,18,16,17,16,
- 19,16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,
- 11,10,11,12,13,14,10,11,11,14,13, 8, 9, 9,11,12,
- 9,10,11,12,13, 9,10,10,13,13,11,12,13,13,15,11,
- 12,12,15,14, 7, 9, 9,12,11, 9,10,10,12,13, 9,10,
- 10,13,12,11,12,12,14,15,11,12,11,14,13,11,11,12,
- 13,14,11,12,13,13,15,12,13,13,14,15,13,14,14,14,
- 16,14,15,15,16,16,10,11,11,14,13,11,12,12,14,14,
- 11,12,12,15,13,14,14,14,16,16,13,14,13,16,14, 7,
- 9, 9,11,12, 9,10,10,12,13, 9,10,10,12,12,11,12,
- 13,14,15,11,12,12,14,14, 9,10,10,12,13,10,10,11,
- 12,14,10,11,11,13,13,12,12,13,14,15,13,13,13,15,
- 15, 9,10,10,12,12,10,11,11,13,14,10,11,10,13,12,
- 12,13,13,15,16,12,13,12,15,14,11,12,13,14,14,12,
- 12,13,14,15,13,14,13,15,15,14,14,15,14,17,15,16,
- 15,17,16,11,12,12,14,14,13,13,13,15,15,12,13,12,
- 15,14,15,15,15,16,17,14,15,14,16,14, 8, 9, 9,12,
- 11, 9,10,10,12,13, 9,11,10,13,12,11,12,12,14,15,
- 11,12,12,15,14, 9,10,11,13,13,10,11,12,13,14,10,
- 11,11,14,13,12,13,13,15,15,12,13,13,16,15, 9,11,
- 9,13,11,10,11,10,14,13,10,12,10,14,12,12,13,13,
- 15,15,12,13,12,16,14,12,12,13,14,15,12,13,14,14,
- 16,13,14,14,15,15,14,14,15,15,17,15,16,15,17,16,
- 11,13,11,15,13,13,14,13,15,14,12,14,12,16,13,15,
- 15,15,16,16,14,15,14,17,14,10,11,11,13,14,11,12,
- 13,14,15,11,12,12,14,15,14,14,15,16,17,14,15,15,
- 16,16,11,12,13,14,15,12,13,14,15,16,13,14,14,15,
- 16,15,15,16,16,18,15,16,16,17,17,11,12,12,14,15,
- 13,13,14,14,16,12,13,13,15,15,15,15,16,16,18,14,
- 15,15,16,16,14,15,15,16,17,15,15,16,16,17,15,16,
- 16,17,17,16,16,17,16,19,17,18,17,18,18,14,14,15,
- 16,16,15,15,16,16,17,14,15,15,16,16,17,17,18,18,
- 19,16,17,16,17,16,10,12,11,14,13,11,13,12,15,14,
- 11,13,12,15,14,14,15,15,16,16,13,15,14,17,15,12,
- 13,13,15,15,13,13,14,15,16,13,14,14,16,16,14,15,
- 15,17,17,15,16,16,17,17,11,13,12,15,12,13,14,13,
- 16,13,12,14,12,16,13,15,16,15,17,16,14,16,14,18,
- 14,14,15,15,16,17,15,15,16,16,17,15,16,16,17,17,
- 16,16,17,17,18,17,18,17,18,18,14,15,14,17,14,15,
- 16,15,18,15,15,16,15,18,14,17,17,17,18,17,16,17,
- 16,19,16, 9,11,11,13,13,10,12,12,14,14,11,12,12,
- 15,14,13,14,14,16,16,13,14,14,16,16,10,11,12,14,
- 14,11,12,13,14,15,12,13,13,15,15,13,14,15,16,16,
- 14,15,15,17,16,11,12,12,15,14,12,13,13,15,15,12,
- 13,12,15,15,14,15,15,16,17,14,15,14,17,16,12,13,
- 14,15,16,13,13,14,15,16,13,14,15,16,16,14,15,16,
- 16,18,15,16,16,18,18,13,14,14,16,15,14,15,15,17,
- 16,14,15,15,17,16,16,17,17,18,18,16,17,16,18,17,
- 10,12,12,14,14,11,12,13,15,15,12,13,13,15,15,13,
- 14,15,16,17,14,15,15,17,16,11,11,13,14,15,12,12,
- 14,15,16,13,13,14,15,16,14,14,15,16,17,15,15,16,
- 17,17,12,13,12,15,15,13,14,14,16,16,13,14,13,16,
- 15,15,16,15,17,17,15,16,15,18,16,13,12,15,14,17,
- 14,13,16,14,17,14,14,16,15,18,15,14,17,16,18,16,
- 16,17,17,18,14,15,15,17,16,15,16,16,17,17,15,16,
- 15,18,16,17,17,17,18,18,16,17,16,19,17,10,11,11,
- 14,14,11,12,12,15,15,11,13,12,15,15,14,15,14,16,
- 16,14,15,15,17,16,11,12,12,15,14,12,12,13,15,15,
- 13,14,13,16,15,14,15,15,16,16,15,16,15,18,17,11,
- 13,12,15,15,13,14,13,15,15,12,14,13,16,15,15,16,
- 15,17,17,15,16,15,18,16,13,14,13,16,16,14,15,14,
- 16,16,14,15,15,17,16,16,16,16,16,18,16,18,17,19,
- 18,14,15,15,17,16,15,16,16,17,17,15,15,15,17,16,
- 17,17,18,18,19,16,17,16,18,16,12,13,13,15,16,13,
- 14,14,16,17,13,14,14,16,16,15,15,16,17,18,15,16,
- 16,18,17,13,13,14,14,17,14,14,15,15,17,14,14,15,
- 16,17,15,15,17,16,18,16,17,17,18,18,13,14,14,17,
- 16,14,15,15,17,17,14,15,14,17,16,16,17,17,18,18,
- 16,17,16,18,17,15,14,16,13,18,16,15,17,14,19,16,
- 16,17,15,18,17,16,18,15,19,18,18,18,17,19,15,16,
- 16,18,17,16,17,17,18,18,16,17,16,19,17,18,19,18,
- 19,19,17,18,17,20,18,11,12,12,15,15,13,13,14,15,
- 16,13,14,13,16,15,15,16,16,17,17,15,16,16,18,17,
- 12,14,13,16,15,13,13,14,15,16,14,15,14,17,16,16,
- 16,16,16,17,16,17,17,19,17,12,13,14,16,16,14,15,
- 15,16,17,13,15,13,17,15,16,17,17,18,18,16,17,16,
- 18,16,15,16,15,17,16,15,15,15,17,17,16,17,16,18,
- 17,17,16,17,16,18,18,19,18,20,18,15,16,16,17,17,
- 16,17,17,18,18,15,16,15,18,17,18,18,19,19,19,17,
- 18,16,19,16, 9,11,11,13,13,11,12,12,14,15,10,12,
- 12,14,14,13,14,14,16,16,13,14,14,16,16,11,12,12,
- 14,14,12,12,13,15,15,12,13,13,15,15,14,15,15,16,
- 17,14,15,15,16,16,10,12,11,14,14,12,13,13,15,15,
- 11,13,12,15,14,14,15,15,16,17,13,15,14,17,16,13,
- 14,14,15,16,14,15,15,16,17,14,15,15,16,17,16,16,
- 17,17,18,16,17,17,18,18,12,14,13,16,15,13,15,14,
- 17,16,13,14,13,17,15,15,16,16,18,18,15,16,15,18,
- 16,10,11,11,14,14,11,12,13,14,15,11,12,12,15,15,
- 14,15,15,16,17,14,15,15,16,16,11,12,13,15,15,12,
- 13,14,15,16,13,14,14,15,16,15,15,16,16,18,15,15,
- 16,17,17,11,12,12,14,15,13,13,14,15,16,12,13,13,
- 15,15,15,15,16,17,18,14,15,15,17,16,14,15,15,16,
- 17,15,15,16,16,17,15,16,16,17,17,16,16,17,16,19,
- 17,17,18,19,18,13,13,14,16,16,14,15,16,17,17,14,
- 14,15,16,16,16,16,17,18,18,16,16,16,18,16,10,12,
- 12,14,14,12,13,13,15,15,11,13,12,15,15,14,15,15,
- 16,17,13,15,14,17,16,12,13,13,15,15,13,13,14,15,
- 16,13,14,14,16,16,15,15,16,17,18,15,15,16,17,17,
- 11,13,12,15,14,13,14,13,16,15,12,14,12,16,14,15,
- 16,15,17,17,14,16,14,17,16,14,15,15,16,17,15,15,
- 16,16,18,15,16,16,17,17,16,17,17,17,19,17,17,17,
- 18,18,13,15,12,17,14,14,16,14,17,15,14,15,13,17,
- 14,16,17,16,18,17,15,17,14,19,15,11,12,12,15,15,
- 13,13,14,15,16,13,14,13,16,15,15,16,16,17,18,15,
- 16,16,17,17,12,14,13,16,16,13,13,15,15,17,14,15,
- 15,17,16,16,16,17,16,19,16,17,17,18,18,12,13,14,
- 15,16,14,14,15,16,17,13,14,13,16,15,16,17,17,18,
- 19,15,16,16,17,16,15,16,16,18,17,15,15,16,17,18,
- 16,17,17,18,18,16,16,18,16,19,18,19,19,20,19,15,
- 15,16,16,17,16,16,17,17,18,15,15,15,17,16,18,18,
- 19,18,20,17,17,16,18,16,12,13,13,16,15,13,14,14,
- 16,16,13,14,14,16,16,15,16,16,17,18,15,16,15,18,
- 17,13,14,14,16,16,14,15,15,16,17,14,15,15,17,17,
- 16,17,17,18,18,16,17,17,18,18,13,14,13,17,14,14,
- 15,14,17,16,14,15,14,17,15,16,17,17,18,18,15,17,
- 15,19,15,16,16,16,17,18,16,16,17,17,19,16,17,17,
- 18,19,17,17,18,18,20,18,18,18,19,19,15,16,14,18,
- 13,16,17,16,19,15,16,17,15,19,14,18,18,18,19,17,
- 17,18,16,20,15,
-};
-
-static const static_codebook _44p6_p2_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p6_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p6_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44p6_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p6_p3_0[] = {
- 1, 5, 5, 5, 7, 8, 5, 8, 7, 5, 7, 8, 8, 8,10, 8,
- 10,10, 5, 8, 7, 8,10,10, 8,10, 8, 6, 8, 9, 8,10,
- 12, 9,11,11, 9,10,11,11,11,13,12,13,13, 9,11,11,
- 11,13,13,11,13,12, 6, 9, 8, 9,11,11, 8,12,10, 9,
- 11,11,11,12,13,11,13,13, 9,11,10,11,13,13,11,13,
- 11, 5, 9, 9, 8,11,11, 9,12,11, 8,10,11,10,11,13,
- 11,13,13, 9,11,11,11,13,13,11,13,12, 8,10,11,10,
- 12,13,10,13,12,10,10,13,11,11,14,12,13,14,11,13,
- 12,13,14,14,12,14,12, 8,11,10,11,12,13,11,14,12,
- 10,13,12,12,12,13,13,15,14,11,12,13,13,14,15,12,
- 14,12, 5, 9, 9, 9,11,12, 8,11,11, 9,11,11,11,12,
- 13,11,13,13, 8,11,10,11,13,13,10,13,11, 8,10,11,
- 11,12,14,11,13,12,11,13,12,12,12,14,13,15,14,10,
- 12,13,13,14,15,12,13,12, 8,11,10,10,12,13,10,13,
- 12,11,12,13,12,12,14,13,14,14,10,13,10,12,14,13,
- 11,14,11,
-};
-
-static const static_codebook _44p6_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p6_p3_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44p6_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44p6_p3_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p6_p3_1[] = {
- 5, 7, 7, 6, 7, 7, 6, 7, 7, 6, 7, 7, 7, 8, 8, 7,
- 8, 8, 6, 7, 7, 7, 8, 8, 7, 8, 8, 7, 7, 8, 7, 8,
- 8, 7, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8,
- 8, 9, 9, 8, 9, 8, 7, 8, 7, 7, 8, 8, 7, 8, 8, 8,
- 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9,
- 8, 6, 8, 8, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 9,
- 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8, 8,
- 8, 9, 8, 9, 9, 8, 8, 9, 8, 9, 9, 9, 9, 9, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9, 8,
- 8, 8, 8, 8, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9, 9,
- 9, 9, 6, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
- 9, 8, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8,
- 8, 8, 9, 8, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8,
- 8, 8, 9, 9, 9, 8, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9,
- 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p6_p3_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p6_p3_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p6_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44p6_p4_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p6_p4_0[] = {
- 2, 5, 5, 5, 7, 8, 5, 8, 7, 5, 7, 7, 7, 7, 9, 7,
- 9, 9, 5, 7, 7, 8, 9, 9, 7, 9, 7, 6, 8, 8, 8, 9,
- 10, 8, 9, 9, 8, 9,10, 9, 9,11,10,11,11, 8, 9, 9,
- 10,11,11, 9,11,10, 6, 8, 8, 8, 9, 9, 8,10, 9, 8,
- 9, 9, 9,10,11,10,11,10, 8,10, 9,10,11,11, 9,11,
- 9, 6, 8, 8, 7, 9, 9, 8,10, 9, 7, 9, 9, 9, 9,10,
- 9,10,10, 8, 9, 9, 9,10,10, 9,11,10, 7, 9, 9, 8,
- 10,10, 9,10,10, 9, 9,10,10,10,11,10,11,11, 9,10,
- 10,10,11,11,10,11,10, 7, 9, 9, 9, 9,10, 9,10, 9,
- 8,10, 9, 9, 9,11,10,11,11, 9,10,10,10,11,11, 9,
- 11, 9, 6, 8, 8, 8, 9,10, 7, 9, 9, 8, 9, 9, 9,10,
- 10, 9,10,10, 7, 9, 9, 9,10,10, 9,10, 9, 7, 9, 9,
- 9, 9,10, 9,10, 9, 9,10,10, 9, 9,11,10,11,11, 8,
- 9,10,10,11,11, 9,11, 9, 7, 9, 9, 9,10,10, 8,10,
- 10, 9,10,10,10,10,11,10,11,11, 9,10, 9,10,11,11,
- 10,11,10,
-};
-
-static const static_codebook _44p6_p4_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p6_p4_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44p6_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44p6_p4_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p6_p4_1[] = {
- 6, 8, 8,10,10, 8, 9, 9,10,11, 8,10, 9,11,10, 9,
- 10,10,11,11, 9,10,10,11,11, 8, 9, 9,10,10, 9, 9,
- 10,11,11,10,10,10,11,11,10,11,11,11,11,10,11,11,
- 11,11, 8, 9, 9,11,10,10,10,10,11,11, 9,10, 9,11,
- 11,10,11,11,11,11,10,11,10,11,11,10,10,11,11,11,
- 10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,10,11,10,11,11,11,11,11,11,11,10,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11, 8, 9,10,
- 11,11,10,10,11,11,11,10,10,10,11,11,10,11,11,12,
- 12,10,11,11,12,12,10,10,11,11,11,10,10,11,11,12,
- 11,11,11,12,12,11,11,12,12,12,11,11,12,12,12,10,
- 10,10,11,11,11,11,11,12,12,10,11,11,12,12,11,12,
- 12,12,12,11,12,11,12,12,11,11,11,11,12,11,11,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,11,11,11,12,11,11,12,12,12,12,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12, 8,10, 9,11,11,10,
- 10,10,11,11,10,11,10,11,11,10,11,11,12,12,10,11,
- 11,12,12,10,10,10,11,11,10,11,11,12,12,11,11,11,
- 12,12,11,11,12,12,12,11,12,12,12,12,10,11,10,11,
- 11,11,11,11,12,12,10,11,10,12,11,11,12,11,12,12,
- 11,12,11,12,12,11,11,11,12,12,11,11,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,
- 11,12,11,11,12,12,12,12,11,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,10,11,11,11,12,11,11,12,12,
- 12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
- 11,11,12,12,12,11,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,13,11,12,11,12,12,12,12,
- 12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,13,12,13,12,12,12,12,13,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,12,
- 12,12,13,12,10,11,11,12,11,11,11,12,12,12,11,12,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,11,12,11,12,12,12,12,12,12,12,
- 11,12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,13,12,12,12,12,13,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,13,13,12,13,12,13,
- 12, 8,10,10,11,11,10,10,11,11,11,10,11,10,11,11,
- 10,11,11,12,12,10,11,11,12,12, 9,10,11,11,11,10,
- 10,11,12,12,10,11,11,12,12,11,11,12,12,12,11,12,
- 12,12,12,10,11,10,11,11,11,11,11,12,12,10,11,11,
- 12,12,11,12,12,12,12,11,12,11,12,12,11,11,11,12,
- 12,11,11,12,12,12,11,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12, 9,10,
- 10,11,11,10,11,11,12,12,10,11,11,12,12,11,11,12,
- 12,12,11,12,12,12,12,10,11,11,12,12,11,11,12,12,
- 12,11,11,12,12,12,11,11,12,12,12,12,12,12,12,12,
- 10,11,11,12,12,11,12,12,12,12,11,12,11,12,12,12,
- 12,12,12,12,12,12,12,12,12,11,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12, 9,10,10,11,11,
- 10,11,11,12,12,10,11,11,12,11,11,12,12,12,12,11,
- 12,12,12,12,10,11,11,12,12,11,11,11,12,12,11,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,10,11,11,
- 12,12,11,12,12,12,12,11,12,11,12,12,12,12,12,12,
- 12,12,12,12,12,12,11,12,12,12,12,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,11,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,11,11,11,12,12,11,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,13,12,13,12,12,13,13,13,11,12,12,12,12,12,
- 12,12,13,13,12,12,12,13,12,12,12,12,13,13,12,13,
- 12,13,13,12,12,12,12,12,12,12,12,12,13,12,13,13,
- 13,13,12,13,13,13,13,13,13,13,13,13,12,12,12,12,
- 12,12,12,13,13,13,12,13,12,13,13,12,13,13,13,13,
- 12,13,13,13,13,11,11,11,12,12,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
- 12,13,12,12,12,13,13,11,12,12,12,12,12,12,12,12,
- 13,12,12,12,13,12,12,13,12,13,13,12,13,12,13,13,
- 12,12,12,12,12,12,12,13,13,13,12,12,13,13,13,12,
- 13,13,12,13,13,13,13,13,13,12,12,12,12,12,12,13,
- 12,13,13,12,13,12,13,12,12,13,13,13,13,12,13,13,
- 13,13, 8,10,10,11,11,10,10,11,11,11, 9,11,10,11,
- 11,10,11,11,12,12,10,11,11,12,12,10,10,11,11,11,
- 10,11,11,12,12,11,11,11,12,12,11,11,12,12,12,11,
- 12,12,12,12, 9,11,10,11,11,10,11,11,12,12,10,11,
- 10,12,12,11,12,12,12,12,11,12,11,12,12,11,11,11,
- 12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,
- 11,12,11,12,12,12,12,12,12,12,12,12,12,12,12, 9,
- 10,10,11,11,10,11,11,12,12,10,11,11,12,12,11,12,
- 12,12,12,11,12,12,12,12,10,11,11,12,12,11,11,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,10,11,11,12,12,11,11,12,12,12,11,11,11,12,12,
- 12,12,12,12,12,11,12,12,12,12,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,11,12,12,12,12,12,12,12,12,12,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12, 9,10,10,11,
- 11,10,11,11,12,12,10,11,11,12,12,11,12,12,12,12,
- 11,12,11,12,12,10,11,11,12,12,11,11,12,12,12,11,
- 11,12,12,12,12,12,12,12,12,12,12,12,12,12,10,11,
- 11,12,12,11,12,11,12,12,11,12,11,12,12,12,12,12,
- 12,12,11,12,11,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 11,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,11,11,11,12,12,11,12,
- 12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,13,
- 13,12,12,12,13,13,12,12,13,13,13,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,13,12,13,13,12,
- 12,12,13,12,12,12,12,12,12,12,12,13,13,13,12,12,
- 13,13,13,12,13,13,12,13,12,13,13,13,13,12,12,12,
- 12,12,12,12,13,13,13,12,12,12,13,12,12,13,13,13,
- 13,12,13,13,13,13,11,11,11,12,12,11,12,12,12,12,
- 11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,12,
- 13,13,13,12,12,12,13,13,11,12,12,12,12,12,12,12,
- 13,12,12,12,12,13,12,12,13,12,13,13,12,13,12,13,
- 12,12,12,12,12,12,12,12,13,13,13,12,13,13,13,13,
- 12,13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,
- 13,12,13,12,12,13,12,13,12,13,13,13,13,13,12,13,
- 13,13,13,10,11,11,12,12,11,12,12,12,12,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,11,11,12,12,
- 12,11,12,12,12,12,12,12,12,12,12,12,12,12,13,13,
- 12,12,12,13,13,11,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,12,
- 12,12,12,12,12,12,12,13,12,12,12,12,13,12,12,13,
- 12,13,12,13,13,13,13,12,12,12,12,12,12,12,12,13,
- 12,12,12,12,13,12,12,13,13,13,13,12,13,12,13,13,
- 11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,12,
- 12,12,12,13,12,12,12,13,12,11,12,12,12,12,12,12,
- 12,12,13,12,12,12,12,13,12,12,13,13,13,12,12,13,
- 13,13,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
- 12,12,13,12,13,13,12,13,12,13,13,12,12,12,12,12,
- 12,12,13,12,13,12,12,13,13,13,12,12,13,13,13,13,
- 13,13,13,13,12,12,12,12,12,12,13,13,13,13,12,13,
- 12,13,12,12,13,13,13,13,12,13,13,13,13,11,11,11,
- 12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,13,11,12,12,12,12,12,12,12,12,13,
- 12,12,12,13,13,12,12,13,13,13,12,12,13,13,13,11,
- 12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,13,
- 12,13,13,12,13,12,13,13,12,12,12,12,12,12,12,12,
- 12,13,12,13,12,13,13,12,13,13,13,13,12,13,13,13,
- 13,12,12,12,12,12,12,13,12,13,13,12,12,12,13,13,
- 12,13,13,13,13,12,13,12,13,13,11,12,12,12,12,11,
- 12,12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,13,12,13,12,12,12,13,13,11,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,
- 12,13,12,13,13,12,12,12,12,12,12,12,13,12,13,12,
- 12,13,12,13,12,12,13,12,13,12,13,13,13,13,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,13,12,12,13,13,
- 13,13,12,13,12,13,12,11,11,11,12,12,11,12,12,12,
- 12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,13,13,11,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,13,13,12,12,12,
- 13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,13,12,12,12,13,12,12,12,12,12,12,12,12,
- 12,12,12,13,12,12,12,12,13,12,12,13,12,13,12,12,
- 13,12,13,12,10,11,11,12,12,11,12,12,12,12,11,12,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 13,12,12,12,13,13,11,12,11,12,12,12,12,12,12,12,
- 11,12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,
- 12,12,12,12,12,12,12,12,13,12,12,12,12,13,12,13,
- 13,12,13,12,13,13,13,13,12,12,12,12,12,12,12,12,
- 13,13,12,12,12,13,12,12,13,13,13,13,12,13,12,13,
- 12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
- 12,12,12,13,13,12,12,12,13,12,11,12,12,12,12,12,
- 12,12,12,13,12,12,12,13,13,12,12,13,13,13,12,12,
- 13,13,13,11,12,12,12,12,12,12,12,13,13,12,12,12,
- 13,12,12,13,12,13,13,12,12,12,13,13,12,12,12,12,
- 12,12,12,13,13,13,12,12,13,13,13,12,12,13,13,13,
- 12,13,13,13,13,12,12,12,12,12,12,12,13,13,13,12,
- 12,12,13,12,12,13,13,13,13,12,13,13,13,13,11,11,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,
- 12,13,12,12,12,13,13,11,12,12,12,12,12,12,12,12,
- 13,12,12,12,13,13,12,12,13,13,13,12,12,13,13,13,
- 11,12,12,12,12,12,12,12,13,12,12,12,12,13,12,12,
- 13,12,13,13,12,13,12,13,13,12,12,12,12,12,12,12,
- 12,13,13,12,13,12,13,13,12,13,13,13,13,13,13,13,
- 13,13,12,12,12,12,12,12,13,12,13,13,12,13,12,13,
- 12,12,13,13,13,13,12,13,12,13,13,11,11,11,12,12,
- 11,12,12,12,12,11,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,13,12,12,12,13,13,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
- 13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
- 12,12,12,12,13,12,12,12,12,13,12,12,13,12,13,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 13,12,12,12,13,12,12,12,11,12,11,12,12,11,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,11,12,12,12,12,12,12,12,12,13,12,12,12,12,12,
- 12,12,12,13,13,12,12,12,13,13,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,13,12,13,13,12,12,
- 12,13,12,12,12,12,12,12,12,12,12,12,13,12,12,12,
- 13,13,12,12,13,12,13,12,13,13,13,13,12,12,12,12,
- 12,12,12,12,13,12,12,12,12,13,12,12,13,12,13,13,
- 12,13,12,13,12,
-};
-
-static const static_codebook _44p6_p4_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p6_p4_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p6_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44p6_p5_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p6_p5_0[] = {
- 2, 6, 6,10,10, 5, 7, 8,11,12, 5, 8, 7,12,11, 9,
- 11,11,13,15, 9,11,11,15,13, 6, 7, 8,11,11, 7, 7,
- 9,11,13, 8, 9, 9,13,12,11,11,12,12,15,11,12,12,
- 15,14, 6, 8, 7,11,11, 8, 9, 9,12,13, 7, 9, 7,13,
- 11,11,12,12,14,15,11,12,11,15,12,10,11,11,12,14,
- 10,11,12,12,15,12,13,13,14,15,13,12,14,12,16,15,
- 15,15,16,16,10,11,11,14,12,12,13,13,15,14,10,12,
- 11,15,12,15,15,15,16,17,13,14,12,17,12, 6, 8, 8,
- 12,12, 8, 9,10,13,13, 8, 9, 9,13,13,12,12,13,15,
- 16,12,13,13,16,15, 8, 9,10,12,13, 9, 9,11,13,14,
- 10,11,11,14,14,13,13,14,15,16,13,14,14,16,16, 8,
- 10, 9,13,13,10,11,11,14,14, 9,10,10,14,13,13,14,
- 14,16,17,13,13,13,16,15,12,13,13,14,16,13,13,14,
- 14,16,14,14,14,16,16,15,15,16,15,18,16,17,17,18,
- 18,12,13,13,15,15,14,14,14,16,16,13,14,13,16,15,
- 16,16,17,18,18,15,16,15,18,15, 6, 8, 8,12,12, 8,
- 9, 9,13,13, 8,10, 9,13,13,12,13,13,15,16,12,13,
- 12,16,15, 8, 9,10,13,13, 9,10,10,13,14,10,11,11,
- 14,14,13,13,13,15,16,13,14,14,17,16, 8,10, 9,13,
- 13,10,11,11,14,14, 9,11, 9,14,13,13,14,14,16,16,
- 13,14,13,16,14,12,13,13,15,16,13,13,14,15,16,14,
- 14,14,16,16,15,15,16,15,18,17,17,17,18,18,12,13,
- 13,16,14,14,14,14,16,16,13,14,13,16,14,16,17,17,
- 18,18,15,16,15,18,15,11,12,13,14,16,13,13,14,15,
- 17,13,14,14,16,17,16,16,17,17,19,16,17,17,18,19,
- 13,13,14,16,16,14,14,15,16,17,14,15,15,17,17,17,
- 16,17,17,19,17,17,18,19,19,13,14,14,16,16,14,14,
- 15,17,18,14,15,14,17,17,17,17,18,18,19,17,17,17,
- 18,19,16,16,16,17,18,17,17,17,18,19,17,17,17,18,
- 19,18,18,19,18,20,19,20,19,21,20,16,17,17,18,18,
- 17,17,18,19,19,17,17,17,19,18,19,19,19,19,20,19,
- 19,19,20,19,11,13,12,16,14,13,14,14,17,16,13,14,
- 13,17,15,16,17,17,18,18,16,17,16,19,17,13,14,14,
- 16,16,14,14,14,17,17,14,15,15,17,16,17,17,17,19,
- 19,17,18,17,19,18,13,14,13,17,16,14,15,15,17,17,
- 14,15,14,18,16,17,17,17,19,19,17,17,16,19,17,16,
- 17,17,18,19,17,17,17,18,18,17,18,17,19,18,18,19,
- 18,19,19,19,20,19,20,20,16,17,16,18,17,17,17,17,
- 18,18,17,18,17,19,17,19,19,19,19,20,18,19,19,20,
- 18, 6, 8, 8,12,12, 8, 9, 9,13,13, 8,10, 9,13,13,
- 11,13,13,15,16,12,13,13,16,15, 8, 9, 9,13,13, 9,
- 9,10,13,14,10,11,11,14,14,12,12,13,14,16,13,14,
- 14,17,16, 8,10, 9,13,13,10,11,11,14,14, 9,11,10,
- 14,13,13,14,14,16,16,13,14,13,16,15,12,13,13,14,
- 16,12,13,14,14,16,13,14,14,16,16,15,14,16,15,18,
- 16,17,17,18,17,12,13,13,16,15,14,14,14,16,16,13,
- 14,13,16,15,16,16,17,17,17,15,16,15,18,15, 7, 9,
- 9,13,13, 9, 9,11,13,14, 9,10,10,14,13,12,13,14,
- 15,16,12,14,13,17,15, 9, 9,10,13,14,10, 9,11,13,
- 15,11,11,11,14,14,13,12,14,14,17,14,14,14,17,16,
- 9,10,10,14,13,11,11,11,14,14,10,11,10,15,13,14,
- 14,14,16,17,13,14,13,17,14,13,13,14,14,16,13,13,
- 14,14,17,14,14,14,16,16,15,14,16,15,18,17,17,17,
- 18,18,13,14,13,16,15,14,14,15,17,16,13,14,13,17,
- 15,17,16,17,17,17,15,16,14,18,14, 7, 9, 9,13,13,
- 9,10,10,13,14, 9,11,10,14,13,13,14,14,16,16,13,
- 14,14,17,15, 9,10,10,14,13, 9,10,11,13,14,11,12,
- 11,15,14,13,13,14,14,16,14,15,15,17,17, 9,10,10,
- 14,14,11,12,12,14,15,10,11,10,15,13,14,15,15,17,
- 17,14,15,13,17,14,13,14,13,16,16,13,13,14,15,16,
- 14,15,15,17,17,15,14,16,15,18,17,18,17,20,18,13,
- 14,14,16,16,15,15,15,17,17,13,14,13,17,15,17,17,
- 18,18,18,15,16,14,19,14,12,13,13,15,16,13,13,15,
- 16,17,13,14,14,16,16,15,15,17,17,19,16,17,17,19,
- 18,13,13,14,15,17,14,13,15,15,17,14,15,15,16,17,
- 16,15,18,16,19,17,17,17,18,19,13,14,14,17,16,14,
- 15,15,17,17,14,15,14,17,16,17,17,17,18,19,16,17,
- 16,19,17,16,16,17,16,18,16,16,17,16,19,17,17,18,
- 18,19,18,17,18,17,21,19,19,19,20,19,16,17,17,18,
- 18,17,17,18,18,19,16,17,16,18,18,19,19,19,19,20,
- 18,18,17,20,18,11,13,13,16,15,13,14,14,16,17,13,
- 15,14,17,16,16,17,17,18,18,17,17,17,19,18,13,14,
- 13,17,16,14,13,14,16,17,15,16,15,18,16,17,16,17,
- 17,19,18,18,18,20,18,13,14,14,16,17,15,15,15,17,
- 18,14,15,14,18,16,18,18,18,19,20,17,18,16,20,17,
- 16,17,16,18,18,16,16,17,18,18,17,18,18,19,18,18,
- 17,19,17,20,19,20,19,22,20,16,16,17,18,18,18,17,
- 17,19,19,16,17,16,18,17,19,20,19,22,21,18,19,18,
- 21,17, 6, 8, 8,12,12, 8, 9,10,13,13, 8, 9, 9,13,
- 13,12,13,13,15,16,11,13,13,16,15, 8, 9,10,13,13,
- 9,10,11,13,14,10,11,11,14,14,13,13,14,15,16,13,
- 14,14,16,16, 8, 9, 9,13,13,10,11,11,14,14, 9,10,
- 9,14,13,13,14,14,16,17,12,14,12,16,14,12,13,13,
- 15,16,13,13,14,15,16,13,14,14,15,17,15,15,16,15,
- 18,16,16,17,17,17,12,13,13,16,14,13,14,14,16,16,
- 12,14,13,16,14,16,17,17,18,18,15,15,14,18,14, 7,
- 9, 9,13,13, 9,10,11,13,14, 9,10,10,14,13,13,14,
- 14,15,17,13,14,14,16,15, 9,10,10,14,14,10,10,11,
- 13,15,11,12,12,15,14,14,13,15,14,17,14,15,15,17,
- 17, 9,10,10,13,14,11,11,12,14,15, 9,11,10,14,13,
- 14,15,15,16,18,13,14,13,16,14,13,14,14,16,16,13,
- 13,14,15,17,15,15,15,16,17,15,14,16,15,18,17,17,
- 18,19,18,13,14,14,16,16,14,15,15,17,17,13,14,13,
- 16,15,17,17,18,18,18,15,16,14,18,15, 7, 9, 9,13,
- 13, 9,10,10,13,14, 9,11,10,14,13,12,13,14,15,16,
- 12,14,13,16,15, 9,10,10,13,14,10,10,11,13,14,11,
- 11,11,15,14,13,13,14,14,16,14,14,14,17,16, 9,10,
- 9,14,13,11,11,11,14,14,10,11, 9,15,13,14,14,14,
- 16,16,13,14,12,17,14,13,13,14,15,16,13,13,14,15,
- 16,14,15,14,16,17,15,14,16,14,18,16,17,17,18,18,
- 13,14,13,16,14,14,14,14,16,16,13,14,13,17,14,17,
- 17,17,18,18,15,16,14,18,15,11,13,13,16,16,13,14,
- 15,16,17,13,14,14,17,16,16,17,17,18,19,17,17,17,
- 19,18,13,14,14,17,17,13,13,15,16,18,15,15,15,17,
- 17,17,16,18,17,20,18,17,18,19,19,13,14,14,16,17,
- 15,15,16,16,18,14,15,14,16,16,17,17,18,18,20,17,
- 18,16,18,17,16,17,16,19,18,16,16,17,18,19,18,18,
- 18,19,19,18,17,18,17,21,20,19,19,21,21,16,16,17,
- 18,18,17,17,18,19,19,16,17,16,19,18,20,20,20,19,
- 21,18,18,17,20,18,12,13,13,16,15,13,14,14,16,16,
- 13,14,13,17,16,16,17,17,18,18,15,17,15,19,17,13,
- 14,14,16,17,14,14,15,16,17,14,15,15,17,17,16,16,
- 17,17,18,17,17,17,19,19,13,14,13,17,15,14,15,15,
- 17,16,14,15,13,17,15,17,18,17,19,18,16,17,15,20,
- 16,16,17,17,18,18,16,16,17,18,18,17,18,17,19,18,
- 17,17,18,18,20,19,20,19,20,19,16,16,16,19,16,17,
- 17,17,19,18,16,17,16,19,16,19,19,19,19,19,18,19,
- 17,19,17,11,13,13,16,16,13,14,14,17,17,13,14,14,
- 17,17,15,17,17,19,19,16,18,17,20,19,12,14,14,17,
- 17,13,14,15,17,18,14,15,15,17,18,16,16,17,18,20,
- 17,18,18,20,18,13,14,14,17,17,14,15,15,17,18,14,
- 15,15,17,17,17,18,17,19,19,17,18,17,19,19,15,16,
- 16,18,18,15,16,17,18,19,16,17,17,19,19,17,17,18,
- 18,21,18,19,19,21,19,16,17,17,18,18,17,17,18,19,
- 19,17,18,17,19,19,19,19,19,20,20,18,19,18,21,19,
- 12,13,13,16,16,13,14,14,16,17,13,15,14,17,16,15,
- 16,17,17,19,16,17,17,19,18,13,13,14,16,17,14,13,
- 15,16,17,14,15,15,17,17,15,15,17,17,20,17,17,18,
- 19,18,13,14,14,17,16,15,15,15,17,18,14,15,14,17,
- 16,17,17,17,18,18,16,17,16,19,17,16,15,17,17,19,
- 16,15,17,16,19,17,16,17,18,19,17,16,19,16,20,19,
- 18,19,19,19,16,17,17,18,18,17,17,17,18,19,16,17,
- 16,19,18,20,19,19,20,19,18,18,17,20,17,11,13,13,
- 16,16,13,14,15,16,17,14,15,14,18,16,17,17,17,18,
- 21,17,18,17,20,19,13,14,14,17,16,13,14,15,16,18,
- 15,16,15,18,17,17,16,17,17,19,17,18,18,20,19,13,
- 14,14,16,17,15,15,16,17,18,14,15,14,18,17,17,18,
- 18,19,20,17,18,16,19,17,16,17,15,19,18,16,16,16,
- 18,18,17,18,17,20,19,18,17,18,17,20,20,20,19,22,
- 20,16,17,17,18,19,18,18,18,19,20,16,17,16,19,18,
- 20,19,19,20,20,18,19,17,20,17,13,14,14,16,17,14,
- 14,16,16,18,14,16,15,17,16,16,16,17,17,18,17,17,
- 16,19,18,14,14,15,16,17,14,14,16,16,18,16,16,16,
- 17,17,16,15,17,16,19,18,18,18,19,19,14,15,15,17,
- 17,15,16,16,17,18,14,16,14,18,16,17,17,18,18,19,
- 16,17,16,19,17,16,16,17,16,18,16,16,17,16,19,18,
- 18,18,17,18,17,16,18,16,20,19,19,19,19,19,16,17,
- 17,18,18,17,17,18,19,19,16,17,16,19,17,18,19,19,
- 19,20,17,18,16,20,16,11,14,13,17,17,14,14,16,16,
- 18,14,16,14,19,16,18,18,19,18,19,18,19,18,21,18,
- 13,15,14,18,16,14,14,16,16,18,16,17,16,19,17,18,
- 16,19,17,20,19,19,19,21,19,13,14,15,17,18,17,16,
- 17,17,19,14,16,14,18,16,20,19,19,20,21,18,19,16,
- 21,17,17,18,16,19,17,16,16,17,18,18,19,19,18,21,
- 18,17,17,18,17,20,20,20,20,22,20,17,17,18,18,20,
- 19,19,19,18,20,16,17,17,19,19,21,21,21,20,21,17,
- 19,17,23,17,11,13,13,16,16,13,14,14,17,17,13,14,
- 14,17,17,16,17,17,19,20,15,16,16,19,19,13,14,14,
- 16,17,14,15,15,17,18,14,15,15,17,17,17,17,18,19,
- 19,17,17,18,19,19,13,14,14,17,16,14,15,15,17,17,
- 13,15,14,18,17,17,18,18,19,20,16,17,16,19,18,16,
- 16,17,18,18,17,17,17,18,19,17,18,17,19,19,19,19,
- 19,19,20,19,20,19,20,20,15,16,16,18,17,16,17,17,
- 20,18,15,16,16,19,17,19,19,19,20,20,17,18,17,21,
- 17,11,13,13,16,16,13,14,15,16,17,13,15,14,17,16,
- 17,17,18,18,20,17,17,17,19,19,13,14,14,17,17,14,
- 14,15,17,18,15,15,15,18,17,17,17,18,17,20,18,18,
- 17,20,18,13,14,14,16,17,15,15,16,17,18,14,15,13,
- 17,17,17,18,18,19,20,17,17,16,19,17,16,17,17,18,
- 18,16,16,17,18,18,18,18,18,19,19,18,17,19,18,21,
- 19,20,20,20,20,16,15,17,18,18,17,17,18,18,20,16,
- 16,16,18,17,20,19,20,21,22,17,18,17,20,17,12,13,
- 13,16,16,13,14,15,16,17,13,14,14,17,16,16,17,18,
- 18,19,15,16,16,19,18,13,14,14,16,17,14,14,15,16,
- 17,14,15,15,17,17,16,16,17,17,19,17,17,17,19,18,
- 13,14,13,17,16,14,15,15,17,17,13,15,13,17,16,17,
- 17,17,19,19,15,17,15,19,17,16,17,17,18,18,16,16,
- 17,17,19,17,18,17,19,19,18,17,19,17,19,19,19,19,
- 20,19,15,17,15,19,16,17,17,16,19,18,16,17,15,18,
- 16,19,19,19,20,19,17,19,16,19,16,11,14,14,17,17,
- 15,14,16,16,18,15,16,14,18,16,18,18,19,18,21,18,
- 19,18,20,18,13,15,14,18,17,14,14,16,16,18,16,17,
- 16,19,17,17,17,19,17,22,19,19,19,21,19,13,14,15,
- 17,18,17,16,17,17,19,14,16,14,18,16,19,19,19,20,
- 21,18,18,16,20,17,17,18,16,19,18,15,17,17,19,19,
- 19,19,18,21,19,18,17,20,17,21,22,21,20,21,21,17,
- 16,19,18,20,19,18,19,18,20,16,17,16,19,18,21,20,
- 21,19,23,18,19,16,20,17,13,14,14,17,16,14,14,15,
- 16,18,14,16,14,17,16,16,16,17,17,19,16,17,16,19,
- 17,14,15,15,17,17,14,14,16,16,17,15,16,16,18,17,
- 16,16,17,17,19,17,18,17,19,18,14,15,14,17,16,16,
- 16,16,17,17,14,16,14,17,16,18,18,18,18,19,16,17,
- 15,19,16,17,17,17,18,18,16,15,17,17,18,18,18,18,
- 19,19,17,16,18,16,19,19,19,19,19,19,16,17,16,19,
- 16,18,18,17,19,18,16,17,16,19,16,19,19,20,19,19,
- 17,18,16,20,16,
-};
-
-static const static_codebook _44p6_p5_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p6_p5_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44p6_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44p6_p5_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44p6_p5_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p6_p5_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44p6_p5_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p6_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44p6_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p6_p6_0[] = {
- 1, 5, 5, 5, 7, 9, 5, 9, 7, 5, 7, 8, 7, 7,10, 9,
- 10,10, 5, 8, 7, 9,10,10, 7,10, 7, 6, 9, 9, 9,10,
- 12, 9,11,11, 9,10,11,11,11,13,12,13,13, 9,11,11,
- 12,13,13,11,13,11, 6, 9, 9, 9,11,11, 9,12,10, 9,
- 11,11,11,11,13,12,13,13, 9,11,10,12,13,13,11,13,
- 11, 6, 9, 9, 9,11,12, 9,12,11, 9,10,11,10,10,13,
- 12,13,13, 9,11,11,12,13,12,11,13,11, 7, 9,10, 9,
- 10,12,10,12,11,10,10,12,10,10,12,12,12,13,10,11,
- 11,12,12,13,10,12,10, 7,10,10,11,11,14,11,14,11,
- 10,12,11,11,11,14,14,14,14,10,11,12,14,14,14,11,
- 14,11, 6, 9, 9, 9,11,12, 9,12,11, 9,11,11,11,11,
- 13,12,12,13, 9,11,10,12,13,13,10,13,10, 7,10,10,
- 11,11,14,11,14,11,10,12,11,11,11,14,14,15,14,10,
- 11,12,13,14,15,11,14,11, 7,10, 9,10,11,12, 9,12,
- 10,10,11,11,10,10,12,12,13,12, 9,12,10,12,13,12,
- 10,12,10,
-};
-
-static const static_codebook _44p6_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p6_p6_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44p6_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44p6_p6_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p6_p6_1[] = {
- 2, 6, 6, 6, 7, 8, 6, 8, 7, 6, 7, 7, 7, 7, 8, 7,
- 8, 8, 6, 7, 7, 7, 8, 8, 7, 8, 7, 6, 8, 8, 8, 9,
- 9, 8, 9, 9, 8, 9, 9, 9, 9,10, 9,10,10, 8, 9, 9,
- 9,10,10, 9,10, 9, 6, 8, 8, 8, 9, 9, 8, 9, 9, 8,
- 9, 9, 9, 9,10, 9,10,10, 8, 9, 9, 9,10, 9, 9,10,
- 9, 6, 8, 8, 8, 9, 9, 8, 9, 9, 8, 9, 9, 9, 9,10,
- 9, 9,10, 8, 9, 9, 9,10, 9, 9,10, 9, 7, 8, 8, 8,
- 9, 9, 8, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8, 9,
- 9, 9,10, 9, 9, 9, 9, 7, 9, 9, 9, 9,10, 9,10, 9,
- 9, 9, 9, 9, 9,10,10,10,10, 9, 9, 9,10,10,10, 9,
- 10, 9, 6, 8, 8, 8, 9, 9, 8, 9, 9, 8, 9, 9, 9, 9,
- 10, 9,10,10, 8, 9, 9, 9,10, 9, 9,10, 9, 7, 9, 9,
- 9, 9,10, 9,10, 9, 9, 9, 9, 9, 9,10,10,10,10, 9,
- 9, 9,10,10,10, 9,10, 9, 7, 8, 8, 8, 9, 9, 8, 9,
- 9, 8, 9, 9, 9, 9,10, 9, 9,10, 8, 9, 8, 9, 9, 9,
- 9,10, 9,
-};
-
-static const static_codebook _44p6_p6_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p6_p6_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44p6_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44p6_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p6_p7_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p6_p7_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p6_p7_0,
- 1, -513979392, 1633504256, 2, 0,
- (long *)_vq_quantlist__44p6_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44p6_p7_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p6_p7_1[] = {
- 1, 4, 5, 5,10,10, 5,10,10, 5,10,10,10,10,10,10,
- 10,10, 5,10,10,10,10,10,10,10,10, 7,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10, 6,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10, 6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10, 9,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10, 9,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10, 6,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10, 9,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10, 9,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,
- 11,11,11,
-};
-
-static const static_codebook _44p6_p7_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p6_p7_1,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p6_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44p6_p7_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p6_p7_2[] = {
- 1, 2, 3, 4, 5, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
- 12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p6_p7_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44p6_p7_2,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44p6_p7_2,
- 0
-};
-
-static const long _vq_quantlist__44p6_p7_3[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p6_p7_3[] = {
- 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p6_p7_3 = {
- 1, 25,
- (char *)_vq_lengthlist__44p6_p7_3,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44p6_p7_3,
- 0
-};
-
-static const char _huff_lengthlist__44p6_short[] = {
- 2, 8,13,15,16,18,21,22, 5, 4, 6, 8,10,12,17,21,
- 9, 5, 5, 6, 8,11,15,19,11, 6, 5, 5, 6, 7,12,14,
- 14, 8, 7, 5, 4, 4, 9,11,16,11, 9, 7, 4, 3, 7,10,
- 22,15,14,12, 8, 7, 9,11,21,16,15,12, 9, 5, 6, 8,
-};
-
-static const static_codebook _huff_book__44p6_short = {
- 2, 64,
- (char *)_huff_lengthlist__44p6_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p7_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44p7_l0_0[] = {
- 2, 4, 4, 7, 7, 8, 8,10,10,11,11,12,12, 4, 5, 5,
- 7, 7, 9, 9,11, 9,12,11,12,12, 4, 5, 5, 7, 7, 9,
- 9, 9,10,10,11,12,12, 7, 7, 7, 7, 8, 9, 8,11, 5,
- 12, 6,12,10, 7, 7, 7, 8, 7, 8, 9, 5,11, 6,12,10,
- 12, 8, 9, 9, 9, 9,10,10,11, 7,11, 7,12, 9, 8, 9,
- 8, 9, 9,10,10, 7,11, 7,11, 9,11,10,10,10,10,10,
- 10,10,11,10,11, 8,11, 9,10,10,10,10,10,10,10,10,
- 11, 8,10, 9,11,10,11,11,11,11,11,10,11,10,12,10,
- 12,11,10,11,11,11,11,10,11,10,11,10,12,11,12,11,
- 12,12,12,12,12,12,12,12,12,12,13,12,11,12,11,12,
- 12,12,12,12,11,12,11,12,13,
-};
-
-static const static_codebook _44p7_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44p7_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44p7_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44p7_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p7_l0_1[] = {
- 4, 4, 4, 5, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p7_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44p7_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p7_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44p7_l1_0[] = {
- 54,
- 29,
- 79,
- 0,
- 108,
-};
-
-static const char _vq_lengthlist__44p7_l1_0[] = {
- 1, 2, 3, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44p7_l1_0 = {
- 2, 25,
- (char *)_vq_lengthlist__44p7_l1_0,
- 1, -514516992, 1620639744, 7, 0,
- (long *)_vq_quantlist__44p7_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44p7_lfe[] = {
- 2, 3, 1, 3,
-};
-
-static const static_codebook _huff_book__44p7_lfe = {
- 2, 4,
- (char *)_huff_lengthlist__44p7_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44p7_long[] = {
- 2, 7,14,16,17,17,18,20, 6, 3, 5, 8,10,11,13,15,
- 13, 5, 3, 5, 8, 9,11,12,15, 7, 4, 3, 5, 7, 9,11,
- 16,10, 7, 5, 6, 7, 9,10,17,11, 8, 7, 7, 6, 8, 8,
- 19,13,11, 9, 9, 8, 8, 9,20,14,13,11,10, 8, 9, 9,
-};
-
-static const static_codebook _huff_book__44p7_long = {
- 2, 64,
- (char *)_huff_lengthlist__44p7_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p7_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p7_p1_0[] = {
- 2, 5, 5, 4, 7, 7, 4, 7, 7, 5, 7, 7, 7, 8, 9, 7,
- 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 6, 7, 8, 8, 9,
- 10, 8, 9,10, 8, 9,10,10,10,12,10,11,11, 8,10,10,
- 10,11,12,10,11,11, 6, 8, 7, 8,10, 9, 8,10, 9, 8,
- 10,10,10,11,11,10,12,11, 8,10, 9,10,11,11,10,12,
- 10, 5, 8, 8, 8,10,10, 8,10,10, 7, 9,10, 9,10,11,
- 9,11,11, 8,10,10,10,11,12,10,12,11, 7, 9, 9, 9,
- 10,11, 9,11,11, 9, 9,11,10,11,12,11,11,12, 9,11,
- 11,11,12,12,11,12,12, 7, 9, 9,10,11,11,10,12,11,
- 9,11,10,11,11,12,11,13,12,10,11,11,12,13,13,11,
- 13,11, 5, 8, 8, 8,10,10, 8,10,10, 8,10,10,10,11,
- 12,10,12,11, 7,10, 9, 9,11,11, 9,11,10, 7, 9, 9,
- 10,11,12,10,11,11,10,11,11,11,11,13,12,13,13, 9,
- 10,11,11,12,13,11,12,11, 7, 9, 9, 9,11,11, 9,11,
- 10, 9,11,11,11,12,12,11,12,12, 9,11, 9,11,12,11,
- 10,12,11,
-};
-
-static const static_codebook _44p7_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p7_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p7_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44p7_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p7_p2_0[] = {
- 4, 6, 6, 9, 9, 6, 8, 8,10,10, 6, 8, 8,10,10, 8,
- 10,10,12,13, 8,10,10,13,12, 6, 8, 8,10,10, 8, 8,
- 9,10,11, 8, 9, 9,11,11,10,10,11,12,13,10,11,11,
- 13,13, 6, 8, 8,10,10, 8, 9, 9,11,11, 8, 9, 8,11,
- 10,10,11,11,13,13,10,11,10,13,12, 9,10,10,12,12,
- 10,10,11,12,13,10,11,11,13,13,12,12,13,12,15,13,
- 13,13,15,14, 9,10,10,12,12,10,11,11,13,13,10,11,
- 10,13,12,12,13,13,14,15,12,13,12,15,12, 6, 8, 8,
- 10,11, 8, 9,10,11,12, 8, 9, 9,11,11,10,11,12,13,
- 14,10,11,11,13,13, 8, 9, 9,11,12, 9,10,11,12,13,
- 9,10,10,12,13,11,12,13,13,15,11,12,12,14,14, 8,
- 9, 9,11,12, 9,10,11,12,13, 9,10,10,13,12,11,12,
- 13,14,15,11,12,12,14,13,10,11,12,13,14,11,12,13,
- 13,15,12,13,13,14,14,13,13,14,14,16,14,15,14,16,
- 15,10,12,11,14,13,12,12,13,14,14,11,12,12,14,14,
- 14,14,15,15,16,13,14,14,16,14, 6, 8, 8,11,10, 8,
- 9, 9,11,11, 8,10, 9,12,11,10,11,11,13,13,10,12,
- 11,14,13, 8, 9, 9,12,11, 9,10,10,12,13, 9,11,10,
- 13,12,11,12,12,14,14,11,13,12,15,14, 8, 9, 9,12,
- 11, 9,10,10,13,12, 9,11,10,13,12,11,12,12,14,14,
- 11,13,12,15,13,10,11,12,13,14,11,12,13,13,14,12,
- 13,12,14,14,13,13,14,14,16,14,15,14,16,16,10,12,
- 11,14,13,12,13,13,14,14,11,13,12,15,13,14,14,15,
- 16,16,13,14,13,16,14, 9,10,11,12,13,11,11,12,13,
- 14,11,11,12,13,14,13,13,14,14,16,13,14,14,15,15,
- 11,11,12,13,14,12,12,13,13,15,12,13,13,14,15,14,
- 14,15,15,17,14,14,15,16,16,11,12,12,13,14,12,12,
- 13,14,15,12,13,12,14,15,14,14,15,15,17,14,15,14,
- 16,16,13,14,14,15,16,14,14,15,15,17,14,15,15,16,
- 16,15,16,17,16,18,16,17,16,17,17,13,14,14,16,15,
- 14,15,15,16,16,14,15,14,16,15,16,16,17,17,18,16,
- 16,16,17,16, 9,11,10,13,12,11,12,11,14,13,11,12,
- 11,14,13,13,14,14,16,15,13,14,13,16,14,11,12,12,
- 14,13,12,12,13,14,14,12,13,13,15,14,14,14,15,16,
- 16,14,15,14,17,15,11,12,11,14,13,12,13,13,15,14,
- 12,13,12,15,13,14,15,14,16,16,14,15,14,17,15,13,
- 14,14,15,16,14,14,15,16,16,14,15,15,16,16,15,16,
- 16,16,17,16,16,16,17,17,13,14,14,16,15,14,15,15,
- 17,16,14,15,14,17,15,16,17,17,17,17,16,16,16,18,
- 16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,11,
- 10,11,11,13,14,10,11,11,14,13, 8, 9, 9,11,12, 9,
- 10,10,12,13, 9,10,10,13,12,11,11,12,13,15,11,12,
- 12,15,14, 8, 9, 9,12,11, 9,10,11,12,13, 9,11,10,
- 13,12,11,12,12,14,15,11,13,12,15,14,10,11,11,13,
- 14,11,12,12,13,14,11,12,12,14,14,13,13,14,14,16,
- 13,14,14,16,15,11,12,11,14,13,12,13,13,14,14,11,
- 13,12,14,13,14,14,15,16,16,13,14,14,16,14, 8, 9,
- 9,11,12, 9,10,10,12,13, 9,10,10,13,12,11,12,12,
- 14,15,11,12,12,14,14, 9, 9,10,11,13,10,10,12,12,
- 14,10,10,11,13,13,12,12,13,14,16,12,12,13,15,15,
- 9,10,10,13,12,10,11,11,13,14,10,12,11,14,13,12,
- 13,13,15,15,12,13,13,15,15,11,11,12,13,15,12,12,
- 13,13,15,12,13,13,14,15,14,14,15,15,17,14,15,15,
- 16,16,11,13,12,15,14,13,13,13,15,15,12,14,13,15,
- 14,15,15,15,16,16,14,15,15,17,15, 7, 9, 9,12,11,
- 9,10,10,12,12, 9,11,10,13,12,11,12,12,14,14,11,
- 13,12,15,14, 9,10,10,12,12,10,10,11,12,13,10,11,
- 11,14,13,12,12,13,14,15,12,13,13,15,14, 9,10,10,
- 12,12,10,11,11,13,13,10,11,10,14,12,12,13,13,15,
- 15,12,13,12,15,13,11,12,12,14,14,12,12,13,14,15,
- 12,13,13,15,15,14,13,14,13,16,14,15,15,16,16,11,
- 12,12,14,14,13,13,14,15,15,12,13,12,15,14,15,15,
- 15,16,16,14,15,14,17,14,10,11,12,13,14,11,12,13,
- 14,15,11,12,12,14,15,13,14,15,15,17,14,14,14,16,
- 16,11,12,13,12,15,12,12,14,13,16,13,13,14,13,16,
- 14,14,15,14,17,15,15,15,15,17,11,13,12,15,15,13,
- 13,14,15,16,12,14,13,16,15,15,15,15,17,17,15,15,
- 15,17,16,14,14,15,14,16,14,14,16,14,17,15,15,15,
- 14,17,16,16,17,15,18,17,17,17,16,18,14,15,15,17,
- 16,15,16,16,17,17,15,16,15,17,16,17,17,17,18,18,
- 16,17,16,18,17,10,11,11,14,13,11,12,12,14,14,11,
- 13,12,15,14,14,14,14,16,16,14,15,14,16,15,11,12,
- 12,15,13,12,13,13,15,14,13,14,13,16,14,14,15,15,
- 16,16,15,16,15,17,16,11,13,12,15,14,13,13,14,15,
- 15,12,14,13,16,14,15,15,15,17,17,14,16,15,17,16,
- 14,14,14,16,15,14,15,15,16,16,15,16,15,17,16,16,
- 16,16,16,17,16,17,17,18,17,14,15,15,16,16,15,15,
- 16,17,16,14,15,15,17,16,17,17,17,18,18,16,17,16,
- 18,16, 6, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,
- 11,10,11,12,13,14,10,11,11,14,13, 8, 9, 9,11,12,
- 9,10,11,12,13, 9,11,10,13,12,11,12,13,14,15,11,
- 12,12,15,14, 8, 9, 9,12,11, 9,10,10,12,13, 9,10,
- 10,13,12,11,12,12,14,15,11,12,12,14,13,11,11,12,
- 13,14,11,12,13,13,15,12,13,13,14,14,13,14,14,14,
- 16,14,15,14,16,16,10,11,11,14,13,11,12,12,14,14,
- 11,12,12,14,13,13,14,14,15,16,13,14,13,16,14, 7,
- 9, 9,11,11, 9,10,11,12,13, 9,10,10,12,12,11,12,
- 13,14,15,11,12,12,14,14, 9,10,10,12,12,10,10,11,
- 12,13,10,11,11,13,13,12,12,13,13,15,12,13,13,15,
- 15, 9,10,10,12,12,10,11,11,13,13,10,11,10,13,12,
- 12,13,13,14,15,12,13,12,15,13,11,12,12,14,14,12,
- 12,13,14,15,13,14,13,15,15,14,13,15,13,16,15,15,
- 15,16,16,11,12,12,14,14,12,13,13,14,15,12,13,12,
- 15,14,14,15,15,16,17,13,14,13,16,13, 8, 9, 9,12,
- 11, 9,10,10,12,13, 9,10,10,13,12,11,12,12,14,15,
- 11,12,12,15,14, 9,10,10,12,13,10,11,12,13,14,10,
- 11,11,14,13,12,13,13,15,15,12,13,13,15,15, 9,10,
- 9,13,11,10,11,10,13,13,10,12,10,14,12,12,13,12,
- 15,15,12,13,12,15,14,11,12,13,14,15,12,13,14,14,
- 15,13,13,13,15,15,14,15,15,15,17,15,15,15,16,16,
- 11,12,11,15,13,12,13,13,15,14,12,13,12,16,13,14,
- 15,15,16,16,14,15,14,17,14,10,11,11,13,14,11,12,
- 13,14,15,11,12,12,14,14,14,14,15,15,17,14,14,14,
- 15,16,11,12,13,14,15,12,13,14,14,16,13,14,13,15,
- 15,14,15,16,15,17,15,15,15,17,17,11,12,12,13,15,
- 13,13,14,14,16,12,13,13,14,15,15,15,15,16,17,14,
- 15,15,16,16,14,15,15,16,16,14,15,15,16,17,15,15,
- 16,16,17,16,16,17,16,18,17,17,17,18,18,14,14,15,
- 15,16,15,15,15,16,17,14,15,15,16,16,16,17,17,17,
- 18,16,16,16,17,16,10,11,11,14,13,11,13,12,15,14,
- 11,13,12,15,14,14,15,14,16,16,13,15,14,17,15,11,
- 12,13,15,15,12,13,14,15,16,13,14,13,16,15,15,15,
- 15,16,17,15,15,15,17,16,11,13,11,15,12,13,14,13,
- 16,13,12,14,12,16,13,15,15,15,17,15,14,16,14,17,
- 14,14,15,15,16,17,15,15,16,16,17,15,16,15,17,17,
- 16,16,17,17,18,16,17,17,18,18,14,15,14,17,13,15,
- 16,15,17,15,15,16,15,17,14,16,17,16,18,16,16,17,
- 16,18,15, 9,11,11,13,13,10,12,12,14,14,11,12,12,
- 14,14,13,14,14,15,16,13,14,14,16,16,10,11,12,14,
- 14,11,12,13,14,15,11,13,13,15,15,13,14,14,15,16,
- 14,15,15,16,16,11,12,12,14,14,12,13,13,15,15,12,
- 13,12,15,14,14,15,15,16,16,14,15,14,17,16,12,13,
- 13,15,16,13,13,14,15,16,13,14,14,16,16,14,15,16,
- 16,17,15,16,16,17,17,13,14,14,16,15,14,15,15,17,
- 16,14,15,14,17,15,16,16,17,17,17,16,16,16,18,16,
- 10,11,12,14,14,11,12,13,14,15,11,13,12,15,15,13,
- 14,15,16,16,14,15,15,17,16,11,11,13,14,15,12,12,
- 14,14,16,12,13,14,15,15,14,14,15,16,17,15,15,15,
- 17,17,12,13,12,15,15,13,14,14,16,15,13,14,13,16,
- 15,15,16,15,17,17,15,16,15,17,16,13,12,15,14,16,
- 14,13,15,14,17,14,13,15,15,17,15,14,17,15,18,16,
- 15,17,17,18,14,15,15,17,16,15,16,16,17,17,15,16,
- 15,17,16,16,17,17,18,18,16,17,16,18,17,10,11,11,
- 14,14,11,12,12,14,15,11,13,12,15,14,13,14,14,16,
- 16,14,15,14,16,16,11,12,12,14,14,12,12,13,15,15,
- 12,13,13,15,15,14,14,15,16,16,14,15,15,17,16,11,
- 12,12,15,15,13,13,13,15,15,12,13,13,15,15,15,15,
- 15,17,17,14,15,15,17,16,13,14,13,16,15,14,14,14,
- 16,16,14,15,14,17,16,15,15,16,16,17,16,17,16,18,
- 17,14,15,15,16,16,15,15,15,17,17,14,15,15,17,16,
- 16,17,17,18,18,16,17,16,18,16,12,13,13,15,15,13,
- 14,14,16,16,13,14,14,16,16,14,15,16,16,18,15,16,
- 16,17,17,13,13,14,14,16,14,14,15,15,17,14,14,15,
- 15,17,15,15,17,15,18,16,16,17,17,18,13,14,14,16,
- 16,14,15,15,16,17,14,15,15,17,16,16,17,16,17,18,
- 16,17,16,18,17,15,14,16,13,18,16,15,17,14,18,16,
- 15,17,14,18,17,16,18,15,19,17,17,18,16,19,15,16,
- 16,17,17,16,17,17,18,18,16,17,16,18,17,18,18,18,
- 19,18,17,18,17,19,17,11,12,12,15,15,13,13,14,15,
- 16,13,14,13,16,15,15,15,15,16,17,15,16,15,17,16,
- 12,13,13,15,15,13,13,14,15,16,14,15,14,16,15,15,
- 15,16,16,17,16,16,16,18,17,12,13,13,15,15,14,14,
- 15,16,16,13,14,13,16,15,16,16,16,17,17,15,16,15,
- 18,16,15,15,15,17,15,14,15,15,16,16,16,17,16,17,
- 16,16,16,17,16,17,17,18,17,19,18,15,15,16,17,17,
- 16,16,16,17,17,15,16,15,17,16,17,18,18,18,18,16,
- 17,16,18,16, 9,11,11,13,13,11,12,12,14,14,10,12,
- 12,14,14,13,14,14,15,16,13,14,14,16,15,11,12,12,
- 14,14,12,12,13,14,15,12,13,13,15,15,14,14,15,16,
- 17,14,15,15,16,16,10,12,11,14,14,11,13,13,15,15,
- 11,13,12,15,14,14,14,15,16,16,13,14,14,16,15,13,
- 14,14,15,16,14,14,15,15,17,14,15,15,16,17,16,16,
- 16,16,18,16,16,17,17,17,12,13,13,16,15,13,14,14,
- 16,16,12,14,13,16,15,15,16,16,17,17,14,16,15,17,
- 16,10,11,11,14,14,11,12,13,14,15,11,12,12,15,14,
- 14,14,15,16,16,13,14,14,16,16,11,12,12,14,15,12,
- 13,14,15,15,13,13,13,15,15,14,15,15,16,17,15,15,
- 15,16,17,11,12,12,14,14,12,13,13,15,15,12,13,12,
- 15,15,14,15,15,16,17,14,15,14,16,16,14,14,15,16,
- 16,14,15,15,16,17,15,16,15,17,17,16,16,17,16,18,
- 16,17,17,18,18,13,13,14,15,16,14,14,15,16,17,14,
- 14,14,16,15,16,16,17,17,18,15,16,15,17,16,10,12,
- 11,14,14,11,13,13,15,15,11,13,12,15,15,14,15,15,
- 16,16,13,15,14,16,16,12,12,13,15,15,13,13,14,15,
- 16,13,14,14,16,15,15,15,16,16,17,15,15,15,17,17,
- 11,13,11,15,14,12,14,13,16,15,12,14,12,16,14,15,
- 15,15,17,17,14,15,14,17,15,14,15,15,16,17,15,15,
- 16,16,17,15,16,16,17,17,16,16,17,17,18,16,17,17,
- 18,18,13,14,12,16,14,14,15,13,17,15,14,15,13,17,
- 14,16,17,15,18,17,15,17,14,18,15,11,12,12,14,15,
- 13,13,14,15,16,13,14,13,16,15,15,15,16,16,17,15,
- 15,15,16,16,12,13,13,15,15,13,13,14,15,16,14,15,
- 14,16,16,15,15,16,16,18,16,16,16,18,17,12,13,13,
- 15,15,14,14,15,15,16,13,14,13,15,15,16,16,16,17,
- 18,15,16,15,17,16,15,16,15,17,16,15,15,16,16,17,
- 16,17,16,17,17,16,16,17,16,18,17,18,18,18,18,14,
- 15,15,15,17,16,15,17,16,17,14,15,15,16,16,17,17,
- 18,18,19,16,16,16,17,16,12,13,13,15,15,13,14,14,
- 16,16,13,14,14,16,16,15,16,16,17,17,15,16,15,18,
- 16,13,14,14,16,16,14,15,15,16,17,14,15,15,17,16,
- 16,16,17,17,18,16,17,16,18,18,13,14,13,16,14,14,
- 15,14,17,15,14,15,14,17,14,16,17,16,18,17,15,17,
- 15,18,15,15,16,16,17,18,16,16,17,17,18,16,17,17,
- 17,18,17,17,18,18,19,17,18,18,19,18,15,16,14,17,
- 13,16,17,15,18,14,16,17,15,18,14,18,18,17,19,16,
- 17,18,16,19,15,
-};
-
-static const static_codebook _44p7_p2_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p7_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p7_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44p7_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p7_p3_0[] = {
- 2, 5, 5, 4, 7, 7, 4, 7, 7, 5, 7, 8, 7, 8,10, 8,
- 9, 9, 5, 7, 7, 8, 9, 9, 7,10, 8, 5, 7, 8, 8, 9,
- 10, 8,10,10, 8, 9,10,10,10,12,10,12,12, 8,10,10,
- 10,12,12,10,12,11, 5, 8, 7, 8,10,10, 8,10, 9, 8,
- 10,10,10,11,12,10,12,12, 8,10, 9,10,12,12,10,12,
- 10, 5, 8, 8, 7,10,10, 8,10,10, 7, 9,10, 9,10,12,
- 10,12,12, 8,10,10,10,12,12,10,12,11, 7, 9,10, 9,
- 11,12,10,12,11, 9, 9,12,11,10,14,12,12,13,10,12,
- 11,12,13,13,11,14,12, 7,10, 9,10,11,11,10,12,11,
- 9,11,11,11,11,13,12,14,13,10,12,12,12,14,14,11,
- 14,12, 5, 8, 8, 8,10,10, 7,10,10, 8,10,10,10,11,
- 12,10,12,12, 7,10, 9,10,12,12, 9,12,10, 7, 9,10,
- 10,11,12,10,11,11,10,12,12,11,12,14,12,14,14, 9,
- 11,11,12,13,14,11,13,11, 7,10, 9,10,11,12, 9,12,
- 11,10,11,12,11,12,14,12,13,13, 9,12, 9,12,13,12,
- 11,14,10,
-};
-
-static const static_codebook _44p7_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p7_p3_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44p7_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44p7_p3_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p7_p3_1[] = {
- 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 8, 7,
- 8, 8, 7, 8, 7, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8, 8,
- 8, 8, 8, 8, 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9,
- 8, 7, 8, 8, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 7, 8, 8, 8,
- 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8,
- 8, 9, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8,
- 9, 8, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
- 9, 8, 8, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8,
- 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8, 8, 8, 8, 8, 9,
- 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9,
- 8, 9, 8,
-};
-
-static const static_codebook _44p7_p3_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p7_p3_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p7_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44p7_p4_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p7_p4_0[] = {
- 1, 5, 5, 5, 7, 8, 5, 8, 7, 5, 7, 8, 7, 8,10, 8,
- 10,10, 5, 8, 7, 8,10,10, 7,10, 8, 6, 8, 9, 9,10,
- 12, 9,11,11, 9,10,11,11,11,13,11,13,13, 9,11,11,
- 11,12,13,11,13,11, 6, 9, 8, 9,11,11, 9,12,10, 9,
- 11,11,11,11,13,11,13,13, 9,11,10,11,13,13,11,13,
- 11, 6, 9, 9, 8,10,11, 9,12,11, 8,10,11,10,11,13,
- 11,13,13, 9,11,11,11,13,12,11,13,11, 8,10,10, 9,
- 11,12,10,12,12,10,10,12,11,11,14,12,13,14,10,12,
- 12,12,13,13,11,14,11, 8,11,10,11,12,13,11,14,12,
- 10,12,11,11,12,14,13,15,14,10,12,12,13,14,15,12,
- 14,12, 5, 9, 9, 9,11,12, 8,11,10, 9,11,11,11,11,
- 13,11,12,13, 8,11,10,11,13,13,10,13,11, 8,10,11,
- 11,12,14,11,13,12,10,12,12,12,12,14,14,15,14,10,
- 11,12,13,14,15,11,14,12, 8,10,10,10,12,12, 9,12,
- 11,10,12,12,11,11,14,12,13,13,10,12,10,12,14,13,
- 11,13,11,
-};
-
-static const static_codebook _44p7_p4_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p7_p4_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44p7_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44p7_p4_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p7_p4_1[] = {
- 7, 8, 8,10,10, 8, 9, 9,10,11, 8, 9, 9,10,10, 9,
- 10,10,11,11, 9,10,10,11,11, 8, 9, 9,10,10, 9, 9,
- 10,11,11, 9,10,10,11,11,10,10,11,11,11,10,11,11,
- 11,11, 8, 9, 9,10,10, 9,10,10,11,11, 9,10, 9,11,
- 11,10,11,11,11,11,10,11,10,11,11,10,10,10,11,11,
- 10,11,11,11,11,10,11,11,11,11,11,11,11,11,12,11,
- 11,11,11,12,10,10,10,11,11,10,11,11,11,11,10,11,
- 11,11,11,11,11,11,12,11,11,11,11,12,11, 8, 9,10,
- 11,11, 9,10,11,11,11, 9,10,10,11,11,10,11,11,12,
- 12,10,11,11,12,12,10,10,10,11,11,10,10,11,11,12,
- 10,11,11,12,12,11,11,12,12,12,11,11,12,12,12,10,
- 10,10,11,11,10,11,11,12,12,10,11,11,12,11,11,12,
- 12,12,12,11,12,11,12,12,11,11,11,11,12,11,11,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,11,11,11,12,12,11,12,12,12,12,11,12,11,12,12,
- 12,12,12,12,12,12,12,12,12,12, 8,10, 9,11,11, 9,
- 10,10,11,11, 9,10,10,11,11,10,11,11,12,12,10,11,
- 11,12,12,10,10,10,11,11,10,11,11,12,12,10,11,11,
- 12,12,11,11,12,12,12,11,12,12,12,12,10,10,10,11,
- 11,10,11,11,12,12,10,11,10,12,11,11,12,11,12,12,
- 11,12,11,12,12,11,11,11,12,12,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,
- 11,12,11,11,12,12,12,12,11,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,10,11,11,11,12,11,11,12,12,
- 12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
- 11,11,12,12,12,11,12,12,12,12,12,12,12,12,12,12,
- 12,13,12,13,12,12,12,13,13,11,12,11,12,12,11,12,
- 12,12,12,11,12,12,12,12,12,12,12,13,13,12,12,12,
- 13,13,12,12,12,12,12,12,12,12,12,13,12,12,13,13,
- 13,12,13,13,13,13,12,13,13,13,13,12,12,12,12,12,
- 12,12,13,13,13,12,12,12,13,12,12,13,13,13,13,12,
- 13,13,13,13,10,11,11,12,11,11,11,11,12,12,11,12,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,13,
- 13,12,12,12,13,13,11,12,11,12,12,12,12,12,12,12,
- 11,12,11,12,12,12,12,12,13,13,12,12,12,13,12,12,
- 12,12,12,12,12,12,12,13,13,12,12,12,13,13,12,13,
- 13,13,13,12,13,13,13,13,12,12,12,12,12,12,12,12,
- 13,13,12,13,12,13,12,12,13,13,13,13,13,13,13,13,
- 13, 8,10,10,11,11, 9,10,10,11,11, 9,10,10,11,11,
- 10,11,11,12,12,10,11,11,12,12, 9,10,10,11,11,10,
- 10,11,11,12,10,11,11,12,12,11,11,12,12,12,11,11,
- 12,12,12,10,10,10,11,11,10,11,11,12,12,10,11,10,
- 12,11,11,12,11,12,12,11,12,11,12,12,11,11,11,12,
- 12,11,11,12,12,12,11,12,12,12,12,11,12,12,12,12,
- 12,12,12,12,12,11,11,11,12,11,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12, 9,10,
- 10,11,11,10,11,11,11,12,10,11,11,12,12,11,11,11,
- 12,12,11,11,11,12,12,10,10,11,11,12,11,11,12,12,
- 12,11,11,11,12,12,11,11,12,12,12,11,12,12,12,12,
- 10,11,11,12,12,11,11,11,12,12,11,12,11,12,12,11,
- 12,12,12,12,11,12,12,12,12,11,11,12,12,12,11,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,12,
- 12,13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,13,12, 9,10,10,11,11,
- 10,11,11,12,12,10,11,11,12,11,11,12,11,12,12,11,
- 12,11,12,12,10,11,11,12,12,11,11,11,12,12,11,12,
- 11,12,12,11,12,12,12,12,12,12,12,12,12,10,11,11,
- 12,12,11,12,11,12,12,11,12,11,12,12,12,12,12,13,
- 12,12,12,12,12,12,11,12,11,12,12,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,13,12,12,12,12,13,11,
- 12,12,12,12,12,12,12,13,12,11,12,12,12,12,12,12,
- 12,13,12,12,12,12,13,12,10,11,11,12,12,11,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
- 13,11,11,12,12,12,12,12,12,12,13,12,12,12,12,12,
- 12,12,13,12,13,12,12,13,13,13,11,12,12,12,12,12,
- 12,12,13,13,12,12,12,13,12,12,13,12,13,13,12,13,
- 12,13,13,12,12,12,12,12,12,12,13,12,13,12,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,13,
- 13,12,13,13,13,13,12,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,10,11,11,12,12,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,13,13,12,12,12,13,13,11,12,
- 12,12,12,12,12,12,12,13,12,12,12,13,12,12,12,13,
- 13,13,12,13,13,13,13,11,12,12,12,12,12,12,12,13,
- 13,12,12,12,13,12,12,13,13,13,13,12,13,12,13,13,
- 12,12,12,12,12,12,13,13,13,13,12,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,12,12,12,13,12,12,13,
- 13,13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13, 8,10,10,11,11, 9,10,10,11,11, 9,10,10,11,
- 11,10,11,11,12,12,10,11,11,12,12,10,10,10,11,11,
- 10,11,11,11,12,10,11,11,12,12,11,11,12,12,12,11,
- 11,12,12,12, 9,10,10,11,11,10,11,11,12,12,10,11,
- 10,12,11,11,12,11,12,12,11,12,11,12,12,11,11,11,
- 12,12,11,11,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,11,11,11,12,11,11,12,12,12,12,
- 11,12,11,12,12,12,12,12,12,12,12,12,12,12,12, 9,
- 10,10,11,11,10,11,11,12,12,10,11,11,12,12,11,11,
- 12,12,12,11,12,12,12,12,10,11,11,12,12,11,11,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,10,11,11,12,12,11,11,12,12,12,11,11,11,12,12,
- 12,12,12,12,12,11,12,12,12,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,13,12,13,12,12,
- 12,13,12,11,12,12,12,12,12,12,12,12,12,11,12,12,
- 12,12,12,12,12,13,12,12,12,12,13,12, 9,10,10,11,
- 11,10,11,11,12,12,10,11,11,12,12,11,11,11,12,12,
- 11,12,11,12,12,10,11,11,12,12,11,11,12,12,12,11,
- 11,11,12,12,11,12,12,12,12,11,12,12,12,12,10,11,
- 10,12,11,11,11,11,12,12,11,12,11,12,12,11,12,12,
- 12,12,11,12,11,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,13,12,12,12,12,13,
- 11,12,11,12,12,12,12,12,12,12,11,12,12,12,12,12,
- 12,12,13,12,12,12,12,13,12,10,11,11,12,12,11,12,
- 12,12,12,11,12,12,12,12,12,12,12,13,13,12,12,12,
- 13,13,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
- 13,12,12,13,13,13,12,13,13,13,13,11,12,12,12,12,
- 12,12,12,12,13,12,12,12,12,12,12,13,13,13,13,12,
- 13,12,13,13,12,12,12,12,13,12,13,13,13,13,12,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,
- 12,12,12,13,13,13,13,12,13,12,13,13,13,13,13,13,
- 13,13,13,13,13,13,11,11,11,12,12,11,12,12,12,12,
- 11,12,12,12,12,12,12,12,13,13,12,12,12,13,12,11,
- 12,12,12,12,12,12,12,13,13,12,12,12,13,13,12,12,
- 13,13,13,12,13,13,13,13,11,12,11,12,12,12,12,12,
- 13,12,12,12,12,13,12,12,13,12,13,13,12,13,12,13,
- 12,12,12,12,12,13,12,12,13,13,13,12,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,
- 13,13,13,13,12,13,12,13,12,13,13,13,13,13,13,13,
- 13,13,13,10,11,11,12,12,10,11,11,12,12,10,11,11,
- 12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,12,
- 12,11,11,12,12,12,11,12,12,12,12,12,12,12,13,13,
- 12,12,12,13,13,11,11,11,12,12,11,12,12,12,12,11,
- 12,11,13,12,12,12,12,13,13,12,12,12,13,13,11,12,
- 12,12,12,12,12,12,12,13,12,12,12,13,13,12,12,13,
- 13,13,12,13,12,13,13,11,12,12,12,12,12,12,12,13,
- 12,12,12,12,13,12,12,13,13,13,13,12,13,13,13,13,
- 10,11,11,12,12,11,12,12,12,12,11,12,12,12,12,12,
- 12,12,13,13,12,12,12,13,13,11,11,12,12,12,11,12,
- 12,12,13,12,12,12,13,13,12,12,13,13,13,12,12,13,
- 13,13,11,12,12,12,12,12,12,12,13,13,12,12,12,13,
- 13,12,13,13,13,13,12,13,12,13,13,12,12,12,12,13,
- 12,12,13,12,13,12,12,13,13,13,12,12,13,13,13,12,
- 13,13,13,13,12,12,12,12,13,12,12,13,13,13,12,12,
- 12,13,13,13,13,13,13,13,12,13,13,13,13,10,11,11,
- 12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,13,
- 13,12,12,12,13,13,11,12,12,12,12,11,12,12,12,13,
- 12,12,12,13,13,12,12,13,13,13,12,13,13,13,13,11,
- 12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,13,
- 12,13,13,12,13,12,13,13,12,12,12,12,12,12,12,12,
- 13,13,12,13,12,13,13,12,13,13,13,13,13,13,13,13,
- 13,12,12,12,13,12,12,13,13,13,13,12,13,12,13,13,
- 13,13,13,13,13,13,13,13,13,13,11,11,11,12,12,11,
- 12,12,12,12,11,12,12,12,12,12,12,12,13,13,12,12,
- 12,13,13,11,12,12,12,12,12,12,12,12,13,12,12,12,
- 13,13,12,12,13,13,13,12,12,13,13,13,11,12,12,12,
- 12,12,12,12,13,13,12,12,12,13,13,12,13,13,13,13,
- 12,13,12,13,13,12,12,12,12,12,12,12,13,12,13,12,
- 13,13,13,13,12,13,13,12,13,13,13,13,13,13,12,12,
- 12,12,12,12,13,13,13,13,12,13,12,13,13,13,13,13,
- 13,13,13,13,13,13,13,10,11,11,12,12,11,12,12,12,
- 13,11,12,12,13,12,12,12,12,13,13,12,12,12,13,13,
- 11,12,12,12,12,12,12,12,13,13,12,13,12,13,13,12,
- 12,13,13,13,12,13,13,13,13,11,12,12,12,13,12,12,
- 12,13,13,12,12,12,13,12,12,13,13,13,13,12,13,12,
- 13,13,12,12,12,12,12,12,12,13,13,13,12,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,12,12,12,13,12,
- 12,13,13,13,13,12,13,12,13,13,13,13,13,13,13,13,
- 13,13,13,13,10,11,11,12,12,10,11,11,12,12,10,11,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,
- 12,12,11,11,12,12,13,11,12,12,12,12,12,12,12,13,
- 13,12,12,12,13,13,10,11,11,12,12,11,12,12,12,12,
- 11,12,11,12,12,12,12,12,13,13,12,12,12,13,12,11,
- 12,12,12,12,12,12,12,12,13,12,12,12,13,13,12,12,
- 13,13,13,12,13,13,13,13,11,12,12,12,12,12,12,12,
- 13,13,12,12,12,13,12,12,13,13,13,13,12,13,12,13,
- 13,10,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
- 12,12,12,13,13,12,12,12,13,13,11,12,12,12,12,12,
- 12,12,12,13,12,12,12,13,13,12,12,13,13,13,12,12,
- 13,13,13,11,12,12,12,12,12,12,12,13,13,11,12,12,
- 13,12,12,13,13,13,13,12,13,12,13,13,12,12,12,12,
- 13,12,12,13,13,13,12,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,12,12,12,13,12,12,12,13,13,13,12,
- 12,12,13,13,13,13,13,13,13,12,13,13,13,13,10,11,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,
- 13,13,12,12,12,13,13,11,12,12,12,12,12,12,12,12,
- 13,12,12,12,13,13,12,12,13,13,13,12,12,13,13,13,
- 11,12,11,12,12,12,12,12,13,13,11,12,12,13,12,12,
- 13,12,13,13,12,13,12,13,13,12,12,12,12,12,12,12,
- 13,13,13,12,13,12,13,13,12,13,13,13,13,13,13,13,
- 13,13,12,12,12,13,12,12,13,12,13,13,12,13,12,13,
- 13,13,13,13,13,13,12,13,12,13,13,10,11,11,12,12,
- 11,12,12,12,12,11,12,12,13,12,12,12,12,13,13,12,
- 12,12,13,13,11,12,12,12,12,12,12,12,12,13,12,12,
- 12,13,13,12,12,13,13,13,12,13,13,13,13,11,12,12,
- 12,12,12,12,12,13,13,12,12,12,13,12,12,13,13,13,
- 13,12,13,12,13,13,12,12,12,12,13,12,12,13,13,13,
- 12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,
- 12,12,12,12,12,13,13,13,13,12,13,12,13,13,13,13,
- 13,13,13,13,13,13,13,13,11,11,11,12,12,11,12,12,
- 12,12,11,12,12,12,12,12,12,12,13,13,12,12,12,13,
- 13,11,12,12,12,12,12,12,12,13,13,12,12,12,13,13,
- 12,12,13,13,13,12,13,13,13,13,11,12,12,12,12,12,
- 12,12,13,13,12,12,12,13,12,12,13,12,13,13,12,13,
- 12,13,13,12,12,12,12,12,12,13,13,13,13,12,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,
- 12,12,13,13,13,13,12,13,12,13,12,13,13,13,13,13,
- 13,13,13,13,12,
-};
-
-static const static_codebook _44p7_p4_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p7_p4_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p7_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44p7_p5_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p7_p5_0[] = {
- 2, 6, 6, 9, 9, 5, 7, 8,10,11, 5, 8, 7,11,10, 8,
- 10,11,12,13, 8,11,10,13,12, 6, 7, 8,10,11, 7, 8,
- 10,10,12, 8, 9, 9,12,11,10,10,12,11,14,10,11,12,
- 14,13, 6, 8, 7,11,10, 8, 9, 9,11,12, 7,10, 8,12,
- 10,10,12,12,13,14,10,12,10,14,11, 9,10,11,11,12,
- 10,10,11,11,13,11,12,12,13,13,12,11,13,11,15,13,
- 14,13,14,14, 9,11,10,12,11,11,12,12,13,13,10,11,
- 10,13,11,13,13,14,14,14,12,13,11,14,11, 7, 8, 9,
- 11,12, 9, 9,11,12,13, 9,10,10,13,12,11,12,13,13,
- 15,11,12,12,14,14, 9,10,10,12,13,10,10,12,12,14,
- 11,11,11,13,13,12,12,13,13,15,12,13,13,15,14, 9,
- 10,10,12,13,10,11,11,13,14,10,12,11,14,13,12,13,
- 13,14,15,12,13,13,15,14,12,12,13,13,14,12,13,13,
- 13,15,13,14,14,14,15,14,14,15,14,16,14,15,15,16,
- 16,12,13,13,14,14,13,13,14,15,14,12,13,13,15,14,
- 14,15,15,15,16,14,15,14,16,14, 7, 9, 8,12,11, 9,
- 10,10,12,13, 9,11, 9,13,12,11,12,12,14,14,11,13,
- 12,15,13, 9,10,10,13,12,10,11,12,13,14,10,12,11,
- 14,13,12,13,13,14,15,13,13,13,15,14, 9,10,10,13,
- 12,11,11,11,13,13,10,12,10,14,12,13,13,13,14,15,
- 12,13,12,15,13,12,13,13,14,14,12,13,13,14,15,13,
- 14,13,15,15,14,14,15,14,16,14,15,15,16,15,12,13,
- 12,14,13,13,13,13,15,14,12,13,13,15,13,14,15,15,
- 16,15,14,15,14,16,14,11,12,12,13,14,12,13,14,14,
- 15,12,13,13,14,15,14,14,15,15,16,14,15,15,16,16,
- 12,13,13,14,15,13,13,14,14,16,13,14,14,15,15,15,
- 15,16,15,17,15,15,15,16,16,12,13,13,14,15,13,14,
- 14,15,16,13,14,14,15,15,15,15,16,16,17,15,15,15,
- 17,16,14,15,15,16,16,15,15,16,15,16,15,16,16,16,
- 17,16,16,17,16,18,16,16,17,18,17,14,15,15,16,16,
- 15,16,16,16,17,15,16,15,17,16,16,17,17,17,18,16,
- 16,16,17,16,11,12,12,14,13,12,13,13,15,14,12,14,
- 13,15,14,14,15,15,16,16,14,15,14,16,15,12,13,13,
- 15,14,13,14,14,15,15,13,14,14,16,15,15,15,15,16,
- 16,15,16,15,17,16,12,13,13,15,14,13,14,14,15,15,
- 13,14,13,16,14,15,15,15,16,16,15,15,15,17,15,14,
- 15,15,16,16,15,15,15,16,16,15,16,16,17,17,16,16,
- 17,17,17,16,17,17,18,17,14,15,15,16,15,15,15,16,
- 16,16,15,15,15,17,15,17,17,17,18,17,16,17,16,18,
- 16, 6, 9, 9,12,12, 8,10,10,12,13, 9,11,10,13,12,
- 10,12,12,14,14,11,13,12,14,14, 8,10,10,12,12, 9,
- 10,11,12,14,10,11,11,13,13,12,12,13,13,15,12,13,
- 13,15,14, 9,10,10,13,13,10,11,11,13,13,10,12,10,
- 14,13,12,13,13,14,15,12,13,13,15,14,11,12,12,13,
- 14,12,12,13,13,15,12,13,13,14,14,13,13,14,13,16,
- 14,15,15,16,15,11,12,12,14,14,13,13,13,15,14,12,
- 13,13,15,14,14,15,15,16,15,14,14,14,16,14, 7, 9,
- 10,12,12, 9,10,11,13,13, 9,11,10,13,13,11,12,13,
- 14,15,12,13,13,15,14, 9,10,11,12,13,10,10,12,13,
- 14,11,11,12,14,14,12,12,14,14,15,13,13,13,15,15,
- 9,11,11,13,13,11,12,12,14,14,10,12,10,14,13,13,
- 14,13,15,15,12,14,13,15,14,12,12,13,13,15,12,12,
- 14,13,15,13,14,14,15,15,14,14,15,14,17,14,15,15,
- 16,16,12,13,13,15,14,13,14,14,15,15,12,14,13,15,
- 14,14,15,15,16,16,14,15,14,16,14, 7,10,10,12,12,
- 10,11,11,12,13,10,12,10,14,12,12,13,13,14,15,12,
- 13,13,15,14, 9,11,10,13,12,10,10,12,12,14,11,13,
- 12,14,13,13,13,14,13,15,13,14,14,15,14,10,11,11,
- 13,13,12,12,12,13,14,10,12,10,14,12,13,14,14,15,
- 15,13,14,13,15,13,12,13,13,14,14,12,12,13,14,15,
- 13,14,14,15,15,13,13,14,13,15,14,15,15,16,16,12,
- 13,13,14,14,13,14,14,15,15,12,13,13,15,13,15,15,
- 15,16,16,13,14,13,16,13,11,12,13,14,14,12,13,14,
- 14,15,12,13,13,15,15,14,14,15,15,17,14,15,15,16,
- 16,12,13,14,14,15,13,13,14,14,16,13,14,14,15,16,
- 14,14,16,15,17,15,15,16,16,16,12,13,13,15,15,13,
- 14,14,15,16,13,14,14,15,16,15,15,16,17,17,15,16,
- 15,17,16,14,15,15,15,16,15,15,16,15,17,15,15,16,
- 16,17,16,16,16,16,18,16,16,17,17,17,14,15,15,16,
- 16,15,16,16,16,17,15,16,15,17,16,16,17,17,17,17,
- 16,17,16,18,17,11,12,12,14,14,13,13,14,14,15,13,
- 14,13,15,14,14,15,15,15,16,14,15,15,17,15,12,13,
- 13,15,14,13,13,14,15,15,14,15,14,16,15,15,15,15,
- 15,16,15,16,15,17,16,12,13,13,15,15,14,14,14,15,
- 16,13,14,13,16,15,15,15,16,16,17,15,16,15,17,15,
- 14,15,15,16,16,14,15,15,16,16,15,16,16,17,16,15,
- 15,16,15,17,16,17,17,18,17,14,15,15,16,16,15,16,
- 16,16,17,14,15,15,17,16,17,17,17,17,18,15,16,16,
- 18,15, 6, 9, 9,12,12, 9,10,11,12,13, 8,10,10,13,
- 12,11,12,13,14,14,10,12,12,14,13, 9,10,10,12,13,
- 10,10,12,13,14,10,11,11,13,13,12,13,13,14,15,12,
- 13,13,15,14, 8,10,10,12,12,10,11,11,13,13, 9,11,
- 10,13,13,12,13,13,14,15,12,13,12,15,13,11,12,12,
- 14,14,12,13,13,13,15,13,13,13,14,15,14,14,15,14,
- 16,14,15,15,15,15,11,12,12,14,13,12,13,13,15,14,
- 12,13,12,15,13,14,14,15,16,16,13,14,13,16,13, 7,
- 10,10,12,12,10,10,12,12,14,10,11,11,13,12,12,13,
- 13,13,15,12,13,13,15,14,10,11,11,13,13,10,10,12,
- 12,14,12,12,12,14,13,13,13,14,13,15,13,14,14,15,
- 14, 9,10,11,13,13,11,12,12,13,14,10,12,10,14,12,
- 13,13,14,14,15,13,13,12,15,13,12,13,13,14,14,12,
- 13,13,14,15,13,14,14,15,15,13,13,15,13,16,15,15,
- 15,16,16,12,13,13,14,14,13,14,14,15,15,12,13,12,
- 15,14,15,15,15,16,16,13,14,13,15,13, 7,10, 9,12,
- 12, 9,10,11,13,13, 9,11,10,13,13,11,13,13,14,15,
- 11,13,12,15,14, 9,11,11,13,13,10,10,12,13,14,11,
- 12,12,14,14,12,13,14,14,15,13,13,13,15,15, 9,11,
- 10,13,12,11,12,11,14,14,10,12,10,14,13,13,14,13,
- 15,15,12,14,12,15,14,12,13,13,14,15,13,13,14,14,
- 15,13,14,14,15,15,14,14,15,14,17,14,15,15,16,16,
- 12,13,12,15,13,13,14,14,15,15,12,14,13,15,13,14,
- 15,15,16,16,14,15,14,16,14,11,12,12,14,14,13,13,
- 14,14,15,13,14,13,15,15,14,15,15,16,17,14,15,15,
- 16,15,12,13,13,15,15,13,13,14,15,16,14,14,14,16,
- 15,15,15,16,15,17,15,16,15,17,16,12,13,13,14,15,
- 14,14,15,15,16,13,14,13,15,15,15,15,16,16,17,15,
- 15,15,16,15,14,15,15,16,16,14,15,15,16,17,15,16,
- 16,17,17,16,15,16,15,17,16,17,17,17,17,14,15,15,
- 15,16,15,15,16,16,17,14,15,15,16,16,16,16,17,17,
- 18,15,16,15,17,15,11,13,12,14,14,12,13,13,15,15,
- 12,14,13,15,14,14,15,15,16,16,14,15,14,16,15,12,
- 13,13,15,15,13,14,14,15,16,13,14,14,16,16,15,15,
- 16,16,17,15,16,15,17,16,12,13,13,15,14,13,14,14,
- 16,15,13,14,13,16,14,15,16,15,17,16,15,15,14,18,
- 15,14,15,15,16,16,15,15,16,16,17,15,16,15,17,16,
- 16,16,17,17,18,16,17,17,18,17,14,15,15,16,15,15,
- 16,15,17,16,15,15,15,17,15,16,17,17,18,17,16,17,
- 16,18,15,10,12,12,14,14,12,13,13,14,14,12,13,13,
- 14,14,13,14,14,15,15,13,14,14,16,15,11,12,13,14,
- 14,12,13,13,15,15,12,13,13,15,15,13,14,15,15,16,
- 14,15,15,16,16,12,13,13,14,14,13,13,14,15,15,13,
- 14,13,15,15,14,15,15,16,16,14,15,14,16,15,13,14,
- 14,15,15,13,14,14,15,16,14,14,15,16,16,14,15,15,
- 15,17,15,16,16,17,17,13,14,14,15,15,14,15,15,16,
- 16,14,15,15,16,16,15,16,16,16,17,15,16,15,17,16,
- 11,12,12,14,14,12,13,13,14,15,12,13,13,15,14,13,
- 14,14,15,16,13,14,14,16,15,12,13,13,14,15,13,13,
- 14,15,15,13,14,14,15,15,14,14,15,15,17,14,15,15,
- 16,16,12,13,13,15,15,13,14,14,15,15,13,14,13,15,
- 15,14,15,15,16,17,14,15,15,16,16,13,13,14,15,16,
- 14,14,15,15,16,14,15,15,16,16,15,15,16,15,18,15,
- 16,16,17,17,14,15,15,16,16,15,15,15,16,16,14,15,
- 15,17,16,16,16,16,17,17,15,16,16,17,16,10,12,12,
- 14,14,12,13,13,14,15,12,13,13,15,14,14,14,15,15,
- 16,14,15,14,16,15,12,13,13,15,14,13,13,14,15,15,
- 13,14,14,15,15,14,14,15,15,16,14,15,15,16,16,12,
- 13,13,15,15,13,14,14,15,16,13,14,13,15,14,15,15,
- 15,16,16,14,15,15,16,15,13,14,14,16,15,14,14,14,
- 15,16,14,15,15,16,16,15,15,16,15,17,16,17,16,17,
- 17,14,14,15,15,16,15,15,16,16,16,14,15,14,16,15,
- 16,16,16,17,17,15,16,15,17,15,11,13,13,14,15,13,
- 13,14,15,15,13,14,13,15,15,14,15,15,15,16,14,15,
- 15,17,15,13,13,14,15,15,13,14,15,15,16,14,14,14,
- 16,16,15,14,16,15,17,15,16,16,17,16,13,14,14,15,
- 15,14,14,14,16,16,13,15,14,16,15,15,15,16,17,17,
- 15,16,15,17,16,14,15,15,15,16,15,15,16,15,17,15,
- 16,16,16,17,16,16,17,15,18,16,17,17,17,17,14,15,
- 15,16,16,15,16,16,17,17,15,16,15,17,16,16,17,17,
- 18,18,16,17,15,18,16,10,12,12,14,14,13,13,14,14,
- 15,13,14,13,15,14,14,15,15,15,16,15,15,15,16,15,
- 12,13,13,15,14,12,12,14,14,15,14,15,14,16,15,15,
- 14,15,14,17,15,16,16,17,16,12,13,13,14,15,14,14,
- 15,15,16,13,14,12,16,14,15,16,16,16,17,15,16,14,
- 17,15,14,15,14,16,15,14,14,15,15,15,15,16,15,17,
- 16,15,14,16,14,16,16,17,17,18,17,14,14,15,15,16,
- 15,16,16,16,17,14,15,14,16,15,16,16,17,17,17,15,
- 16,14,17,14,10,12,12,14,13,12,13,13,14,14,11,13,
- 12,14,14,13,14,14,15,16,13,14,14,16,15,12,13,13,
- 14,14,13,13,14,15,15,13,14,13,15,15,14,14,15,15,
- 16,14,15,15,16,16,11,13,12,14,14,12,13,13,15,15,
- 12,13,13,15,15,14,15,15,16,16,13,14,14,16,15,13,
- 14,14,15,15,14,15,15,15,16,14,15,15,16,16,15,16,
- 16,16,17,16,16,16,17,17,13,14,14,15,15,14,15,15,
- 16,16,13,14,14,16,15,15,16,16,17,17,15,15,15,17,
- 15,11,12,12,14,14,12,13,13,14,15,12,13,13,15,14,
- 14,14,15,15,16,14,14,14,16,15,12,13,13,15,14,13,
- 13,14,15,15,13,14,14,16,15,14,15,15,15,16,15,15,
- 15,16,16,12,13,13,14,15,13,13,14,15,15,13,14,13,
- 15,15,15,15,15,16,16,14,15,14,16,15,14,14,15,16,
- 16,14,15,15,15,16,15,16,15,16,16,15,15,16,15,17,
- 16,16,16,17,17,13,14,14,15,16,14,15,15,16,16,14,
- 14,14,16,16,16,16,16,17,17,15,15,15,17,15,11,12,
- 12,14,14,12,13,13,14,15,12,13,13,15,14,14,14,14,
- 15,16,13,14,14,16,15,12,13,13,15,15,13,13,14,15,
- 16,13,14,14,15,15,14,15,15,16,17,14,15,15,17,16,
- 12,13,13,15,14,13,14,14,15,15,13,14,13,15,15,14,
- 15,15,16,16,14,15,14,17,15,14,15,15,16,16,14,15,
- 15,16,17,15,15,15,17,17,15,16,16,16,17,16,17,16,
- 17,17,13,15,14,16,15,14,15,15,16,16,14,15,14,16,
- 15,16,16,16,17,17,15,16,15,17,15,10,12,12,14,14,
- 13,13,14,14,15,13,14,13,15,14,14,15,15,15,17,14,
- 15,15,16,15,12,13,13,15,14,12,12,14,14,15,14,15,
- 14,16,15,15,14,16,15,17,15,16,16,17,16,12,13,13,
- 14,15,14,14,15,15,16,12,14,12,15,14,15,16,16,16,
- 17,15,16,14,17,14,14,15,14,16,16,14,14,15,15,16,
- 15,16,16,17,16,15,14,16,14,17,16,17,17,18,17,14,
- 14,15,15,16,15,15,16,16,17,14,15,14,16,15,16,17,
- 17,17,18,15,16,14,17,14,11,13,13,15,14,13,13,14,
- 15,15,12,14,13,15,15,14,15,15,15,17,14,15,14,16,
- 15,13,14,14,15,15,13,14,15,15,16,14,15,14,16,16,
- 15,15,16,16,17,15,16,16,17,17,13,14,13,15,15,14,
- 14,14,16,16,13,15,14,16,15,15,16,16,17,17,15,16,
- 14,17,15,15,15,15,16,17,15,15,16,16,17,15,16,16,
- 17,17,16,15,17,16,17,17,17,17,18,18,14,15,15,17,
- 15,15,16,16,17,16,15,16,15,17,15,16,17,17,17,17,
- 16,17,15,18,15,
-};
-
-static const static_codebook _44p7_p5_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p7_p5_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44p7_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44p7_p5_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44p7_p5_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p7_p5_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44p7_p5_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p7_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44p7_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p7_p6_0[] = {
- 2, 5, 6, 5, 7, 8, 5, 8, 7, 5, 7, 7, 7, 7, 9, 8,
- 9, 9, 5, 7, 7, 8, 9, 9, 7, 9, 7, 6, 8, 8, 8, 9,
- 10, 8, 9, 9, 8, 9,10, 9, 9,11,10,10,11, 8,10, 9,
- 10,10,11, 9,10,10, 6, 8, 8, 8, 9, 9, 8,10, 9, 8,
- 9,10, 9,10,10,10,11,10, 8,10, 9,10,11,10, 9,11,
- 9, 6, 8, 8, 7, 9, 9, 8, 9, 9, 7, 9, 9, 9, 9,10,
- 9,10,10, 8, 9, 9, 9,10,10, 9,10, 9, 7, 9, 9, 9,
- 10,10, 9,10,10, 9, 9,10,10, 9,11,10,11,11, 9,10,
- 10,10,11,11,10,11,10, 6, 9, 8, 9,10,10, 9,10, 9,
- 8,10,10, 9, 9,10,10,11,11, 9,10,10,10,11,11, 9,
- 11, 9, 6, 8, 8, 8, 9, 9, 7, 9, 9, 8, 9, 9, 9, 9,
- 10, 9,10,10, 7, 9, 9, 9,10,10, 9,10, 9, 6, 8, 9,
- 9, 9,10, 9,10,10, 9,10,10, 9, 9,11,10,11,11, 8,
- 10,10,10,11,11, 9,10, 9, 7, 9, 9, 9,10,10, 9,10,
- 10, 9,10,10,10,10,11,10,11,11, 9,10, 9,10,11,11,
- 10,11, 9,
-};
-
-static const static_codebook _44p7_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p7_p6_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44p7_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44p7_p6_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p7_p6_1[] = {
- 4, 7, 7, 6, 7, 8, 6, 8, 7, 7, 7, 8, 7, 7, 8, 8,
- 8, 8, 7, 7, 7, 8, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8,
- 8, 9, 9, 8, 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9,
- 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8, 8,
- 8, 9, 8, 9, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8,
- 8, 9, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8,
- 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 8, 7, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8,
- 8, 8, 8, 9, 9, 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 9, 9, 9,
- 8, 9, 8,
-};
-
-static const static_codebook _44p7_p6_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p7_p6_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44p7_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44p7_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p7_p7_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p7_p7_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p7_p7_0,
- 1, -513979392, 1633504256, 2, 0,
- (long *)_vq_quantlist__44p7_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44p7_p7_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p7_p7_1[] = {
- 1, 5, 5, 4,10,10, 5,10,10, 5,10,10,10,10,10,10,
- 10,10, 5,10,10,10,10,10, 9,10,10, 6,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10, 7,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10, 6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10, 6,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,11,11,
-};
-
-static const static_codebook _44p7_p7_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p7_p7_1,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44p7_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44p7_p7_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p7_p7_2[] = {
- 1, 3, 2, 4, 5, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
- 12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p7_p7_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44p7_p7_2,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44p7_p7_2,
- 0
-};
-
-static const long _vq_quantlist__44p7_p7_3[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p7_p7_3[] = {
- 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p7_p7_3 = {
- 1, 25,
- (char *)_vq_lengthlist__44p7_p7_3,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44p7_p7_3,
- 0
-};
-
-static const char _huff_lengthlist__44p7_short[] = {
- 3, 9,14,16,17,19,22,22, 5, 4, 6, 9,11,13,17,20,
- 9, 5, 5, 6, 9,11,15,19,11, 7, 5, 5, 7, 9,13,17,
- 14, 9, 7, 6, 6, 7,11,14,16,11, 9, 7, 6, 4, 4, 8,
- 19,15,13,11, 9, 4, 3, 4,21,16,16,15,12, 6, 4, 4,
-};
-
-static const static_codebook _huff_book__44p7_short = {
- 2, 64,
- (char *)_huff_lengthlist__44p7_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p8_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44p8_l0_0[] = {
- 2, 4, 4, 7, 7, 8, 8,10,10,11,11,12,12, 4, 5, 5,
- 7, 7, 9, 9,10, 9,12,10,12,12, 4, 5, 5, 7, 7, 9,
- 9, 9,10,10,12,12,12, 7, 7, 7, 7, 8, 9, 8,11, 5,
- 12, 6,12,10, 7, 7, 7, 8, 7, 8, 9, 5,11, 6,12,10,
- 12, 8, 9, 9, 9, 9, 9, 9,11, 7,11, 7,11, 9, 8, 9,
- 9, 9, 9, 9, 9, 7,10, 7,11, 9,11,10,10,10,10,10,
- 10,10,11,10,11, 8,12, 9,10,10,10,10,10,10,10,10,
- 11, 8,11, 9,12,10,11,11,11,11,11,11,11,11,12,10,
- 12,11,10,11,11,11,11,11,11,11,11,10,12,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,11,12,12,12,
- 12,12,12,12,12,12,11,12,12,
-};
-
-static const static_codebook _44p8_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44p8_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44p8_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44p8_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p8_l0_1[] = {
- 4, 4, 4, 5, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p8_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44p8_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p8_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44p8_l1_0[] = {
- 54,
- 29,
- 79,
- 0,
- 108,
-};
-
-static const char _vq_lengthlist__44p8_l1_0[] = {
- 1, 2, 3, 6, 7, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44p8_l1_0 = {
- 2, 25,
- (char *)_vq_lengthlist__44p8_l1_0,
- 1, -514516992, 1620639744, 7, 0,
- (long *)_vq_quantlist__44p8_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44p8_lfe[] = {
- 2, 3, 1, 3,
-};
-
-static const static_codebook _huff_book__44p8_lfe = {
- 2, 4,
- (char *)_huff_lengthlist__44p8_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44p8_long[] = {
- 2, 7,14,16,17,18,20,21, 7, 4, 6, 8,11,12,14,16,
- 13, 5, 4, 4, 8, 9,11,13,15, 8, 4, 3, 5, 7, 9,10,
- 17,11, 8, 4, 4, 6, 9, 9,17,11, 9, 7, 6, 5, 7, 8,
- 19,13,11, 9, 9, 7, 8, 8,21,15,13,11,10, 8, 8, 7,
-};
-
-static const static_codebook _huff_book__44p8_long = {
- 2, 64,
- (char *)_huff_lengthlist__44p8_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p8_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p8_p1_0[] = {
- 2, 5, 5, 4, 7, 7, 4, 7, 7, 5, 7, 7, 7, 8, 9, 7,
- 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 6, 7, 8, 8, 9,
- 10, 8, 9,10, 8, 9,10,10,10,12,10,11,12, 8,10,10,
- 10,11,12,10,11,11, 6, 8, 7, 8,10, 9, 8,10, 9, 8,
- 10,10,10,11,11,10,12,11, 8,10, 9,10,12,11,10,12,
- 10, 5, 8, 8, 8,10,10, 8,10,10, 7, 9,10, 9,10,11,
- 9,11,11, 8,10,10,10,12,12,10,12,11, 7, 9, 9, 9,
- 10,11, 9,11,11, 9, 9,11,10,11,12,10,11,12, 9,11,
- 11,11,12,12,11,12,12, 7, 9, 9,10,11,11,10,12,11,
- 9,11,10,11,11,12,11,13,12,10,11,11,12,13,13,11,
- 13,11, 5, 8, 8, 8,10,10, 8,10,10, 8,10,10,10,11,
- 12,10,12,11, 7,10, 9, 9,11,11, 9,11,10, 7, 9, 9,
- 10,11,12,10,11,11,10,11,11,11,11,13,12,13,13, 9,
- 10,11,12,12,13,11,12,11, 7, 9, 9, 9,11,11, 9,11,
- 10, 9,11,11,11,12,12,11,12,12, 9,11, 9,10,12,11,
- 10,12,11,
-};
-
-static const static_codebook _44p8_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p8_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p8_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44p8_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p8_p2_0[] = {
- 4, 6, 6, 9, 9, 6, 8, 8,10,10, 6, 8, 8,10,10, 8,
- 9,10,12,12, 8,10, 9,12,12, 6, 8, 8,10,10, 8, 8,
- 9,10,11, 8, 9, 9,11,11, 9,10,11,12,13,10,11,11,
- 13,13, 6, 8, 8,10,10, 8, 9, 9,11,11, 8, 9, 8,11,
- 10,10,11,11,13,13, 9,11,10,13,12, 9,10,10,12,12,
- 10,10,11,12,13,10,11,11,13,13,12,12,13,12,15,12,
- 13,13,15,14, 9,10,10,12,12,10,11,11,13,13,10,11,
- 10,13,12,12,13,13,14,15,12,13,12,15,12, 7, 8, 8,
- 10,11, 8, 9,10,11,12, 8, 9, 9,11,11,10,11,11,13,
- 14,10,11,11,13,13, 8, 9, 9,11,12, 9,10,11,11,13,
- 9,10,10,12,12,11,11,12,13,15,11,12,12,14,14, 8,
- 9, 9,11,11, 9,10,11,12,13, 9,10,10,12,12,11,12,
- 12,14,15,11,12,12,14,14,10,11,12,13,13,11,12,12,
- 13,14,12,12,12,14,14,13,13,14,14,16,14,14,14,16,
- 15,10,11,11,13,13,12,12,12,14,14,11,12,12,14,13,
- 14,14,14,15,16,13,14,13,16,14, 7, 8, 8,11,10, 8,
- 9, 9,11,11, 8,10, 9,12,11,10,11,11,13,13,10,11,
- 11,14,13, 8, 9, 9,12,11, 9,10,10,12,12, 9,11,10,
- 13,12,11,12,12,13,14,11,12,12,15,14, 8, 9, 9,12,
- 11, 9,10,10,12,12, 9,11,10,13,11,11,12,12,14,14,
- 11,12,12,14,13,10,11,11,13,13,11,12,12,13,14,12,
- 13,12,14,14,13,13,14,14,16,13,14,14,16,15,10,11,
- 11,13,13,12,12,12,14,14,11,12,12,14,13,13,14,14,
- 15,15,13,14,13,16,14, 9,10,11,12,13,11,11,12,12,
- 14,11,11,12,13,14,13,13,14,14,16,13,13,14,15,15,
- 11,11,12,12,14,12,12,13,13,15,12,12,13,13,15,14,
- 14,15,15,16,14,14,14,15,16,11,12,12,13,14,12,12,
- 13,14,15,12,13,12,14,14,14,14,15,15,16,14,14,14,
- 16,16,13,13,14,15,16,14,14,15,15,16,14,15,15,16,
- 16,15,15,16,16,18,16,16,16,17,17,13,14,14,15,15,
- 14,14,15,16,16,14,15,14,16,16,16,16,16,17,18,15,
- 16,16,17,16, 9,11,10,13,12,11,12,11,14,13,11,12,
- 11,14,12,13,14,13,15,14,13,14,13,16,14,11,12,12,
- 14,13,12,12,13,14,14,12,13,12,15,14,14,14,14,16,
- 16,14,15,14,17,15,11,12,11,14,12,12,13,12,15,13,
- 12,13,12,15,13,14,14,14,16,15,14,15,14,16,15,13,
- 14,14,15,15,14,14,15,16,16,14,15,14,16,16,15,15,
- 16,16,17,16,16,16,17,17,13,14,14,16,15,14,15,15,
- 16,16,14,15,14,17,15,16,16,16,17,17,15,16,15,18,
- 16, 7, 8, 8,10,11, 8, 9, 9,11,12, 8, 9, 9,12,11,
- 10,11,11,13,14,10,11,11,14,13, 8, 9, 9,11,11, 9,
- 10,10,12,12, 9,10,10,12,12,11,12,12,13,14,11,12,
- 12,14,14, 8, 9, 9,12,11, 9,10,11,12,13, 9,11,10,
- 13,12,11,12,12,14,14,11,12,12,14,13,10,11,11,13,
- 13,11,12,12,13,14,11,12,12,14,14,13,13,14,14,16,
- 13,14,14,16,15,10,12,11,13,13,12,12,12,14,14,11,
- 12,12,14,13,14,14,14,15,16,13,14,14,16,14, 8, 9,
- 9,11,11, 9,10,10,12,12, 9,10,10,12,12,11,11,12,
- 13,14,11,12,12,14,14, 9, 9,10,11,12,10,10,11,12,
- 13,10,10,11,12,13,12,12,13,14,15,12,12,13,14,15,
- 9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12,
- 13,13,15,15,12,13,13,15,14,11,11,12,13,14,12,12,
- 13,13,15,12,12,13,14,15,14,14,15,14,16,14,14,15,
- 15,16,11,12,12,14,14,12,13,13,15,15,12,13,13,15,
- 14,14,15,15,16,16,14,15,14,17,15, 8, 9, 9,11,11,
- 9,10,10,12,12, 9,11,10,13,12,11,12,12,14,14,11,
- 13,12,15,13, 9,10,10,12,12,10,10,11,12,13,10,12,
- 11,13,13,12,12,13,13,15,12,13,13,15,14, 9,10,10,
- 12,12,11,11,12,13,13,10,12,10,13,12,12,13,13,15,
- 15,12,13,13,15,13,11,12,12,14,14,12,12,13,14,14,
- 12,13,13,15,14,13,13,14,13,16,14,15,14,16,16,11,
- 12,12,14,14,13,13,13,15,15,12,13,12,15,14,14,15,
- 15,16,17,14,15,13,16,13,10,11,11,13,14,11,12,12,
- 13,15,11,12,12,14,14,13,14,14,15,16,13,14,14,16,
- 16,11,11,12,12,14,12,12,13,13,15,12,13,13,13,15,
- 14,14,15,14,17,14,14,15,15,16,11,12,12,14,14,12,
- 13,13,15,15,12,13,13,15,15,14,15,15,16,17,14,15,
- 15,16,16,13,14,14,14,16,14,14,15,14,17,14,15,15,
- 14,17,16,16,17,15,18,16,16,17,16,18,13,14,14,16,
- 16,14,15,15,17,16,14,15,15,17,16,16,17,17,18,18,
- 16,17,16,18,17,10,11,11,14,13,11,12,12,14,14,11,
- 13,12,15,14,14,14,14,16,15,14,15,14,16,15,11,12,
- 12,14,13,12,13,13,15,14,13,14,13,15,14,14,15,15,
- 16,16,14,15,15,17,15,11,12,12,14,14,13,13,13,15,
- 15,12,13,13,15,14,15,15,15,17,17,14,15,15,17,15,
- 13,14,14,16,15,14,15,15,16,16,15,15,15,17,16,16,
- 16,16,16,17,16,17,16,18,17,14,14,14,16,16,15,15,
- 15,16,16,14,15,14,17,16,16,17,17,17,18,16,17,16,
- 18,16, 7, 8, 8,11,11, 8, 9, 9,11,12, 8, 9, 9,12,
- 11,10,11,11,13,14,10,11,11,14,13, 8, 9, 9,11,12,
- 9,10,11,12,13, 9,11,10,13,12,11,12,12,13,14,11,
- 12,12,14,14, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
- 10,13,12,11,12,12,14,14,11,12,11,14,13,10,11,12,
- 13,13,11,12,12,13,14,12,13,12,14,14,13,13,14,14,
- 16,13,14,14,16,15,10,11,11,13,13,11,12,12,14,14,
- 11,12,12,14,13,13,14,14,15,16,13,14,13,16,14, 8,
- 9, 9,11,11, 9,10,11,12,13, 9,10,10,12,12,11,12,
- 13,13,14,11,12,12,14,14, 9,10,10,12,12,10,10,11,
- 12,13,11,12,11,13,13,12,12,13,13,15,12,13,13,15,
- 15, 9,10,10,12,12,10,11,12,13,14,10,11,10,13,12,
- 12,13,13,14,15,12,13,12,15,13,12,12,12,14,14,12,
- 12,13,14,15,13,13,13,15,15,14,14,15,13,16,14,15,
- 15,16,16,11,12,12,14,14,12,13,13,14,15,12,13,12,
- 14,14,14,14,15,16,16,13,14,13,16,14, 8, 9, 9,11,
- 11, 9,10,10,12,12, 9,10,10,12,12,11,12,12,14,14,
- 11,12,11,14,14, 9,10,10,12,12,10,11,11,13,13,10,
- 11,11,13,13,12,13,13,14,15,12,13,13,15,14, 9,10,
- 9,12,11,10,11,10,13,12,10,11,10,13,12,12,13,12,
- 15,14,12,13,12,15,14,11,12,12,14,14,12,13,13,14,
- 15,12,13,13,15,15,14,14,15,15,17,14,15,15,16,16,
- 11,12,11,14,13,12,13,12,15,14,12,13,12,15,13,14,
- 15,14,16,15,13,15,14,17,14,10,11,11,13,14,11,12,
- 13,13,15,11,12,12,14,14,14,14,15,15,17,13,14,14,
- 15,16,11,12,12,14,14,12,12,13,14,15,13,13,13,15,
- 15,14,15,15,15,17,15,15,15,16,16,11,12,12,13,14,
- 13,13,14,14,15,12,13,13,14,15,14,15,15,16,17,14,
- 15,15,16,16,14,14,14,16,16,14,14,15,15,17,15,15,
- 15,17,16,16,16,17,16,18,16,17,17,18,17,13,14,14,
- 15,16,14,15,15,16,17,14,15,15,16,16,16,17,17,17,
- 18,16,16,16,17,16,10,11,11,14,13,11,12,12,14,14,
- 11,12,12,15,13,13,14,14,16,15,13,14,14,16,15,11,
- 12,12,14,14,12,13,13,15,15,12,13,13,15,15,14,15,
- 15,16,17,14,15,15,17,16,11,12,11,14,12,12,13,13,
- 15,13,12,13,12,15,13,14,15,15,16,15,14,15,14,17,
- 14,13,14,14,16,16,14,15,15,16,17,14,15,15,16,17,
- 16,16,17,17,18,16,17,17,18,18,13,14,14,16,13,14,
- 15,15,17,14,14,15,14,17,14,16,17,16,17,16,16,17,
- 16,18,15, 8,11,11,13,13,10,12,12,14,14,11,12,12,
- 14,14,13,13,14,15,16,13,14,14,16,15,10,11,11,14,
- 14,11,12,12,14,15,11,12,12,15,14,13,14,14,15,16,
- 13,14,14,16,16,11,12,12,14,14,12,13,13,15,15,12,
- 13,12,15,14,14,14,15,16,16,14,15,14,16,16,12,13,
- 13,15,15,12,13,14,15,16,13,14,14,16,16,14,15,15,
- 16,17,15,15,16,17,17,13,14,14,16,15,14,15,15,16,
- 16,14,15,14,16,16,16,16,16,17,17,15,16,16,18,16,
- 10,11,11,13,14,11,12,12,14,15,11,12,12,15,14,13,
- 14,14,16,16,13,14,14,16,16,11,11,12,14,14,12,12,
- 13,14,15,12,13,13,15,15,14,14,15,15,17,14,14,15,
- 16,16,11,12,12,15,14,12,13,13,15,15,12,13,13,15,
- 15,14,15,15,17,17,14,15,15,17,16,13,12,14,14,16,
- 13,13,15,14,17,14,13,15,15,17,15,14,16,15,18,16,
- 15,16,16,18,13,14,14,16,16,14,15,15,17,17,14,15,
- 15,17,16,16,17,17,18,18,16,17,16,18,17,10,11,11,
- 14,13,11,12,12,14,14,11,13,12,15,14,13,14,14,15,
- 16,13,14,14,16,16,11,12,12,14,14,12,13,13,14,15,
- 12,13,13,15,15,14,14,15,15,16,14,15,15,17,16,11,
- 12,12,14,14,13,13,13,15,15,12,13,13,15,14,14,15,
- 15,16,17,14,15,14,17,15,13,14,13,16,15,14,14,14,
- 15,16,14,15,14,16,16,15,15,16,16,17,16,16,16,18,
- 17,14,14,14,16,16,15,15,15,17,16,14,15,14,17,16,
- 16,16,17,17,18,16,17,16,18,16,11,13,13,15,15,12,
- 13,14,15,16,12,14,14,15,15,14,15,15,16,17,14,15,
- 15,17,17,12,13,14,14,16,13,14,14,14,16,14,14,14,
- 15,16,15,15,16,15,18,15,16,16,17,17,13,14,14,16,
- 16,14,14,15,16,16,14,15,14,16,16,15,16,16,17,18,
- 15,16,16,18,17,14,14,16,13,17,15,15,16,14,18,15,
- 15,16,14,18,16,16,18,15,19,17,17,18,16,18,15,16,
- 15,17,17,15,16,17,18,18,16,16,16,18,17,17,18,18,
- 19,19,17,18,17,19,18,11,12,12,15,14,13,13,14,15,
- 16,13,14,13,16,14,15,15,15,16,17,15,16,15,17,16,
- 12,13,13,15,14,13,13,14,15,15,14,15,14,16,15,15,
- 15,16,16,17,16,16,16,18,17,12,13,13,15,15,14,14,
- 15,16,16,13,14,13,16,15,16,16,16,17,18,15,16,15,
- 17,16,14,15,14,17,15,14,15,15,16,16,15,16,15,17,
- 16,16,15,16,15,17,17,18,17,18,17,15,15,15,16,17,
- 16,16,16,17,17,15,16,15,17,16,17,18,18,18,18,16,
- 17,16,18,15, 8,11,11,13,13,11,12,12,14,14,10,12,
- 12,14,14,13,14,14,15,16,13,14,13,16,15,11,12,12,
- 14,14,12,12,13,14,15,12,13,13,15,15,14,14,15,15,
- 16,14,14,14,16,16,10,11,11,14,14,11,12,12,14,15,
- 11,12,12,15,14,13,14,14,16,16,13,14,14,16,15,13,
- 14,14,15,16,14,14,15,16,16,14,15,15,16,16,15,16,
- 16,16,18,16,16,16,17,17,12,13,13,15,15,13,14,14,
- 16,16,12,14,13,16,15,15,16,15,17,17,14,16,15,17,
- 16,10,11,11,13,14,11,12,13,14,15,11,13,12,14,14,
- 14,14,15,16,16,13,14,14,16,16,11,12,12,14,14,12,
- 13,13,14,15,13,14,13,15,15,14,15,15,16,17,14,15,
- 15,17,16,11,12,12,14,14,12,13,13,15,15,12,13,12,
- 15,14,14,15,15,16,17,14,15,15,16,16,14,14,14,16,
- 16,14,14,15,16,16,15,15,15,16,16,16,16,17,16,18,
- 16,17,17,18,18,13,13,14,15,16,14,14,15,16,17,13,
- 14,14,16,16,16,16,17,17,18,15,16,15,17,16,10,11,
- 11,14,13,11,12,12,14,14,11,12,12,15,14,13,14,14,
- 16,16,13,14,14,16,16,11,12,12,14,14,12,13,13,15,
- 15,12,13,13,15,15,14,15,15,16,17,14,15,15,17,16,
- 11,12,11,14,14,12,13,13,15,15,12,13,12,15,14,14,
- 15,14,16,16,14,15,14,17,16,14,14,14,16,16,14,15,
- 15,16,17,14,15,15,17,17,16,16,17,17,18,16,17,17,
- 18,18,13,14,12,16,14,14,15,13,17,15,13,15,13,17,
- 14,16,16,15,18,16,15,17,14,18,15,11,12,12,14,15,
- 13,13,14,14,16,13,14,13,15,14,15,15,16,16,17,15,
- 16,15,17,16,12,13,13,15,15,13,13,14,15,16,14,15,
- 14,16,16,15,15,16,15,18,16,16,16,18,17,12,13,13,
- 15,15,14,14,15,15,16,13,14,13,15,15,16,16,16,16,
- 18,15,16,15,17,16,15,15,15,17,16,15,15,16,16,17,
- 16,16,16,18,17,16,16,17,15,18,17,18,17,19,18,14,
- 14,15,15,17,15,15,16,16,17,14,15,15,16,16,17,17,
- 18,17,19,16,17,15,17,15,11,13,12,15,15,12,14,14,
- 15,15,12,14,13,16,15,15,15,15,17,17,14,15,15,17,
- 16,12,14,14,16,16,14,14,15,16,16,14,14,14,16,16,
- 15,16,17,17,18,15,16,16,18,17,12,14,13,16,14,13,
- 14,14,16,15,13,15,14,16,14,15,16,16,17,17,15,16,
- 15,18,15,15,15,16,17,17,15,16,16,17,18,16,16,16,
- 18,18,17,17,18,18,19,17,17,18,19,19,14,15,14,17,
- 13,15,16,15,18,14,15,16,15,18,14,17,18,17,18,16,
- 16,18,16,19,15,
-};
-
-static const static_codebook _44p8_p2_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p8_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p8_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44p8_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p8_p3_0[] = {
- 2, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 8, 9, 7,
- 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 5, 7, 8, 7, 9,
- 10, 8, 9, 9, 8, 9,10, 9,10,12,10,11,11, 8,10, 9,
- 10,11,12, 9,11,10, 5, 8, 7, 8,10, 9, 7,10, 9, 8,
- 9,10, 9,10,11,10,12,11, 8,10, 9,10,11,11, 9,12,
- 10, 5, 8, 8, 7, 9,10, 8,10, 9, 7, 9,10, 9,10,11,
- 9,11,11, 8,10, 9,10,11,11,10,12,10, 7, 9,10, 9,
- 10,12, 9,11,11, 9, 9,12,11,10,13,11,11,13,10,12,
- 11,11,13,13,11,13,12, 7, 9, 9, 9,11,11, 9,12,11,
- 9,11,10,10,11,12,11,13,12, 9,11,11,12,13,13,11,
- 13,11, 5, 8, 8, 8, 9,10, 7,10, 9, 8, 9,10,10,10,
- 12,10,11,11, 7,10, 9, 9,11,11, 9,11,10, 7, 9, 9,
- 9,11,12, 9,11,11, 9,11,11,11,11,13,12,13,13, 9,
- 10,11,11,12,13,10,12,11, 7,10, 9, 9,11,11, 9,12,
- 10,10,11,12,11,12,13,12,13,13, 9,12, 9,11,13,11,
- 10,13,10,
-};
-
-static const static_codebook _44p8_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p8_p3_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44p8_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44p8_p3_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p8_p3_1[] = {
- 6, 7, 7, 7, 7, 8, 7, 8, 7, 7, 7, 8, 7, 8, 8, 8,
- 8, 8, 7, 8, 7, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8,
- 8, 8, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 9, 9, 8,
- 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8,
- 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8, 9, 8,
- 8, 9, 8,
-};
-
-static const static_codebook _44p8_p3_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p8_p3_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p8_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44p8_p4_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p8_p4_0[] = {
- 2, 5, 5, 4, 7, 8, 4, 8, 7, 5, 7, 8, 7, 7,10, 8,
- 9, 9, 5, 7, 7, 8, 9, 9, 7,10, 7, 5, 7, 8, 8, 9,
- 11, 8,10,10, 8, 9,10,10,10,12,11,12,12, 8,10,10,
- 10,12,12,10,12,11, 5, 8, 7, 8,10,10, 8,11, 9, 8,
- 10,10,10,11,12,10,12,12, 8,10, 9,11,12,12,10,12,
- 10, 5, 8, 8, 7,10,10, 8,11,10, 7, 9,10, 9,10,12,
- 10,12,12, 8,10,10,10,12,12,10,12,11, 7, 9,10, 9,
- 11,12,10,12,11, 9, 9,12,10,10,13,12,12,13,10,12,
- 11,12,13,13,11,13,11, 7,10, 9,10,11,12,10,13,11,
- 9,11,11,11,11,13,12,14,13,10,11,11,12,14,14,11,
- 14,11, 5, 8, 8, 8,10,11, 7,10,10, 8,10,10,10,11,
- 12,10,12,12, 7,10, 9,10,12,12, 9,12,10, 7, 9,10,
- 10,11,13,10,12,11,10,11,11,11,11,14,12,14,14, 9,
- 11,11,12,13,14,11,13,11, 7,10, 9,10,11,12, 9,12,
- 10,10,11,12,11,11,13,12,13,13, 9,12, 9,12,13,12,
- 10,13,10,
-};
-
-static const static_codebook _44p8_p4_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p8_p4_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44p8_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44p8_p4_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p8_p4_1[] = {
- 7, 9, 9,10,10, 9,10,10,10,11, 9,10,10,11,10, 9,
- 10,10,11,11, 9,10,10,11,11, 9,10,10,11,11,10,10,
- 10,11,11,10,10,10,11,11,10,11,11,11,11,10,11,11,
- 11,11, 9,10,10,11,11,10,10,10,11,11, 9,10,10,11,
- 11,10,11,11,11,11,10,11,11,11,11,10,11,11,11,11,
- 10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,12,10,11,11,11,11,11,11,11,11,11,10,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11, 9,10,10,
- 11,11,10,10,11,11,11,10,10,11,11,11,10,11,11,11,
- 12,10,11,11,12,12,10,10,11,11,11,10,11,11,11,12,
- 11,11,11,12,12,11,11,12,12,12,11,11,12,12,12,10,
- 11,11,11,11,11,11,11,12,12,10,11,11,12,12,11,12,
- 11,12,12,11,12,11,12,12,11,11,11,11,12,11,11,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,11,11,11,12,12,11,12,12,12,12,11,12,11,12,12,
- 12,12,12,12,12,12,12,12,12,12, 9,10,10,11,11,10,
- 11,10,11,11,10,11,10,11,11,10,11,11,12,12,10,11,
- 11,12,11,10,11,11,11,11,10,11,11,11,12,11,11,11,
- 12,12,11,11,12,12,12,11,11,11,12,12,10,11,10,11,
- 11,11,11,11,12,12,10,11,11,12,11,11,12,11,12,12,
- 11,12,11,12,12,11,11,11,12,12,11,11,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,
- 11,12,11,11,12,12,12,12,11,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,10,11,11,11,11,11,11,11,12,
- 12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
- 11,11,11,12,12,11,11,12,12,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,11,11,11,12,12,11,12,
- 12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,13,12,13,12,12,12,12,13,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,13,12,10,11,11,11,11,11,11,11,12,12,11,11,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,
- 12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,
- 11,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,13,12,12,13,12,13,
- 12, 9,10,10,11,11,10,10,11,11,11,10,11,10,11,11,
- 10,11,11,12,12,10,11,11,12,12,10,10,11,11,11,10,
- 11,11,11,12,10,11,11,12,12,11,11,12,12,12,11,11,
- 11,12,12,10,11,10,11,11,11,11,11,12,12,10,11,11,
- 12,11,11,12,11,12,12,11,12,11,12,12,11,11,11,11,
- 12,11,11,12,12,12,11,12,12,12,12,11,12,12,12,12,
- 11,12,12,12,12,11,11,11,12,11,11,12,12,12,12,11,
- 12,11,12,12,12,12,12,12,12,12,12,12,12,12,10,10,
- 11,11,11,10,11,11,12,12,10,11,11,12,12,11,11,11,
- 12,12,11,11,12,12,12,10,11,11,11,12,11,11,12,12,
- 12,11,11,12,12,12,11,11,12,12,12,11,12,12,12,12,
- 11,11,11,12,12,11,12,12,12,12,11,12,11,12,12,11,
- 12,12,12,12,11,12,12,12,12,11,11,12,12,12,11,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12, 9,10,10,11,11,
- 10,11,11,11,12,10,11,11,12,11,11,12,11,12,12,11,
- 12,11,12,12,10,11,11,12,11,11,11,11,12,12,11,12,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,10,11,11,
- 12,12,11,12,11,12,12,11,12,11,12,12,12,12,12,12,
- 12,11,12,12,12,12,11,12,11,12,12,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,11,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,11,11,11,12,12,11,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,13,12,12,12,12,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,13,13,12,12,
- 12,13,13,12,12,12,12,12,12,12,12,12,13,12,12,12,
- 12,13,12,12,13,12,13,12,13,13,13,13,12,12,12,12,
- 12,12,12,12,13,12,12,12,12,13,12,12,13,13,13,13,
- 12,13,13,13,13,10,11,11,12,12,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,13,12,12,12,12,13,13,12,12,12,13,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,12,
- 13,13,12,13,12,13,13,13,13,12,12,12,12,12,12,12,
- 12,13,12,12,12,12,13,12,12,13,13,13,13,12,13,13,
- 13,13, 9,10,10,11,11,10,10,11,11,11,10,11,10,11,
- 11,10,11,11,12,12,10,11,11,12,12,10,11,11,11,11,
- 10,11,11,12,12,11,11,11,12,12,11,11,12,12,12,11,
- 11,12,12,12,10,11,10,11,11,10,11,11,12,12,10,11,
- 11,12,11,11,12,11,12,12,11,11,11,12,12,11,11,11,
- 11,12,11,11,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,11,11,11,12,11,11,12,12,12,12,
- 11,12,11,12,12,12,12,12,12,12,11,12,12,12,12, 9,
- 10,10,11,11,10,11,11,11,12,10,11,11,12,11,11,11,
- 12,12,12,11,11,12,12,12,10,11,11,12,12,11,11,12,
- 12,12,11,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,10,11,11,12,12,11,11,11,12,12,11,11,11,12,12,
- 11,12,12,12,12,11,12,12,12,12,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,11,11,12,12,12,12,12,12,12,12,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,10,11,10,11,
- 11,10,11,11,12,12,10,11,11,12,12,11,11,11,12,12,
- 11,12,11,12,12,11,11,11,12,12,11,11,12,12,12,11,
- 11,12,12,12,11,12,12,12,12,11,12,12,12,12,10,11,
- 11,12,11,11,12,11,12,12,11,12,11,12,12,11,12,12,
- 12,12,11,12,11,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 11,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,11,11,11,12,12,11,11,
- 12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,13,12,12,12,12,
- 12,12,12,12,13,13,12,12,12,13,13,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,12,
- 12,12,12,12,12,12,12,12,12,12,12,13,12,13,12,12,
- 12,13,13,12,13,13,12,13,12,13,13,13,13,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,
- 13,12,13,12,13,12,11,11,11,12,12,11,12,12,12,12,
- 11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,13,13,12,12,12,13,13,11,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,13,12,12,12,12,13,
- 12,12,12,12,12,12,12,12,12,13,13,12,12,12,12,13,
- 12,13,13,13,13,12,13,13,13,13,12,12,12,12,12,12,
- 12,12,13,12,12,12,12,13,12,12,13,13,13,13,12,13,
- 13,13,12,10,11,11,12,12,11,11,11,12,12,11,11,11,
- 12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,12,
- 12,11,11,12,12,12,11,12,12,12,12,11,12,12,12,12,
- 12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,11,
- 12,11,12,12,12,12,12,12,12,12,12,12,12,12,11,12,
- 12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,13,12,12,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,13,12,12,12,12,12,12,
- 11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,12,
- 12,12,12,12,11,12,12,12,12,11,11,12,12,12,11,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,12,
- 13,13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,13,13,12,12,12,13,13,12,12,12,12,12,
- 12,12,12,12,13,12,12,12,12,13,12,12,13,12,13,12,
- 12,13,13,13,12,12,12,12,12,12,12,12,12,13,12,12,
- 12,13,12,12,13,13,13,13,12,13,13,13,13,10,11,11,
- 12,12,11,12,12,12,12,11,12,12,12,12,11,12,12,12,
- 12,12,12,12,12,12,11,11,12,12,12,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,13,12,12,12,13,13,11,
- 12,11,12,12,12,12,12,12,12,11,12,12,12,12,12,12,
- 12,13,13,12,12,12,13,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,13,12,12,12,12,12,13,12,13,12,13,
- 13,12,12,12,12,12,12,12,12,13,12,12,12,12,13,12,
- 12,13,12,13,13,12,13,12,13,12,11,11,11,12,12,11,
- 12,12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,13,12,13,12,12,13,13,13,11,12,12,12,
- 12,12,12,12,12,12,12,12,12,13,12,12,12,12,13,13,
- 12,12,12,13,12,12,12,12,12,12,12,12,13,12,13,12,
- 12,12,12,13,12,12,13,12,13,12,13,13,12,13,12,12,
- 12,12,12,12,13,13,13,12,12,12,12,13,12,12,13,13,
- 13,13,12,13,13,13,12,11,11,11,12,12,11,12,12,12,
- 12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,13,12,12,13,13,13,11,12,12,12,12,12,12,
- 12,12,13,12,12,12,13,12,12,13,12,13,13,12,13,12,
- 13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,13,12,13,12,13,13,13,12,12,12,12,12,12,
- 12,13,12,13,12,12,12,12,13,12,12,13,13,13,12,12,
- 13,12,13,12,10,11,11,12,12,11,11,11,12,12,11,11,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,11,
- 12,12,11,11,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,11,11,11,12,12,11,12,12,12,12,
- 11,12,11,12,12,12,12,12,12,12,11,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,13,12,12,12,12,12,11,12,12,12,12,12,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,10,11,11,12,12,11,11,12,12,12,11,12,12,12,12,
- 11,12,12,12,12,12,12,12,12,12,11,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,
- 12,13,13,11,11,11,12,12,12,12,12,12,12,11,12,12,
- 12,12,12,12,12,13,13,12,12,12,13,13,12,12,12,12,
- 12,12,12,12,12,13,12,12,12,12,13,12,12,13,12,13,
- 12,12,13,13,13,12,12,12,12,12,12,12,12,12,13,12,
- 12,12,12,12,12,12,13,13,13,12,12,12,13,12,11,11,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,
- 12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,13,13,12,12,12,13,13,
- 11,12,11,12,12,12,12,12,12,12,11,12,12,12,12,12,
- 12,12,13,13,12,12,12,13,12,12,12,12,12,12,12,12,
- 12,12,13,12,12,12,13,13,12,13,13,13,13,12,13,13,
- 13,13,12,12,12,12,12,12,12,12,13,12,12,12,12,13,
- 12,12,13,12,13,13,12,13,12,13,12,11,11,11,12,12,
- 11,12,12,12,12,11,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,11,12,12,12,12,12,12,12,12,13,12,12,
- 12,13,13,12,12,13,12,13,12,12,13,13,13,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
- 13,12,12,12,13,12,12,12,12,12,12,12,12,12,12,13,
- 12,12,12,13,13,12,12,13,12,13,12,13,13,13,13,12,
- 12,12,12,12,12,12,13,12,13,12,12,12,12,12,12,13,
- 13,12,12,12,13,12,12,12,11,11,11,12,12,11,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,11,12,12,12,12,12,12,12,12,13,12,12,12,12,13,
- 12,12,13,13,13,12,12,12,13,13,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,13,12,13,13,12,13,
- 12,13,12,12,12,12,12,12,12,12,12,12,13,12,13,12,
- 13,13,12,13,13,12,13,12,13,13,13,13,12,12,12,12,
- 12,12,12,12,13,12,12,13,12,13,12,12,13,12,13,12,
- 12,13,12,13,12,
-};
-
-static const static_codebook _44p8_p4_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p8_p4_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p8_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44p8_p5_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p8_p5_0[] = {
- 2, 6, 6, 9, 9, 5, 7, 8,10,11, 5, 8, 7,11,10, 8,
- 10,11,12,13, 8,11,10,13,12, 6, 7, 8,10,11, 7, 8,
- 10,10,12, 8, 9, 9,12,12,10,10,12,12,14,10,12,12,
- 14,13, 6, 8, 7,11,10, 8, 9, 9,12,12, 7,10, 8,12,
- 11,10,12,12,13,14,10,12,10,14,12, 9,10,11,11,13,
- 10,10,11,11,13,11,12,12,13,14,12,12,13,11,15,13,
- 14,14,15,14, 9,11,10,13,11,11,12,12,13,13,10,11,
- 10,13,11,13,14,14,15,15,12,13,12,15,11, 6, 8, 9,
- 11,12, 8, 9,11,12,13, 8,10,10,13,13,11,12,13,14,
- 15,11,12,13,14,14, 9, 9,10,12,13,10,10,12,12,14,
- 10,11,11,13,14,12,12,14,14,15,13,13,14,15,15, 9,
- 10,10,13,13,10,11,11,13,14,10,11,10,14,13,13,13,
- 14,15,15,12,14,13,15,14,12,12,13,13,14,12,13,14,
- 13,15,13,14,14,15,15,14,14,15,14,16,15,15,15,16,
- 16,12,13,13,14,14,13,14,14,15,15,12,14,13,15,14,
- 14,15,15,16,16,14,15,14,16,14, 6, 9, 8,12,11, 8,
- 10,10,13,13, 8,11, 9,13,12,11,12,12,14,14,11,13,
- 12,15,14, 9,10,10,13,13,10,10,11,13,14,10,12,11,
- 14,13,12,13,14,14,15,13,13,13,15,14, 9,10, 9,13,
- 12,10,11,11,14,13,10,12,10,14,12,13,14,13,15,15,
- 12,14,12,15,14,12,13,13,14,14,13,13,13,14,15,13,
- 14,14,15,15,14,14,15,14,16,14,15,15,16,16,12,13,
- 12,14,13,13,14,14,15,15,12,14,13,15,13,15,15,15,
- 16,16,14,15,14,16,14,11,12,12,13,14,12,13,14,14,
- 16,12,13,13,15,15,14,14,16,15,17,14,15,15,16,16,
- 12,13,14,14,15,13,13,15,15,16,14,14,14,15,16,15,
- 15,16,16,17,15,15,16,16,17,13,13,13,15,15,14,14,
- 15,15,16,13,14,14,15,16,15,15,16,16,17,15,16,15,
- 17,16,14,15,15,16,16,15,15,16,16,17,15,16,16,17,
- 17,16,16,17,16,18,16,17,17,17,17,15,15,15,16,16,
- 15,16,16,17,17,15,16,16,17,16,16,17,17,18,18,16,
- 17,16,17,16,11,12,12,15,13,13,13,13,15,15,12,14,
- 13,16,14,14,15,15,16,16,14,15,14,17,15,13,13,13,
- 15,14,13,14,14,16,15,14,14,14,16,15,15,15,16,16,
- 17,15,16,15,17,16,12,14,13,15,14,14,14,14,16,15,
- 13,14,13,16,15,15,16,16,17,16,15,16,15,17,16,15,
- 15,15,16,16,15,15,16,16,17,15,16,16,17,17,16,16,
- 17,17,17,17,17,17,18,17,14,15,15,16,16,15,16,16,
- 17,16,15,16,15,17,16,17,17,17,18,17,16,17,16,18,
- 16, 6, 9, 9,12,12, 8,10,10,12,13, 8,10,10,13,12,
- 10,12,12,14,15,11,13,12,15,14, 8, 9,10,12,13, 9,
- 10,11,13,14,10,11,11,14,13,12,12,13,14,15,12,13,
- 13,15,15, 8,10,10,13,13,10,11,11,13,14,10,12,10,
- 14,13,12,13,13,15,15,12,14,13,15,14,11,12,12,13,
- 14,12,12,13,13,15,12,13,13,15,15,14,13,15,14,16,
- 14,15,15,16,16,12,13,13,14,14,13,13,14,15,14,12,
- 14,13,15,14,14,15,15,16,15,14,15,14,16,14, 7, 9,
- 10,12,12, 9,10,11,13,14, 9,11,10,13,13,11,12,13,
- 14,15,12,13,13,15,14, 9,10,11,12,13,10,10,12,13,
- 14,11,11,12,14,14,12,12,14,14,15,13,13,14,15,15,
- 9,11,11,13,13,11,12,12,14,14,10,12,10,14,13,13,
- 14,14,15,15,13,14,13,16,14,12,12,13,14,15,13,13,
- 14,14,16,13,14,14,15,15,14,14,15,14,17,14,15,15,
- 16,16,12,13,13,15,14,13,14,14,15,15,13,14,13,16,
- 14,15,15,15,16,16,14,15,14,16,14, 7,10, 9,13,12,
- 10,11,12,12,14,10,12,11,14,12,12,13,13,14,15,12,
- 14,13,15,14, 9,11,10,13,13,10,11,12,13,14,12,13,
- 12,15,13,13,13,14,13,15,13,14,14,16,15,10,11,11,
- 13,13,12,12,13,14,14,11,12,11,14,13,14,14,14,15,
- 16,13,14,13,16,13,12,13,13,14,14,12,13,13,14,15,
- 14,14,14,15,15,14,13,15,13,16,15,15,15,17,16,13,
- 13,13,14,14,14,14,14,15,15,12,13,13,15,14,15,16,
- 16,16,16,14,15,14,16,13,11,12,13,14,15,12,13,14,
- 15,16,13,14,14,15,15,14,14,15,15,17,14,15,15,16,
- 16,13,13,14,14,15,13,13,15,14,16,14,14,15,15,16,
- 15,14,16,15,17,15,16,16,16,17,13,14,14,15,15,14,
- 14,15,16,16,13,15,14,16,16,15,16,16,17,17,15,16,
- 15,17,16,14,15,15,15,17,15,15,16,15,17,15,16,16,
- 16,17,16,16,17,16,18,17,17,17,17,18,15,15,15,17,
- 16,15,16,16,17,17,15,16,16,17,16,16,17,17,18,18,
- 16,17,16,18,17,11,13,12,15,14,13,13,14,15,15,13,
- 14,13,16,14,15,15,15,16,16,15,16,15,17,16,13,14,
- 13,15,14,13,13,14,15,15,14,15,14,16,15,15,15,16,
- 16,16,15,16,15,18,16,13,14,14,15,15,14,15,15,15,
- 16,13,15,13,16,15,15,16,16,17,17,15,16,15,17,16,
- 15,15,15,16,16,15,15,15,16,17,16,16,16,17,16,16,
- 16,17,16,17,17,17,17,18,17,15,15,15,16,16,16,16,
- 16,17,17,15,16,15,17,16,17,17,17,18,18,16,17,16,
- 17,15, 6, 9, 9,12,12, 8,10,10,12,13, 8,10,10,13,
- 12,11,12,13,14,15,10,12,12,14,14, 9,10,10,13,13,
- 10,10,12,13,14,10,11,11,14,13,12,13,14,14,15,12,
- 13,13,15,15, 8,10, 9,13,12,10,11,11,13,14, 9,11,
- 10,14,13,12,13,13,15,15,12,13,12,15,14,12,13,13,
- 14,14,12,13,13,14,15,13,14,14,14,15,14,14,15,14,
- 16,14,15,15,16,16,11,12,12,14,13,13,13,13,15,15,
- 12,13,12,15,13,14,15,15,16,16,14,15,14,16,14, 7,
- 9,10,12,13,10,10,12,12,14,10,12,11,14,13,12,13,
- 14,14,15,12,13,13,15,14,10,11,11,13,13,11,11,12,
- 13,14,12,13,12,14,14,13,13,14,13,16,14,14,14,15,
- 15, 9,10,11,13,14,12,12,13,13,15,10,12,10,14,13,
- 13,14,14,15,16,13,14,13,15,13,13,14,13,14,15,12,
- 13,13,14,15,14,14,14,15,15,14,13,15,13,16,15,16,
- 16,16,16,12,13,13,14,14,14,14,14,15,15,12,13,13,
- 15,14,15,15,16,16,16,14,15,13,16,13, 7,10, 9,12,
- 12, 9,10,11,13,13, 9,11,10,14,13,12,13,13,14,15,
- 11,13,12,15,14, 9,11,11,13,13,10,10,12,13,14,11,
- 12,12,14,14,13,13,14,14,16,13,14,14,16,15, 9,11,
- 10,13,12,11,12,11,14,14,10,12,10,14,13,13,14,13,
- 15,15,12,14,12,16,14,12,13,13,14,15,13,13,14,14,
- 16,13,14,14,15,15,14,14,15,14,16,15,15,15,16,16,
- 12,13,12,15,14,13,14,14,15,15,12,14,13,16,14,14,
- 15,15,16,16,14,15,14,17,14,11,12,13,14,15,13,13,
- 14,14,16,13,14,13,15,15,15,15,16,16,17,15,15,15,
- 16,16,13,14,13,15,15,13,13,15,15,16,14,15,15,16,
- 16,15,15,16,15,17,16,16,16,17,17,13,13,14,14,15,
- 14,14,15,15,16,13,14,13,15,15,15,16,16,16,17,15,
- 16,15,16,16,15,15,15,16,16,15,15,16,16,17,16,16,
- 16,17,17,16,16,17,16,18,17,17,17,18,18,15,15,15,
- 16,16,16,16,16,17,17,15,15,15,16,16,17,17,17,17,
- 18,16,16,16,17,15,11,13,12,15,14,13,13,14,15,15,
- 12,14,13,16,14,14,15,15,16,16,14,15,14,16,15,13,
- 14,14,15,15,13,14,14,16,16,14,15,14,16,16,15,15,
- 16,17,17,15,16,16,17,17,13,14,13,15,14,14,14,14,
- 16,15,13,15,13,16,14,15,16,15,17,16,15,16,14,17,
- 15,14,16,15,16,17,15,16,16,16,17,15,16,16,17,17,
- 16,16,17,17,18,16,17,17,18,17,14,15,15,17,15,15,
- 16,16,17,16,15,16,15,17,15,16,17,17,18,17,16,17,
- 16,18,15,10,12,12,14,14,12,13,13,15,15,12,13,13,
- 15,15,13,14,14,15,16,14,15,14,16,16,12,13,13,15,
- 15,12,13,14,15,15,13,14,14,15,15,14,14,15,16,17,
- 14,15,15,17,16,12,13,13,15,15,13,14,14,15,16,13,
- 14,14,16,15,14,15,15,16,17,14,15,15,17,16,13,14,
- 14,15,16,14,14,15,15,16,14,15,15,16,16,15,15,16,
- 16,17,15,16,16,17,17,14,15,15,16,16,15,15,15,16,
- 16,15,15,15,16,16,16,17,16,17,17,16,16,16,18,16,
- 11,12,12,14,14,12,13,14,15,15,12,13,13,15,15,13,
- 14,15,16,16,14,15,15,16,16,12,13,13,15,15,13,13,
- 14,15,16,13,14,14,15,16,14,14,15,16,17,15,15,15,
- 16,17,12,13,13,15,15,13,14,14,15,16,13,14,14,16,
- 15,15,15,15,16,17,15,16,15,17,16,14,14,15,15,16,
- 14,14,15,15,17,15,15,16,16,17,15,15,16,15,18,16,
- 16,16,17,17,14,15,15,16,16,15,16,16,17,17,15,15,
- 15,17,16,16,17,16,17,17,16,16,16,18,16,11,12,12,
- 14,14,13,13,14,15,15,13,14,13,15,15,14,15,15,16,
- 16,14,15,15,16,16,12,13,13,15,15,13,13,14,15,15,
- 14,14,14,16,15,15,15,15,15,16,15,16,15,17,16,12,
- 13,13,15,15,14,14,15,15,16,13,14,13,16,15,15,15,
- 16,16,17,15,16,15,17,15,14,15,14,16,16,14,15,15,
- 16,16,15,16,15,17,16,15,15,16,15,17,16,17,16,17,
- 17,14,15,15,16,16,15,16,16,16,17,14,15,15,16,16,
- 16,17,17,17,18,16,16,16,17,16,12,13,13,15,15,13,
- 13,14,15,16,13,14,14,16,15,14,15,15,16,17,14,15,
- 15,17,16,13,14,14,15,16,14,14,15,15,17,14,15,15,
- 16,16,15,14,16,15,17,15,16,16,17,17,13,14,14,16,
- 16,14,15,15,16,16,14,15,14,16,16,15,16,16,17,17,
- 15,16,15,17,16,15,15,16,15,17,15,15,16,15,17,15,
- 16,16,16,17,16,15,17,15,18,17,17,17,17,17,15,15,
- 15,17,17,16,16,16,17,17,15,16,15,17,17,16,17,17,
- 18,18,16,17,15,18,15,11,12,12,15,15,13,13,15,14,
- 16,13,14,13,16,14,15,15,16,16,17,15,16,15,17,15,
- 12,14,13,16,14,13,13,14,14,16,14,15,14,16,15,15,
- 15,16,15,17,16,16,16,17,16,12,13,14,15,16,15,15,
- 15,15,16,13,15,13,16,14,16,16,16,17,17,15,16,15,
- 17,15,15,16,15,16,15,14,14,15,16,16,16,16,16,17,
- 16,15,15,16,15,17,17,17,17,18,17,15,15,15,16,16,
- 16,16,16,16,17,14,15,15,17,16,17,17,17,17,18,15,
- 16,15,18,14,10,12,12,14,14,12,13,13,15,15,12,13,
- 13,15,15,14,14,15,15,16,13,15,14,16,16,12,13,13,
- 15,15,13,14,14,15,16,13,14,14,15,15,14,15,15,16,
- 17,14,15,15,17,16,12,13,13,15,15,13,14,14,15,15,
- 12,14,13,15,15,14,15,15,16,17,14,15,14,17,15,14,
- 15,15,16,16,14,15,15,16,17,15,15,15,17,16,16,16,
- 16,16,17,16,16,16,17,17,13,14,14,16,15,14,15,15,
- 16,16,14,15,14,16,16,15,16,16,17,17,15,16,15,17,
- 16,11,12,12,14,15,13,13,14,14,15,13,14,13,15,15,
- 14,15,15,16,16,14,15,15,16,16,12,14,13,15,15,13,
- 13,14,15,16,14,15,14,16,15,15,15,16,15,17,15,16,
- 16,17,16,12,13,13,15,15,14,14,15,15,16,13,14,13,
- 16,15,15,15,16,16,17,15,15,15,16,16,14,15,15,16,
- 16,14,15,15,16,16,15,16,16,17,17,16,16,16,16,17,
- 16,17,17,18,17,14,14,15,15,16,15,15,16,16,17,14,
- 15,15,16,16,16,16,16,17,17,15,16,15,17,15,11,12,
- 12,14,14,12,13,14,15,15,12,13,13,15,15,14,15,15,
- 16,16,13,15,14,16,16,12,13,13,15,15,13,14,14,15,
- 16,13,14,14,16,16,15,15,15,16,17,15,15,15,17,16,
- 12,13,13,15,15,13,14,14,16,15,13,14,13,16,15,15,
- 16,15,17,17,14,15,14,17,16,14,15,15,16,16,15,15,
- 16,16,17,15,16,16,17,17,16,16,16,16,18,16,17,16,
- 18,17,14,15,14,16,15,15,15,15,17,16,14,15,14,17,
- 15,16,17,16,17,17,15,16,15,17,15,11,12,12,15,15,
- 13,13,15,14,16,13,15,13,16,14,15,15,16,15,17,15,
- 16,15,17,16,12,14,13,15,15,13,13,15,15,16,15,15,
- 15,16,15,15,15,16,15,17,16,16,16,17,16,12,13,14,
- 15,16,14,14,15,15,16,13,14,13,16,14,16,16,16,16,
- 17,15,16,15,17,15,15,16,15,16,16,14,15,15,16,16,
- 16,16,16,17,16,15,15,16,15,17,17,17,17,18,17,15,
- 15,15,15,16,16,16,16,16,17,14,15,14,16,15,17,17,
- 17,17,18,15,16,15,17,15,12,13,13,15,15,13,14,14,
- 15,16,13,14,14,16,15,14,15,15,16,17,14,15,15,17,
- 16,13,14,14,16,15,13,14,15,16,16,14,15,15,16,16,
- 15,15,16,16,17,15,16,16,17,17,13,14,13,16,15,14,
- 15,15,16,16,13,15,14,16,15,15,16,16,17,17,15,16,
- 14,17,15,15,15,16,17,17,15,15,16,16,17,16,16,16,
- 17,17,16,15,17,16,18,17,17,17,18,18,15,15,15,17,
- 14,16,16,16,17,16,15,16,15,17,15,16,17,17,18,17,
- 16,17,15,18,15,
-};
-
-static const static_codebook _44p8_p5_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p8_p5_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44p8_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44p8_p5_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44p8_p5_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p8_p5_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44p8_p5_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p8_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44p8_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p8_p6_0[] = {
- 2, 6, 6, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 7, 9, 7,
- 9, 9, 6, 7, 7, 8, 9, 9, 7, 9, 7, 6, 8, 8, 8, 9,
- 10, 8, 9, 9, 8, 9,10, 9, 9,10,10,10,10, 8, 9, 9,
- 10,10,11, 9,10,10, 6, 8, 8, 8, 9, 9, 8,10, 9, 8,
- 9, 9, 9,10,10,10,11,10, 8,10, 9,10,11,10, 9,11,
- 9, 6, 8, 8, 7, 9, 9, 7, 9, 9, 7, 9, 9, 8, 9,10,
- 9,10,10, 8, 9, 9, 9,10,10, 9,10, 9, 7, 9, 9, 9,
- 9,10, 9,10,10, 9, 9,10,10, 9,11,10,11,11, 9,10,
- 10,10,11,11,10,11,10, 6, 9, 8, 9, 9,10, 9,10, 9,
- 8,10,10, 9, 9,10,10,11,11, 9,10,10,10,11,11, 9,
- 11, 9, 6, 8, 8, 7, 9, 9, 7, 9, 9, 8, 9, 9, 9, 9,
- 10, 9,10,10, 7, 9, 9, 9,10,10, 8,10, 9, 6, 8, 9,
- 9, 9,10, 9,10, 9, 9,10,10, 9, 9,11,10,11,11, 8,
- 9,10,10,11,11, 9,10, 9, 7, 9, 9, 9,10,10, 9,10,
- 9, 9,10,10,10,10,11,10,11,11, 9,10, 9,10,11,11,
- 10,11, 9,
-};
-
-static const static_codebook _44p8_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p8_p6_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44p8_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44p8_p6_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p8_p6_1[] = {
- 4, 7, 7, 7, 7, 8, 7, 8, 7, 7, 7, 8, 7, 8, 8, 8,
- 8, 8, 7, 8, 7, 8, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8, 8,
- 8, 9, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9,
- 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 8, 8, 9, 8, 8, 8, 8, 9, 9, 8, 9, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8, 8,
- 8, 8, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 9, 8, 9, 8, 8, 8, 8, 8, 9, 9, 8,
- 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 9, 8, 9, 9, 8, 8, 8, 8, 9, 8, 8, 9, 8, 7, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8,
- 8, 8, 8, 9, 9, 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9,
- 8, 9, 8,
-};
-
-static const static_codebook _44p8_p6_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p8_p6_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44p8_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44p8_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p8_p7_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p8_p7_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p8_p7_0,
- 1, -512202240, 1635281408, 2, 0,
- (long *)_vq_quantlist__44p8_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44p8_p7_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p8_p7_1[] = {
- 1, 7, 7,12,12, 5,11,12,12,12, 5,12,11,12,12,12,
- 12,12,12,12,12,13,13,13,13, 7,11,11,13,13,13,12,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13, 7,13,10,13,13,13,13,13,13,13,12,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13, 7,13,12,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13, 8,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13, 8,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,12,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,10,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13, 8,13,12,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,11,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,11,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,
-};
-
-static const static_codebook _44p8_p7_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p8_p7_1,
- 1, -514619392, 1630767104, 3, 0,
- (long *)_vq_quantlist__44p8_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44p8_p7_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p8_p7_2[] = {
- 1, 3, 2, 4, 5, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
- 12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44p8_p7_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44p8_p7_2,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44p8_p7_2,
- 0
-};
-
-static const long _vq_quantlist__44p8_p7_3[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p8_p7_3[] = {
- 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p8_p7_3 = {
- 1, 25,
- (char *)_vq_lengthlist__44p8_p7_3,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44p8_p7_3,
- 0
-};
-
-static const char _huff_lengthlist__44p8_short[] = {
- 3, 9,15,17,20,21,22,23, 5, 5, 7, 9,11,13,17,20,
- 9, 5, 5, 6, 8,10,15,18,11, 7, 5, 4, 6, 9,13,17,
- 14, 9, 7, 5, 6, 7,10,14,17,10, 8, 6, 6, 4, 5, 8,
- 20,14,13,10, 8, 4, 3, 4,23,17,16,14,12, 6, 4, 4,
-};
-
-static const static_codebook _huff_book__44p8_short = {
- 2, 64,
- (char *)_huff_lengthlist__44p8_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p9_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44p9_l0_0[] = {
- 2, 5, 5, 7, 6, 8, 8, 9, 9,10,10,11,11, 4, 5, 5,
- 6, 7, 8, 8, 9, 9,10,10,11,10, 4, 5, 5, 7, 6, 8,
- 8, 9, 9,10,10,10,10, 6, 6, 7, 6, 7, 8, 8, 9, 9,
- 10, 9,11, 9, 6, 6, 6, 7, 6, 8, 8, 9, 9, 9,10, 9,
- 11, 7, 7, 8, 8, 8, 8, 9, 9, 9,10, 9,11, 9, 7, 8,
- 8, 8, 8, 9, 8, 9, 9, 9,10, 9,11, 8, 9, 9, 9, 9,
- 9, 9,10,10,11,10,12,10, 8, 9, 9, 9, 9, 9, 9,10,
- 9,10,11,11,12, 9,10,10,10,10,10,10,10,11,11,11,
- 11,12, 9,10,10,10,10,11,10,11,10,11,11,12,11,11,
- 11,11,11,11,11,11,11,12,11,12,11,12,11,11,11,11,
- 11,11,11,12,11,12,11,12,11,
-};
-
-static const static_codebook _44p9_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44p9_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44p9_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44p9_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p9_l0_1[] = {
- 4, 4, 4, 5, 5, 4, 4, 5, 5, 5, 4, 5, 4, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p9_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44p9_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p9_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44p9_l1_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p9_l1_0[] = {
- 1, 2, 3, 5, 9, 9, 4, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44p9_l1_0 = {
- 2, 25,
- (char *)_vq_lengthlist__44p9_l1_0,
- 1, -514619392, 1630767104, 3, 0,
- (long *)_vq_quantlist__44p9_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44p9_lfe[] = {
- 1, 1,
-};
-
-static const static_codebook _huff_book__44p9_lfe = {
- 1, 2,
- (char *)_huff_lengthlist__44p9_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44p9_long[] = {
- 3, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _huff_book__44p9_long = {
- 1, 8,
- (char *)_huff_lengthlist__44p9_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44p9_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p9_p1_0[] = {
- 1, 5, 5, 4, 8, 8, 4, 8, 8, 5, 7, 8, 8, 9,10, 8,
- 10,10, 5, 8, 7, 8,10,10, 8,10, 9, 7, 9, 9, 9,11,
- 11, 9,11,11, 9,11,11,11,12,13,11,13,13, 9,11,11,
- 11,13,13,11,13,13, 7, 9, 9, 9,11,11, 9,11,11, 9,
- 11,11,11,13,13,11,13,13, 9,11,11,11,13,13,11,13,
- 12, 5, 9, 9, 9,11,11, 9,11,11, 9,11,11,11,12,13,
- 11,13,13, 9,11,11,11,13,13,11,13,13, 9,11,12,11,
- 13,13,12,13,13,11,12,13,13,14,15,13,14,14,12,13,
- 13,13,15,15,13,15,14, 8,10,10,11,13,13,12,14,13,
- 11,12,12,13,14,15,13,15,15,11,12,12,13,15,15,13,
- 15,14, 5, 9, 9, 9,11,11, 9,11,11, 9,11,11,11,13,
- 13,11,13,13, 9,11,10,11,13,13,11,13,12, 8,10,10,
- 11,13,13,12,13,13,11,12,12,13,14,15,14,15,15,10,
- 12,12,13,14,15,13,15,14, 9,12,11,12,13,13,11,13,
- 13,12,13,13,13,15,15,13,14,15,11,13,12,13,15,14,
- 13,15,14,
-};
-
-static const static_codebook _44p9_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p9_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p9_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44p9_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p9_p2_0[] = {
- 4, 6, 6, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 6,
- 8, 8,11,11, 6, 8, 8,11,11, 6, 7, 7, 9, 9, 7, 8,
- 9,10,11, 7, 9, 9,11,10, 8, 9,10,12,12, 8,10,10,
- 12,12, 6, 7, 7, 9, 9, 7, 9, 9,10,10, 7, 9, 8,11,
- 10, 8,10,10,12,12, 8,10, 9,12,12, 8, 9, 9,11,11,
- 9,10,10,12,12, 9,11,11,12,13,11,12,12,13,14,11,
- 12,12,14,14, 8, 9, 9,11,11, 9,11,10,13,12, 9,10,
- 10,13,12,11,12,12,14,14,11,12,12,14,13, 7, 8, 9,
- 10,10, 8,10,10,11,11, 8,10,10,11,11,10,11,11,13,
- 13,10,11,11,13,13, 8, 9,10,10,11,10,11,11,12,13,
- 10,11,11,12,12,11,11,12,13,14,11,12,12,14,14, 8,
- 10,10,11,11,10,11,11,12,13,10,11,11,12,12,11,12,
- 12,14,14,11,12,12,14,14,10,11,11,12,13,11,12,12,
- 13,14,12,13,13,14,14,13,13,14,14,16,13,14,14,15,
- 16,10,11,11,13,13,12,12,12,14,14,11,12,12,14,14,
- 13,14,14,15,16,13,14,14,16,15, 7, 8, 8,10,10, 8,
- 10,10,11,11, 8,10,10,12,11,10,11,11,13,13,10,11,
- 11,13,13, 8,10,10,11,11,10,11,11,12,12,10,11,11,
- 12,12,11,12,12,14,14,11,12,12,14,14, 8,10, 9,11,
- 10,10,11,11,13,12,10,11,10,13,12,11,12,12,14,14,
- 11,12,11,14,13,10,11,11,13,13,11,12,12,14,14,12,
- 12,12,14,14,13,14,14,15,16,13,14,14,15,15,10,11,
- 11,13,12,12,12,12,14,14,11,12,12,14,13,13,14,14,
- 16,15,13,14,13,16,14,10,11,11,13,13,12,12,13,14,
- 15,12,13,13,14,15,13,14,15,15,16,13,14,14,16,16,
- 11,12,13,14,14,13,13,14,15,16,13,14,14,15,16,14,
- 15,15,16,17,14,15,16,17,17,11,12,12,14,14,13,14,
- 14,15,16,13,14,14,15,15,14,15,15,16,18,14,15,15,
- 17,16,13,14,15,15,16,15,15,16,16,18,15,15,15,17,
- 17,16,16,17,17,18,16,16,16,18,18,14,14,14,16,16,
- 15,15,15,16,17,15,15,15,16,17,16,17,17,18,18,16,
- 16,17,18,17,10,11,11,14,13,12,13,13,15,14,11,13,
- 13,15,14,13,15,15,16,16,13,14,14,16,16,11,12,12,
- 14,14,13,13,13,15,15,13,14,13,15,15,15,15,15,17,
- 16,14,15,15,17,16,11,13,12,14,14,13,14,13,15,15,
- 13,14,13,15,15,14,15,15,17,17,14,15,15,17,16,14,
- 14,14,16,16,14,15,15,17,17,15,15,16,17,16,17,16,
- 17,18,18,16,17,17,18,18,13,14,14,16,15,15,15,15,
- 17,17,14,16,15,16,16,17,17,17,18,18,16,17,16,20,
- 19, 6, 8, 8,10,10, 8,10,10,11,11, 8,10,10,12,11,
- 10,11,11,13,13,10,11,11,13,13, 8, 9,10,11,11,10,
- 11,11,12,12,10,11,11,13,12,11,12,12,14,14,11,12,
- 12,14,14, 9,10,10,11,11,10,11,11,12,12,10,11,11,
- 13,12,11,12,12,14,14,11,12,12,14,14,10,10,11,12,
- 13,11,12,12,14,14,11,12,12,14,14,13,14,14,15,16,
- 13,14,14,15,16,10,11,11,13,13,12,12,12,14,14,12,
- 13,12,14,14,13,14,14,16,16,13,14,14,15,15, 9,10,
- 10,11,12,10,11,11,12,13,10,11,11,13,12,11,12,12,
- 14,14,11,12,12,14,14,10,10,11,12,13,11,12,12,13,
- 14,11,12,12,13,14,12,13,14,14,15,12,13,13,15,15,
- 10,11,11,13,13,11,12,12,13,14,11,12,12,14,13,12,
- 13,13,15,15,12,13,13,15,15,12,11,13,12,14,13,13,
- 14,14,15,13,13,14,14,15,14,15,15,16,17,14,15,15,
- 16,17,12,13,12,14,14,13,14,14,15,15,13,14,14,15,
- 15,14,15,15,16,17,14,15,15,16,17, 8, 9, 9,11,11,
- 10,11,11,12,13,10,11,11,13,12,12,13,13,14,15,11,
- 13,12,15,14, 9,11,10,12,12,11,12,12,13,14,11,12,
- 12,14,13,13,13,14,15,15,13,14,13,15,15, 9,11,11,
- 12,12,11,12,12,14,14,11,12,12,14,13,13,14,14,15,
- 16,13,14,13,15,14,11,12,12,14,13,12,13,13,14,15,
- 13,14,14,16,15,15,15,15,15,16,15,16,15,17,17,11,
- 12,12,14,14,13,14,14,15,15,12,13,13,15,14,15,15,
- 15,17,17,14,15,15,17,15,11,12,12,14,14,12,13,13,
- 15,15,12,13,13,15,15,14,15,15,17,17,14,15,15,16,
- 16,12,13,13,14,15,13,14,14,16,16,14,14,14,15,16,
- 15,16,16,17,17,15,16,16,17,17,12,13,13,15,15,14,
- 14,14,16,16,14,14,15,16,16,15,16,16,17,17,15,16,
- 16,17,17,14,15,15,15,16,15,15,16,16,18,15,16,16,
- 17,17,17,17,17,18,18,16,17,17,19,18,14,15,15,16,
- 17,15,16,16,17,17,15,16,16,18,17,16,17,17,19,18,
- 17,17,17,19,18,10,12,12,14,14,13,13,14,15,15,12,
- 14,13,16,15,15,15,15,17,17,14,15,15,17,16,12,13,
- 13,15,14,13,14,14,16,16,14,14,15,17,16,15,16,16,
- 17,17,15,16,16,18,17,12,13,13,15,14,14,15,15,16,
- 16,13,15,14,16,15,16,17,16,19,17,15,16,16,17,17,
- 14,15,15,17,15,15,16,15,17,17,16,17,16,18,17,17,
- 17,18,18,18,17,17,18,19,18,14,15,15,16,16,15,16,
- 16,17,18,15,16,16,18,16,17,18,18,19,19,17,18,17,
- 18,19, 6, 8, 8,10,10, 8,10,10,11,11, 8,10,10,12,
- 11,10,11,11,13,13, 9,11,11,13,13, 9,10,10,11,11,
- 10,11,11,12,12,10,11,11,12,12,11,12,12,14,14,11,
- 12,12,14,14, 8,10, 9,11,11,10,11,11,12,12,10,11,
- 11,12,12,11,12,12,14,14,11,12,12,14,14,10,11,11,
- 13,13,11,12,13,14,14,12,12,12,14,14,13,14,14,15,
- 16,13,14,14,16,16,10,11,10,13,12,11,12,12,14,14,
- 11,12,12,14,14,13,14,14,15,16,13,14,14,16,15, 8,
- 9, 9,11,11,10,11,11,12,13,10,11,11,13,12,12,13,
- 13,14,15,12,13,13,15,14,10,11,11,12,12,11,11,12,
- 13,14,11,12,12,14,14,13,13,14,15,16,13,14,14,15,
- 15, 9,10,11,12,12,11,12,12,13,14,11,12,12,14,13,
- 13,14,14,15,16,12,14,13,15,15,11,12,12,14,14,12,
- 13,13,14,15,13,14,14,16,15,14,15,15,15,17,15,15,
- 16,16,17,11,12,12,13,14,13,14,14,15,15,12,13,13,
- 15,14,15,16,15,16,17,14,16,15,17,15, 9,10,10,12,
- 11,10,11,11,13,13,10,11,11,13,12,11,12,12,14,14,
- 11,12,12,14,14,10,11,11,12,13,11,12,12,13,14,11,
- 12,12,14,14,12,13,13,15,15,12,13,13,15,15,10,11,
- 10,13,12,11,12,12,13,13,11,12,12,14,13,12,13,13,
- 15,15,12,13,13,15,14,12,13,12,14,14,13,14,14,15,
- 15,13,14,14,15,15,14,15,15,16,16,14,15,15,16,16,
- 11,13,11,14,12,13,13,13,15,14,12,14,13,15,14,15,
- 15,15,17,16,14,15,14,17,15,10,12,12,14,14,13,13,
- 14,15,16,12,14,13,15,15,14,15,16,17,17,14,15,16,
- 17,17,12,13,13,14,15,13,14,14,16,16,14,14,15,16,
- 16,16,16,16,17,17,16,16,16,18,18,12,13,13,14,15,
- 14,14,15,16,16,13,14,14,16,15,16,16,16,17,18,15,
- 16,16,17,17,14,15,15,16,16,15,15,16,17,17,15,16,
- 16,17,18,17,18,18,18,19,17,18,18,19,19,14,15,15,
- 16,16,15,16,16,17,17,15,16,16,17,17,17,17,18,20,
- 18,17,18,17,18,18,11,12,12,14,14,12,13,14,15,15,
- 12,13,13,15,15,14,15,15,16,17,14,15,15,16,17,12,
- 13,13,15,15,14,14,14,16,16,14,14,14,16,16,15,16,
- 16,17,17,15,16,16,17,17,12,13,13,15,14,13,14,14,
- 16,15,14,15,14,16,15,15,16,16,17,17,15,16,16,17,
- 16,14,15,15,16,16,15,16,16,17,17,16,16,16,17,17,
- 17,17,17,19,18,17,17,17,18,19,14,15,14,17,15,15,
- 16,16,17,17,15,16,15,17,17,16,17,17,18,18,16,17,
- 17,18,17, 6,11,11,13,13,11,12,12,14,14,11,12,12,
- 14,14,13,14,14,16,16,13,14,14,16,16,11,12,12,14,
- 14,12,13,13,15,15,12,13,13,15,15,14,15,15,16,17,
- 14,15,15,17,18,11,12,12,14,14,12,13,13,15,15,12,
- 13,13,15,15,14,15,15,17,17,14,15,15,16,16,13,14,
- 14,15,16,14,15,15,16,17,14,15,15,17,16,15,16,17,
- 18,17,16,16,16,18,17,14,14,15,16,16,14,15,15,18,
- 16,14,15,15,17,16,16,17,17,18,18,16,17,16,18,17,
- 11,12,12,14,14,12,13,13,15,15,12,13,13,15,15,14,
- 15,15,17,17,14,15,15,16,16,12,13,13,15,15,13,14,
- 14,15,16,13,14,14,16,16,15,16,16,17,17,15,15,16,
- 17,17,12,13,13,15,15,14,14,14,16,16,13,14,14,16,
- 16,15,16,16,17,17,15,16,16,17,17,14,14,15,15,16,
- 15,15,16,16,17,15,15,16,16,17,16,17,17,17,18,16,
- 17,17,18,18,14,15,15,16,16,15,16,16,17,17,15,16,
- 16,17,17,17,17,17,18,19,17,17,17,18,18,10,12,12,
- 14,14,12,13,14,15,16,13,14,13,15,15,14,15,15,17,
- 17,14,15,16,17,17,12,13,13,15,15,13,14,14,15,15,
- 14,15,14,16,16,15,16,16,17,18,15,17,16,18,17,12,
- 13,13,15,15,14,14,14,16,16,13,14,14,16,15,15,16,
- 16,17,18,15,16,16,17,17,14,14,14,16,16,15,15,16,
- 17,17,15,16,16,17,17,17,17,17,18,20,17,17,17,19,
- 19,14,15,15,16,16,15,17,16,18,18,15,16,15,17,16,
- 17,18,19,19,19,17,17,17,18,17,13,14,14,16,16,14,
- 15,15,17,17,14,15,15,16,17,15,17,17,18,18,16,16,
- 17,18,17,14,15,15,16,17,15,16,16,17,17,15,16,16,
- 17,17,16,17,17,18,18,17,17,17,18,19,14,15,15,16,
- 17,15,16,16,17,17,15,16,16,17,17,16,17,17,18,18,
- 17,17,17,19,19,16,16,16,16,18,16,17,17,17,18,17,
- 17,17,17,19,18,18,18,19,19,18,18,18,19,20,16,16,
- 17,18,18,16,18,17,18,18,17,17,17,20,19,18,18,19,
- 21,20,18,20,18,18,19,10,12,12,14,14,14,14,15,15,
- 17,14,15,14,17,15,16,16,17,18,18,16,18,17,19,18,
- 12,14,13,16,15,14,14,15,15,17,15,16,16,18,17,16,
- 17,18,17,19,17,19,18,20,19,12,13,13,15,15,15,16,
- 17,17,18,14,16,14,17,16,17,18,18,19,19,17,17,17,
- 18,18,15,15,15,17,16,15,16,16,17,17,17,19,17,18,
- 18,18,18,18,18,21,19,20,19,20,19,15,15,16,16,17,
- 17,17,18,20,20,15,16,16,18,17,18,19,19,19,20,18,
- 19,18,19,17, 6,11,11,13,13,11,12,12,14,14,11,12,
- 12,14,14,13,14,14,16,16,13,14,14,16,16,11,12,12,
- 14,14,12,13,13,15,15,12,13,13,15,15,14,15,15,17,
- 17,14,15,15,17,16,11,12,12,14,14,12,13,13,15,15,
- 12,13,13,15,15,14,15,15,16,16,14,15,15,16,16,13,
- 14,14,16,16,15,15,15,16,16,14,15,15,17,16,16,17,
- 17,19,18,16,17,17,18,18,13,14,14,15,15,14,15,15,
- 17,16,14,15,15,17,16,16,17,16,17,18,15,16,16,18,
- 18,10,12,12,14,14,12,13,14,15,15,12,13,13,15,15,
- 14,15,15,17,17,14,15,15,17,16,12,13,13,15,15,14,
- 14,14,15,16,14,15,15,16,16,15,16,16,17,18,16,16,
- 16,18,18,12,13,13,14,14,14,14,15,16,16,13,14,14,
- 16,16,15,16,16,18,18,15,16,16,19,17,14,15,15,16,
- 17,15,15,16,17,17,16,17,16,17,18,17,17,18,17,19,
- 17,17,18,18,19,14,14,14,16,16,15,16,16,17,17,15,
- 16,15,17,17,17,17,17,19,20,16,17,17,18,18,11,12,
- 12,14,14,12,13,13,15,15,12,13,13,15,15,14,15,15,
- 16,16,14,15,14,16,16,12,13,13,15,15,14,14,14,16,
- 16,13,14,14,16,16,15,16,16,18,17,15,16,16,17,17,
- 12,13,13,15,15,13,14,14,16,16,13,14,14,16,16,15,
- 16,15,18,18,15,16,15,17,16,14,15,15,16,16,15,16,
- 16,17,17,15,16,16,18,17,16,17,17,18,18,16,17,17,
- 18,18,14,15,14,16,15,15,16,15,17,17,15,16,15,17,
- 16,16,17,17,18,18,17,17,16,19,17,10,12,12,14,15,
- 14,14,15,15,17,14,15,14,17,15,16,17,17,17,18,16,
- 17,17,18,18,12,14,13,16,15,14,14,16,15,17,15,17,
- 16,18,17,17,17,18,17,19,18,18,18,19,18,12,13,14,
- 15,15,15,16,16,16,17,14,15,14,18,16,18,17,18,19,
- 19,17,18,17,20,18,15,15,15,17,17,15,16,16,17,18,
- 18,18,18,19,18,18,18,19,18,20,18,19,19,21,21,15,
- 15,16,16,17,17,18,18,18,18,15,16,16,17,17,17,19,
- 20,19,20,17,18,18,19,17,13,14,14,16,16,14,15,15,
- 16,17,14,15,15,17,17,16,16,17,17,18,15,17,16,17,
- 17,14,15,15,16,16,15,16,16,17,17,16,16,16,17,17,
- 17,17,18,17,18,17,17,17,18,20,14,15,15,17,16,15,
- 16,16,17,17,15,16,16,17,17,17,17,17,18,18,16,17,
- 17,19,18,16,16,17,17,17,17,18,17,19,18,17,17,17,
- 18,19,17,20,18,19,21,17,19,18,19,20,15,17,15,17,
- 16,16,17,17,18,18,17,17,17,18,17,18,19,18,19,21,
- 18,18,17,19,19,
-};
-
-static const static_codebook _44p9_p2_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p9_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p9_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44p9_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p9_p3_0[] = {
- 2, 5, 4, 4, 7, 7, 4, 7, 6, 5, 6, 7, 7, 8, 9, 7,
- 9, 9, 5, 7, 6, 7, 9, 9, 7, 9, 8, 6, 8, 8, 8,10,
- 10, 8,10,10, 8, 9,10,10,11,12,10,12,12, 8,10,10,
- 10,12,12,10,12,11, 6, 8, 8, 8,10,10, 8,10,10, 8,
- 10,10,10,11,12,10,12,12, 8,10, 9,10,12,11,10,12,
- 11, 5, 8, 8, 8,10,10, 8,10,10, 8, 9,10,10,11,11,
- 10,11,11, 8,10,10,10,11,12,10,12,11, 8,10,10,10,
- 11,11,10,11,11,10,11,11,11,12,13,11,12,13,10,11,
- 11,11,13,13,11,13,13, 7, 9, 9,10,11,12,10,12,11,
- 9,11,11,11,12,13,12,14,13, 9,11,11,12,13,14,11,
- 13,12, 5, 8, 8, 8,10,10, 8,10,10, 8,10,10,10,11,
- 12,10,12,12, 8,10, 9,10,12,11, 9,11,11, 7, 9, 9,
- 10,11,12,10,12,11, 9,11,11,11,12,13,12,14,13, 9,
- 11,11,12,13,14,11,13,12, 8,10,10,10,11,11,10,11,
- 11,10,11,11,11,13,13,11,13,13,10,11,10,11,13,12,
- 11,13,12,
-};
-
-static const static_codebook _44p9_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p9_p3_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44p9_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44p9_p3_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p9_p3_1[] = {
- 4, 6, 6, 6, 7, 7, 6, 7, 7, 6, 7, 7, 7, 7, 8, 7,
- 7, 8, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8,
- 8, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9,
- 9, 5, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9,
- 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8,
- 9, 9, 8, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 7, 8, 8, 8, 9, 9, 8, 9, 9,
- 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9,
- 9, 9, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 9, 8, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9, 9, 7, 8, 8,
- 8, 9, 9, 8, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8,
- 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 8, 9,
- 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44p9_p3_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p9_p3_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44p9_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44p9_p4_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p9_p4_0[] = {
- 2, 5, 5, 4, 7, 7, 4, 7, 6, 5, 7, 7, 7, 8, 9, 7,
- 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 6, 7, 8, 8, 9,
- 10, 8,10,10, 8, 9,10,10,11,12,10,11,12, 8,10,10,
- 10,11,12,10,12,11, 6, 8, 7, 8,10,10, 8,10, 9, 8,
- 10,10,10,11,12,10,12,12, 8,10, 9,10,12,11,10,12,
- 11, 5, 8, 8, 8,10,10, 8,10,10, 7, 9,10, 9,10,11,
- 10,11,11, 8,10,10,10,12,12,10,12,11, 7, 9, 9, 9,
- 11,11, 9,11,11, 9,10,11,11,11,12,11,12,12, 9,11,
- 11,11,12,12,11,12,12, 7, 9, 9,10,11,12,10,12,11,
- 9,11,10,11,11,12,12,13,13, 9,11,11,12,13,13,11,
- 13,11, 5, 8, 8, 8,10,10, 8,10,10, 8,10,10,10,11,
- 12,10,12,12, 7, 9, 9, 9,11,11, 9,11,10, 7, 9, 9,
- 10,11,12,10,12,11, 9,11,11,11,11,13,12,13,13, 9,
- 10,11,12,13,13,11,12,11, 7, 9, 9, 9,11,11, 9,11,
- 11, 9,11,11,11,12,12,11,12,12, 9,11,10,11,12,12,
- 10,12,11,
-};
-
-static const static_codebook _44p9_p4_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p9_p4_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44p9_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44p9_p4_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p9_p4_1[] = {
- 6, 8, 8,10, 9, 8, 9, 9,10,10, 8, 9, 9,10,10, 8,
- 10,10,10,10, 8,10,10,10,10, 9, 9, 9,10,10, 9,10,
- 10,10,11, 9,10,10,11,11,10,10,10,11,11,10,10,10,
- 11,11, 9, 9, 9,10,10, 9,10,10,11,11, 9,10,10,11,
- 10,10,10,10,11,11,10,10,10,11,11,10,10,10,10,11,
- 10,10,11,11,11,10,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,10,10,10,11,10,10,11,11,11,11,10,11,
- 10,11,11,11,11,11,11,11,10,11,11,11,11, 9,10,10,
- 10,11,10,10,11,11,11,10,11,11,11,11,10,11,11,11,
- 11,10,11,11,11,11,10,10,11,11,11,11,11,11,11,11,
- 11,11,11,11,12,11,11,12,12,12,11,11,11,12,12,10,
- 11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,
- 11,12,12,11,11,11,12,12,11,11,11,11,11,11,12,12,
- 12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,11,11,11,11,11,11,12,12,12,12,11,12,11,12,12,
- 11,12,12,12,12,12,12,12,12,12, 9,10,10,11,10,10,
- 11,11,11,11,10,11,11,11,11,10,11,11,11,11,10,11,
- 11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,
- 12,12,11,11,12,12,12,11,11,11,12,12,10,11,10,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,
- 11,11,11,12,12,11,11,11,11,11,11,12,12,12,12,11,
- 12,12,12,12,11,12,12,12,12,12,12,12,12,12,11,11,
- 11,11,11,11,12,12,12,12,11,12,11,12,12,12,12,12,
- 12,12,11,12,12,12,12,11,11,11,11,11,11,12,12,12,
- 12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,13,13,12,12,12,13,13,11,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,13,13,12,12,12,
- 13,13,12,12,12,12,12,12,12,12,12,13,12,12,12,13,
- 13,12,13,13,13,13,12,13,13,13,13,12,12,12,12,12,
- 12,12,12,13,13,12,12,12,13,13,12,13,13,13,13,12,
- 13,13,13,13,11,11,11,11,11,11,12,12,12,12,11,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
- 13,12,12,12,13,13,11,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,13,13,12,12,12,13,13,12,
- 12,12,12,12,12,12,12,13,13,12,12,12,13,13,12,13,
- 13,13,13,12,13,13,13,13,12,12,12,12,12,12,12,12,
- 13,13,12,12,12,13,12,12,13,13,13,13,12,13,13,13,
- 13, 7,10,10,11,11,10,10,11,11,11,10,11,11,11,11,
- 10,11,11,11,11,10,11,11,11,11,10,10,10,11,11,10,
- 11,11,11,11,11,11,11,11,12,11,11,11,12,12,11,11,
- 11,12,12,10,11,11,11,11,11,11,11,12,11,11,11,11,
- 12,11,11,11,11,12,12,11,11,11,12,12,11,11,11,11,
- 11,11,11,11,12,12,11,11,12,12,12,11,12,12,12,12,
- 11,12,12,12,12,11,11,11,11,11,11,12,12,12,12,11,
- 11,12,12,12,11,12,12,12,12,11,12,12,12,12,10,11,
- 11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,
- 12,12,11,11,11,12,12,11,11,11,11,11,11,11,12,12,
- 12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,
- 11,11,11,11,11,11,12,11,12,12,11,11,11,12,12,11,
- 12,12,12,12,11,12,12,12,12,11,11,11,11,12,11,12,
- 12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,11,11,11,12,12,11,12,12,12,12,11,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,10,11,10,11,11,
- 11,11,11,12,12,11,11,11,12,12,11,12,12,12,12,11,
- 12,12,12,12,10,11,11,12,11,11,11,12,12,12,11,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,
- 12,11,11,12,12,12,12,11,12,11,12,12,12,12,12,12,
- 12,12,12,12,12,12,11,12,11,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,13,12,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,13,12,12,12,13,12,11,11,11,12,12,12,12,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,13,13,13,12,12,12,13,13,11,12,12,12,12,12,
- 12,12,12,13,12,12,12,12,12,12,12,13,13,13,12,13,
- 12,13,13,12,12,12,12,12,12,12,12,13,13,12,12,12,
- 13,13,12,13,13,13,13,12,13,13,13,13,12,12,12,12,
- 12,12,12,12,13,13,12,13,12,13,13,12,13,13,13,13,
- 12,13,13,13,13,11,11,11,12,12,12,12,12,12,12,11,
- 12,12,12,12,12,12,12,13,13,12,12,12,13,13,11,12,
- 12,12,12,12,12,12,12,12,12,12,12,13,13,12,13,12,
- 13,13,12,13,13,13,13,11,12,12,12,12,12,12,12,13,
- 13,12,12,12,13,12,12,13,13,13,13,12,13,13,13,13,
- 12,12,12,12,12,12,12,13,13,13,12,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,13,
- 13,13,13,12,12,12,13,13,13,13,13,13,13,13,13,13,
- 13,13, 7,10,10,11,11,10,11,11,11,11,10,11,11,11,
- 11,10,11,11,11,11,10,11,11,11,11,10,11,11,11,11,
- 11,11,11,11,11,11,11,11,12,11,11,11,12,12,12,11,
- 11,11,12,12,10,10,10,11,11,11,11,11,12,11,10,11,
- 11,11,11,11,11,11,12,12,11,11,11,12,12,11,11,11,
- 11,11,11,11,12,12,12,11,12,11,12,12,11,12,12,12,
- 12,11,12,12,12,12,11,11,11,11,11,11,11,11,12,12,
- 11,12,11,12,12,11,12,12,12,12,11,12,12,12,12,10,
- 10,10,11,11,11,11,11,12,12,11,11,11,12,12,11,12,
- 12,12,12,11,12,12,12,12,11,11,11,11,11,11,11,12,
- 12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,11,11,11,11,11,11,12,12,12,12,11,12,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,13,12,12,
- 12,13,12,11,11,11,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,10,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,
- 11,11,11,12,12,11,11,11,11,11,11,11,12,12,12,11,
- 12,11,12,12,11,12,12,12,12,11,12,12,12,12,11,11,
- 11,11,11,11,11,11,12,12,11,11,11,12,12,11,12,12,
- 12,12,11,12,12,12,12,11,11,11,12,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 11,11,11,12,11,11,12,12,12,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,11,11,11,12,12,11,12,
- 12,12,12,12,12,12,12,12,12,12,12,13,13,12,12,12,
- 13,12,11,12,12,12,12,12,12,12,12,13,12,12,12,13,
- 13,12,13,13,13,13,12,13,13,13,13,11,12,12,12,12,
- 12,12,12,12,13,12,12,12,12,12,12,13,13,13,13,12,
- 13,13,13,13,12,12,12,12,12,12,12,13,13,13,12,13,
- 12,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,
- 12,12,12,13,13,13,13,12,13,12,13,13,13,13,13,13,
- 13,13,13,13,13,13,11,11,11,12,12,11,12,12,12,12,
- 11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,
- 12,13,13,12,12,12,13,13,11,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,13,13,12,13,12,13,
- 13,12,12,12,12,12,12,12,12,13,13,12,12,12,13,13,
- 13,13,13,13,13,12,13,13,13,13,12,12,12,12,12,12,
- 13,12,13,13,12,13,12,13,12,12,13,13,13,13,12,13,
- 13,13,13, 8,11,11,12,12,11,12,12,12,12,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,12,
- 12,11,12,12,12,12,12,12,12,12,12,12,12,12,13,13,
- 12,12,12,13,13,11,11,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,13,13,12,12,12,13,13,11,12,
- 12,12,12,12,12,12,12,13,12,12,12,12,12,12,12,13,
- 13,13,12,12,13,13,13,11,12,12,12,12,12,12,12,13,
- 12,12,12,12,13,13,12,13,13,13,13,12,13,13,13,13,
- 11,11,11,12,12,11,12,12,12,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,11,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,13,13,12,12,12,
- 13,13,11,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,13,12,13,13,12,13,12,13,13,12,12,12,12,12,
- 12,12,12,12,13,12,12,12,13,13,12,13,13,13,13,12,
- 13,13,13,13,12,12,12,12,12,12,12,12,13,13,12,12,
- 12,13,13,12,13,13,13,13,12,13,13,13,13,11,11,11,
- 12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,13,
- 12,12,12,12,12,13,11,12,12,12,12,12,12,12,12,13,
- 12,12,12,12,13,12,13,13,13,13,12,13,13,13,13,11,
- 12,12,12,12,12,12,12,12,13,12,12,12,13,12,12,13,
- 13,13,13,12,13,13,13,13,12,12,12,12,12,12,12,12,
- 13,13,12,12,13,13,13,12,13,13,13,13,12,13,13,13,
- 13,12,12,12,12,12,12,13,13,13,13,12,13,12,13,13,
- 12,13,13,13,13,13,13,13,13,13,11,11,11,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,13,13,13,12,13,13,13,13,11,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,
- 12,13,12,13,13,12,12,12,12,12,12,12,12,13,13,12,
- 12,12,13,13,12,13,13,13,13,12,13,13,13,13,12,12,
- 12,12,12,12,13,12,13,13,12,12,12,13,13,13,13,13,
- 13,13,12,13,13,13,13,11,11,11,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,13,12,12,12,13,12,
- 11,12,12,12,12,12,12,12,12,12,12,12,12,13,13,12,
- 12,13,13,13,12,13,13,13,13,11,12,12,12,12,12,12,
- 12,12,13,12,12,12,13,12,12,13,13,13,13,12,13,13,
- 13,13,12,12,12,12,12,12,12,12,13,13,12,12,12,13,
- 13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,
- 12,13,13,13,13,12,13,12,13,13,13,13,13,13,13,13,
- 13,13,13,13, 8,11,11,11,11,11,12,12,12,12,11,12,
- 12,12,12,12,12,12,12,12,11,12,12,12,12,11,11,11,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 13,12,12,12,13,13,11,11,11,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,13,13,12,12,12,13,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,13,13,12,13,
- 13,13,13,12,13,13,13,13,11,12,12,12,12,12,12,12,
- 12,13,12,12,12,13,12,12,13,13,13,13,12,13,12,13,
- 13,11,11,11,12,12,12,12,12,12,12,11,12,12,12,12,
- 12,12,12,13,13,12,12,12,13,12,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,13,13,12,12,13,13,13,12,13,
- 13,13,13,11,12,12,12,12,12,12,12,13,13,12,12,12,
- 12,12,12,13,13,13,13,12,13,13,13,13,12,12,12,12,
- 12,12,12,13,13,13,12,12,13,13,13,13,13,13,13,13,
- 12,13,13,13,13,12,12,12,12,12,12,13,12,13,13,12,
- 12,12,13,13,13,13,13,13,13,12,13,13,13,13,11,11,
- 11,12,12,11,12,12,12,12,11,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,11,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,13,12,13,13,12,12,12,13,13,
- 11,12,12,12,12,12,12,12,12,13,12,12,12,12,12,12,
- 12,12,13,13,12,13,12,13,13,12,12,12,12,12,12,12,
- 12,13,12,12,12,12,13,13,12,13,13,13,13,12,13,13,
- 13,13,12,12,12,12,12,12,12,12,13,13,12,12,12,13,
- 12,12,13,13,13,13,12,13,13,13,13,11,11,11,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,13,13,11,12,12,12,12,12,12,12,12,13,12,12,
- 12,12,12,12,13,13,13,13,12,13,13,13,13,11,12,12,
- 12,12,12,12,12,12,13,12,12,12,12,12,12,13,13,13,
- 13,12,13,13,13,13,12,12,12,12,12,12,12,12,13,13,
- 12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,12,
- 12,12,12,12,12,13,13,13,13,12,12,12,13,12,13,13,
- 13,13,13,12,13,13,13,13,11,11,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 13,11,12,12,12,12,12,12,12,12,12,12,12,12,13,12,
- 12,12,12,13,13,12,13,13,13,13,11,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,13,13,13,13,12,13,
- 12,13,13,12,12,12,12,12,12,12,13,13,13,12,13,12,
- 13,13,12,13,13,13,13,13,13,13,13,13,12,12,12,12,
- 12,12,12,12,12,13,12,12,12,13,13,13,13,13,13,13,
- 12,13,13,13,13,
-};
-
-static const static_codebook _44p9_p4_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p9_p4_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p9_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44p9_p5_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p9_p5_0[] = {
- 4, 6, 6, 9, 9, 6, 7, 8,10,11, 6, 8, 7,10,10, 8,
- 10,10,12,12, 8,10,10,12,12, 6, 7, 8,10,10, 7, 8,
- 9,10,11, 8, 9, 9,11,11,10,10,11,12,13,10,11,11,
- 13,13, 6, 8, 7,10,10, 8, 9, 9,11,11, 7, 9, 8,11,
- 10,10,11,11,13,13,10,11,10,13,12, 9,10,10,11,12,
- 10,10,11,12,13,10,11,11,12,13,12,12,13,12,14,12,
- 13,13,14,14, 9,10,10,12,11,10,11,11,13,12,10,11,
- 10,13,12,12,13,13,14,14,12,13,12,14,12, 7, 8, 8,
- 10,11, 8, 9,10,11,12, 8, 9, 9,11,12,10,11,12,13,
- 14,10,11,11,13,13, 8, 9,10,11,12, 9,10,11,12,13,
- 10,10,11,12,12,11,12,12,13,14,11,12,12,14,14, 8,
- 9, 9,11,12,10,10,11,12,13, 9,10,10,12,12,11,12,
- 12,14,14,11,12,12,14,13,11,11,12,12,13,11,12,12,
- 13,14,12,12,13,14,14,13,13,14,14,16,13,14,14,15,
- 15,11,12,11,13,13,12,12,12,14,14,11,12,12,14,13,
- 13,14,14,15,15,13,14,13,15,14, 7, 8, 8,11,10, 8,
- 10, 9,12,11, 8,10, 9,12,11,10,11,11,13,13,10,12,
- 11,14,13, 8, 9, 9,12,11, 9,10,10,12,12,10,11,10,
- 13,12,11,12,12,13,14,11,12,12,14,14, 8,10, 9,12,
- 11,10,11,10,12,12, 9,11,10,13,11,11,12,12,14,14,
- 11,12,12,14,13,11,11,12,13,13,11,12,12,13,14,12,
- 12,12,14,14,13,13,14,14,15,13,14,14,15,15,11,12,
- 11,13,12,12,12,12,14,14,11,12,12,14,13,13,14,14,
- 15,15,13,14,13,15,14,10,11,11,12,13,11,12,12,13,
- 14,11,12,12,13,14,13,13,14,14,16,13,14,14,15,15,
- 11,12,12,12,14,12,12,13,13,15,12,13,13,13,15,14,
- 14,15,15,16,14,14,15,15,16,11,12,12,13,14,12,13,
- 13,14,15,12,13,13,14,14,14,14,15,15,16,14,14,14,
- 15,15,13,14,14,14,15,14,14,15,15,16,14,15,15,15,
- 16,15,15,16,16,18,16,16,16,17,17,13,14,14,15,15,
- 14,14,15,16,16,14,14,14,16,15,16,16,16,17,17,15,
- 16,16,17,16,10,11,11,13,12,11,12,12,14,13,11,12,
- 12,14,13,13,14,14,15,15,13,14,13,16,14,11,12,12,
- 14,13,12,13,13,14,14,12,13,13,15,14,14,14,14,15,
- 15,14,15,14,16,15,11,12,12,14,12,12,13,13,15,14,
- 12,13,12,15,13,14,15,14,16,15,14,15,14,16,15,13,
- 14,14,15,15,14,14,14,15,16,14,15,14,16,16,15,16,
- 16,16,17,16,16,16,17,17,13,14,14,15,14,14,15,15,
- 16,15,14,15,14,16,15,16,16,16,17,17,15,16,15,18,
- 16, 6, 8, 8,11,11, 8, 9,10,11,12, 8,10, 9,12,12,
- 10,11,11,13,13,10,12,11,14,13, 8, 9, 9,11,12, 9,
- 10,10,12,12, 9,10,10,12,12,11,11,12,13,14,11,12,
- 12,14,14, 8,10, 9,12,11,10,11,11,12,12, 9,11,10,
- 13,12,11,12,12,14,14,11,12,12,14,13,10,11,11,13,
- 13,11,12,12,13,14,11,12,12,14,14,13,13,14,13,15,
- 13,14,14,15,15,11,12,11,13,13,12,12,12,14,14,11,
- 12,12,14,13,13,14,14,15,15,13,14,13,15,14, 8, 9,
- 9,11,11, 9,10,10,12,12, 9,10,10,12,12,11,12,12,
- 13,14,11,12,12,14,14, 9, 9,10,11,12,10,10,11,12,
- 13,10,10,11,12,13,12,12,13,13,15,12,12,13,14,14,
- 9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12,
- 13,13,14,15,12,13,12,14,14,11,11,12,12,14,12,12,
- 13,13,14,12,12,13,13,14,13,13,14,14,16,14,14,14,
- 15,15,11,12,12,14,13,12,13,13,14,14,12,13,13,15,
- 14,14,14,14,16,16,13,14,14,16,14, 7, 9, 9,12,11,
- 9,10,10,12,12, 9,11,10,13,12,11,12,12,13,14,11,
- 13,12,14,13, 9,10,10,12,12,10,10,11,12,13,10,12,
- 11,13,13,12,12,13,13,14,12,13,13,15,14, 9,10,10,
- 12,12,11,11,11,13,13,10,12,10,13,12,12,13,13,14,
- 15,12,13,12,15,13,11,12,12,14,13,12,12,13,13,14,
- 12,13,13,15,14,13,13,14,13,16,14,15,14,16,15,12,
- 12,12,14,14,13,13,13,14,14,12,13,12,14,13,14,15,
- 15,16,16,13,14,13,16,13,10,11,12,13,14,11,12,13,
- 13,15,12,12,13,14,14,13,14,14,15,16,13,14,14,16,
- 15,12,12,13,12,14,12,12,13,13,15,13,13,13,13,15,
- 14,14,15,14,16,14,15,15,15,16,12,13,12,14,14,13,
- 13,13,15,15,12,13,13,15,15,14,15,15,16,16,14,15,
- 15,16,16,13,14,14,13,16,14,14,15,14,16,14,14,15,
- 14,16,15,15,16,15,18,16,16,16,16,17,14,14,14,16,
- 15,14,15,15,16,16,14,15,15,16,16,16,16,16,17,17,
- 15,16,16,17,16,10,12,11,14,13,12,13,13,14,14,12,
- 13,12,15,14,14,14,14,15,15,14,15,14,16,15,12,13,
- 12,14,13,12,13,13,15,14,13,14,13,15,14,14,15,15,
- 16,16,14,15,15,17,15,12,13,12,14,14,13,14,14,15,
- 15,13,14,13,15,14,15,15,15,16,16,14,15,15,17,15,
- 14,14,14,16,15,14,15,15,16,16,14,15,15,16,15,16,
- 16,16,16,17,16,17,16,18,17,14,14,14,16,15,15,15,
- 15,16,16,14,15,14,16,15,16,16,17,17,17,15,16,15,
- 17,16, 6, 8, 8,11,11, 8, 9,10,12,12, 8,10, 9,12,
- 11,10,11,12,13,13,10,11,11,13,13, 8, 9,10,11,12,
- 9,10,11,12,13,10,11,11,12,12,11,12,12,13,14,11,
- 12,12,14,14, 8, 9, 9,12,11, 9,10,10,12,12, 9,10,
- 10,12,12,11,12,12,14,14,11,12,11,14,13,11,11,12,
- 13,13,11,12,12,13,14,12,12,12,14,14,13,13,14,14,
- 15,13,14,14,15,15,10,11,11,13,13,11,12,12,14,14,
- 11,12,12,14,13,13,14,14,15,15,13,14,13,15,13, 7,
- 9, 9,11,12, 9,10,11,12,13, 9,10,10,12,12,11,12,
- 13,13,14,11,12,12,14,14, 9,10,10,12,12,10,10,11,
- 12,13,11,12,11,13,13,12,12,13,13,15,12,13,13,15,
- 14, 9,10,10,12,12,10,11,12,13,13,10,11,10,13,12,
- 12,13,13,14,15,12,13,12,14,13,12,12,12,14,14,12,
- 12,13,13,14,13,13,13,15,14,14,13,14,13,16,14,15,
- 15,16,16,11,12,12,13,14,12,13,13,14,15,12,13,12,
- 14,13,14,14,15,15,16,13,14,13,15,13, 8, 9, 9,11,
- 11, 9,10,10,12,12, 9,10,10,12,12,11,12,12,14,14,
- 11,12,11,14,13, 9,10,10,12,12,10,11,11,13,13,10,
- 11,11,13,13,12,12,13,14,15,12,13,13,15,14, 9,10,
- 9,12,11,10,11,10,13,12,10,11,10,13,12,12,13,12,
- 14,14,12,13,12,15,13,11,12,12,13,14,12,13,13,14,
- 14,12,13,13,14,14,14,14,14,14,16,14,14,14,16,15,
- 11,12,11,14,12,12,13,12,15,13,12,13,12,15,13,14,
- 14,14,16,15,13,14,13,16,14,10,11,12,13,14,12,12,
- 13,13,15,12,13,13,14,14,14,14,15,15,16,14,14,14,
- 15,16,12,12,13,14,14,12,13,14,14,15,13,14,14,15,
- 15,14,15,15,15,17,15,15,15,16,16,12,12,13,13,14,
- 13,13,14,14,15,12,13,13,14,15,15,15,15,15,17,14,
- 15,15,15,15,14,14,14,16,16,14,15,15,15,16,15,15,
- 15,16,16,16,15,16,16,18,16,16,17,17,17,14,14,14,
- 15,16,15,15,15,16,17,14,15,14,16,16,16,16,17,17,
- 18,16,16,15,17,16,10,12,11,14,13,12,12,12,14,14,
- 11,13,12,14,13,13,14,14,15,15,13,14,13,16,15,12,
- 12,13,14,14,12,13,13,15,15,13,13,13,15,15,14,15,
- 15,16,16,14,15,15,17,16,12,13,12,14,12,13,13,13,
- 15,13,12,13,12,15,13,14,15,15,16,15,14,15,14,16,
- 14,14,14,14,16,16,14,15,15,16,16,14,15,15,16,16,
- 15,16,16,16,17,16,17,16,18,17,13,14,14,16,13,14,
- 15,15,16,14,14,15,14,16,14,16,16,16,17,16,15,16,
- 15,18,15, 9,11,11,13,13,11,12,12,14,14,11,12,12,
- 14,14,13,14,14,15,15,13,14,14,15,15,11,12,12,14,
- 14,11,12,13,14,15,12,13,13,15,14,13,14,14,15,16,
- 13,14,14,16,16,11,12,12,14,14,12,13,13,15,15,12,
- 13,13,15,14,14,14,14,16,16,14,15,14,16,15,12,13,
- 13,14,15,12,13,14,15,16,13,14,14,16,16,14,14,15,
- 16,17,15,15,15,17,17,13,14,14,15,15,14,15,14,16,
- 16,14,15,14,16,15,15,16,16,17,17,15,16,15,17,16,
- 10,12,12,13,14,11,12,13,14,14,12,13,12,14,14,13,
- 14,14,15,16,13,14,14,16,15,11,12,12,14,14,12,12,
- 13,14,15,12,13,13,15,15,13,13,15,15,17,14,14,15,
- 16,16,12,13,12,14,14,12,13,13,15,15,12,13,13,15,
- 14,14,15,15,16,16,14,15,14,16,16,13,12,14,13,16,
- 13,13,15,14,16,14,13,15,15,16,14,14,16,15,17,15,
- 15,16,16,17,13,14,14,16,15,14,15,15,16,16,14,15,
- 14,16,15,16,16,16,17,17,15,16,16,18,16,10,12,12,
- 14,14,12,12,13,14,14,12,13,12,15,14,13,14,14,15,
- 16,14,15,14,16,15,11,12,12,14,14,12,13,13,14,15,
- 13,14,13,15,15,14,14,15,15,16,14,15,15,17,16,12,
- 13,13,14,14,13,13,14,15,15,12,14,13,15,15,14,15,
- 15,16,16,14,15,15,17,15,13,14,13,15,15,13,14,14,
- 15,16,14,15,14,17,16,15,15,15,15,17,16,16,16,18,
- 17,14,14,14,16,16,15,15,15,16,16,14,15,14,16,16,
- 16,16,17,17,17,16,16,16,17,16,11,12,13,14,14,12,
- 13,13,15,15,12,13,13,15,15,14,15,15,16,16,14,15,
- 15,17,16,12,13,13,14,15,13,13,14,14,16,13,14,14,
- 15,16,15,14,16,15,17,15,15,16,16,17,12,13,13,15,
- 15,13,14,14,16,16,13,14,14,16,15,15,15,16,17,17,
- 15,16,15,17,16,14,14,15,13,16,15,14,16,14,17,15,
- 15,16,14,17,16,15,17,15,18,16,16,17,16,18,14,15,
- 15,17,16,15,16,16,17,17,15,16,15,17,16,16,17,17,
- 18,18,16,17,15,18,16,11,12,12,14,14,13,13,14,14,
- 15,13,14,13,16,14,15,15,15,16,16,15,16,15,17,16,
- 12,13,13,15,14,13,13,14,15,15,14,15,14,16,15,15,
- 15,16,15,16,16,16,16,18,16,12,13,13,15,15,14,14,
- 15,15,16,13,14,13,16,15,16,16,16,17,17,15,16,15,
- 17,15,14,15,14,16,15,14,15,15,16,16,15,16,15,17,
- 16,16,15,16,15,17,17,18,17,18,17,15,15,15,16,16,
- 16,16,16,17,17,14,15,15,17,16,17,17,18,18,18,16,
- 17,15,18,15, 9,11,11,13,13,11,12,12,14,14,11,12,
- 12,14,14,13,14,14,15,16,13,14,14,15,15,11,12,12,
- 14,14,12,13,13,14,15,12,13,13,14,14,14,14,15,15,
- 16,14,14,14,16,16,11,12,12,14,14,12,13,13,14,15,
- 11,13,12,14,14,13,14,14,16,16,13,14,14,16,15,13,
- 14,14,15,15,14,14,15,15,16,14,15,14,16,16,15,15,
- 16,16,17,15,16,16,17,17,12,13,13,15,15,13,14,14,
- 16,15,12,14,13,16,15,15,16,15,17,17,14,15,15,17,
- 15,10,12,12,14,14,12,12,13,14,15,12,13,12,14,14,
- 14,14,15,15,16,13,14,14,16,16,12,13,13,14,14,13,
- 13,14,14,15,13,14,13,15,15,14,15,15,15,17,14,15,
- 15,16,16,11,12,12,14,14,13,13,14,15,15,12,13,13,
- 15,14,14,15,15,16,17,14,15,14,16,15,14,14,14,16,
- 16,14,15,15,16,16,15,15,15,16,16,15,16,16,16,18,
- 16,17,16,18,17,13,13,14,15,15,14,14,15,16,16,13,
- 14,14,16,15,16,16,17,17,17,15,15,15,17,15,10,12,
- 12,14,13,12,12,13,14,14,11,13,12,14,14,13,14,14,
- 16,16,13,14,14,16,15,12,12,13,14,14,12,13,13,14,
- 15,13,13,13,15,15,14,14,15,16,16,14,15,15,16,16,
- 11,12,12,14,14,12,13,13,15,15,12,13,12,15,14,14,
- 15,14,16,16,13,15,13,16,15,13,14,14,15,16,14,15,
- 15,15,17,14,15,15,16,16,16,15,16,16,17,16,16,16,
- 17,17,13,14,12,16,13,14,15,13,16,15,13,15,13,16,
- 14,15,16,15,17,16,15,16,14,17,15,11,12,12,14,15,
- 13,13,14,14,16,13,14,13,15,14,15,15,16,16,17,15,
- 15,15,16,16,12,13,13,15,15,13,13,14,15,16,14,15,
- 14,16,15,15,15,16,15,17,16,16,16,17,17,12,13,13,
- 14,15,14,14,15,15,16,13,14,13,15,15,16,16,16,17,
- 17,15,16,15,16,15,15,15,15,16,16,14,15,15,16,17,
- 16,16,16,17,17,16,15,17,15,18,17,18,17,18,18,14,
- 14,15,15,17,15,15,16,16,17,14,15,15,16,16,17,17,
- 17,17,18,16,16,15,17,15,11,12,12,14,14,12,13,13,
- 15,15,12,13,13,15,15,14,15,15,16,16,14,15,14,17,
- 16,13,13,13,15,15,13,14,14,15,16,13,14,14,16,16,
- 15,15,16,16,17,15,16,16,17,17,12,13,13,15,14,13,
- 14,14,16,15,13,14,13,16,14,15,16,16,17,16,15,16,
- 14,17,15,14,15,15,16,17,15,15,16,16,17,15,16,16,
- 17,17,16,15,17,16,18,16,17,17,18,18,14,15,14,16,
- 13,15,16,15,17,14,15,16,14,17,14,16,17,16,18,16,
- 16,17,15,18,15,
-};
-
-static const static_codebook _44p9_p5_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p9_p5_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44p9_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44p9_p5_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44p9_p5_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44p9_p5_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44p9_p5_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44p9_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44p9_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p9_p6_0[] = {
- 2, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 8, 9, 7,
- 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 8, 5, 7, 8, 8, 9,
- 10, 8, 9,10, 8, 9,10,10,10,12,10,11,11, 8,10,10,
- 10,11,12,10,11,10, 5, 8, 7, 8,10,10, 8,10, 9, 8,
- 10,10,10,10,11,10,12,11, 8,10, 9,10,11,11,10,12,
- 10, 5, 8, 8, 7, 9,10, 8,10, 9, 7, 9,10, 9,10,11,
- 9,11,11, 8,10, 9,10,11,11, 9,11,10, 7, 9, 9, 9,
- 10,11, 9,11,11, 9, 9,11,10,10,13,11,12,12, 9,11,
- 11,11,12,13,11,13,11, 7, 9, 9, 9,10,11, 9,11,10,
- 9,11,10,10,10,12,11,13,12, 9,11,11,11,12,12,10,
- 12,10, 5, 8, 8, 8, 9,10, 7,10, 9, 8, 9,10, 9,10,
- 11,10,11,11, 7,10, 9, 9,11,11, 9,11,10, 7, 9, 9,
- 9,10,11, 9,11,10, 9,11,11,10,10,12,11,12,12, 9,
- 10,11,11,12,13,10,12,10, 7, 9, 9, 9,11,11, 9,11,
- 10, 9,11,11,11,11,13,11,13,12, 9,11, 9,11,12,12,
- 10,13,10,
-};
-
-static const static_codebook _44p9_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44p9_p6_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44p9_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44p9_p6_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44p9_p6_1[] = {
- 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 8, 7,
- 8, 8, 7, 8, 7, 7, 8, 8, 7, 8, 8, 7, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9,
- 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 8, 8,
- 8, 8, 9, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 9, 9, 8,
- 9, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 8,
- 8, 8, 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 9, 9, 8, 9, 9, 8, 8, 8, 8, 9, 8,
- 8, 9, 8,
-};
-
-static const static_codebook _44p9_p6_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44p9_p6_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44p9_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44p9_p7_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p9_p7_0[] = {
- 1,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,
-};
-
-static const static_codebook _44p9_p7_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p9_p7_0,
- 1, -510105088, 1635281408, 3, 0,
- (long *)_vq_quantlist__44p9_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44p9_p7_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44p9_p7_1[] = {
- 1, 4, 4,16,16, 4, 9,11,15,16, 4,12, 8,16,16,12,
- 16,16,16,16,13,16,16,16,16, 5, 8,10,16,16, 9, 9,
- 14,15,16,12,14,14,16,16,16,16,16,16,16,16,16,16,
- 16,16, 5,11, 8,16,15,12,14,16,16,16, 9,15, 9,16,
- 16,16,16,16,16,16,16,16,16,16,16,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,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16, 6,11,11,
- 16,16,12,13,16,16,16,12,16,14,16,16,16,16,16,16,
- 16,16,16,16,16,16,11,15,15,16,16,14,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,12,
- 15,16,16,16,16,16,16,16,16,14,16,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,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, 5,11,11,16,16,12,
- 15,16,16,16,12,16,14,16,16,16,16,16,16,16,16,16,
- 16,16,16,12,15,15,16,16,14,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,11,15,15,16,
- 16,16,16,16,16,16,15,16,14,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,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,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,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,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,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,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,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,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,16,16,16,16,16,
- 16, 6,11,12,16,16,11,15,16,16,16,13,16,14,16,16,
- 16,16,16,16,16,16,16,16,16,16,11,16,14,16,16,14,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,12,14,14,16,16,16,16,16,16,16,15,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,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,16,16,16,16,16,16,16,16,16, 8,13,
- 15,16,16,15,15,16,16,16,14,16,16,16,16,16,16,16,
- 16,16,16,16,16,16,16,14,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,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,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,16,16,16,16, 7,12,12,16,16,
- 13,12,16,16,16,14,16,14,16,16,16,16,16,16,16,16,
- 16,16,16,16,13,16,16,16,16,14,14,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,12,14,16,
- 16,16,16,16,16,16,16,14,16,14,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,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,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,
- 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,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,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,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,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,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,16,16,16,16,
- 16,16, 6,11,11,16,16,13,15,16,16,16,11,15,14,16,
- 16,16,16,16,16,16,14,16,16,16,16,11,16,16,16,16,
- 16,16,16,16,16,15,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,11,16,14,16,16,14,16,16,16,16,13,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,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, 7,
- 11,11,16,16,13,13,16,16,16,13,16,13,16,16,16,16,
- 16,16,16,16,16,16,16,16,12,16,15,16,16,14,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,12,14,16,16,16,16,16,16,16,16,14,16,13,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,
- 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, 8,13,14,16,
- 16,15,16,16,16,16,14,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,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,15,16,
- 15,16,16,16,16,16,16,16,16,16,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,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,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,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,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,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,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,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,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,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,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,
- 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,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,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,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,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,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,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,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,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
- 16,16,16,16,16,
-};
-
-static const static_codebook _44p9_p7_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44p9_p7_1,
- 1, -514619392, 1630767104, 3, 0,
- (long *)_vq_quantlist__44p9_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44p9_p7_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p9_p7_2[] = {
- 1, 3, 2, 5, 4, 7, 7, 8, 8, 9,10,10,10,11,11,11,
- 12,12,12,13,13,13,13,13,13,
-};
-
-static const static_codebook _44p9_p7_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44p9_p7_2,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44p9_p7_2,
- 0
-};
-
-static const long _vq_quantlist__44p9_p7_3[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44p9_p7_3[] = {
- 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44p9_p7_3 = {
- 1, 25,
- (char *)_vq_lengthlist__44p9_p7_3,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44p9_p7_3,
- 0
-};
-
-static const char _huff_lengthlist__44p9_short[] = {
- 3, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _huff_book__44p9_short = {
- 1, 8,
- (char *)_huff_lengthlist__44p9_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44pn1_l0_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44pn1_l0_0[] = {
- 1, 3, 3, 8, 8,10,10,10,10,10,10,10,10, 5, 7, 5,
- 9, 8,10,10,10,10,11,10,11,10, 5, 5, 7, 8, 9,10,
- 10,11,10,10,11,10,11,10,10,10,11,11,11,11,11,11,
- 11,10,11,11,10,10,10,10,11,11,11,11,11,10,11,11,
- 11,11,11,11,11,11,12,11,10,11,11,11,11,11,11,11,
- 11,11,11,11,11,10,10,11,11,12,11,11,11,11,11,11,
- 12,11,11,11,10,11,11,11,11,11,11,11,11,10,11,11,
- 10,11,10,11,11,11,11,11,11,11,11,11,11,12,11,11,
- 12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,
- 10,11,11,11,11,11,11,11,12,11,13,11,11,11,11,11,
- 11,11,11,11,11,11,12,11,13,
-};
-
-static const static_codebook _44pn1_l0_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44pn1_l0_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44pn1_l0_0,
- 0
-};
-
-static const long _vq_quantlist__44pn1_l0_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44pn1_l0_1[] = {
- 1, 4, 4, 7, 7, 4, 5, 6, 7, 7, 4, 6, 5, 7, 7, 7,
- 6, 7, 6, 7, 7, 7, 6, 7, 6,
-};
-
-static const static_codebook _44pn1_l0_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44pn1_l0_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44pn1_l0_1,
- 0
-};
-
-static const long _vq_quantlist__44pn1_l1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44pn1_l1_0[] = {
- 1, 4, 4, 4, 4, 4, 4, 4, 4,
-};
-
-static const static_codebook _44pn1_l1_0 = {
- 2, 9,
- (char *)_vq_lengthlist__44pn1_l1_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44pn1_l1_0,
- 0
-};
-
-static const char _huff_lengthlist__44pn1_lfe[] = {
- 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book__44pn1_lfe = {
- 2, 4,
- (char *)_huff_lengthlist__44pn1_lfe,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44pn1_long[] = {
- 2, 3, 6, 7, 9,13,17, 3, 2, 5, 7, 9,13,17, 6, 5,
- 5, 6, 9,12,16, 7, 7, 6, 6, 7,10,13,10,10, 9, 7,
- 6,10,13,13,13,12,10,10,11,15,17,17,17,14,14,15,
- 17,
-};
-
-static const static_codebook _huff_book__44pn1_long = {
- 2, 49,
- (char *)_huff_lengthlist__44pn1_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44pn1_p1_0[] = {
- 1, 2, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,
-};
-
-static const static_codebook _44pn1_p1_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44pn1_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44pn1_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44pn1_p2_0[] = {
- 1, 5, 5, 0, 7, 7, 0, 8, 8, 0, 9, 9, 0,12,12, 0,
- 8, 8, 0, 9, 9, 0,13,13, 0, 8, 8, 0, 6, 6, 0,11,
- 11, 0,12,12, 0,12,12, 0,14,14, 0,11,12, 0,12,12,
- 0,15,15, 0,12,12, 0, 5, 5, 0, 5, 5, 0, 6, 6, 0,
- 7, 7, 0,10,10, 0, 6, 6, 0, 7, 7, 0,11,11, 0, 6,
- 6, 0, 7, 7, 0,11,11, 0,12,11, 0,11,11, 0,14,14,
- 0,10,10, 0,12,12, 0,15,15, 0,12,12, 0, 6, 6, 0,
- 12,12, 0,12,12, 0,12,12, 0,14,14, 0,11,11, 0,12,
- 12, 0,16,16, 0,12,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, 8, 8, 0,12,12, 0,12,12, 0,12,12, 0,15,
- 15, 0,12,12, 0,11,11, 0,16,16, 0,11,11, 0, 6, 6,
- 0,12,12, 0,12,12, 0,13,13, 0,15,15, 0,12,12, 0,
- 13,13, 0,15,15, 0,12,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,
-};
-
-static const static_codebook _44pn1_p2_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44pn1_p2_0,
- 1, -533200896, 1614282752, 2, 0,
- (long *)_vq_quantlist__44pn1_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p2_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44pn1_p2_1[] = {
- 1, 3, 3, 0, 9, 9, 0, 9, 9, 0,10,10, 0, 9, 9, 0,
- 10,10, 0,10,10, 0,10,10, 0,10,10, 0, 7, 7, 0, 7,
- 7, 0, 6, 6, 0, 8, 8, 0, 7, 7, 0, 8, 8, 0, 8, 8,
- 0, 7, 7, 0, 8, 8, 0, 7, 7, 0, 9, 9, 0, 8, 9, 0,
- 10,10, 0, 9, 9, 0,10,10, 0,10,11, 0, 9, 9, 0,10,
- 10, 0, 9, 9, 0,11,11, 0,12,12, 0,12,12, 0,11,11,
- 0,12,12, 0,13,13, 0,12,12, 0,13,13, 0, 8, 8, 0,
- 12,12, 0,12,12, 0,13,13, 0,13,13, 0,13,13, 0,13,
- 13, 0,13,13, 0,13,13, 0, 7, 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, 9, 9, 0,11,11, 0,12,12, 0,13,13, 0,12,
- 12, 0,13,13, 0,13,13, 0,12,12, 0,12,12, 0, 9, 9,
- 0,12,12, 0,13,13, 0,14,14, 0,13,13, 0,14,14, 0,
- 14,14, 0,13,13, 0,14,14, 0, 7, 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,
-};
-
-static const static_codebook _44pn1_p2_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44pn1_p2_1,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44pn1_p2_1,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p3_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44pn1_p3_0[] = {
- 1, 6, 6, 6, 8, 8, 6, 8, 8, 7, 9, 9,10,11,11, 8,
- 8, 8, 7, 9, 9,11,12,12, 9, 9, 9, 6, 7, 7,10,11,
- 11,10,11,11,10,11,11,13,13,13,12,12,12,10,12,11,
- 14,14,14,12,12,12, 6, 5, 5, 9, 6, 6, 9, 6, 6, 9,
- 7, 7,12,10,10,11, 7, 6, 9, 7, 7,13,11,11,12, 7,
- 7, 7, 8, 8,12,10,10,12,10,10,11,10,10,15,13,13,
- 13, 9, 9,12,11,11,15,14,14,15,11,11, 8, 7, 7,12,
- 11,11,12,11,11,11,11,11,14,13,14,14,12,12,12,11,
- 11,16,15,15,14,12,12, 0,10,10, 0,12,12, 0,12,12,
- 0,11,11, 0,14,14, 0,11,11, 0,11,11, 0,15,15, 0,
- 11,11, 7, 8, 8,13,11,11,12,10,10,12,11,11,15,13,
- 13,14,11,11,12,10,10,16,14,14,15,10,10, 9, 7, 7,
- 13,11,12,13,12,11,12,11,11,15,14,14,14,12,12,13,
- 12,12,16,15,15,15,12,12, 0,11,11, 0,12,12, 0,12,
- 13, 0,12,12, 0,15,15, 0,12,12, 0,12,12, 0,16,15,
- 0,12,12,
-};
-
-static const static_codebook _44pn1_p3_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44pn1_p3_0,
- 1, -531365888, 1616117760, 2, 0,
- (long *)_vq_quantlist__44pn1_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p3_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44pn1_p3_1[] = {
- 2, 3, 4, 9, 9,10,12,12,12,11,10,12,12,13,12,11,
- 13,12,11,11,11,12,12,12,11,11,13,13,13,13,11,12,
- 12,14,14,12,13,13,13,13,11,13,13,13,13,11,13,13,
- 13,13,11,13,13,13,13,11,12,12,14,14,12,13,13,12,
- 12,11,13,13,13,13,11,13,13,12,12,11,13,13,13,13,
- 12,12,13,14,14,12,13,13,12,12,11,13,13,13,13,11,
- 13,13,12,12,11,13,13,13,13,12,13,13,14,14,12,13,
- 13,12,12,11,13,13,13,13,11,13,13,12,12,11,10,10,
- 10,10,12,10,10,11,11,12, 9, 9,11,11,13,11,11,10,
- 10,13,10,10,10,10,13,11,11,12,12,13,10,10,12,12,
- 14,12,11,12,12,13,11,11,11,12,13,12,12,12,12,13,
- 11,11,12,12,13,10,10,12,12,14,11,11,12,12,13,11,
- 11,12,12,13,11,11,12,12,14,12,12,12,12,14,10,10,
- 11,11,14,12,11,11,11,13,11,11,11,11,13,12,12,11,
- 11,14,12,12,12,11,14,10,10,11,11,14,12,11,11,11,
- 13,11,11,11,11,13,12,12,11,11,11,11,11,10,10,12,
- 10,11, 9, 9,12,12,12,11,11,13,12,12, 9, 9,13,13,
- 13,10,10,13,13,13,12,12,13,13,13,14,14,13,12,12,
- 11,11,14,13,13,12,12,14,13,13,11,11,13,13,13,12,
- 11,13,13,13,14,14,13,12,12,10,10,14,13,13,11,11,
- 13,13,13,10,10,13,13,13,11,11,14,13,13,14,14,14,
- 12,12,10,10,13,13,13,11,11,13,13,13,10,10,13,13,
- 13,11,11,14,13,13,14,14,14,13,13,10,10,13,13,13,
- 11,11,13,13,13,10,10,14,12,12, 8, 8,14,12,12, 9,
- 9,14,11,11, 9, 9,14,12,12, 8, 8,14,12,12, 7, 7,
- 15,13,13,10,10,15,12,12,10,10,15,13,13,10,10,15,
- 12,13, 9, 9,15,13,13,10,10,15,13,13,10,10,15,12,
- 12,10,10,15,13,13,10,10,15,13,13, 9, 9,15,13,13,
- 10,10,15,13,13,10,10,15,12,12,10,10,15,13,13, 9,
- 9,14,13,12, 9, 9,14,13,13, 9, 9,15,13,13,10,10,
- 15,12,12,10,10,15,13,13, 9, 9,15,13,13, 9, 9,14,
- 13,13, 9, 9,14,12,12, 8, 8,13,13,13, 8, 8,14,14,
- 13, 9, 9,14,14,13, 7, 7,14,14,14, 8, 8,14,14,14,
- 10,10,15,14,14,12,12,14,14,14, 9, 9,15,14,14,10,
- 10,14,14,14, 9, 9,14,14,14,10, 9,15,14,14,12,12,
- 14,14,14, 9, 9,15,14,14,10,10,14,14,14, 9, 9,15,
- 14,15, 9, 9,15,14,14,11,11,14,14,14, 8, 8,14,14,
- 14, 9, 9,14,14,14, 8, 8,14,15,14,10,10,15,14,14,
- 11,11,14,14,14, 8, 8,15,14,14, 9, 9,14,14,14, 8,
- 8,12,12,12,13,13,16,16,15,12,12,17,16,16,13,13,
- 17,16,16,11,11,17,16,16,12,12,17,16,17,13,13,17,
- 16,16,14,14,17,17,16,12,12,18,16,16,13,13,17,16,
- 17,12,12,17,17,17,13,13,18,16,16,14,14,18,17,17,
- 12,12,17,17,17,13,13,18,17,17,13,13,17,17,17,13,
- 13,17,16,16,14,14,17,17,17,12,12,16,16,17,13,13,
- 17,17,16,12,12,18,17,17,13,13,18,16,16,14,14,18,
- 17,17,12,12,19,16,17,13,13,17,16,17,12,12,13,14,
- 14,10,10,16,14,14,13,13,17,15,15,14,14,17,14,14,
- 13,13,16,14,14,13,13,17,16,15,14,14,16,16,16,15,
- 15,17,15,15,14,14,17,15,15,14,14,17,15,15,14,14,
- 17,16,15,14,14,16,16,16,15,15,18,15,15,13,13,16,
- 16,15,14,14,17,15,15,14,13,17,15,15,14,14,16,16,
- 16,15,15,18,15,14,13,13,17,15,15,14,14,18,14,15,
- 13,13,18,15,15,14,14,16,16,16,15,15,17,15,15,13,
- 13,17,15,15,14,14,17,15,15,13,13,13,11,11,10,10,
- 16,14,14,13,13,17,14,15,14,14,17,15,15,12,12,17,
- 14,14,12,12,16,15,15,14,14,16,14,14,14,14,16,15,
- 15,14,14,16,15,15,14,14,16,15,15,14,14,16,15,15,
- 14,14,16,15,14,15,15,17,15,15,14,14,17,15,15,14,
- 14,17,15,15,14,14,17,15,16,14,14,16,14,14,14,14,
- 17,15,15,13,13,17,15,15,13,13,16,15,15,13,13,17,
- 16,16,14,14,17,15,14,15,14,17,15,15,13,13,17,15,
- 15,13,13,17,15,15,13,13,14,14,14, 9, 9,14,14,14,
- 18,19,14,15,15,19,18,14,14,14,19,19,15,14,14,19,
- 19,15,16,16,19,19,15,16,16,19,19,15,15,15,19,19,
- 15,16,16,19,20,15,15,15,19,19,15,15,15,19,19,15,
- 16,16,20,20,15,15,15,18,19,15,15,16,19,20,15,15,
- 15,19,18,15,15,15,18,18,15,16,16,21,20,15,15,15,
- 19,19,15,15,15,19,19,15,15,14,19,20,15,15,15,20,
- 19,15,16,16,19,20,15,15,15,19,19,15,15,15,20,21,
- 15,14,15,19,19,14,12,12, 9, 9,14,14,15,21,19,14,
- 14,14,18,19,14,15,15,19,20,14,14,14,19,19,15,15,
- 15,19,20,15,15,14,21,19,15,15,15,20,19,15,14,15,
- 20,21,15,15,15,18,18,15,15,15,20,21,16,14,14,18,
- 19,15,15,15,20,19,15,15,15,18,21,15,15,15,19,19,
- 15,15,15,19,20,16,15,14,20,19,15,16,15,19,19,15,
- 15,15,19, 0,14,15,15,19,19,15,15,15,19,19,15,15,
- 14,20,19,15,15,15,20,19,15,15,15,19,19,15,15,15,
- 20,19,12,12,12,13,13,16,15,16,11,11,16,16,16,12,
- 12,17,16,16,11,11,17,16,16,12,11,17,17,17,13,13,
- 18,16,16,14,14,18,18,17,13,13,17,16,16,13,13,17,
- 17,17,13,13,17,16,17,12,12,17,15,16,13,13,17,16,
- 17,12,12,17,16,16,13,12,17,16,16,12,12,18,17,17,
- 13,13,18,16,16,13,14,18,17,17,12,12,17,16,16,12,
- 12,17,17,17,12,12,18,17,17,13,13,17,16,16,14,14,
- 17,17,17,12,12,17,16,16,12,12,18,17,17,12,12,13,
- 14,14, 9, 9,16,14,14,13,13,16,15,15,14,14,16,14,
- 14,13,13,16,14,14,13,13,17,16,15,15,15,16,15,16,
- 16,15,17,15,15,14,14,17,15,15,15,15,17,15,15,14,
- 14,17,15,15,14,14,16,15,16,16,16,17,15,15,14,14,
- 16,15,15,14,15,16,15,15,14,14,17,15,15,15,15,16,
- 16,16,15,16,18,15,14,13,14,17,15,15,14,14,17,14,
- 14,13,13,17,15,15,14,14,16,15,15,15,15,17,15,14,
- 14,14,17,15,15,14,14,17,14,14,13,13,13,11,11,11,
- 11,16,14,14,12,12,16,14,14,13,13,16,14,14,12,12,
- 16,14,14,12,12,16,15,15,13,13,17,14,14,14,14,17,
- 15,15,13,13,16,15,15,14,13,16,15,15,13,13,16,15,
- 15,13,13,16,14,14,14,14,16,15,15,13,13,16,14,15,
- 13,13,17,15,15,13,13,17,15,15,13,13,16,14,14,14,
- 14,17,15,15,12,12,17,14,15,13,13,17,15,15,12,12,
- 16,15,15,13,13,17,14,14,14,14,17,15,15,12,12,17,
- 15,15,13,13,16,15,15,12,12,14,15,15, 8, 8,14,14,
- 14,19,18,14,15,15,19,20,14,14,14,19,19,14,14,15,
- 19,20,15,16,15,19,21,15,16,16,21,19,15,15,15,20,
- 19,15,16,16,19,20,15,15,15,19,18,15,16,15,20,19,
- 15,16,16,19,20,15,15,15,19,19,15,16,15,20,20,14,
- 15,15,19,19,15,15,15,21,19,15,17,16,19,20,15,14,
- 15, 0,21,15,15,15,19,20,14,14,14,19,19,15,15,15,
- 20,19,15,16,16,19,19,15,15,15,19,18,15,15,15,20,
- 19,14,14,15,18,18,14,12,12, 9, 9,14,14,14,18,18,
- 14,14,14,18,18,14,15,14,19,18,14,14,14,19,18,15,
- 15,15,19,20,15,14,14,18,18,15,15,15,20,19,15,15,
- 15,18,20,15,15,15,19,18,15,15,15,19,19,15,14,14,
- 19,21,15,15,15,20,20,15,15,15,18,19,14,15,15,19,
- 20,15,15,15,20,19,15,14,14,19,21,15,15,15,18,19,
- 15,14,15,20,19,14,15,15,21,21,14,15,15,19,20,15,
- 14,14,19,20,15,15,15,19,20,15,15,14,20,20,14,15,
- 15,20,19,13,12,12,13,13,17,16,16,11,11,17,16,16,
- 12,12,18,17,16,11,11,18,16,16,11,11,17,17,17,13,
- 13,18,16,16,13,13,18,17,17,12,12,18,16,16,13,13,
- 18,17,17,12,12,18,17,17,13,13,18,16,16,14,14,18,
- 16,17,12,12,18,17,17,13,13,17,17,17,12,12,17,17,
- 17,12,12,17,16,15,13,13,18,16,16,11,11,17,16,16,
- 12,12,17,16,17,11,11,18,17,17,13,12,17,16,16,13,
- 13,17,17,17,12,12,17,16,17,12,12,18,17,17,11,11,
- 14,14,14, 9, 9,16,14,14,13,13,17,15,15,14,14,17,
- 14,14,13,13,16,14,14,13,13,17,15,15,14,14,16,16,
- 16,16,15,18,15,15,14,14,17,16,15,15,15,17,15,15,
- 14,14,17,15,15,14,15,16,16,16,15,16,18,15,15,14,
- 14,17,15,15,14,15,17,15,15,14,14,17,15,15,14,14,
- 16,16,16,15,16,17,14,14,13,13,17,15,15,14,14,18,
- 15,15,13,13,17,15,15,14,14,16,16,16,15,15,17,14,
- 14,13,13,17,15,15,14,14,17,14,14,13,13,13,11,11,
- 11,11,16,14,14,12,12,16,14,14,12,13,17,15,14,11,
- 11,17,14,14,11,11,17,15,15,13,14,17,14,14,14,14,
- 17,15,15,13,13,17,14,14,13,13,17,15,15,13,13,17,
- 15,15,13,13,17,14,14,14,14,17,15,15,13,13,18,14,
- 15,13,13,17,15,15,13,13,16,15,15,13,13,17,14,14,
- 13,13,17,15,15,12,12,16,14,14,12,12,16,15,15,12,
- 12,17,16,15,13,13,17,14,14,13,13,17,15,15,12,12,
- 16,15,15,12,12,16,15,15,12,12,13,15,15, 8, 8,14,
- 14,14,18,19,14,15,15,19,20,14,14,14,18,18,14,15,
- 15,18,18,15,16,16,19,19,15,16,17,20,20,15,15,15,
- 19,19,15,16,16,18,20,15,15,15,19,19,15,15,16,18,
- 18,15,17,16,19,19,15,15,15,18,21,15,16,16,21,20,
- 15,15,15,19,21,15,16,15,20,19,15,16,17,20,20,15,
- 15,15,19,19,15,16,16,21,20,15,15,15,19,20,15,15,
- 15,19,19,15,16,16,20,19,15,15,15,19,19,15,16,15,
- 20,21,15,15,15,21,19,14,12,12, 8, 8,14,14,14,20,
- 18,14,13,13,19,19,14,14,14,19,18,15,14,14,19,20,
- 14,15,15,20,20,15,14,14,21,20,15,15,15,20,20,15,
- 15,14,21,19,15,15,15,19,19,15,15,15,19,20,15,14,
- 14,20,20,15,15,15,19,20,15,14,14,19,20,15,15,15,
- 20,20,15,15,15,20,19,15,14,14,20,21,15,15,15,20,
- 21,15,14,14,20, 0,15,16,15,20,21,15,15,15,19,20,
- 15,14,14,19,19,15,15,15,19,20,15,15,15,19,19,15,
- 15,15,18,20,13,12,12,13,13,18,16,17,12,12,17,16,
- 16,12,12,17,17,16,11,11,18,16,16,11,11,17,17,18,
- 13,13,18,16,16,14,14,18,17,17,13,13,18,16,16,13,
- 13,18,17,17,12,12,17,17,16,13,13,17,16,16,13,14,
- 18,17,17,12,12,18,16,16,12,13,17,16,17,12,12,17,
- 18,17,13,13,18,16,16,13,13,18,17,17,12,12,17,16,
- 16,12,12,17,17,17,11,11,17,16,17,12,12,17,16,16,
- 13,13,17,16,16,11,11,17,16,16,12,12,18,16,17,11,
- 11,14,14,14, 9, 9,16,14,15,13,13,17,15,15,14,14,
- 17,14,14,12,12,16,14,14,13,13,18,15,15,15,15,17,
- 15,16,15,16,18,15,15,14,14,17,15,16,15,15,17,15,
- 15,14,14,18,15,15,14,14,16,16,16,16,15,17,15,15,
- 14,14,16,15,15,14,14,17,15,15,14,14,17,15,15,14,
- 14,17,16,16,15,15,17,15,14,13,13,17,15,15,14,14,
- 17,15,15,13,13,17,15,15,14,14,16,16,16,15,15,18,
- 15,14,14,14,17,15,15,14,14,18,15,15,13,13,13,12,
- 12,11,11,16,14,14,12,12,16,14,14,13,13,17,15,15,
- 12,12,17,14,14,12,12,17,15,15,14,14,17,14,14,14,
- 14,17,15,15,13,13,17,15,14,13,13,17,15,15,13,13,
- 17,15,15,13,13,16,14,14,14,14,17,15,15,13,13,16,
- 14,14,13,13,16,15,15,13,13,17,15,16,13,13,17,14,
- 14,14,13,17,15,15,12,12,16,15,14,12,12,17,15,15,
- 12,12,16,15,16,13,13,16,14,14,14,13,17,15,15,12,
- 12,16,14,14,12,12,17,15,15,12,12,14,15,15, 8, 8,
- 14,14,14,18,18,14,15,15,19,18,14,14,14,18,18,14,
- 15,15,19,20,15,16,15,21,18,15,16,16,18, 0,15,15,
- 15,19,20,15,16,16,20, 0,15,16,15,19,18,15,15,15,
- 19,19,15,16,16,21,19,15,15,15,19,19,15,16,16,20,
- 20,15,15,15,19,19,15,15,15,19,18,15,16,16,20,20,
- 15,14,15,20,19,15,15,15,19,20,15,15,15,19,19,15,
- 16,15,19,20,15,16,16,19,20,15,15,15,19,19,15,16,
- 15,20,20,15,15,15,20,18,13,12,12, 8, 8,14,14,14,
- 19,20,14,14,14,19,19,14,15,15,20,20,14,14,14,18,
- 19,15,15,15,20, 0,15,14,14,18,20,15,15,15,19,19,
- 15,15,15,21,19,15,15,15,19,20,15,15,15,20,21,15,
- 14,14,20,19,15,15,15,20,19,15,15,14,21,19,15,15,
- 15,19,18,15,15,15,20,19,15,14,14,19,19,15,15,16,
- 20,19,15,15,15,20, 0,15,15,15,19,21,15,15,15,22,
- 20,15,14,14,22,19,15,15,15,19,20,15,14,14,20,19,
- 14,15,15,19,21,
-};
-
-static const static_codebook _44pn1_p3_1 = {
- 5, 3125,
- (char *)_vq_lengthlist__44pn1_p3_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44pn1_p3_1,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44pn1_p4_0[] = {
- 1, 7, 7,14,14, 6, 8, 8,15,16, 7, 8, 8,16,15, 0,
- 14,14,17,17, 0,14,14,16,16, 7, 9, 9,16,16,10,11,
- 11,17,18, 9, 8, 8,16,16, 0,14,14,19,19, 0,14,14,
- 17,16, 8, 9, 9,16,16,12,12,12,17,17,10, 9, 9,16,
- 16, 0,15,14,18,20, 0,14,14,17,17, 0,15,15,18,17,
- 0,21, 0, 0,21, 0,13,13,17,17, 0,17,17, 0, 0, 0,
- 15,15,17,17, 0,15,15,17,18, 0, 0, 0, 0,21, 0,13,
- 13,17,17, 0,18,18, 0,21, 0,16,15,17,18, 6, 7, 7,
- 14,14, 9,10,10,16,16,11,10,10,15,15, 0,21, 0,20,
- 21, 0, 0, 0,18,20,10,10,10,15,16,12,13,13,18,18,
- 12,11,11,15,15, 0, 0, 0,20,20, 0, 0,21,19,19,12,
- 11,11,15,15,15,14,14,18,18,13,11,11,15,16, 0, 0,
- 0,20,19, 0, 0, 0,20,21, 0, 0,20,19,19, 0, 0, 0,
- 0, 0, 0,20, 0,17,18, 0, 0,21, 0, 0, 0, 0, 0,21,
- 0, 0,21, 0,20,19, 0, 0, 0, 0, 0, 0,21, 0,18,18,
- 0, 0, 0,21, 0, 0, 0, 0, 0,20, 7, 6, 6,13,13, 9,
- 6, 6,12,12, 9, 7, 7,14,14, 0,10,10,12,12, 0,11,
- 11,15,15, 9, 7, 7,14,14,12, 9, 9,14,14,10, 7, 7,
- 14,13, 0,11,11,16,15, 0,11,11,14,14, 9, 7, 7,14,
- 14,13,10,10,14,14,11, 7, 7,14,13, 0,11,11,16,16,
- 0,11,11,14,14, 0,12,12,16,16, 0,19, 0,17,18, 0,
- 10,10,14,14, 0,15,14, 0, 0, 0,12,12,14,14, 0,12,
- 12,15,15, 0,20, 0,18,19, 0,10,10,14,14, 0,16,15,
- 0,20, 0,13,13,14,14, 0,11,11,13,13, 0,12,13,16,
- 16, 0,12,12,16,16, 0,16,16, 0,21, 0,17,18, 0, 0,
- 0,12,12,16,16, 0,15,15,18, 0, 0,12,12,16,16, 0,
- 17,16,21,21, 0,16,17, 0, 0, 0,13,13,17,16, 0,16,
- 16,20,21, 0,12,12,17,16, 0,17,17, 0,21, 0,17,17,
- 21,21, 0,17,18, 0, 0, 0, 0, 0, 0, 0, 0,15,15, 0,
- 0, 0,18,21, 0, 0, 0,18,19, 0, 0, 0,18,17,21,21,
- 0, 0, 0, 0, 0, 0,16,16, 0, 0, 0, 0, 0, 0, 0, 0,
- 19,19, 0, 0, 0,11,11,12,12, 0,11,11,10,10, 0,12,
- 12,13,13, 0,12,12, 9, 9, 0,14,14,13,13, 0,12,12,
- 13,13, 0,14,14,12,13, 0,11,11,12,12, 0,13,13,13,
- 13, 0,13,13,13,13, 0,12,12,13,13, 0,14,14,12,12,
- 0,11,11,12,12, 0,14,13,14,14, 0,13,13,13,13, 0,
- 15,15,14,15, 0, 0, 0,16,16, 0,12,12,13,13, 0,16,
- 17,20,21, 0,14,13,12,12, 0,14,14,14,14, 0,21, 0,
- 16,16, 0,12,12,13,13, 0,18,17,21, 0, 0,14,14,13,
- 13, 7, 8, 8,17,17,11,10,10,18,18,12,10,10,17,17,
- 0,15,15,20,18, 0,15,15,17,17,11, 9, 9,17,17,14,
- 12,12,19,19,13, 9, 9,16,16, 0,15,14, 0,19, 0,14,
- 14,16,16,12,10,10,20,18,16,13,13,21,20,14,10,10,
- 17,17, 0,15,15,21,20, 0,15,14,17,17, 0,15,15,21,
- 21, 0, 0,21, 0, 0, 0,13,13,18,18, 0,19,16, 0, 0,
- 0,15,15,17,16, 0,16,16, 0,21, 0, 0, 0, 0,21, 0,
- 13,14,18,17, 0,20,19, 0, 0, 0,15,15,18,18, 8, 7,
- 7,15,15,12,11,11,17,16,13,11,11,16,16, 0, 0, 0,
- 21,20, 0, 0, 0, 0,20,11,10,10,17,17,14,13,13,19,
- 18,14,11,11,16,16, 0,20, 0,21,19, 0, 0,21, 0,20,
- 12,11,11,17,17,16,15,15, 0,19,14,11,11,17,16, 0,
- 21, 0, 0,19, 0, 0, 0,21,20, 0, 0,21,20, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,19,21, 0, 0, 0, 0, 0, 0, 0, 0,
- 19,20, 0, 0, 0,20,21, 0, 0, 0, 0, 0, 0,20, 0,19,
- 21, 0, 0, 0, 0, 0, 0, 0, 0,21,20,11,10, 9,15,15,
- 14,11,11,15,15,14,11,11,16,16, 0,14,14,14,14, 0,
- 16,15,17,16,13,11,11,16,16,16,13,13,16,16,15,10,
- 10,15,15, 0,14,15,17,17, 0,14,14,16,15,13,11,11,
- 16,16,17,15,14,16,16,15,10,10,15,15, 0,15,15,17,
- 18, 0,15,15,16,16, 0,16,16,17,17, 0,21, 0,21,20,
- 0,13,13,15,15, 0,18,18, 0,21, 0,15,15,15,15, 0,
- 16,16,17,17, 0, 0, 0, 0,18, 0,13,13,15,15, 0,19,
- 18, 0, 0, 0,15,15,16,16, 0,12,12,15,15, 0,13,13,
- 17,17, 0,13,13,17,18, 0,16,17,21, 0, 0,20,18, 0,
- 0, 0,13,13,17,17, 0,15,15, 0,18, 0,12,12,17,18,
- 0,16,16, 0, 0, 0,17,17,21, 0, 0,13,13,18,18, 0,
- 16,16,21,21, 0,12,12,17,18, 0,16,17,21, 0, 0,17,
- 17, 0,21, 0,17,18, 0, 0, 0, 0, 0, 0, 0, 0,16,15,
- 0,21, 0,21,19, 0, 0, 0,18,18, 0, 0, 0,18,19, 0,
- 0, 0, 0, 0, 0, 0, 0,16,16,21,21, 0,20,19, 0, 0,
- 0,19,21, 0,21, 0,12,12,15,15, 0,12,12,15,16, 0,
- 13,13,16,16, 0,14,14,15,15, 0,16,15,17,17, 0,13,
- 13,17,17, 0,15,15,16,18, 0,12,12,16,16, 0,14,14,
- 17,17, 0,15,14,16,16, 0,13,13,16,16, 0,16,15,17,
- 17, 0,12,12,16,16, 0,15,15,18,18, 0,14,14,17,16,
- 0,16,16,17,18, 0, 0, 0,20,21, 0,13,13,16,17, 0,
- 17,17, 0, 0, 0,15,15,16,16, 0,15,16,17,17, 0, 0,
- 0,19, 0, 0,13,13,15,16, 0,19,18, 0, 0, 0,16,15,
- 16,17, 8, 8, 8,17,17,13,11,10,17,18,13,10,10,17,
- 17, 0,15,15,20,19, 0,15,15,17,17,12,10,10,19,18,
- 15,12,12,20,18,14,10,10,17,16, 0,15,15,20,20, 0,
- 14,15,16,16,13,10,10,17,17,17,14,14, 0,18,15,10,
- 10,17,17, 0,16,15,20,20, 0,14,14,17,17, 0,15,16,
- 20,20, 0, 0,21, 0, 0, 0,13,13,17,17, 0,18,17, 0,
- 0, 0,15,16,17,18, 0,15,15,18,21, 0, 0, 0,21, 0,
- 0,13,13,18,18, 0,19,19, 0, 0, 0,16,16,18,17, 9,
- 8, 8,15,15,12,11,11,16,16,13,11,11,16,15, 0, 0,
- 0, 0,21, 0,21, 0,19,19,12,11,11,17,18,15,13,13,
- 18,19,14,11,11,16,16, 0, 0,21,21,19, 0, 0, 0,21,
- 20,13,11,11,18,17,17,14,15,20,21,15,11,12,16,16,
- 0, 0, 0,20, 0, 0, 0,21, 0,19, 0, 0, 0, 0,19, 0,
- 0, 0, 0, 0, 0,21,21,19,19, 0, 0, 0,21, 0, 0, 0,
- 0,19,21, 0, 0, 0,19,20, 0, 0, 0,21, 0, 0, 0,21,
- 19,19, 0, 0, 0, 0, 0, 0, 0, 0,21,20, 0,11,11,15,
- 15, 0,12,12,15,16, 0,12,12,16,16, 0,15,15,16,15,
- 0,16,16,17,17, 0,12,12,17,17, 0,14,14,17,17, 0,
- 11,11,16,16, 0,15,15,19,18, 0,15,15,16,16, 0,12,
- 12,17,16, 0,14,15,16,16, 0,11,11,15,15, 0,16,16,
- 18,19, 0,15,15,15,16, 0,17,17,18,20, 0,21, 0,21,
- 19, 0,14,14,16,16, 0,18,18, 0, 0, 0,16,16,15,15,
- 0,16,16,18,17, 0, 0, 0,19,20, 0,14,14,16,16, 0,
- 19,19, 0, 0, 0,16,17,15,15, 0,12,12,14,15, 0,13,
- 13,16,17, 0,12,12,17,17, 0,17,16, 0, 0, 0,18,17,
- 21, 0, 0,13,13,19,17, 0,15,15,20,21, 0,12,12,17,
- 17, 0,17,17, 0, 0, 0,17,17, 0, 0, 0,13,13,17,18,
- 0,16,16,21, 0, 0,12,12,17,17, 0,17,17, 0, 0, 0,
- 17,17, 0, 0, 0,18,21, 0, 0, 0, 0, 0, 0, 0, 0,15,
- 15,21, 0, 0,20,21, 0, 0, 0,18,19, 0, 0, 0,18,17,
- 0, 0, 0, 0, 0, 0, 0, 0,16,16,21, 0, 0,21,21, 0,
- 0, 0,18,19, 0, 0, 0,12,12,16,16, 0,13,13,16,17,
- 0,13,13,17,16, 0,14,14,16,16, 0,16,15,19,18, 0,
- 13,13,17,17, 0,15,15,18,18, 0,12,12,16,16, 0,15,
- 15,18,19, 0,15,15,17,16, 0,13,13,17,17, 0,16,16,
- 18,17, 0,12,12,17,16, 0,15,15,18,18, 0,15,15,17,
- 17, 0,16,16, 0,19, 0, 0, 0, 0, 0, 0,14,14,16,17,
- 0,18,18, 0, 0, 0,15,15,17,17, 0,16,16,21,19, 0,
- 21, 0,21,21, 0,13,14,16,16, 0,19,19, 0, 0, 0,15,
- 16,16,16, 0,11,11,17,16, 0,15,14,19,18, 0,14,14,
- 19,19, 0,18,17,18,20, 0,17,17,18,19, 0,13,13,17,
- 17, 0,16,17,21,18, 0,13,13,17,16, 0,18,17,19, 0,
- 0,16,17,18,18, 0,12,12,19,18, 0,18,18,20,20, 0,
- 13,13,17,17, 0,17,17,21, 0, 0,16,17,17,18, 0,18,
- 17,19,18, 0, 0, 0, 0, 0, 0,14,14,17,17, 0,19,19,
- 21, 0, 0,16,16,16,17, 0,17,17,19,20, 0, 0, 0, 0,
- 21, 0,15,15,17,18, 0,21,21, 0, 0, 0,17,17,17,18,
- 0,10,10,15,15, 0,15,14,17,18, 0,14,14,16,16, 0,
- 0, 0,18, 0, 0,21, 0,19, 0, 0,13,13,17,16, 0,17,
- 17,18, 0, 0,14,14,16,15, 0, 0, 0,21, 0, 0,21, 0,
- 19,18, 0,13,13,17,17, 0,18,18,20,20, 0,15,15,16,
- 16, 0, 0, 0,21,21, 0, 0, 0,20,20, 0, 0, 0,19, 0,
- 0, 0, 0, 0, 0, 0,21,20,18,18, 0, 0, 0, 0, 0, 0,
- 0, 0, 0,20, 0, 0, 0, 0,20, 0, 0, 0, 0, 0, 0, 0,
- 0,19,18, 0, 0, 0, 0,21, 0, 0, 0,18,20, 0,18,19,
- 16,17, 0,21,19,17,17, 0, 0,21,18,18, 0, 0,21,20,
- 19, 0, 0, 0,20,20, 0, 0,21,17,17, 0, 0, 0,19,19,
- 0,20,20,17,17, 0, 0, 0, 0,20, 0, 0,20,18,18, 0,
- 21,20,17,17, 0, 0, 0,20,21, 0,19, 0,17,17, 0, 0,
- 21, 0, 0, 0,20, 0,18,19, 0, 0, 0,21,21, 0, 0, 0,
- 0,21, 0,20,20,17,17, 0, 0, 0, 0, 0, 0,21, 0,18,
- 17, 0, 0, 0,20,19, 0, 0, 0, 0,21, 0,20,20,17,17,
- 0, 0, 0, 0, 0, 0,21,21,18,18, 0,12,12,15,14, 0,
- 14,14,17,17, 0,14,14,17,16, 0,18,18,21, 0, 0,19,
- 20, 0, 0, 0,13,13,18,17, 0,16,16,19,18, 0,13,13,
- 17,17, 0,17,17, 0, 0, 0,17,17,21, 0, 0,13,13,17,
- 17, 0,17,17,21,20, 0,13,13,18,17, 0,18,19,21,21,
- 0,19,18, 0, 0, 0,18,17, 0, 0, 0, 0, 0, 0, 0, 0,
- 15,16, 0, 0, 0,21,21, 0, 0, 0,20,18,21, 0, 0,17,
- 18, 0, 0, 0, 0, 0, 0, 0, 0,15,16, 0, 0, 0, 0,20,
- 0, 0, 0, 0,19, 0, 0, 0,15,15,18,19, 0,18,17,21,
- 0, 0,16,18, 0,20, 0,17,18,21, 0, 0,18,20, 0, 0,
- 0,16,16,21,21, 0,19,20,21, 0, 0,16,15, 0,21, 0,
- 18,20, 0, 0, 0,18,19, 0, 0, 0,16,15,21,21, 0,21,
- 0, 0, 0, 0,16,15,21, 0, 0,20,19, 0, 0, 0,18,21,
- 21, 0, 0,20,18, 0, 0, 0, 0, 0, 0, 0, 0,16,16, 0,
- 20, 0,21, 0, 0, 0, 0,17,18,20,21, 0,18,18,21,21,
- 0, 0, 0, 0, 0, 0,16,16,20, 0, 0, 0,21, 0, 0, 0,
- 21,18, 0, 0, 0,12,12,20,17, 0,15,15,19,18, 0,14,
- 14,19,18, 0,18,17,21,19, 0,17,17,21,17, 0,13,13,
- 21,19, 0,16,17,20,19, 0,13,13,16,16, 0,17,17,20,
- 21, 0,16,16,19,17, 0,13,13,18,18, 0,17,19,19,19,
- 0,13,13,17,17, 0,18,18, 0,19, 0,16,17,18,18, 0,
- 16,17,19,21, 0, 0, 0, 0, 0, 0,15,15,16,17, 0,20,
- 19,21, 0, 0,17,17,17,17, 0,17,17,21,19, 0, 0, 0,
- 0, 0, 0,15,15,17,17, 0,21, 0, 0, 0, 0,18,18,17,
- 17, 0,10,10,15,15, 0,15,15,17,17, 0,15,14,16,16,
- 0, 0, 0,21,19, 0,21,21,19,21, 0,13,13,17,16, 0,
- 17,17,18,19, 0,14,15,16,15, 0, 0, 0,21,19, 0,21,
- 21,18,19, 0,14,14,16,17, 0,18,18,18,19, 0,15,15,
- 15,16, 0, 0,21, 0,21, 0, 0, 0,19,20, 0, 0, 0,21,
- 19, 0, 0, 0, 0, 0, 0,21,21,19,17, 0, 0, 0, 0, 0,
- 0, 0, 0,21,21, 0,21, 0, 0,21, 0, 0, 0, 0, 0, 0,
- 21,21,19,18, 0, 0, 0, 0, 0, 0, 0, 0, 0,19, 0,21,
- 18,18,17, 0,21, 0,20,20, 0, 0, 0,18,20, 0, 0,21,
- 18,21, 0, 0, 0,21,18, 0, 0, 0, 0,19, 0, 0, 0,21,
- 21, 0,20,21,17,19, 0,21, 0,21, 0, 0,21, 0,18,18,
- 0,20,21,17,18, 0, 0, 0,21,19, 0,20,21,17,18, 0,
- 0, 0,21,21, 0, 0, 0,20,19, 0, 0, 0,21,21, 0, 0,
- 0, 0, 0, 0,21,21,19,18, 0, 0, 0, 0, 0, 0, 0,21,
- 19,18, 0,21,21,19, 0, 0, 0, 0,21, 0, 0,21,21,18,
- 17, 0, 0, 0, 0, 0, 0,21, 0,21,18, 0,12,12,14,14,
- 0,15,14,17,17, 0,14,14,17,16, 0,19,17, 0, 0, 0,
- 19,19, 0, 0, 0,13,13,17,17, 0,17,17,20,20, 0,13,
- 13,18,18, 0,18,17, 0, 0, 0,18,21, 0, 0, 0,13,13,
- 17,17, 0,18,18,21,20, 0,14,14,18,19, 0,19,18,21,
- 0, 0,19,19, 0, 0, 0,20,18,20, 0, 0, 0, 0, 0, 0,
- 0,15,16, 0, 0, 0,21,21, 0, 0, 0,19,19, 0, 0, 0,
- 18,18, 0, 0, 0, 0, 0, 0, 0, 0,16,16, 0,21, 0, 0,
- 0, 0, 0, 0,19,20, 0, 0, 0,15,15,20,21, 0,17,17,
- 21,21, 0,17,17, 0, 0, 0,19,18, 0, 0, 0,18,19, 0,
- 0, 0,17,16, 0,21, 0, 0,20, 0, 0, 0,16,16, 0,20,
- 0,19,19, 0,21, 0,19,18, 0,21, 0,16,16, 0, 0, 0,
- 21,21, 0, 0, 0,16,16, 0, 0, 0,21,21, 0, 0, 0,19,
- 19, 0, 0, 0,20, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,
- 0,21, 0, 0,20, 0, 0, 0,20,18,21,21, 0,19,18, 0,
- 20, 0, 0, 0, 0, 0, 0,16,17,21, 0, 0, 0,21, 0, 0,
- 0,19,20,21,20,
-};
-
-static const static_codebook _44pn1_p4_0 = {
- 5, 3125,
- (char *)_vq_lengthlist__44pn1_p4_0,
- 1, -528744448, 1616642048, 3, 0,
- (long *)_vq_quantlist__44pn1_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p4_1[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44pn1_p4_1[] = {
- 2, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _44pn1_p4_1 = {
- 1, 7,
- (char *)_vq_lengthlist__44pn1_p4_1,
- 1, -533200896, 1611661312, 3, 0,
- (long *)_vq_quantlist__44pn1_p4_1,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44pn1_p5_0[] = {
- 1, 7, 7, 6, 8, 8, 7, 8, 8, 7, 9, 9,11,11,11, 9,
- 8, 8, 7, 9, 9,11,12,11, 9, 9, 9, 6, 7, 7,10,11,
- 11,10,10,10,10,11,11,15,14,14,12,12,12,11,11,11,
- 14,14,14,12,12,12, 5, 6, 6, 8, 5, 5, 8, 7, 7, 8,
- 8, 8,12,10,10,10, 7, 7, 8, 7, 7,12,10,10,10, 7,
- 7, 6, 7, 7,12,11,11,12,10,10,11,10,10,14,14,13,
- 13,10,10,11,10,10,16,14,14,14,11,10, 7, 7, 7,13,
- 12,12,12,12,11,11,11,11,15,14,17,13,12,12,12,11,
- 11,15,15,15,14,13,13,10, 9, 9,14,12,11,13,11,11,
- 12,11,11,16,15,14,14,11,11,12,11,11,17,14,14,15,
- 11,11, 7, 8, 8,12,11,11,13,10,10,11,10,10,17,14,
- 13,14,10,10,12,10,10,18,15,15,14,10,10, 8, 7, 7,
- 13,12,12,13,11,11,12,11,11,16,14,15,14,12,12,12,
- 11,11,18,16,16,14,12,12,11,10,10,13,12,11,13,11,
- 11,13,12,12, 0,15,14,14,11,11,13,11,11,16,15,15,
- 15,11,11,
-};
-
-static const static_codebook _44pn1_p5_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44pn1_p5_0,
- 1, -527106048, 1620377600, 2, 0,
- (long *)_vq_quantlist__44pn1_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p5_1[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44pn1_p5_1[] = {
- 2, 6, 7, 6, 8, 8, 7, 7, 8, 7, 8, 8, 9, 9, 9, 8,
- 7, 7, 8, 8, 8, 9, 9, 9, 9, 8, 8, 6, 6, 6, 9, 7,
- 7, 9, 7, 7, 9, 8, 8,10, 8, 8,10, 8, 8,10, 8, 8,
- 10, 9, 8,10, 8, 8, 7, 6, 6, 9, 6, 6, 9, 6, 6, 9,
- 7, 7,10, 8, 8,10, 6, 6, 9, 7, 7,10, 8, 8,10, 6,
- 6, 7, 7, 7,11, 9, 9,11, 9, 9,10, 9, 9,12,10,10,
- 12, 8, 8,11, 9, 9,13, 9,10,12, 8, 8, 8, 7, 7,11,
- 9,10,11,10,10,10, 9, 9,11,11,11,11, 9, 9,11,10,
- 9,12,11,11,11, 9,10,10, 8, 8,11, 9,10,11, 9, 9,
- 11, 9, 9,12,10,10,11, 9, 9,11, 9, 9,12,10,11,11,
- 9, 9, 8, 8, 8,12, 9, 9,12, 9, 9,11, 9, 9,13, 9,
- 9,13, 8, 8,12, 9, 9,13,10,10,12, 8, 8, 9, 7, 7,
- 11,10,10,11,10,10,11,10,10,12,11,11,11,10, 9,11,
- 10,10,11,11,11,11, 9, 9,11, 9, 9,12,10,10,11,10,
- 10,12,10,10,11,11,11,11, 9, 9,11,10,10,12,11,11,
- 11, 9, 9,
-};
-
-static const static_codebook _44pn1_p5_1 = {
- 5, 243,
- (char *)_vq_lengthlist__44pn1_p5_1,
- 1, -530841600, 1616642048, 2, 0,
- (long *)_vq_quantlist__44pn1_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44pn1_p6_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,
-};
-
-static const static_codebook _44pn1_p6_0 = {
- 5, 243,
- (char *)_vq_lengthlist__44pn1_p6_0,
- 1, -516716544, 1630767104, 2, 0,
- (long *)_vq_quantlist__44pn1_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p6_1[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44pn1_p6_1[] = {
- 1, 3, 2, 5, 4, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
- 12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _44pn1_p6_1 = {
- 1, 25,
- (char *)_vq_lengthlist__44pn1_p6_1,
- 1, -518864896, 1620639744, 5, 0,
- (long *)_vq_quantlist__44pn1_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44pn1_p6_2[] = {
- 12,
- 11,
- 13,
- 10,
- 14,
- 9,
- 15,
- 8,
- 16,
- 7,
- 17,
- 6,
- 18,
- 5,
- 19,
- 4,
- 20,
- 3,
- 21,
- 2,
- 22,
- 1,
- 23,
- 0,
- 24,
-};
-
-static const char _vq_lengthlist__44pn1_p6_2[] = {
- 3, 5, 4, 5, 4, 5, 4, 5, 5, 5, 4, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44pn1_p6_2 = {
- 1, 25,
- (char *)_vq_lengthlist__44pn1_p6_2,
- 1, -529006592, 1611661312, 5, 0,
- (long *)_vq_quantlist__44pn1_p6_2,
- 0
-};
-
-static const char _huff_lengthlist__44pn1_short[] = {
- 4, 3, 7, 9,12,16,16, 3, 2, 5, 7,11,14,15, 7, 4,
- 5, 6, 9,12,15, 8, 5, 5, 5, 8,10,14, 9, 7, 6, 6,
- 8,10,12,12,10,10, 7, 6, 8,10,15,12,10, 6, 4, 7,
- 9,
-};
-
-static const static_codebook _huff_book__44pn1_short = {
- 2, 49,
- (char *)_huff_lengthlist__44pn1_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
diff --git a/drivers/vorbis/books/coupled/res_books_stereo.h b/drivers/vorbis/books/coupled/res_books_stereo.h
deleted file mode 100644
index 9a9049f6ed..0000000000
--- a/drivers/vorbis/books/coupled/res_books_stereo.h
+++ /dev/null
@@ -1,15783 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: static codebooks autogenerated by huff/huffbuld
- last modified: $Id: res_books_stereo.h 19057 2014-01-22 12:32:31Z xiphmont $
-
- ********************************************************************/
-
-#include "codebook.h"
-
-static const long _vq_quantlist__16c0_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16c0_s_p1_0[] = {
- 1, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 5, 7, 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, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0,
- 0, 0, 0, 7, 9,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, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 8, 8, 0, 0, 0, 0,
- 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8,10,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, 7,10,10, 0, 0, 0,
- 0, 0, 0, 9, 9,12, 0, 0, 0, 0, 0, 0,10,12,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, 7,10,10, 0, 0,
- 0, 0, 0, 0, 9,12,10, 0, 0, 0, 0, 0, 0,10,11,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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 8, 8, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0,
- 0, 0, 0, 0, 8,10,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, 7,10,10, 0, 0, 0, 0, 0, 0,10,12,11, 0,
- 0, 0, 0, 0, 0, 9,10,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, 7,10,10, 0, 0, 0, 0, 0, 0,10,11,12,
- 0, 0, 0, 0, 0, 0, 9,12, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _16c0_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__16c0_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__16c0_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16c0_s_p3_0[] = {
- 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 7, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 6, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _16c0_s_p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__16c0_s_p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16c0_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__16c0_s_p4_0[] = {
- 1, 3, 2, 7, 8, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
- 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _16c0_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__16c0_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__16c0_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__16c0_s_p5_0[] = {
- 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
- 8, 8, 0, 0, 0, 7, 7, 7, 7, 8, 8, 0, 0, 0, 7, 7,
- 8, 8, 9, 9, 0, 0, 0, 7, 7, 8, 8, 9, 9, 0, 0, 0,
- 8, 9, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
- 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
- 10,
-};
-
-static const static_codebook _16c0_s_p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__16c0_s_p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__16c0_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p6_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__16c0_s_p6_0[] = {
- 1, 3, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
- 11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,11,
- 11,11, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,
- 11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
- 11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
- 10,11,11,12,12,12,13, 0, 0, 0, 9, 9, 9, 9,10,10,
- 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,10,10,10,
- 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
- 10,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0, 0, 9,
- 9,10,10,11,11,12,12,13,13,13,14, 0, 0, 0, 0, 0,
- 10,10,10,11,11,11,12,12,13,13,13,14, 0, 0, 0, 0,
- 0, 0, 0,10,10,11,11,12,12,13,13,14,14, 0, 0, 0,
- 0, 0, 0, 0,11,11,12,12,13,13,13,13,14,14, 0, 0,
- 0, 0, 0, 0, 0,11,11,12,12,12,13,13,14,15,14, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,14,14,15,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,14,13,14,
- 14,
-};
-
-static const static_codebook _16c0_s_p6_0 = {
- 2, 289,
- (char *)_vq_lengthlist__16c0_s_p6_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__16c0_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16c0_s_p7_0[] = {
- 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,11,10,10,11,
- 11,10, 4, 7, 7,10,10,10,11,10,10, 6,10,10,11,11,
- 11,11,11,10, 6, 9, 9,11,12,12,11, 9, 9, 6, 9,10,
- 11,12,12,11, 9,10, 7,11,11,11,11,11,12,13,12, 6,
- 9,10,11,10,10,12,13,13, 6,10, 9,11,10,10,11,12,
- 13,
-};
-
-static const static_codebook _16c0_s_p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16c0_s_p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__16c0_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__16c0_s_p7_1[] = {
- 1, 3, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7,
- 8, 8, 8, 9, 9, 9,10,10,10, 6, 7, 8, 8, 8, 8, 9,
- 8,10,10,10, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10, 7,
- 7, 8, 8, 9, 9, 8, 9,10,10,10, 8, 8, 9, 9, 9, 9,
- 9, 9,11,11,11, 8, 8, 9, 9, 9, 9, 9,10,10,11,11,
- 9, 9, 9, 9, 9, 9, 9,10,11,11,11,10,11, 9, 9, 9,
- 9,10, 9,11,11,11,10,11,10,10, 9, 9,10,10,11,11,
- 11,11,11, 9, 9, 9, 9,10,10,
-};
-
-static const static_codebook _16c0_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__16c0_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__16c0_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p8_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__16c0_s_p8_0[] = {
- 1, 4, 4, 7, 7, 7, 7, 7, 6, 8, 8,10,10, 6, 5, 6,
- 8, 8, 8, 8, 8, 8, 8, 9,10,10, 7, 6, 6, 8, 8, 8,
- 8, 8, 8, 8, 8,10,10, 0, 8, 8, 8, 8, 9, 8, 9, 9,
- 9,10,10,10, 0, 9, 8, 8, 8, 9, 9, 8, 8, 9, 9,10,
- 10, 0,12,11, 8, 8, 9, 9, 9, 9,10,10,11,10, 0,12,
- 13, 8, 8, 9,10, 9, 9,11,11,11,12, 0, 0, 0, 8, 8,
- 8, 8,10, 9,12,13,12,14, 0, 0, 0, 8, 8, 8, 9,10,
- 10,12,12,13,14, 0, 0, 0,13,13, 9, 9,11,11, 0, 0,
- 14, 0, 0, 0, 0,14,14,10,10,12,11,12,14,14,14, 0,
- 0, 0, 0, 0,11,11,13,13,14,13,14,14, 0, 0, 0, 0,
- 0,12,13,13,12,13,14,14,14,
-};
-
-static const static_codebook _16c0_s_p8_0 = {
- 2, 169,
- (char *)_vq_lengthlist__16c0_s_p8_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__16c0_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p8_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16c0_s_p8_1[] = {
- 1, 4, 3, 5, 5, 7, 7, 7, 6, 6, 7, 7, 7, 5, 5, 7,
- 7, 7, 6, 6, 7, 7, 7, 6, 6,
-};
-
-static const static_codebook _16c0_s_p8_1 = {
- 2, 25,
- (char *)_vq_lengthlist__16c0_s_p8_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16c0_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p9_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16c0_s_p9_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _16c0_s_p9_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16c0_s_p9_0,
- 1, -518803456, 1628680192, 2, 0,
- (long *)_vq_quantlist__16c0_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p9_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__16c0_s_p9_1[] = {
- 1, 5, 5, 5, 5, 9,11,11,10,10,10,10,10,10,10, 7,
- 6, 6, 6, 6,10,10,10,10,10,10,10,10,10,10, 7, 6,
- 6, 6, 6,10, 9,10,10,10,10,10,10,10,10,10, 7, 7,
- 8, 9,10,10,10,10,10,10,10,10,10,10,10, 8, 7,10,
- 10,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _16c0_s_p9_1 = {
- 2, 225,
- (char *)_vq_lengthlist__16c0_s_p9_1,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__16c0_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__16c0_s_p9_2[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__16c0_s_p9_2[] = {
- 1, 5, 5, 7, 8, 8, 7, 9, 9, 9,12,12,11,12,12,10,
- 10,11,12,12,12,11,12,12, 8, 9, 8, 7, 9,10,10,11,
- 11,10,11,12,10,12,10,12,12,12,11,12,11, 9, 8, 8,
- 9,10, 9, 8, 9,10,12,12,11,11,12,11,10,11,12,11,
- 12,12, 8, 9, 9, 9,10,11,12,11,12,11,11,11,11,12,
- 12,11,11,12,12,11,11, 9, 9, 8, 9, 9,11, 9, 9,10,
- 9,11,11,11,11,12,11,11,10,12,12,12, 9,12,11,10,
- 11,11,11,11,12,12,12,11,11,11,12,10,12,12,12,10,
- 10, 9,10, 9,10,10, 9, 9, 9,10,10,12,10,11,11, 9,
- 11,11,10,11,11,11,10,10,10, 9, 9,10,10, 9, 9,10,
- 11,11,10,11,10,11,10,11,11,10,11,11,11,10, 9,10,
- 10, 9,10, 9, 9,11, 9, 9,11,10,10,11,11,10,10,11,
- 10,11, 8, 9,11,11,10, 9,10,11,11,10,11,11,10,10,
- 10,11,10, 9,10,10,11, 9,10,10, 9,11,10,10,10,10,
- 11,10,11,11, 9,11,10,11,10,10,11,11,10,10,10, 9,
- 10,10,11,11,11, 9,10,10,10,10,10,11,10,10,10, 9,
- 10,10,11,10,10,10,10,10, 9,10,11,10,10,10,10,11,
- 11,11,10,10,10,10,10,11,10,11,10,11,10,10,10, 9,
- 11,11,10,10,10,11,11,10,10,10,10,10,10,10,10,11,
- 11, 9,10,10,10,11,10,11,10,10,10,11, 9,10,11,10,
- 11,10,10, 9,10,10,10,11,10,11,10,10,10,10,10,11,
- 11,10,11,11,10,10,11,11,10, 9, 9,10,10,10,10,10,
- 9,11, 9,10,10,10,11,11,10,10,10,10,11,11,11,10,
- 9, 9,10,10,11,10,10,10,10,10,11,11,11,10,10,10,
- 11,11,11, 9,10,10,10,10, 9,10, 9,10,11,10,11,10,
- 10,11,11,10,11,11,11,11,11,10,11,10,10,10, 9,11,
- 11,10,11,11,11,11,11,11,11,11,11,10,11,10,10,10,
- 10,11,10,10,11, 9,10,10,10,
-};
-
-static const static_codebook _16c0_s_p9_2 = {
- 2, 441,
- (char *)_vq_lengthlist__16c0_s_p9_2,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__16c0_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__16c0_s_single[] = {
- 3, 4,19, 7, 9, 7, 8,11, 9,12, 4, 1,19, 6, 7, 7,
- 8,10,11,13,18,18,18,18,18,18,18,18,18,18, 8, 6,
- 18, 8, 9, 9,11,12,14,18, 9, 6,18, 9, 7, 8, 9,11,
- 12,18, 7, 6,18, 8, 7, 7, 7, 9,11,17, 8, 8,18, 9,
- 7, 6, 6, 8,11,17,10,10,18,12, 9, 8, 7, 9,12,18,
- 13,15,18,15,13,11,10,11,15,18,14,18,18,18,18,18,
- 16,16,18,18,
-};
-
-static const static_codebook _huff_book__16c0_s_single = {
- 2, 100,
- (char *)_huff_lengthlist__16c0_s_single,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__16c1_s_long[] = {
- 2, 5,20, 7,10, 7, 8,10,11,11, 4, 2,20, 5, 8, 6,
- 7, 9,10,10,20,20,20,20,19,19,19,19,19,19, 7, 5,
- 19, 6,10, 7, 9,11,13,17,11, 8,19,10, 7, 7, 8,10,
- 11,15, 7, 5,19, 7, 7, 5, 6, 9,11,16, 7, 6,19, 8,
- 7, 6, 6, 7, 9,13, 9, 9,19,11, 9, 8, 6, 7, 8,13,
- 12,14,19,16,13,10, 9, 8, 9,13,14,17,19,18,18,17,
- 12,11,11,13,
-};
-
-static const static_codebook _huff_book__16c1_s_long = {
- 2, 100,
- (char *)_huff_lengthlist__16c1_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16c1_s_p1_0[] = {
- 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 5, 7, 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, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 7, 8, 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, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
- 0, 0, 0, 0, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 8, 7, 0, 0, 0, 0,
- 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 7, 9, 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, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 9,11,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, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 8,11, 9, 0, 0, 0, 0, 0, 0, 9,10,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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 8, 9, 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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
- 0, 0, 0, 0, 0, 8, 9,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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
- 0, 0, 0, 0, 0, 0, 9,11, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _16c1_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__16c1_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__16c1_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16c1_s_p3_0[] = {
- 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 7, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _16c1_s_p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__16c1_s_p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16c1_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__16c1_s_p4_0[] = {
- 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, 0,
- 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _16c1_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__16c1_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__16c1_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__16c1_s_p5_0[] = {
- 1, 3, 3, 5, 5, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
- 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 8, 8,
- 8, 8, 9, 9, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
- 9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0,
- 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
- 10,
-};
-
-static const static_codebook _16c1_s_p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__16c1_s_p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__16c1_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p6_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__16c1_s_p6_0[] = {
- 1, 3, 3, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11,12,
- 12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
- 12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
- 11,12,12, 0, 0, 0, 8, 8, 8, 9,10, 9,10,10,10,10,
- 11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,11,
- 11,11,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
- 11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
- 10,11,11,12,12,13,13, 0, 0, 0, 9, 9, 9, 9,10,10,
- 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
- 10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0, 9,
- 9,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0,
- 10,10,11,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0,
- 0, 0, 0,10,10,11,11,12,12,13,13,13,13, 0, 0, 0,
- 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0, 0,
- 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14,
- 14,
-};
-
-static const static_codebook _16c1_s_p6_0 = {
- 2, 289,
- (char *)_vq_lengthlist__16c1_s_p6_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__16c1_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16c1_s_p7_0[] = {
- 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9,10,10,
- 10, 9, 4, 7, 7,10,10,10,11,10,10, 6,10,10,11,11,
- 11,11,10,10, 6,10, 9,11,11,11,11,10,10, 6,10,10,
- 11,11,11,11,10,10, 7,11,11,11,11,11,12,12,11, 6,
- 10,10,11,10,10,11,11,11, 6,10,10,10,11,10,11,11,
- 11,
-};
-
-static const static_codebook _16c1_s_p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16c1_s_p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__16c1_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__16c1_s_p7_1[] = {
- 2, 3, 3, 5, 6, 7, 7, 7, 7, 8, 8,10,10,10, 6, 6,
- 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
- 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
- 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
- 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 9, 9,10,10,10,10,10, 8, 8, 8,
- 8, 9, 9,10,10,10,10,10, 9, 9, 8, 8, 9, 9,10,10,
- 10,10,10, 8, 8, 8, 8, 9, 9,
-};
-
-static const static_codebook _16c1_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__16c1_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__16c1_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p8_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__16c1_s_p8_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 6, 5, 5,
- 7, 8, 8, 9, 8, 8, 9, 9,10,11, 6, 5, 5, 8, 8, 9,
- 9, 8, 8, 9,10,10,11, 0, 8, 8, 8, 9, 9, 9, 9, 9,
- 10,10,11,11, 0, 9, 9, 9, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,13,13, 9, 9,10,10,10,10,11,11,12,12, 0,14,
- 13, 9, 9,10,10,10,10,11,11,12,12, 0, 0, 0,10,10,
- 9, 9,11,11,12,12,13,12, 0, 0, 0,10,10, 9, 9,10,
- 10,12,12,13,13, 0, 0, 0,13,14,11,10,11,11,12,12,
- 13,14, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
- 0, 0, 0, 0,12,12,12,12,13,13,14,15, 0, 0, 0, 0,
- 0,12,12,12,12,13,13,14,15,
-};
-
-static const static_codebook _16c1_s_p8_0 = {
- 2, 169,
- (char *)_vq_lengthlist__16c1_s_p8_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__16c1_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p8_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16c1_s_p8_1[] = {
- 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
- 6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _16c1_s_p8_1 = {
- 2, 25,
- (char *)_vq_lengthlist__16c1_s_p8_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16c1_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p9_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__16c1_s_p9_0[] = {
- 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _16c1_s_p9_0 = {
- 2, 169,
- (char *)_vq_lengthlist__16c1_s_p9_0,
- 1, -513964032, 1628680192, 4, 0,
- (long *)_vq_quantlist__16c1_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p9_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__16c1_s_p9_1[] = {
- 1, 4, 4, 4, 4, 8, 8,12,13,14,14,14,14,14,14, 6,
- 6, 6, 6, 6,10, 9,14,14,14,14,14,14,14,14, 7, 6,
- 5, 6, 6,10, 9,12,13,13,13,13,13,13,13,13, 7, 7,
- 9, 9,11,11,12,13,13,13,13,13,13,13,13, 7, 7, 8,
- 8,11,12,13,13,13,13,13,13,13,13,13,12,12,10,10,
- 13,12,13,13,13,13,13,13,13,13,13,12,12,10,10,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,12,13,12,
- 13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,12,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,
-};
-
-static const static_codebook _16c1_s_p9_1 = {
- 2, 225,
- (char *)_vq_lengthlist__16c1_s_p9_1,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__16c1_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__16c1_s_p9_2[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__16c1_s_p9_2[] = {
- 1, 4, 4, 6, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9,10,
- 10,10, 9,10,10,11,12,12, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,10,10,10,11,11,10,12,11,11,13,11, 7, 7, 8,
- 8, 8, 8, 9, 9, 9,10,10,10,10, 9,10,10,11,11,12,
- 11,11, 8, 8, 8, 8, 9, 9,10,10,10,10,11,11,11,11,
- 11,11,11,12,11,12,12, 8, 8, 9, 9, 9, 9, 9,10,10,
- 10,10,10,10,11,11,11,11,11,11,12,11, 9, 9, 9, 9,
- 10,10,10,10,11,10,11,11,11,11,11,11,12,12,12,12,
- 11, 9, 9, 9, 9,10,10,10,10,11,11,11,11,11,11,11,
- 11,11,12,12,12,13, 9,10,10, 9,11,10,10,10,10,11,
- 11,11,11,11,10,11,12,11,12,12,11,12,11,10, 9,10,
- 10,11,10,11,11,11,11,11,11,11,11,11,12,12,11,12,
- 12,12,10,10,10,11,10,11,11,11,11,11,11,11,11,11,
- 11,11,12,13,12,12,11, 9,10,10,11,11,10,11,11,11,
- 12,11,11,11,11,11,12,12,13,13,12,13,10,10,12,10,
- 11,11,11,11,11,11,11,11,11,12,12,11,13,12,12,12,
- 12,13,12,11,11,11,11,11,11,12,11,12,11,11,11,11,
- 12,12,13,12,11,12,12,11,11,11,11,11,12,11,11,11,
- 11,12,11,11,12,11,12,13,13,12,12,12,12,11,11,11,
- 11,11,12,11,11,12,11,12,11,11,11,11,13,12,12,12,
- 12,13,11,11,11,12,12,11,11,11,12,11,12,12,12,11,
- 12,13,12,11,11,12,12,11,12,11,11,11,12,12,11,12,
- 11,11,11,12,12,12,12,13,12,13,12,12,12,12,11,11,
- 12,11,11,11,11,11,11,12,12,12,13,12,11,13,13,12,
- 12,11,12,10,11,11,11,11,12,11,12,12,11,12,12,13,
- 12,12,13,12,12,12,12,12,11,12,12,12,11,12,11,11,
- 11,12,13,12,13,13,13,13,13,12,13,13,12,12,13,11,
- 11,11,11,11,12,11,11,12,11,
-};
-
-static const static_codebook _16c1_s_p9_2 = {
- 2, 441,
- (char *)_vq_lengthlist__16c1_s_p9_2,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__16c1_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__16c1_s_short[] = {
- 5, 6,17, 8,12, 9,10,10,12,13, 5, 2,17, 4, 9, 5,
- 7, 8,11,13,16,16,16,16,16,16,16,16,16,16, 6, 4,
- 16, 5,10, 5, 7,10,14,16,13, 9,16,11, 8, 7, 8, 9,
- 13,16, 7, 4,16, 5, 7, 4, 6, 8,11,13, 8, 6,16, 7,
- 8, 5, 5, 7, 9,13, 9, 8,16, 9, 8, 6, 6, 7, 9,13,
- 11,11,16,10,10, 7, 7, 7, 9,13,13,13,16,13,13, 9,
- 9, 9,10,13,
-};
-
-static const static_codebook _huff_book__16c1_s_short = {
- 2, 100,
- (char *)_huff_lengthlist__16c1_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__16c2_s_long[] = {
- 4, 7, 9, 9, 9, 8, 9,10,13,16, 5, 4, 5, 6, 7, 7,
- 8, 9,12,16, 6, 5, 5, 5, 7, 7, 9,10,12,15, 7, 6,
- 5, 4, 5, 6, 8, 9,10,13, 8, 7, 7, 5, 5, 5, 7, 9,
- 10,12, 7, 7, 7, 6, 5, 5, 6, 7,10,12, 8, 8, 8, 7,
- 7, 5, 5, 6, 9,11, 8, 9, 9, 8, 8, 6, 6, 5, 8,11,
- 10,11,12,12,11, 9, 9, 8, 9,12,13,14,15,15,14,12,
- 12,11,11,13,
-};
-
-static const static_codebook _huff_book__16c2_s_long = {
- 2, 100,
- (char *)_huff_lengthlist__16c2_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16c2_s_p1_0[] = {
- 1, 3, 3, 0, 0, 0, 0, 0, 0, 4, 5, 5, 0, 0, 0, 0,
- 0, 0, 4, 5, 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,
-};
-
-static const static_codebook _16c2_s_p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16c2_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__16c2_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16c2_s_p2_0[] = {
- 2, 4, 4, 7, 7, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0,
- 0, 0, 8, 8, 0, 0, 0, 8, 8, 4, 4, 4, 8, 7, 0, 0,
- 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
- 9, 9, 4, 4, 4, 7, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8,
- 8, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 7, 8, 8,10, 9,
- 0, 0, 0,12,11, 0, 0, 0,11,12, 0, 0, 0,14,13, 0,
- 0, 0,14,14, 7, 8, 8, 9,10, 0, 0, 0,11,12, 0, 0,
- 0,11,11, 0, 0, 0,14,14, 0, 0, 0,14,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, 8, 8, 8,11,11, 0, 0, 0,
- 12,11, 0, 0, 0,12,12, 0, 0, 0,13,12, 0, 0, 0,13,
- 13, 8, 8, 8,11,11, 0, 0, 0,11,11, 0, 0, 0,12,12,
- 0, 0, 0,13,13, 0, 0, 0,13,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, 8, 9, 8,12,11, 0, 0, 0,12,12, 0,
- 0, 0,12,11, 0, 0, 0,13,13, 0, 0, 0,13,13, 8, 8,
- 8,11,12, 0, 0, 0,11,12, 0, 0, 0,11,12, 0, 0, 0,
- 13,14, 0, 0, 0,13,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, 8, 9, 9,14,14, 0, 0, 0,13,13, 0, 0, 0,13,
- 13, 0, 0, 0,13,12, 0, 0, 0,13,13, 8, 9, 9,14,14,
- 0, 0, 0,13,13, 0, 0, 0,13,13, 0, 0, 0,12,13, 0,
- 0, 0,13,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, 8,
- 9, 9,14,14, 0, 0, 0,13,13, 0, 0, 0,13,13, 0, 0,
- 0,13,13, 0, 0, 0,13,12, 8, 9, 9,14,14, 0, 0, 0,
- 13,13, 0, 0, 0,13,13, 0, 0, 0,13,13, 0, 0, 0,12,
- 12,
-};
-
-static const static_codebook _16c2_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__16c2_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16c2_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__16c2_s_p3_0[] = {
- 1, 3, 3, 5, 5, 7, 7, 8, 8, 0, 0, 0, 6, 6, 8, 8,
- 9, 9, 0, 0, 0, 6, 6, 8, 8, 9, 9, 0, 0, 0, 7, 7,
- 8, 9,10,10, 0, 0, 0, 7, 7, 9, 9,10,10, 0, 0, 0,
- 8, 8, 9, 9,11,11, 0, 0, 0, 7, 7, 9, 9,11,11, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _16c2_s_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__16c2_s_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__16c2_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p4_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__16c2_s_p4_0[] = {
- 2, 3, 3, 5, 5, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9,
- 9, 0, 0, 0, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,
- 11,10, 0, 0, 0, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,
- 10,10,10, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,11,11, 0, 0, 0, 7, 6, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,
- 11,11,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,
- 10,11,11,11,11,12,12, 0, 0, 0, 7, 8, 8, 8, 9, 9,
- 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9,
- 9,10,10,11,11,12,12,13,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _16c2_s_p4_0 = {
- 2, 289,
- (char *)_vq_lengthlist__16c2_s_p4_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__16c2_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16c2_s_p5_0[] = {
- 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 6,10,11,10,10,
- 10,11, 4, 6, 6,10,10,11,10,11,10, 5,10,10, 9,12,
- 11,10,12,12, 7,10,10,12,12,12,12,13,13, 7,11,10,
- 11,12,12,12,13,13, 6,11,10,10,12,12,11,12,12, 7,
- 11,10,12,13,13,12,12,12, 7,10,11,12,13,13,12,12,
- 12,
-};
-
-static const static_codebook _16c2_s_p5_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16c2_s_p5_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__16c2_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p5_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__16c2_s_p5_1[] = {
- 2, 3, 3, 6, 6, 6, 6, 7, 7, 7, 7,11,10,10, 6, 6,
- 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
- 8,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9,11,11,11, 6,
- 7, 8, 8, 8, 8, 9, 9,11,11,11, 7, 7, 8, 8, 8, 8,
- 8, 8,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9,11,11,11,
- 8, 8, 8, 8, 8, 8, 8, 8,11,11,11,11,11, 8, 8, 8,
- 8, 8, 8,12,11,11,11,11, 8, 8, 8, 8, 8, 8,12,11,
- 11,11,11, 7, 7, 8, 8, 8, 8,
-};
-
-static const static_codebook _16c2_s_p5_1 = {
- 2, 121,
- (char *)_vq_lengthlist__16c2_s_p5_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__16c2_s_p5_1,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__16c2_s_p6_0[] = {
- 1, 4, 4, 6, 6, 8, 7, 8, 8, 9, 9,10,10, 5, 5, 5,
- 7, 7, 9, 9, 9, 9,11,11,12,12, 6, 5, 5, 7, 7, 9,
- 9,10, 9,11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,
- 11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
- 12, 0,11,11, 8, 8,10,10,11,11,12,12,13,13, 0,12,
- 12, 9, 9,10,10,11,11,12,12,13,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,
-};
-
-static const static_codebook _16c2_s_p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__16c2_s_p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__16c2_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16c2_s_p6_1[] = {
- 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
- 6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _16c2_s_p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__16c2_s_p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16c2_s_p6_1,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__16c2_s_p7_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 8, 8,10, 9,10,10, 5, 5, 5,
- 7, 7, 9, 9,10,10,11,10,12,11, 6, 5, 5, 7, 7, 9,
- 9,10,10,11,11,12,12,20, 7, 7, 7, 7, 9, 9,10,10,
- 11,11,12,12,20, 7, 7, 7, 7, 9, 9,11,10,12,11,12,
- 12,20,11,11, 8, 8,10,10,11,11,12,12,13,13,20,12,
- 12, 8, 8, 9, 9,11,11,12,12,13,13,20,20,21,10,10,
- 10,10,11,11,12,12,13,13,21,21,21,10,10,10,10,11,
- 11,12,12,13,13,21,21,21,14,14,11,11,12,12,13,13,
- 13,14,21,21,21,16,15,11,11,12,11,13,13,14,14,21,
- 21,21,21,21,13,13,12,12,13,13,14,14,21,21,21,21,
- 21,13,13,12,12,13,13,14,14,
-};
-
-static const static_codebook _16c2_s_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__16c2_s_p7_0,
- 1, -523206656, 1618345984, 4, 0,
- (long *)_vq_quantlist__16c2_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__16c2_s_p7_1[] = {
- 2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 7, 9, 9, 9, 6, 7,
- 7, 7, 7, 7, 8, 8, 9, 9, 9, 6, 6, 7, 7, 7, 7, 8,
- 8, 9, 9, 9, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 7,
- 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8,
- 8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9,
- 7, 7, 8, 8, 7, 7, 8, 8, 9, 9, 9, 9, 9, 8, 8, 7,
- 7, 8, 8, 9, 9, 9, 9, 9, 8, 8, 7, 7, 8, 8, 9, 9,
- 9, 9, 9, 7, 7, 7, 7, 8, 8,
-};
-
-static const static_codebook _16c2_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__16c2_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__16c2_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p8_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__16c2_s_p8_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9,10,10, 6,
- 6, 6, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,11, 6, 5,
- 5, 8, 7, 9, 9, 8, 8, 9, 9,10,10,11,11,20, 8, 8,
- 8, 8, 9, 9, 9, 9,10,10,11,10,12,11,20, 8, 8, 8,
- 8, 9, 9, 9, 9,10,10,11,11,12,12,20,12,12, 9, 9,
- 10,10,10,10,11,11,12,12,13,12,20,13,13, 9, 9,10,
- 10,10,10,11,11,12,12,13,13,20,20,20, 9, 9, 9, 9,
- 10,10,11,11,12,12,13,12,20,20,20, 9, 9, 9, 8,10,
- 10,12,11,12,12,13,13,20,20,20,13,13,10,10,11,11,
- 12,12,13,13,13,13,20,20,20,13,13,10,10,11,10,12,
- 11,13,13,14,14,20,20,20,20,20,11,11,11,11,12,12,
- 13,13,14,14,20,20,20,20,20,11,10,11,11,13,11,13,
- 13,14,14,20,20,21,21,21,14,14,11,12,13,13,13,13,
- 14,14,21,21,21,21,21,15,15,12,11,13,12,14,13,15,
- 14,
-};
-
-static const static_codebook _16c2_s_p8_0 = {
- 2, 225,
- (char *)_vq_lengthlist__16c2_s_p8_0,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__16c2_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p8_1[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__16c2_s_p8_1[] = {
- 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,10, 7, 7, 8,
- 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
- 11,11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9,11,11,11, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9,10, 9,10,10,10,10,11,11,11, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,11,11,
- 11, 8, 8, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,
- 10,10,10,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
- 10,10,10,10,10,10,10,10,11,11,11,11,11, 9, 9, 9,
- 9, 9, 9,10,10,10,10,10,10,10,10,10,10,11,11,11,
- 11,11, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,
- 10,10,11,11,11,11,11, 9, 9, 9, 9,10,10,10,10,10,
- 10,10,10,10,10,10,10,11,11,11,11,11,10, 9,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,
- 11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,11,11,11,11,11,11,11,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,
- 11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,
- 10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10,
- 10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
- 11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,11,
- 11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,
- 10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,10,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _16c2_s_p8_1 = {
- 2, 441,
- (char *)_vq_lengthlist__16c2_s_p8_1,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__16c2_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p9_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__16c2_s_p9_0[] = {
- 1, 4, 3,10, 8,10,10,10,10,10,10,10,10,10,10,10,
- 10, 6,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10, 6,10, 9,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _16c2_s_p9_0 = {
- 2, 289,
- (char *)_vq_lengthlist__16c2_s_p9_0,
- 1, -509798400, 1631393792, 5, 0,
- (long *)_vq_quantlist__16c2_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p9_1[] = {
- 9,
- 8,
- 10,
- 7,
- 11,
- 6,
- 12,
- 5,
- 13,
- 4,
- 14,
- 3,
- 15,
- 2,
- 16,
- 1,
- 17,
- 0,
- 18,
-};
-
-static const char _vq_lengthlist__16c2_s_p9_1[] = {
- 1, 4, 4, 7, 7, 7, 7, 7, 7, 8, 8,10, 9,11,10,13,
- 11,14,13, 6, 6, 6, 8, 8, 8, 8, 8, 7, 9, 8,11, 9,
- 13,11,14,12,14,13, 5, 6, 6, 8, 8, 8, 8, 8, 8, 9,
- 9,11,11,13,11,14,13,15,15,17, 8, 8, 8, 8, 9, 9,
- 9, 8,11, 9,12,10,13,11,14,12,14,13,17, 8, 8, 8,
- 8, 9, 9, 9, 9,10,10,11,11,13,13,13,14,16,15,17,
- 12,12, 8, 8, 9, 9,10,10,11,11,12,11,13,12,13,12,
- 14,13,16,12,12, 8, 8, 9, 9,10,10,11,11,12,12,13,
- 13,14,14,15,15,17,17,17, 9, 9, 9, 9,11,11,12,12,
- 12,13,13,13,16,14,14,14,17,17,17, 9, 8, 9, 8,11,
- 10,12,12,13,13,14,14,15,15,16,16,17,17,17,12,12,
- 10,10,11,12,12,13,13,14,13,15,15,14,16,15,17,17,
- 17,12,12,10, 8,12, 9,13,12,14,14,15,14,15,16,16,
- 16,17,17,17,17,17,11,11,12,12,14,14,14,16,15,16,
- 15,16,15,17,17,17,17,17,17,11, 9,12,10,13,11,15,
- 14,16,16,17,16,16,15,17,17,17,17,17,15,15,12,12,
- 14,14,15,16,16,15,16,16,17,17,17,17,17,17,17,14,
- 14,12,10,14,11,15,12,17,16,15,16,17,16,17,17,17,
- 17,17,17,17,13,13,14,14,14,16,17,17,16,17,17,17,
- 17,17,17,17,17,17,17,13, 9,13,12,15,13,16,16,17,
- 17,17,17,17,17,17,17,17,17,17,15,17,14,14,15,16,
- 16,17,16,17,16,17,17,17,17,17,17,17,17,17,17,14,
- 13,15,16,16,17,16,17,17,17,
-};
-
-static const static_codebook _16c2_s_p9_1 = {
- 2, 361,
- (char *)_vq_lengthlist__16c2_s_p9_1,
- 1, -518287360, 1622704128, 5, 0,
- (long *)_vq_quantlist__16c2_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__16c2_s_p9_2[] = {
- 24,
- 23,
- 25,
- 22,
- 26,
- 21,
- 27,
- 20,
- 28,
- 19,
- 29,
- 18,
- 30,
- 17,
- 31,
- 16,
- 32,
- 15,
- 33,
- 14,
- 34,
- 13,
- 35,
- 12,
- 36,
- 11,
- 37,
- 10,
- 38,
- 9,
- 39,
- 8,
- 40,
- 7,
- 41,
- 6,
- 42,
- 5,
- 43,
- 4,
- 44,
- 3,
- 45,
- 2,
- 46,
- 1,
- 47,
- 0,
- 48,
-};
-
-static const char _vq_lengthlist__16c2_s_p9_2[] = {
- 2, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
- 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _16c2_s_p9_2 = {
- 1, 49,
- (char *)_vq_lengthlist__16c2_s_p9_2,
- 1, -526909440, 1611661312, 6, 0,
- (long *)_vq_quantlist__16c2_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__16c2_s_short[] = {
- 7,10,12,11,12,13,15,16,18,15,10, 8, 8, 8, 9,10,
- 12,13,14,17,10, 7, 7, 7, 7, 8,10,12,15,18,10, 7,
- 7, 5, 5, 6, 8,10,13,15,10, 7, 6, 5, 4, 4, 6, 9,
- 12,15,11, 7, 7, 5, 4, 3, 4, 7,11,13,12, 9, 8, 7,
- 5, 4, 4, 5,10,13,11,11,11, 9, 7, 5, 5, 5, 9,12,
- 13,12,13,12,10, 8, 8, 7, 9,13,14,14,14,14,13,11,
- 11,10,10,13,
-};
-
-static const static_codebook _huff_book__16c2_s_short = {
- 2, 100,
- (char *)_huff_lengthlist__16c2_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8c0_s_p1_0[] = {
- 1, 5, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 5, 7, 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, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0,
- 0, 0, 0, 7, 8, 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, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 8, 8, 0, 0, 0, 0,
- 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8, 9, 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, 7,10, 9, 0, 0, 0,
- 0, 0, 0, 8, 9,11, 0, 0, 0, 0, 0, 0, 9,11,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, 7, 9,10, 0, 0,
- 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 9,11,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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
- 0, 0, 0, 0, 8, 9,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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,11, 0,
- 0, 0, 0, 0, 0, 9,10,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, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,11,11,
- 0, 0, 0, 0, 0, 0, 8,11, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _8c0_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__8c0_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__8c0_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__8c0_s_p3_0[] = {
- 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 7, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 8, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 7, 7, 8, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _8c0_s_p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__8c0_s_p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__8c0_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__8c0_s_p4_0[] = {
- 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 0, 0, 0, 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, 0,
- 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _8c0_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__8c0_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__8c0_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__8c0_s_p5_0[] = {
- 1, 3, 3, 5, 5, 7, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
- 8, 8, 0, 0, 0, 7, 7, 7, 7, 8, 9, 0, 0, 0, 8, 8,
- 8, 8, 9, 9, 0, 0, 0, 8, 8, 8, 8, 9, 9, 0, 0, 0,
- 9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0,
- 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
- 10,
-};
-
-static const static_codebook _8c0_s_p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__8c0_s_p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__8c0_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p6_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__8c0_s_p6_0[] = {
- 1, 3, 3, 6, 6, 8, 8, 9, 9, 8, 8,10, 9,10,10,11,
- 11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
- 11,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
- 11,12,11, 0, 0, 0, 8, 8, 9, 9,10,10, 9, 9,10,10,
- 11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10, 9, 9,11,
- 10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,10,10,
- 11,11,11,12,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,10,
- 10,11,11,12,12,13,13, 0, 0, 0,10,10,10,10,11,11,
- 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,10, 9,10,
- 11,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
- 10, 9,10,11,12,12,13,13,14,13, 0, 0, 0, 0, 0, 9,
- 9, 9,10,10,10,11,11,13,12,13,13, 0, 0, 0, 0, 0,
- 10,10,10,10,11,11,12,12,13,13,14,14, 0, 0, 0, 0,
- 0, 0, 0,10,10,11,11,12,12,13,13,13,14, 0, 0, 0,
- 0, 0, 0, 0,11,11,11,11,12,12,13,14,14,14, 0, 0,
- 0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,14,13, 0,
- 0, 0, 0, 0, 0, 0,11,11,12,12,13,13,14,14,14,14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
- 14,
-};
-
-static const static_codebook _8c0_s_p6_0 = {
- 2, 289,
- (char *)_vq_lengthlist__8c0_s_p6_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__8c0_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8c0_s_p7_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,11, 9,10,12,
- 9,10, 4, 7, 7,10,10,10,11, 9, 9, 6,11,10,11,11,
- 12,11,11,11, 6,10,10,11,11,12,11,10,10, 6, 9,10,
- 11,11,11,11,10,10, 7,10,11,12,11,11,12,11,12, 6,
- 9, 9,10, 9, 9,11,10,10, 6, 9, 9,10,10,10,11,10,
- 10,
-};
-
-static const static_codebook _8c0_s_p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__8c0_s_p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__8c0_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__8c0_s_p7_1[] = {
- 1, 3, 3, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10, 7, 7,
- 8, 8, 9, 9, 9, 9,10,10, 9, 7, 7, 8, 8, 9, 9, 9,
- 9,10,10,10, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10, 8,
- 8, 9, 9, 9, 9, 8, 9,10,10,10, 8, 8, 9, 9, 9,10,
- 10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,10,11,10,11,
- 9, 9, 9, 9,10,10,10,10,11,11,11,10,10, 9, 9,10,
- 10,10, 9,11,10,10,10,10,10,10, 9, 9,10,10,11,11,
- 10,10,10, 9, 9, 9,10,10,10,
-};
-
-static const static_codebook _8c0_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__8c0_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__8c0_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p8_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__8c0_s_p8_0[] = {
- 1, 4, 4, 7, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 6, 6,
- 7, 7, 8, 8, 7, 7, 8, 9,10,10, 7, 6, 6, 7, 7, 8,
- 7, 7, 7, 9, 9,10,12, 0, 8, 8, 8, 8, 8, 9, 8, 8,
- 9, 9,10,10, 0, 8, 8, 8, 8, 8, 9, 8, 9, 9, 9,11,
- 10, 0, 0,13, 9, 8, 9, 9, 9, 9,10,10,11,11, 0,13,
- 0, 9, 9, 9, 9, 9, 9,11,10,11,11, 0, 0, 0, 8, 9,
- 10, 9,10,10,13,11,12,12, 0, 0, 0, 8, 9, 9, 9,10,
- 10,13,12,12,13, 0, 0, 0,12, 0,10,10,12,11,10,11,
- 12,12, 0, 0, 0,13,13,10,10,10,11,12, 0,13, 0, 0,
- 0, 0, 0, 0,13,11, 0,12,12,12,13,12, 0, 0, 0, 0,
- 0, 0,13,13,11,13,13,11,12,
-};
-
-static const static_codebook _8c0_s_p8_0 = {
- 2, 169,
- (char *)_vq_lengthlist__8c0_s_p8_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__8c0_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p8_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__8c0_s_p8_1[] = {
- 1, 3, 4, 5, 5, 7, 6, 6, 6, 5, 7, 7, 7, 6, 6, 7,
- 7, 7, 6, 6, 7, 7, 7, 6, 6,
-};
-
-static const static_codebook _8c0_s_p8_1 = {
- 2, 25,
- (char *)_vq_lengthlist__8c0_s_p8_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__8c0_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p9_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8c0_s_p9_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _8c0_s_p9_0 = {
- 4, 81,
- (char *)_vq_lengthlist__8c0_s_p9_0,
- 1, -518803456, 1628680192, 2, 0,
- (long *)_vq_quantlist__8c0_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p9_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__8c0_s_p9_1[] = {
- 1, 4, 4, 5, 5,10, 8,11,11,11,11,11,11,11,11, 6,
- 6, 6, 7, 6,11,10,11,11,11,11,11,11,11,11, 7, 5,
- 6, 6, 6, 8, 7,11,11,11,11,11,11,11,11,11, 7, 8,
- 8, 8, 9, 9,11,11,11,11,11,11,11,11,11, 9, 8, 7,
- 8, 9,11,11,11,11,11,11,11,11,11,11,11,10,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,
-};
-
-static const static_codebook _8c0_s_p9_1 = {
- 2, 225,
- (char *)_vq_lengthlist__8c0_s_p9_1,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__8c0_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__8c0_s_p9_2[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__8c0_s_p9_2[] = {
- 1, 5, 5, 7, 7, 8, 7, 8, 8,10,10, 9, 9,10,10,10,
- 11,11,10,12,11,12,12,12, 9, 8, 8, 8, 8, 8, 9,10,
- 10,10,10,11,11,11,10,11,11,12,12,11,12, 8, 8, 7,
- 7, 8, 9,10,10,10, 9,10,10, 9,10,10,11,11,11,11,
- 11,11, 9, 9, 9, 9, 8, 9,10,10,11,10,10,11,11,12,
- 10,10,12,12,11,11,10, 9, 9,10, 8, 9,10,10,10, 9,
- 10,10,11,11,10,11,10,10,10,12,12,12, 9,10, 9,10,
- 9, 9,10,10,11,11,11,11,10,10,10,11,12,11,12,11,
- 12,10,11,10,11, 9,10, 9,10, 9,10,10, 9,10,10,11,
- 10,11,11,11,11,12,11, 9,10,10,10,10,11,11,11,11,
- 11,10,11,11,11,11,10,12,10,12,12,11,12,10,10,11,
- 10, 9,11,10,11, 9,10,11,10,10,10,11,11,11,11,12,
- 12,10, 9, 9,11,10, 9,12,11,10,12,12,11,11,11,11,
- 10,11,11,12,11,10,12, 9,11,10,11,10,10,11,10,11,
- 9,10,10,10,11,12,11,11,12,11,10,10,11,11, 9,10,
- 10,12,10,11,10,10,10, 9,10,10,10,10, 9,10,10,11,
- 11,11,11,12,11,10,10,10,10,11,11,10,11,11, 9,11,
- 10,12,10,12,11,10,11,10,10,10,11,10,10,11,11,10,
- 11,10,10,10,10,11,11,12,10,10,10,11,10,11,12,11,
- 10,11,10,10,11,11,10,12,10, 9,10,10,11,11,11,10,
- 12,10,10,11,11,11,10,10,11,10,10,10,11,10,11,10,
- 12,11,11,10,10,10,12,10,10,11, 9,10,11,11,11,10,
- 10,11,10,10, 9,11,11,12,12,11,12,11,11,11,11,11,
- 11, 9,10,11,10,12,10,10,10,10,11,10,10,11,10,10,
- 12,10,10,10,10,10, 9,12,10,10,10,10,12, 9,11,10,
- 10,11,10,12,12,10,12,12,12,10,10,10,10, 9,10,11,
- 10,10,12,10,10,12,11,10,11,10,10,12,11,10,12,10,
- 10,11, 9,11,10, 9,10, 9,10,
-};
-
-static const static_codebook _8c0_s_p9_2 = {
- 2, 441,
- (char *)_vq_lengthlist__8c0_s_p9_2,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__8c0_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__8c0_s_single[] = {
- 4, 5,18, 7,10, 6, 7, 8, 9,10, 5, 2,18, 5, 7, 5,
- 6, 7, 8,11,17,17,17,17,17,17,17,17,17,17, 7, 4,
- 17, 6, 9, 6, 8,10,12,15,11, 7,17, 9, 6, 6, 7, 9,
- 11,15, 6, 4,17, 6, 6, 4, 5, 8,11,16, 6, 6,17, 8,
- 6, 5, 6, 9,13,16, 8, 9,17,11, 9, 8, 8,11,13,17,
- 9,12,17,15,14,13,12,13,14,17,12,15,17,17,17,17,
- 17,16,17,17,
-};
-
-static const static_codebook _huff_book__8c0_s_single = {
- 2, 100,
- (char *)_huff_lengthlist__8c0_s_single,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8c1_s_p1_0[] = {
- 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 5, 7, 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, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0,
- 0, 0, 0, 7, 8, 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, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
- 0, 0, 0, 0, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 8, 8, 0, 0, 0, 0,
- 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 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, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 8, 8,10, 0, 0, 0, 0, 0, 0, 9,10,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, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
- 0, 0, 0, 0, 8, 9, 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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
- 0, 0, 0, 0, 0, 8, 9,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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
- 0, 0, 0, 0, 0, 0, 8,10, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _8c1_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__8c1_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__8c1_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__8c1_s_p3_0[] = {
- 2, 4, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 6, 7, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _8c1_s_p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__8c1_s_p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__8c1_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__8c1_s_p4_0[] = {
- 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 0, 0, 0, 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, 0,
- 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _8c1_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__8c1_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__8c1_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__8c1_s_p5_0[] = {
- 1, 3, 3, 4, 5, 6, 6, 8, 8, 0, 0, 0, 8, 8, 7, 7,
- 9, 9, 0, 0, 0, 8, 8, 7, 7, 9, 9, 0, 0, 0, 9,10,
- 8, 8, 9, 9, 0, 0, 0,10,10, 8, 8, 9, 9, 0, 0, 0,
- 11,10, 8, 8,10,10, 0, 0, 0,11,11, 8, 8,10,10, 0,
- 0, 0,12,12, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
- 10,
-};
-
-static const static_codebook _8c1_s_p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__8c1_s_p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__8c1_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p6_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__8c1_s_p6_0[] = {
- 1, 3, 3, 5, 5, 8, 8, 8, 8, 9, 9,10,10,11,11,11,
- 11, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,11,
- 12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11,12,12, 0, 0, 0, 9, 9, 8, 8,10,10,10,10,11,11,
- 12,12,12,12, 0, 0, 0, 9, 9, 8, 8,10,10,10,10,11,
- 11,12,12,12,12, 0, 0, 0,10,10, 9, 9,10,10,10,10,
- 11,11,12,12,13,13, 0, 0, 0,10,10, 9, 9,10,10,10,
- 10,11,11,12,12,13,13, 0, 0, 0,11,11, 9, 9,10,10,
- 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
- 10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0, 9,
- 9,10,10,11,11,12,11,12,12,13,13, 0, 0, 0, 0, 0,
- 10,10,11,11,11,11,12,12,13,12,13,13, 0, 0, 0, 0,
- 0, 0, 0,11,10,11,11,12,12,13,13,13,13, 0, 0, 0,
- 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, 0,
- 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,13, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14,
- 14,
-};
-
-static const static_codebook _8c1_s_p6_0 = {
- 2, 289,
- (char *)_vq_lengthlist__8c1_s_p6_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__8c1_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8c1_s_p7_0[] = {
- 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
- 9, 9, 5, 7, 7,10, 9, 9,10, 9, 9, 6,10,10,10,10,
- 10,11,10,10, 6, 9, 9,10, 9,10,11,10,10, 6, 9, 9,
- 10, 9, 9,11, 9,10, 7,10,10,11,11,11,11,10,10, 6,
- 9, 9,10,10,10,11, 9, 9, 6, 9, 9,10,10,10,10, 9,
- 9,
-};
-
-static const static_codebook _8c1_s_p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__8c1_s_p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__8c1_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__8c1_s_p7_1[] = {
- 2, 3, 3, 5, 5, 7, 7, 7, 7, 7, 7,10,10, 9, 7, 7,
- 7, 7, 8, 8, 8, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8, 8,
- 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
- 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8,
- 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
- 8, 8, 8,10,10,10,10,10, 8, 8, 8, 8, 8, 8,10,10,
- 10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _8c1_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__8c1_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__8c1_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p8_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__8c1_s_p8_0[] = {
- 1, 4, 4, 6, 6, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 5,
- 7, 7, 8, 8, 8, 8, 9,10,11,11, 7, 5, 5, 7, 7, 8,
- 8, 9, 9,10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9, 9, 9,10, 9,10,11,11,11, 0,13,
- 12, 9, 8, 9, 9,10,10,11,11,12,11, 0, 0, 0, 9, 9,
- 9, 9,10,10,11,11,12,12, 0, 0, 0,10,10, 9, 9,10,
- 10,11,11,12,12, 0, 0, 0,13,13,10,10,11,11,12,11,
- 13,12, 0, 0, 0,14,14,10,10,11,10,11,11,12,12, 0,
- 0, 0, 0, 0,12,12,11,11,12,12,13,13, 0, 0, 0, 0,
- 0,12,12,11,10,12,11,13,12,
-};
-
-static const static_codebook _8c1_s_p8_0 = {
- 2, 169,
- (char *)_vq_lengthlist__8c1_s_p8_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__8c1_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p8_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__8c1_s_p8_1[] = {
- 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
- 6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _8c1_s_p8_1 = {
- 2, 25,
- (char *)_vq_lengthlist__8c1_s_p8_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__8c1_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p9_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__8c1_s_p9_0[] = {
- 1, 3, 3,10,10,10,10,10,10,10,10,10,10, 5, 6, 6,
- 10,10,10,10,10,10,10,10,10,10, 6, 7, 8,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10, 9, 9, 9, 9,
-};
-
-static const static_codebook _8c1_s_p9_0 = {
- 2, 169,
- (char *)_vq_lengthlist__8c1_s_p9_0,
- 1, -513964032, 1628680192, 4, 0,
- (long *)_vq_quantlist__8c1_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p9_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__8c1_s_p9_1[] = {
- 1, 4, 4, 5, 5, 7, 7, 9, 9,11,11,12,12,13,13, 6,
- 5, 5, 6, 6, 9, 9,10,10,12,12,12,13,15,14, 6, 5,
- 5, 7, 7, 9, 9,10,10,12,12,12,13,14,13,17, 7, 7,
- 8, 8,10,10,11,11,12,13,13,13,13,13,17, 7, 7, 8,
- 8,10,10,11,11,13,13,13,13,14,14,17,11,11, 9, 9,
- 11,11,12,12,12,13,13,14,15,13,17,12,12, 9, 9,11,
- 11,12,12,13,13,13,13,14,16,17,17,17,11,12,12,12,
- 13,13,13,14,15,14,15,15,17,17,17,12,12,11,11,13,
- 13,14,14,15,14,15,15,17,17,17,15,15,13,13,14,14,
- 15,14,15,15,16,15,17,17,17,15,15,13,13,13,14,14,
- 15,15,15,15,16,17,17,17,17,16,14,15,14,14,15,14,
- 14,15,15,15,17,17,17,17,17,14,14,16,14,15,15,15,
- 15,15,15,17,17,17,17,17,17,16,16,15,17,15,15,14,
- 17,15,17,16,17,17,17,17,16,15,14,15,15,15,15,15,
- 15,
-};
-
-static const static_codebook _8c1_s_p9_1 = {
- 2, 225,
- (char *)_vq_lengthlist__8c1_s_p9_1,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__8c1_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__8c1_s_p9_2[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__8c1_s_p9_2[] = {
- 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9,
- 9, 9, 9, 9, 9,11,11,12, 7, 7, 7, 7, 8, 8, 9, 9,
- 9, 9,10,10,10,10,10,10,10,10,11,11,11, 7, 7, 7,
- 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,11,
- 11,12, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10,10,
- 10,10,10,10,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9, 9,
- 9,10,10,10,10,10,10,10,10,11,11,11, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,11,11,
- 11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,10,
- 10,10,10,11,12,11, 9, 9, 8, 9, 9, 9, 9, 9,10,10,
- 10,10,10,10,10,10,10,10,11,11,11,11,11, 8, 8, 9,
- 9, 9, 9,10,10,10,10,10,10,10,10,10,10,11,12,11,
- 12,11, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
- 10,10,11,11,11,11,11, 9, 9, 9, 9,10,10,10,10,10,
- 10,10,10,10,10,10,10,12,11,12,11,11, 9, 9, 9,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,12,11,11,11,
- 11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 11,11,11,12,11,11,12,11,10,10,10,10,10,10,10,10,
- 10,10,10,10,11,10,11,11,11,11,11,11,11,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,11,11,12,11,12,
- 11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 11,11,12,11,12,11,11,11,11,10,10,10,10,10,10,10,
- 10,10,10,10,10,11,11,12,11,11,12,11,11,12,10,10,
- 11,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
- 11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,12,
- 12,11,12,11,11,12,12,12,11,11,10,10,10,10,10,10,
- 10,10,10,11,12,12,11,12,12,11,12,11,11,11,11,10,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _8c1_s_p9_2 = {
- 2, 441,
- (char *)_vq_lengthlist__8c1_s_p9_2,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__8c1_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__8c1_s_single[] = {
- 4, 6,18, 8,11, 8, 8, 9, 9,10, 4, 4,18, 5, 9, 5,
- 6, 7, 8,10,18,18,18,18,17,17,17,17,17,17, 7, 5,
- 17, 6,11, 6, 7, 8, 9,12,12, 9,17,12, 8, 8, 9,10,
- 10,13, 7, 5,17, 6, 8, 4, 5, 6, 8,10, 6, 5,17, 6,
- 8, 5, 4, 5, 7, 9, 7, 7,17, 8, 9, 6, 5, 5, 6, 8,
- 8, 8,17, 9,11, 8, 6, 6, 6, 7, 9,10,17,12,12,10,
- 9, 7, 7, 8,
-};
-
-static const static_codebook _huff_book__8c1_s_single = {
- 2, 100,
- (char *)_huff_lengthlist__8c1_s_single,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c2_s_long[] = {
- 6, 6,12,10,10,10, 9,10,12,12, 6, 1,10, 5, 6, 6,
- 7, 9,11,14,12, 9, 8,11, 7, 8, 9,11,13,15,10, 5,
- 12, 7, 8, 7, 9,12,14,15,10, 6, 7, 8, 5, 6, 7, 9,
- 12,14, 9, 6, 8, 7, 6, 6, 7, 9,12,12, 9, 7, 9, 9,
- 7, 6, 6, 7,10,10,10, 9,10,11, 8, 7, 6, 6, 8,10,
- 12,11,13,13,11,10, 8, 8, 8,10,11,13,15,15,14,13,
- 10, 8, 8, 9,
-};
-
-static const static_codebook _huff_book__44c2_s_long = {
- 2, 100,
- (char *)_huff_lengthlist__44c2_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c2_s_p1_0[] = {
- 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 0,
- 0, 0, 5, 6, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
- 0, 0, 0, 6, 8, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0,
- 0, 0, 0, 0, 7, 8, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 7, 7, 0, 0, 0, 0,
- 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 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, 7, 8, 8, 0, 0, 0,
- 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 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, 6, 8, 8, 0, 0,
- 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
- 0, 0, 0, 0, 7, 8, 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, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
- 0, 0, 0, 0, 0, 8, 8, 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, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
- 0, 0, 0, 0, 0, 0, 8, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c2_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__44c2_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c2_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c2_s_p2_0[] = {
- 1, 4, 4, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0,
- 8, 8, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 8,
- 8, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
- 0, 0, 4, 6, 6, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0,
- 0, 0, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,11,11, 0, 0,
- 0,11,11, 0, 0, 0,12,11, 0, 0, 0, 0, 0, 0, 0, 7,
- 8, 8, 0, 0, 0,10,11, 0, 0, 0,11,11, 0, 0, 0,11,
- 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6, 8, 8, 0, 0, 0,11,11, 0, 0, 0,11,11,
- 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0,
- 0, 0,10,11, 0, 0, 0,10,11, 0, 0, 0,11,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,
- 8, 9, 9, 0, 0, 0,11,12, 0, 0, 0,11,12, 0, 0, 0,
- 12,11, 0, 0, 0, 0, 0, 0, 0, 8,10, 9, 0, 0, 0,12,
- 11, 0, 0, 0,12,11, 0, 0, 0,11,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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c2_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c2_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c2_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c2_s_p3_0[] = {
- 2, 4, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c2_s_p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c2_s_p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c2_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c2_s_p4_0[] = {
- 1, 3, 3, 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, 6, 0, 0,
- 0, 0, 0, 6, 6, 6, 6, 0, 0, 0, 0, 0, 7, 7, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 6, 7, 0, 0, 0, 0, 0, 0, 0,
- 7, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
- 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c2_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c2_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c2_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c2_s_p5_0[] = {
- 1, 3, 3, 6, 6, 7, 7, 9, 9, 0, 7, 7, 7, 7, 7, 7,
- 9, 9, 0, 7, 7, 7, 7, 7, 7, 9, 9, 0, 8, 8, 7, 7,
- 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0,
- 9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0,
- 0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11,
- 11,
-};
-
-static const static_codebook _44c2_s_p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c2_s_p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c2_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p6_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c2_s_p6_0[] = {
- 1, 4, 3, 6, 6, 8, 8, 9, 9, 9, 9, 9, 9,10,10,11,
- 11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
- 12,11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
- 11,11,12, 0, 8, 8, 7, 7, 9, 9,10,10, 9, 9,10,10,
- 11,11,12,12, 0, 0, 0, 7, 7, 9, 9,10,10,10, 9,10,
- 10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
- 11,11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
- 10,11,11,12,12,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
- 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
- 10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
- 9,10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0, 0,
- 10,10,10,10,11,11,12,12,13,12,13,13, 0, 0, 0, 0,
- 0, 0, 0,10,10,11,11,12,12,13,13,13,13, 0, 0, 0,
- 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, 0,
- 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14,
- 14,
-};
-
-static const static_codebook _44c2_s_p6_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c2_s_p6_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c2_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c2_s_p7_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
- 9, 9, 4, 7, 7,10, 9, 9,10, 9, 9, 7,10,10,11,10,
- 11,11,10,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
- 11,10,11,11,10,10, 7,11,10,11,11,11,12,11,11, 6,
- 9, 9,11,10,10,11,11,10, 6, 9, 9,11,10,10,12,10,
- 11,
-};
-
-static const static_codebook _44c2_s_p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c2_s_p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c2_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c2_s_p7_1[] = {
- 2, 3, 4, 6, 6, 7, 7, 7, 7, 7, 7, 9, 7, 7, 6, 6,
- 7, 7, 8, 8, 8, 8, 9, 6, 6, 6, 6, 7, 7, 8, 8, 8,
- 8,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
- 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
- 8, 8,10,10,10, 7, 8, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
- 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
- 10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c2_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c2_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c2_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p8_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c2_s_p8_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 6, 5, 5,
- 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 6, 5, 7, 7, 8,
- 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13,
- 13, 9, 9,10,10,10,10,11,11,12,12, 0, 0, 0,10,10,
- 10,10,11,11,12,12,12,13, 0, 0, 0,10,10,10,10,11,
- 11,12,12,12,12, 0, 0, 0,14,14,10,11,11,11,12,12,
- 13,13, 0, 0, 0,14,14,11,10,11,11,13,12,13,13, 0,
- 0, 0, 0, 0,12,12,11,12,13,12,14,14, 0, 0, 0, 0,
- 0,12,12,12,12,13,12,14,14,
-};
-
-static const static_codebook _44c2_s_p8_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c2_s_p8_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c2_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p8_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c2_s_p8_1[] = {
- 2, 4, 4, 5, 4, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
- 5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c2_s_p8_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c2_s_p8_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c2_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p9_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c2_s_p9_0[] = {
- 1, 5, 4,12,12,12,12,12,12,12,12,12,12, 4, 9, 8,
- 11,11,11,11,11,11,11,11,11,11, 2, 8, 7,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _44c2_s_p9_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c2_s_p9_0,
- 1, -514541568, 1627103232, 4, 0,
- (long *)_vq_quantlist__44c2_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p9_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c2_s_p9_1[] = {
- 1, 4, 4, 6, 6, 7, 6, 8, 8,10, 9,10,10, 6, 5, 5,
- 7, 7, 8, 7,10, 9,11,11,12,13, 6, 5, 5, 7, 7, 8,
- 8,10,10,11,11,13,13,18, 8, 8, 8, 8, 9, 9,10,10,
- 12,12,12,13,18, 8, 8, 8, 8, 9, 9,10,10,12,12,13,
- 13,18,11,11, 8, 8,10,10,11,11,12,11,13,12,18,11,
- 11, 9, 7,10,10,11,11,11,12,12,13,17,17,17,10,10,
- 11,11,12,12,12,10,12,12,17,17,17,11,10,11,10,13,
- 12,11,12,12,12,17,17,17,15,14,11,11,12,11,13,10,
- 13,12,17,17,17,14,14,12,10,11,11,13,13,13,13,17,
- 17,16,17,16,13,13,12,10,13,10,14,13,17,16,17,16,
- 17,13,12,12,10,13,11,14,14,
-};
-
-static const static_codebook _44c2_s_p9_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44c2_s_p9_1,
- 1, -522616832, 1620115456, 4, 0,
- (long *)_vq_quantlist__44c2_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__44c2_s_p9_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c2_s_p9_2[] = {
- 2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
- 8,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9,10, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9, 9, 9,10,10,10, 8, 7, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 9, 9,10,11,11, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9,10, 9, 9, 9,10,11,10, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 9,10,10,10,10,11,10, 8, 8, 9, 9, 9, 9,
- 9, 9,10, 9, 9,10, 9,10,11,10,11,11,11, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9,10,10,11,11,11,11,11, 9, 9,
- 9, 9, 9, 9,10, 9, 9, 9,10,10,11,11,11,11,11, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,11,11,11,11,11,
- 9, 9, 9, 9,10,10, 9, 9, 9,10,10,10,11,11,11,11,
- 11,11,11, 9, 9, 9,10, 9, 9,10,10,10,10,11,11,10,
- 11,11,11,11,10, 9,10,10, 9, 9, 9, 9,10,10,11,10,
- 11,11,11,11,11, 9, 9, 9, 9,10, 9,10,10,10,10,11,
- 10,11,11,11,11,11,10,10, 9, 9,10, 9,10,10,10,10,
- 10,10,10,11,11,11,11,11,11, 9, 9,10, 9,10, 9,10,
- 10,
-};
-
-static const static_codebook _44c2_s_p9_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44c2_s_p9_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c2_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44c2_s_short[] = {
- 11, 9,13,12,12,11,12,12,13,15, 8, 2,11, 4, 8, 5,
- 7,10,12,15,13, 7,10, 9, 8, 8,10,13,17,17,11, 4,
- 12, 5, 9, 5, 8,11,14,16,12, 6, 8, 7, 6, 6, 8,11,
- 13,16,11, 4, 9, 5, 6, 4, 6,10,13,16,11, 6,11, 7,
- 7, 6, 7,10,13,15,13, 9,12, 9, 8, 6, 8,10,12,14,
- 14,10,10, 8, 6, 5, 6, 9,11,13,15,11,11, 9, 6, 5,
- 6, 8, 9,12,
-};
-
-static const static_codebook _huff_book__44c2_s_short = {
- 2, 100,
- (char *)_huff_lengthlist__44c2_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c3_s_long[] = {
- 5, 6,11,11,11,11,10,10,12,11, 5, 2,11, 5, 6, 6,
- 7, 9,11,13,13,10, 7,11, 6, 7, 8, 9,10,12,11, 5,
- 11, 6, 8, 7, 9,11,14,15,11, 6, 6, 8, 4, 5, 7, 8,
- 10,13,10, 5, 7, 7, 5, 5, 6, 8,10,11,10, 7, 7, 8,
- 6, 5, 5, 7, 9, 9,11, 8, 8,11, 8, 7, 6, 6, 7, 9,
- 12,11,10,13, 9, 9, 7, 7, 7, 9,11,13,12,15,12,11,
- 9, 8, 8, 8,
-};
-
-static const static_codebook _huff_book__44c3_s_long = {
- 2, 100,
- (char *)_huff_lengthlist__44c3_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c3_s_p1_0[] = {
- 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 0,
- 0, 0, 5, 6, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
- 0, 0, 0, 6, 7, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0,
- 0, 0, 0, 0, 7, 8, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 7, 7, 0, 0, 0, 0,
- 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 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, 7, 8, 8, 0, 0, 0,
- 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 8, 9, 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, 6, 8, 8, 0, 0,
- 0, 0, 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
- 0, 0, 0, 0, 7, 8, 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, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
- 0, 0, 0, 0, 0, 7, 8, 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, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
- 0, 0, 0, 0, 0, 0, 8, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c3_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__44c3_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c3_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c3_s_p2_0[] = {
- 2, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0,
- 7, 8, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 7,
- 7, 0, 0, 0, 7, 7, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
- 0, 0, 5, 6, 6, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0,
- 0, 0,10,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0,
- 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5,
- 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9,
- 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7,
- 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0,
- 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8,10,10, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 0, 0, 0,
- 10,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0, 9,
- 9, 0, 0, 0, 9, 9, 0, 0, 0,10,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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c3_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c3_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c3_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c3_s_p3_0[] = {
- 2, 4, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c3_s_p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c3_s_p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c3_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c3_s_p4_0[] = {
- 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0,
- 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
- 7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0,
- 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c3_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c3_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c3_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c3_s_p5_0[] = {
- 1, 3, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 7, 8,
- 9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8,
- 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
- 9, 9, 9, 9,10,10, 0, 0, 0, 9, 9, 9, 9,10,10, 0,
- 0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0,10,10,11,
- 11,
-};
-
-static const static_codebook _44c3_s_p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c3_s_p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c3_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p6_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c3_s_p6_0[] = {
- 2, 3, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
- 10, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10,
- 11,11, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
- 10,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,11,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9,
- 9,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
- 10,10,11,10,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 8,
- 9, 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8,
- 8, 9, 9,10,10,11,11,12,11,12,12, 0, 0, 0, 0, 0,
- 9,10,10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0,
- 0, 0, 0,10,10,10,10,11,11,12,12,13,13, 0, 0, 0,
- 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0, 0,
- 0, 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0,
- 0, 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,13,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,
- 13,
-};
-
-static const static_codebook _44c3_s_p6_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c3_s_p6_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c3_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c3_s_p7_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
- 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11,
- 10,12,11,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
- 11,10,10,11,10,10, 7,11,11,11,11,11,12,11,11, 6,
- 9, 9,11,10,10,11,10,10, 6, 9, 9,11,10,10,11,10,
- 10,
-};
-
-static const static_codebook _44c3_s_p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c3_s_p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c3_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c3_s_p7_1[] = {
- 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6,
- 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
- 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
- 7, 8, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8,
- 8, 8,10,10,10, 7, 8, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
- 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 9, 8,10,10,
- 10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c3_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c3_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c3_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p8_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c3_s_p8_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
- 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 5, 7, 7, 8,
- 8, 8, 8, 9, 9,11,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,12, 0,13,
- 13, 9, 9,10,10,10,10,11,11,12,12, 0, 0, 0,10,10,
- 10,10,11,11,12,12,12,12, 0, 0, 0,10,10,10,10,11,
- 11,12,12,12,12, 0, 0, 0,14,14,11,11,11,11,12,12,
- 13,13, 0, 0, 0,14,14,11,11,11,11,12,12,13,13, 0,
- 0, 0, 0, 0,12,12,12,12,13,13,14,13, 0, 0, 0, 0,
- 0,13,13,12,12,13,12,14,13,
-};
-
-static const static_codebook _44c3_s_p8_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c3_s_p8_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c3_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p8_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c3_s_p8_1[] = {
- 2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5, 6,
- 5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c3_s_p8_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c3_s_p8_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c3_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p9_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c3_s_p9_0[] = {
- 1, 4, 4,12,12,12,12,12,12,12,12,12,12, 4, 9, 8,
- 12,12,12,12,12,12,12,12,12,12, 2, 9, 7,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,11,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _44c3_s_p9_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c3_s_p9_0,
- 1, -514332672, 1627381760, 4, 0,
- (long *)_vq_quantlist__44c3_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p9_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44c3_s_p9_1[] = {
- 1, 4, 4, 6, 6, 7, 7, 8, 7, 9, 9,10,10,10,10, 6,
- 5, 5, 7, 7, 8, 8,10, 8,11,10,12,12,13,13, 6, 5,
- 5, 7, 7, 8, 8,10, 9,11,11,12,12,13,12,18, 8, 8,
- 8, 8, 9, 9,10, 9,11,10,12,12,13,13,18, 8, 8, 8,
- 8, 9, 9,10,10,11,11,13,12,14,13,18,11,11, 9, 9,
- 10,10,11,11,11,12,13,12,13,14,18,11,11, 9, 8,11,
- 10,11,11,11,11,12,12,14,13,18,18,18,10,11,10,11,
- 12,12,12,12,13,12,14,13,18,18,18,10,11,11, 9,12,
- 11,12,12,12,13,13,13,18,18,17,14,14,11,11,12,12,
- 13,12,14,12,14,13,18,18,18,14,14,11,10,12, 9,12,
- 13,13,13,13,13,18,18,17,16,18,13,13,12,12,13,11,
- 14,12,14,14,17,18,18,17,18,13,12,13,10,12,11,14,
- 14,14,14,17,18,18,18,18,15,16,12,12,13,10,14,12,
- 14,15,18,18,18,16,17,16,14,12,11,13,10,13,13,14,
- 15,
-};
-
-static const static_codebook _44c3_s_p9_1 = {
- 2, 225,
- (char *)_vq_lengthlist__44c3_s_p9_1,
- 1, -522338304, 1620115456, 4, 0,
- (long *)_vq_quantlist__44c3_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__44c3_s_p9_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c3_s_p9_2[] = {
- 2, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
- 8,10, 6, 6, 7, 7, 8, 7, 8, 8, 8, 8, 8, 9, 9, 9,
- 9, 9,10, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 9, 9, 9, 9,
- 9, 9, 9, 9, 9,11,11,11, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9,10, 9,10,10,10,11,11, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,11,11,11, 9, 9,
- 9, 9, 9, 9,10,10, 9, 9,10, 9,11,10,11,11,11, 9,
- 9, 9, 9, 9, 9, 9, 9,10,10,10, 9,11,11,11,11,11,
- 9, 9, 9, 9,10,10, 9, 9, 9, 9,10, 9,11,11,11,11,
- 11,11,11, 9, 9, 9, 9, 9, 9,10,10,10,10,11,11,11,
- 11,11,11,11,10, 9,10,10, 9,10, 9, 9,10, 9,11,10,
- 10,11,11,11,11, 9,10, 9, 9, 9, 9,10,10,10,10,11,
- 11,11,11,11,11,10,10,10, 9, 9,10, 9,10, 9,10,10,
- 10,10,11,11,11,11,11,11,11, 9, 9, 9, 9, 9,10,10,
- 10,
-};
-
-static const static_codebook _44c3_s_p9_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44c3_s_p9_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c3_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44c3_s_short[] = {
- 10, 9,13,11,14,10,12,13,13,14, 7, 2,12, 5,10, 5,
- 7,10,12,14,12, 6, 9, 8, 7, 7, 9,11,13,16,10, 4,
- 12, 5,10, 6, 8,12,14,16,12, 6, 8, 7, 6, 5, 7,11,
- 12,16,10, 4, 8, 5, 6, 4, 6, 9,13,16,10, 6,10, 7,
- 7, 6, 7, 9,13,15,12, 9,11, 9, 8, 6, 7,10,12,14,
- 14,11,10, 9, 6, 5, 6, 9,11,13,15,13,11,10, 6, 5,
- 6, 8, 9,11,
-};
-
-static const static_codebook _huff_book__44c3_s_short = {
- 2, 100,
- (char *)_huff_lengthlist__44c3_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c4_s_long[] = {
- 4, 7,11,11,11,11,10,11,12,11, 5, 2,11, 5, 6, 6,
- 7, 9,11,12,11, 9, 6,10, 6, 7, 8, 9,10,11,11, 5,
- 11, 7, 8, 8, 9,11,13,14,11, 6, 5, 8, 4, 5, 7, 8,
- 10,11,10, 6, 7, 7, 5, 5, 6, 8, 9,11,10, 7, 8, 9,
- 6, 6, 6, 7, 8, 9,11, 9, 9,11, 7, 7, 6, 6, 7, 9,
- 12,12,10,13, 9, 8, 7, 7, 7, 8,11,13,11,14,11,10,
- 9, 8, 7, 7,
-};
-
-static const static_codebook _huff_book__44c4_s_long = {
- 2, 100,
- (char *)_huff_lengthlist__44c4_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c4_s_p1_0[] = {
- 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 0,
- 0, 0, 5, 6, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
- 0, 0, 0, 6, 8, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 6, 8, 7, 0, 0,
- 0, 0, 0, 0, 7, 8, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 7, 7, 0, 0, 0, 0,
- 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 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, 7, 8, 8, 0, 0, 0,
- 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 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, 6, 8, 8, 0, 0,
- 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
- 0, 0, 0, 0, 7, 8, 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, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
- 0, 0, 0, 0, 0, 8, 8, 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, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
- 0, 0, 0, 0, 0, 0, 8, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c4_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__44c4_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c4_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c4_s_p2_0[] = {
- 2, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0,
- 7, 7, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 7,
- 7, 0, 0, 0, 7, 7, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
- 0, 0, 5, 6, 6, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0,
- 0, 0,10,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 7, 7, 0, 0,
- 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5,
- 7, 8, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9,
- 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7,
- 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0,
- 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, 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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 7,10,10, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 0, 0, 0,
- 10,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0, 9,
- 9, 0, 0, 0, 9, 9, 0, 0, 0,10,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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c4_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c4_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c4_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c4_s_p3_0[] = {
- 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c4_s_p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c4_s_p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c4_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c4_s_p4_0[] = {
- 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0,
- 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
- 7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0,
- 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c4_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c4_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c4_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c4_s_p5_0[] = {
- 2, 3, 3, 6, 6, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
- 9, 9, 0, 4, 5, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7,
- 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10, 9, 0, 0, 0,
- 9, 8, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
- 0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,10,
- 10,
-};
-
-static const static_codebook _44c4_s_p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c4_s_p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c4_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p6_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c4_s_p6_0[] = {
- 2, 4, 4, 6, 6, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,
- 11, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11,
- 11,11, 0, 4, 4, 7, 6, 8, 8, 9, 9, 9, 9,10,10,11,
- 11,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,11,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9,
- 9,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
- 10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,
- 9,10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9,
- 9, 9, 9,10,10,11,11,11,12,12,12, 0, 0, 0, 0, 0,
- 10,10,10,10,11,11,11,11,12,12,13,12, 0, 0, 0, 0,
- 0, 0, 0,10,10,11,11,11,11,12,12,12,12, 0, 0, 0,
- 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0, 0,
- 0, 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,12,12,12,13,13,13,13,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,12,13,13,
- 13,
-};
-
-static const static_codebook _44c4_s_p6_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c4_s_p6_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c4_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c4_s_p7_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
- 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11,
- 10,11,11,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
- 11,10,10,11,10,10, 7,11,11,12,11,11,12,11,11, 6,
- 9, 9,11,10,10,11,10,10, 6, 9, 9,11,10,10,11,10,
- 10,
-};
-
-static const static_codebook _44c4_s_p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c4_s_p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c4_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c4_s_p7_1[] = {
- 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6,
- 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
- 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
- 7, 8, 8, 8, 8, 8, 8,10,10,10, 8, 7, 8, 8, 8, 8,
- 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
- 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 9, 8,10,10,
- 10,10,10, 8, 8, 8, 8, 9, 9,
-};
-
-static const static_codebook _44c4_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c4_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c4_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p8_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c4_s_p8_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
- 7, 7, 8, 8, 8, 8, 9,10,11,11, 7, 5, 5, 7, 7, 8,
- 8, 9, 9,10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9, 9, 9,10,10,10,10,11,11, 0,13,
- 13, 9, 9,10, 9,10,10,11,11,11,12, 0, 0, 0,10,10,
- 10,10,10,10,11,11,12,12, 0, 0, 0,10,10,10,10,10,
- 10,11,11,12,12, 0, 0, 0,14,14,11,11,11,11,12,12,
- 12,12, 0, 0, 0,14,14,11,11,11,11,12,12,12,13, 0,
- 0, 0, 0, 0,12,12,12,12,12,12,13,13, 0, 0, 0, 0,
- 0,13,12,12,12,12,12,13,13,
-};
-
-static const static_codebook _44c4_s_p8_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c4_s_p8_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c4_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p8_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c4_s_p8_1[] = {
- 2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 5, 4, 5, 5, 6,
- 5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c4_s_p8_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c4_s_p8_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c4_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p9_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c4_s_p9_0[] = {
- 1, 3, 3,12,12,12,12,12,12,12,12,12,12, 4, 7, 7,
- 12,12,12,12,12,12,12,12,12,12, 3, 8, 8,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,
-};
-
-static const static_codebook _44c4_s_p9_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c4_s_p9_0,
- 1, -513964032, 1628680192, 4, 0,
- (long *)_vq_quantlist__44c4_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p9_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44c4_s_p9_1[] = {
- 1, 4, 4, 5, 5, 7, 7, 9, 8,10, 9,10,10,10,10, 6,
- 5, 5, 7, 7, 9, 8,10, 9,11,10,12,12,13,13, 6, 5,
- 5, 7, 7, 9, 9,10,10,11,11,12,12,12,13,19, 8, 8,
- 8, 8, 9, 9,10,10,12,11,12,12,13,13,19, 8, 8, 8,
- 8, 9, 9,11,11,12,12,13,13,13,13,19,12,12, 9, 9,
- 11,11,11,11,12,11,13,12,13,13,18,12,12, 9, 9,11,
- 10,11,11,12,12,12,13,13,14,19,18,18,11,11,11,11,
- 12,12,13,12,13,13,14,14,16,18,18,11,11,11,10,12,
- 11,13,13,13,13,13,14,17,18,18,14,15,11,12,12,13,
- 13,13,13,14,14,14,18,18,18,15,15,12,10,13,10,13,
- 13,13,13,13,14,18,17,18,17,18,12,13,12,13,13,13,
- 14,14,16,14,18,17,18,18,17,13,12,13,10,12,12,14,
- 14,14,14,17,18,18,18,18,14,15,12,12,13,12,14,14,
- 15,15,18,18,18,17,18,15,14,12,11,12,12,14,14,14,
- 15,
-};
-
-static const static_codebook _44c4_s_p9_1 = {
- 2, 225,
- (char *)_vq_lengthlist__44c4_s_p9_1,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__44c4_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__44c4_s_p9_2[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__44c4_s_p9_2[] = {
- 2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
- 8, 9, 9, 9, 9,11, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10,10,10,11, 6, 6, 7, 7, 8,
- 8, 8, 8, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,11,
- 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,10,10,10,
- 10,10,10,10,12,11,11, 7, 7, 8, 8, 9, 9, 9, 9, 9,
- 9,10,10,10,10,10,10,10,10,12,11,12, 8, 8, 8, 8,
- 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,11,11,
- 11, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10,10,10,10,10,
- 10,10,10,11,11,12, 9, 9, 9, 9, 9, 9,10, 9,10,10,
- 10,10,10,10,10,10,10,10,11,11,11,11,11, 9, 9, 9,
- 9,10,10,10,10,10,10,10,10,10,10,10,10,11,12,11,
- 11,11, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,11,11,11,11,11, 9, 9, 9, 9,10,10,10,10,10,
- 10,10,10,10,10,10,10,11,11,11,12,12,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,11,12,11,12,
- 11,11,11, 9,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,11,12,11,11,11,11,11,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,11,11,11,12,11,11,11,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,12,11,11,12,11,
- 11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,
- 10,10,10,10,10,11,11,11,11,12,12,11,11,11,11,11,
- 11,11,10,10,10,10,10,10,10,10,12,12,12,11,11,11,
- 12,11,11,11,10,10,10,10,10,10,10,10,10,10,10,12,
- 11,12,12,12,12,12,11,12,11,11,10,10,10,10,10,10,
- 10,10,10,10,12,12,12,12,11,11,11,11,11,11,11,10,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c4_s_p9_2 = {
- 2, 441,
- (char *)_vq_lengthlist__44c4_s_p9_2,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c4_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44c4_s_short[] = {
- 4, 7,14,10,15,10,12,15,16,15, 4, 2,11, 5,10, 6,
- 8,11,14,14,14,10, 7,11, 6, 8,10,11,13,15, 9, 4,
- 11, 5, 9, 6, 9,12,14,15,14, 9, 6, 9, 4, 5, 7,10,
- 12,13, 9, 5, 7, 6, 5, 5, 7,10,13,13,10, 8, 9, 8,
- 7, 6, 8,10,14,14,13,11,10,10, 7, 7, 8,11,14,15,
- 13,12, 9, 9, 6, 5, 7,10,14,17,15,13,11,10, 6, 6,
- 7, 9,12,17,
-};
-
-static const static_codebook _huff_book__44c4_s_short = {
- 2, 100,
- (char *)_huff_lengthlist__44c4_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c5_s_long[] = {
- 3, 8, 9,13,10,12,12,12,12,12, 6, 4, 6, 8, 6, 8,
- 10,10,11,12, 8, 5, 4,10, 4, 7, 8, 9,10,11,13, 8,
- 10, 8, 9, 9,11,12,13,14,10, 6, 4, 9, 3, 5, 6, 8,
- 10,11,11, 8, 6, 9, 5, 5, 6, 7, 9,11,12, 9, 7,11,
- 6, 6, 6, 7, 8,10,12,11, 9,12, 7, 7, 6, 6, 7, 9,
- 13,12,10,13, 9, 8, 7, 7, 7, 8,11,15,11,15,11,10,
- 9, 8, 7, 7,
-};
-
-static const static_codebook _huff_book__44c5_s_long = {
- 2, 100,
- (char *)_huff_lengthlist__44c5_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c5_s_p1_0[] = {
- 2, 4, 4, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
- 0, 0, 4, 6, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 7, 8, 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, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
- 0, 0, 0, 0, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 7, 7, 0, 0, 0, 0,
- 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 7, 9, 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, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 9,10,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, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 7, 9, 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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
- 0, 0, 0, 0, 0, 8, 9,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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
- 0, 0, 0, 0, 0, 0, 9,11,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c5_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__44c5_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c5_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c5_s_p2_0[] = {
- 2, 4, 4, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0,
- 8, 7, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 8,
- 8, 0, 0, 0, 8, 7, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
- 0, 0, 4, 6, 6, 0, 0, 0, 8, 8, 0, 0, 0, 7, 8, 0,
- 0, 0,10,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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 8, 8, 0, 0,
- 0, 8, 8, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 5,
- 7, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,10,
- 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, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 5, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8,
- 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0,
- 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,10,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, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8,10,10, 0, 0, 0,10,10, 0, 0, 0, 9,10, 0, 0, 0,
- 11,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0,10,
- 10, 0, 0, 0,10,10, 0, 0, 0,10,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, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c5_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c5_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c5_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c5_s_p3_0[] = {
- 2, 4, 3, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 5, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 8, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 6, 6, 8, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c5_s_p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c5_s_p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c5_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c5_s_p4_0[] = {
- 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0,
- 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6,
- 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
- 7, 7, 0, 0, 0, 0, 0, 0, 0, 8, 7, 0, 0, 0, 0, 0,
- 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c5_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c5_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c5_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c5_s_p5_0[] = {
- 2, 4, 3, 6, 6, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
- 9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7,
- 7, 7, 9, 9, 0, 0, 0, 7, 6, 7, 7, 9, 9, 0, 0, 0,
- 8, 8, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
- 0, 0, 9, 9, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
- 10,
-};
-
-static const static_codebook _44c5_s_p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c5_s_p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c5_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p6_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c5_s_p6_0[] = {
- 2, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,10,11,
- 11, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11,
- 12,12, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,
- 11,12,12, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,12,12, 0, 0, 0, 7, 7, 9, 9,10,10,10,10,
- 11,11,11,11,12,12, 0, 0, 0, 7, 7, 8, 9,10,10,10,
- 10,11,11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,
- 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,
- 10,10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9,
- 9, 9,10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0,
- 10,10,10,10,11,11,11,12,12,12,13,13, 0, 0, 0, 0,
- 0, 0, 0,10,10,11,11,11,11,12,12,13,13, 0, 0, 0,
- 0, 0, 0, 0,11,11,11,11,12,12,12,13,13,13, 0, 0,
- 0, 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,12,13,12,13,13,13,13,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,
- 13,
-};
-
-static const static_codebook _44c5_s_p6_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c5_s_p6_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c5_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c5_s_p7_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
- 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11,
- 10,11,11,11, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
- 11,10,10,11,10,10, 7,11,11,12,11,11,12,11,11, 6,
- 9, 9,11,10,10,11,10,10, 6, 9, 9,11,10,10,11,10,
- 10,
-};
-
-static const static_codebook _44c5_s_p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c5_s_p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c5_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c5_s_p7_1[] = {
- 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6,
- 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
- 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
- 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
- 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 8, 9,10,10,10,10,10, 8, 8, 8,
- 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
- 10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c5_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c5_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c5_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p8_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c5_s_p8_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
- 7, 7, 8, 8, 8, 9,10,10,10,10, 7, 5, 5, 7, 7, 8,
- 8, 9, 9,10,10,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9, 9,10,10,10,10,10,11,11, 0,13,
- 13, 9, 9, 9, 9,10,10,11,11,11,11, 0, 0, 0,10,10,
- 10,10,10,10,11,11,11,11, 0, 0, 0,10,10,10,10,10,
- 10,11,11,12,12, 0, 0, 0,14,14,11,11,11,11,12,12,
- 12,12, 0, 0, 0,14,14,11,11,11,11,12,12,12,12, 0,
- 0, 0, 0, 0,12,12,12,12,12,12,13,13, 0, 0, 0, 0,
- 0,12,12,12,12,12,12,13,13,
-};
-
-static const static_codebook _44c5_s_p8_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c5_s_p8_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c5_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p8_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c5_s_p8_1[] = {
- 2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5, 6,
- 5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c5_s_p8_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c5_s_p8_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c5_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p9_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44c5_s_p9_0[] = {
- 1, 3, 3,13,13,13,13,13,13,13,13,13,13,13,13, 4,
- 7, 7,13,13,13,13,13,13,13,13,13,13,13,13, 3, 8,
- 6,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,12,12,12,12,12,12,12,
- 12,
-};
-
-static const static_codebook _44c5_s_p9_0 = {
- 2, 225,
- (char *)_vq_lengthlist__44c5_s_p9_0,
- 1, -512522752, 1628852224, 4, 0,
- (long *)_vq_quantlist__44c5_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p9_1[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c5_s_p9_1[] = {
- 1, 4, 4, 5, 5, 7, 7, 9, 8,10, 9,10,10,11,10,11,
- 11, 6, 5, 5, 7, 7, 8, 9,10,10,11,10,12,11,12,11,
- 13,12, 6, 5, 5, 7, 7, 9, 9,10,10,11,11,12,12,13,
- 12,13,13,18, 8, 8, 8, 8, 9, 9,10,11,11,11,12,11,
- 13,11,13,12,18, 8, 8, 8, 8,10,10,11,11,12,12,13,
- 13,13,13,13,14,18,12,12, 9, 9,11,11,11,11,12,12,
- 13,12,13,12,13,13,20,13,12, 9, 9,11,11,11,11,12,
- 12,13,13,13,14,14,13,20,18,19,11,12,11,11,12,12,
- 13,13,13,13,13,13,14,13,18,19,19,12,11,11,11,12,
- 12,13,12,13,13,13,14,14,13,18,17,19,14,15,12,12,
- 12,13,13,13,14,14,14,14,14,14,19,19,19,16,15,12,
- 11,13,12,14,14,14,13,13,14,14,14,19,18,19,18,19,
- 13,13,13,13,14,14,14,13,14,14,14,14,18,17,19,19,
- 19,13,13,13,11,13,11,13,14,14,14,14,14,19,17,17,
- 18,18,16,16,13,13,13,13,14,13,15,15,14,14,19,19,
- 17,17,18,16,16,13,11,14,10,13,12,14,14,14,14,19,
- 19,19,19,19,18,17,13,14,13,11,14,13,14,14,15,15,
- 19,19,19,17,19,18,18,14,13,12,11,14,11,15,15,15,
- 15,
-};
-
-static const static_codebook _44c5_s_p9_1 = {
- 2, 289,
- (char *)_vq_lengthlist__44c5_s_p9_1,
- 1, -520814592, 1620377600, 5, 0,
- (long *)_vq_quantlist__44c5_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__44c5_s_p9_2[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__44c5_s_p9_2[] = {
- 3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 9,11, 5, 6, 7, 7, 8, 7, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11, 5, 5, 7, 7, 7,
- 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
- 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
- 9,10, 9,10,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9,10,10,10,10,10,10,11,11,11, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,11,11,
- 11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,10,
- 10,10,10,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10,11,11,11,11,11, 9, 9, 9,
- 9, 9, 9,10, 9,10,10,10,10,10,10,10,10,11,11,11,
- 11,11, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,
- 10,10,11,11,11,11,11, 9, 9, 9, 9, 9, 9,10,10,10,
- 10,10,10,10,10,10,10,11,11,11,11,11, 9, 9,10, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,
- 11,11,11, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
- 10,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,11,11,11,11,11,11,11,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,
- 11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,
- 10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10,
- 10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
- 11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,11,
- 11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,
- 10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,10,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c5_s_p9_2 = {
- 2, 441,
- (char *)_vq_lengthlist__44c5_s_p9_2,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c5_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44c5_s_short[] = {
- 5, 8,10,14,11,11,12,16,15,17, 5, 5, 7, 9, 7, 8,
- 10,13,17,17, 7, 5, 5,10, 5, 7, 8,11,13,15,10, 8,
- 10, 8, 8, 8,11,15,18,18, 8, 5, 5, 8, 3, 4, 6,10,
- 14,16, 9, 7, 6, 7, 4, 3, 5, 9,14,18,10, 9, 8,10,
- 6, 5, 6, 9,14,18,12,12,11,12, 8, 7, 8,11,14,18,
- 14,13,12,10, 7, 5, 6, 9,14,18,14,14,13,10, 6, 5,
- 6, 8,11,16,
-};
-
-static const static_codebook _huff_book__44c5_s_short = {
- 2, 100,
- (char *)_huff_lengthlist__44c5_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c6_s_long[] = {
- 3, 8,11,13,14,14,13,13,16,14, 6, 3, 4, 7, 9, 9,
- 10,11,14,13,10, 4, 3, 5, 7, 7, 9,10,13,15,12, 7,
- 4, 4, 6, 6, 8,10,13,15,12, 8, 6, 6, 6, 6, 8,10,
- 13,14,11, 9, 7, 6, 6, 6, 7, 8,12,11,13,10, 9, 8,
- 7, 6, 6, 7,11,11,13,11,10, 9, 9, 7, 7, 6,10,11,
- 13,13,13,13,13,11, 9, 8,10,12,12,15,15,16,15,12,
- 11,10,10,12,
-};
-
-static const static_codebook _huff_book__44c6_s_long = {
- 2, 100,
- (char *)_huff_lengthlist__44c6_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c6_s_p1_0[] = {
- 1, 5, 5, 0, 5, 5, 0, 5, 5, 5, 8, 7, 0, 9, 9, 0,
- 9, 8, 5, 7, 8, 0, 9, 9, 0, 8, 9, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9,
- 0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 9, 9, 0, 8, 8, 0, 8, 8, 5, 9, 9, 0, 8, 8, 0, 8,
- 8,
-};
-static const static_codebook _44c6_s_p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c6_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c6_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c6_s_p2_0[] = {
- 3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0,
- 7, 7, 9, 9, 0, 0, 0, 9, 9, 5, 7, 7, 9, 9, 0, 8,
- 8,10,10, 0, 8, 7,10, 9, 0,10,10,11,11, 0, 0, 0,
- 11,11, 5, 7, 7, 9, 9, 0, 8, 8,10,10, 0, 7, 8, 9,
- 10, 0,10,10,11,11, 0, 0, 0,11,11, 8, 9, 9,11,11,
- 0,11,11,12,12, 0,11,10,12,12, 0,13,14,14,14, 0,
- 0, 0,14,13, 8, 9, 9,11,11, 0,11,11,12,12, 0,10,
- 11,12,12, 0,14,13,14,14, 0, 0, 0,13,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, 5, 8, 7,11,10, 0, 7, 7,10,10,
- 0, 7, 7,10,10, 0, 9, 9,11,10, 0, 0, 0,11,11, 5,
- 7, 8,10,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9,
- 9,10,11, 0, 0, 0,11,11, 8,10, 9,12,12, 0,10,10,
- 12,12, 0,10,10,12,12, 0,12,12,13,13, 0, 0, 0,13,
- 13, 8, 9,10,12,12, 0,10,10,11,12, 0,10,10,12,12,
- 0,12,12,13,13, 0, 0, 0,13,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, 5, 8, 8,11,11, 0, 7, 7,10,10, 0, 7, 7,
- 10,10, 0, 9, 9,10,11, 0, 0, 0,11,10, 5, 8, 8,11,
- 11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 9,11,11,
- 0, 0, 0,10,11, 8,10,10,12,12, 0,10,10,12,12, 0,
- 10,10,12,12, 0,12,13,13,13, 0, 0, 0,14,13, 8,10,
- 10,12,12, 0,10,10,12,12, 0,10,10,12,12, 0,13,12,
- 13,13, 0, 0, 0,13,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,
- 7,10,10,14,13, 0, 9, 9,13,12, 0, 9, 9,12,12, 0,
- 10,10,12,12, 0, 0, 0,12,12, 7,10,10,13,14, 0, 9,
- 9,12,13, 0, 9, 9,12,12, 0,10,10,12,12, 0, 0, 0,
- 12,12, 9,11,11,14,13, 0,11,10,14,13, 0,11,11,13,
- 13, 0,12,12,13,13, 0, 0, 0,13,13, 9,11,11,13,14,
- 0,10,11,13,14, 0,11,11,13,13, 0,12,12,13,13, 0,
- 0, 0,13,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, 9,
- 11,11,14,14, 0,11,11,13,13, 0,11,10,13,13, 0,12,
- 12,13,13, 0, 0, 0,13,13, 9,11,11,14,14, 0,11,11,
- 13,13, 0,10,11,13,13, 0,12,12,14,13, 0, 0, 0,13,
- 13,
-};
-
-static const static_codebook _44c6_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c6_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c6_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c6_s_p3_0[] = {
- 2, 3, 4, 6, 6, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
- 9,10, 0, 4, 4, 6, 6, 7, 7,10, 9, 0, 5, 5, 7, 7,
- 8, 8,10,10, 0, 0, 0, 7, 6, 8, 8,10,10, 0, 0, 0,
- 7, 7, 9, 9,11,11, 0, 0, 0, 7, 7, 9, 9,11,11, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c6_s_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c6_s_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c6_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p4_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c6_s_p4_0[] = {
- 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9,10,10,
- 10, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,10,
- 11,11, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,
- 10,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,11,11, 0, 0, 0, 7, 7, 9, 9,10,10,10,10,
- 11,11,11,11,12,12, 0, 0, 0, 7, 7, 9, 9,10,10,10,
- 10,11,11,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,
- 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8, 8, 9,
- 9,10,10,11,11,12,12,12,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c6_s_p4_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c6_s_p4_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c6_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c6_s_p5_0[] = {
- 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 6, 9, 9,10,10,
- 10, 9, 4, 6, 6, 9,10, 9,10, 9,10, 6, 9, 9,10,12,
- 11,10,11,11, 7,10, 9,11,12,12,12,12,12, 7,10,10,
- 11,12,12,12,12,12, 6,10,10,10,12,12,11,12,12, 7,
- 9,10,11,12,12,12,12,12, 7,10, 9,12,12,12,12,12,
- 12,
-};
-
-static const static_codebook _44c6_s_p5_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c6_s_p5_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c6_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p5_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c6_s_p5_1[] = {
- 3, 5, 4, 6, 6, 7, 7, 8, 8, 8, 8,11, 4, 4, 6, 6,
- 7, 7, 8, 8, 8, 8,11, 4, 4, 6, 6, 7, 7, 8, 8, 8,
- 8,11, 6, 6, 6, 6, 8, 8, 8, 8, 9, 9,11,11,11, 6,
- 6, 7, 8, 8, 8, 8, 9,11,11,11, 7, 7, 8, 8, 8, 8,
- 8, 8,11,11,11, 7, 7, 8, 8, 8, 8, 8, 8,11,11,11,
- 8, 8, 8, 8, 8, 8, 8, 8,11,11,11,10,10, 8, 8, 8,
- 8, 8, 8,11,11,11,10,10, 8, 8, 8, 8, 8, 8,11,11,
- 11,10,10, 7, 7, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c6_s_p5_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c6_s_p5_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c6_s_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c6_s_p6_0[] = {
- 1, 4, 4, 6, 6, 8, 8, 8, 8,10, 9,10,10, 6, 5, 5,
- 7, 7, 9, 9, 9, 9,10,10,11,11, 6, 5, 5, 7, 7, 9,
- 9,10, 9,11,10,11,11, 0, 6, 6, 7, 7, 9, 9,10,10,
- 11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
- 12, 0,11,11, 8, 8,10,10,11,11,12,12,12,12, 0,11,
- 12, 9, 8,10,10,11,11,12,12,13,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,
-};
-
-static const static_codebook _44c6_s_p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c6_s_p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c6_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c6_s_p6_1[] = {
- 3, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 6,
- 5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c6_s_p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c6_s_p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c6_s_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c6_s_p7_0[] = {
- 1, 4, 4, 6, 6, 8, 8, 8, 8,10,10,11,10, 6, 5, 5,
- 7, 7, 8, 8, 9, 9,10,10,12,11, 6, 5, 5, 7, 7, 8,
- 8, 9, 9,10,10,12,11,21, 7, 7, 7, 7, 9, 9,10,10,
- 11,11,12,12,21, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
- 12,21,12,12, 9, 9,10,10,11,11,11,11,12,12,21,12,
- 12, 9, 9,10,10,11,11,12,12,12,12,21,21,21,11,11,
- 10,10,11,12,12,12,13,13,21,21,21,11,11,10,10,12,
- 12,12,12,13,13,21,21,21,15,15,11,11,12,12,13,13,
- 13,13,21,21,21,15,16,11,11,12,12,13,13,14,14,21,
- 21,21,21,20,13,13,13,13,13,13,14,14,20,20,20,20,
- 20,13,13,13,13,13,13,14,14,
-};
-
-static const static_codebook _44c6_s_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c6_s_p7_0,
- 1, -523206656, 1618345984, 4, 0,
- (long *)_vq_quantlist__44c6_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c6_s_p7_1[] = {
- 3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 9, 5, 5, 6, 6,
- 7, 7, 7, 7, 8, 7, 8, 5, 5, 6, 6, 7, 7, 7, 7, 7,
- 7, 9, 6, 6, 7, 7, 7, 7, 8, 7, 7, 8, 9, 9, 9, 7,
- 7, 7, 7, 7, 7, 7, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8,
- 8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9,
- 8, 8, 8, 8, 7, 7, 8, 8, 9, 9, 9, 9, 8, 8, 8, 7,
- 7, 8, 8, 9, 9, 9, 8, 8, 8, 8, 7, 7, 8, 8, 9, 9,
- 9, 8, 8, 7, 7, 7, 7, 8, 8,
-};
-
-static const static_codebook _44c6_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c6_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c6_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p8_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44c6_s_p8_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 7, 7, 8, 7, 9, 8,10, 9, 6,
- 5, 5, 8, 8, 9, 9, 8, 8, 9, 9,11,10,11,10, 6, 5,
- 5, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,11,18, 8, 8,
- 9, 8,10,10, 9, 9,10,10,10,10,11,10,18, 8, 8, 9,
- 9,10,10, 9, 9,10,10,11,11,12,12,18,12,13, 9,10,
- 10,10, 9,10,10,10,11,11,12,11,18,13,13, 9, 9,10,
- 10,10,10,10,10,11,11,12,12,18,18,18,10,10, 9, 9,
- 11,11,11,11,11,12,12,12,18,18,18,10, 9,10, 9,11,
- 10,11,11,11,11,13,12,18,18,18,14,13,10,10,11,11,
- 12,12,12,12,12,12,18,18,18,14,13,10,10,11,10,12,
- 12,12,12,12,12,18,18,18,18,18,12,12,11,11,12,12,
- 13,13,13,14,18,18,18,18,18,12,12,11,11,12,11,13,
- 13,14,13,18,18,18,18,18,16,16,11,12,12,13,13,13,
- 14,13,18,18,18,18,18,16,15,12,11,12,11,13,11,15,
- 14,
-};
-
-static const static_codebook _44c6_s_p8_0 = {
- 2, 225,
- (char *)_vq_lengthlist__44c6_s_p8_0,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__44c6_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p8_1[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__44c6_s_p8_1[] = {
- 3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
- 8, 8, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9,10,
- 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9,10,11,11, 8, 7, 8, 8, 8, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,11, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,
- 11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,11,11,11,11,11, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,11,11,11,
- 11,11, 9, 9, 9, 9, 9, 9,10, 9, 9,10, 9,10, 9, 9,
- 10, 9,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9,10,10,
- 10,10, 9,10,10, 9,10,11,11,11,11,11, 9, 9, 9, 9,
- 10,10,10, 9,10,10,10,10, 9,10,10, 9,11,11,11,11,
- 11,11,11, 9, 9, 9, 9,10,10,10,10, 9,10,10,10,10,
- 10,11,11,11,11,11,11,11,10, 9,10,10,10,10,10,10,
- 10, 9,10, 9,10,10,11,11,11,11,11,11,11,10, 9,10,
- 9,10,10, 9,10,10,10,10,10,10,10,11,11,11,11,11,
- 11,11,10,10,10,10,10,10,10, 9,10,10,10,10,10, 9,
- 11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,
- 10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10,
- 10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
- 11,11,11,10,10,10,10,10,10,10,10,10, 9,10,10,11,
- 11,11,11,11,11,11,11,11,10,10,10, 9,10,10,10,10,
- 10,10,10,10,10,11,11,11,11,11,11,11,11,10,11, 9,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c6_s_p8_1 = {
- 2, 441,
- (char *)_vq_lengthlist__44c6_s_p8_1,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c6_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p9_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c6_s_p9_0[] = {
- 1, 3, 3,11,11,11,11,11,11,11,11,11,11, 4, 7, 7,
- 11,11,11,11,11,11,11,11,11,11, 5, 8, 9,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c6_s_p9_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c6_s_p9_0,
- 1, -511845376, 1630791680, 4, 0,
- (long *)_vq_quantlist__44c6_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p9_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c6_s_p9_1[] = {
- 1, 4, 4, 7, 7, 7, 7, 7, 6, 8, 8, 8, 8, 6, 6, 6,
- 8, 8, 8, 8, 8, 7, 9, 8,10,10, 5, 6, 6, 8, 8, 9,
- 9, 8, 8,10,10,10,10,16, 9, 9, 9, 9, 9, 9, 9, 8,
- 10, 9,11,11,16, 8, 9, 9, 9, 9, 9, 9, 9,10,10,11,
- 11,16,13,13, 9, 9,10, 9, 9,10,11,11,11,12,16,13,
- 14, 9, 8,10, 8, 9, 9,10,10,12,11,16,14,16, 9, 9,
- 9, 9,11,11,12,11,12,11,16,16,16, 9, 7, 9, 6,11,
- 11,11,10,11,11,16,16,16,11,12, 9,10,11,11,12,11,
- 13,13,16,16,16,12,11,10, 7,12,10,12,12,12,12,16,
- 16,15,16,16,10,11,10,11,13,13,14,12,16,16,16,15,
- 15,12,10,11,11,13,11,12,13,
-};
-
-static const static_codebook _44c6_s_p9_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44c6_s_p9_1,
- 1, -518889472, 1622704128, 4, 0,
- (long *)_vq_quantlist__44c6_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__44c6_s_p9_2[] = {
- 24,
- 23,
- 25,
- 22,
- 26,
- 21,
- 27,
- 20,
- 28,
- 19,
- 29,
- 18,
- 30,
- 17,
- 31,
- 16,
- 32,
- 15,
- 33,
- 14,
- 34,
- 13,
- 35,
- 12,
- 36,
- 11,
- 37,
- 10,
- 38,
- 9,
- 39,
- 8,
- 40,
- 7,
- 41,
- 6,
- 42,
- 5,
- 43,
- 4,
- 44,
- 3,
- 45,
- 2,
- 46,
- 1,
- 47,
- 0,
- 48,
-};
-
-static const char _vq_lengthlist__44c6_s_p9_2[] = {
- 2, 4, 3, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _44c6_s_p9_2 = {
- 1, 49,
- (char *)_vq_lengthlist__44c6_s_p9_2,
- 1, -526909440, 1611661312, 6, 0,
- (long *)_vq_quantlist__44c6_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44c6_s_short[] = {
- 3, 9,11,11,13,14,19,17,17,19, 5, 4, 5, 8,10,10,
- 13,16,18,19, 7, 4, 4, 5, 8, 9,12,14,17,19, 8, 6,
- 5, 5, 7, 7,10,13,16,18,10, 8, 7, 6, 5, 5, 8,11,
- 17,19,11, 9, 7, 7, 5, 4, 5, 8,17,19,13,11, 8, 7,
- 7, 5, 5, 7,16,18,14,13, 8, 6, 6, 5, 5, 7,16,18,
- 18,16,10, 8, 8, 7, 7, 9,16,18,18,18,12,10,10, 9,
- 9,10,17,18,
-};
-
-static const static_codebook _huff_book__44c6_s_short = {
- 2, 100,
- (char *)_huff_lengthlist__44c6_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c7_s_long[] = {
- 3, 8,11,13,15,14,14,13,15,14, 6, 4, 5, 7, 9,10,
- 11,11,14,13,10, 4, 3, 5, 7, 8, 9,10,13,13,12, 7,
- 4, 4, 5, 6, 8, 9,12,14,13, 9, 6, 5, 5, 6, 8, 9,
- 12,14,12, 9, 7, 6, 5, 5, 6, 8,11,11,12,11, 9, 8,
- 7, 6, 6, 7,10,11,13,11,10, 9, 8, 7, 6, 6, 9,11,
- 13,13,12,12,12,10, 9, 8, 9,11,12,14,15,15,14,12,
- 11,10,10,12,
-};
-
-static const static_codebook _huff_book__44c7_s_long = {
- 2, 100,
- (char *)_huff_lengthlist__44c7_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c7_s_p1_0[] = {
- 1, 5, 5, 0, 5, 5, 0, 5, 5, 5, 8, 7, 0, 9, 9, 0,
- 9, 8, 5, 7, 8, 0, 9, 9, 0, 8, 9, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 9, 9, 0, 8, 8, 0, 8, 8, 5, 8, 9,
- 0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 9, 9, 0, 8, 8, 0, 8, 8, 5, 8, 9, 0, 8, 8, 0, 8,
- 8,
-};
-
-static const static_codebook _44c7_s_p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c7_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c7_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c7_s_p2_0[] = {
- 3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0,
- 7, 7, 9, 9, 0, 0, 0, 9, 9, 5, 7, 7, 9, 9, 0, 8,
- 8,10,10, 0, 8, 7,10, 9, 0,10,10,11,11, 0, 0, 0,
- 11,11, 5, 7, 7, 9, 9, 0, 8, 8,10,10, 0, 7, 8, 9,
- 10, 0,10,10,11,11, 0, 0, 0,11,11, 8, 9, 9,11,10,
- 0,11,11,12,12, 0,11,10,12,12, 0,13,14,14,14, 0,
- 0, 0,14,13, 8, 9, 9,10,11, 0,11,11,12,12, 0,10,
- 11,12,12, 0,13,13,14,14, 0, 0, 0,13,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, 5, 8, 7,11,10, 0, 7, 7,10,10,
- 0, 7, 7,10,10, 0, 9, 9,11,10, 0, 0, 0,11,11, 5,
- 7, 8,10,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9,
- 9,10,11, 0, 0, 0,11,11, 8,10, 9,12,12, 0,10,10,
- 12,12, 0,10,10,12,12, 0,12,12,13,13, 0, 0, 0,13,
- 13, 8, 9,10,12,12, 0,10,10,12,12, 0,10,10,11,12,
- 0,12,12,13,13, 0, 0, 0,13,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, 5, 8, 8,11,11, 0, 7, 7,10,10, 0, 7, 7,
- 10,10, 0, 9, 9,10,11, 0, 0, 0,11,10, 5, 8, 8,10,
- 11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 9,11,10,
- 0, 0, 0,10,11, 9,10,10,12,12, 0,10,10,12,12, 0,
- 10,10,12,12, 0,12,13,13,13, 0, 0, 0,13,12, 9,10,
- 10,12,12, 0,10,10,12,12, 0,10,10,12,12, 0,13,12,
- 13,13, 0, 0, 0,12,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,
- 7,10,10,14,13, 0, 9, 9,12,12, 0, 9, 9,12,12, 0,
- 10,10,12,12, 0, 0, 0,12,12, 7,10,10,13,14, 0, 9,
- 9,12,13, 0, 9, 9,12,12, 0,10,10,12,12, 0, 0, 0,
- 12,12, 9,11,11,14,13, 0,11,10,13,12, 0,11,11,13,
- 13, 0,12,12,13,13, 0, 0, 0,13,13, 9,11,11,13,14,
- 0,10,11,12,13, 0,11,11,13,13, 0,12,12,13,13, 0,
- 0, 0,13,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, 9,
- 11,11,14,14, 0,10,11,13,13, 0,11,10,13,13, 0,12,
- 12,13,13, 0, 0, 0,13,12, 9,11,11,14,14, 0,11,10,
- 13,13, 0,10,11,13,13, 0,12,12,14,13, 0, 0, 0,13,
- 13,
-};
-
-static const static_codebook _44c7_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c7_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c7_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c7_s_p3_0[] = {
- 2, 4, 4, 5, 5, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
- 9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 6, 6,
- 8, 8,10,10, 0, 0, 0, 6, 6, 8, 8,10,10, 0, 0, 0,
- 7, 7, 9, 9,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c7_s_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c7_s_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c7_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p4_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c7_s_p4_0[] = {
- 3, 4, 4, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
- 11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,
- 12,12, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
- 11,12,12, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,
- 11,12,12,12, 0, 0, 0, 6, 6, 8, 7, 9, 9, 9, 9,10,
- 10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,
- 11,11,12,12,13,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,
- 10,11,11,12,12,12,13, 0, 0, 0, 7, 7, 8, 8, 9, 9,
- 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9,
- 9,10,10,11,11,12,12,13,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c7_s_p4_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c7_s_p4_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c7_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c7_s_p5_0[] = {
- 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 7,10,10,10,10,
- 10, 9, 4, 6, 6,10,10,10,10, 9,10, 5,10,10, 9,11,
- 12,10,11,12, 7,10,10,11,12,12,12,12,12, 7,10,10,
- 11,12,12,12,12,12, 6,10,10,10,12,12,11,12,12, 7,
- 10,10,12,12,12,12,11,12, 7,10,10,11,12,12,12,12,
- 12,
-};
-
-static const static_codebook _44c7_s_p5_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c7_s_p5_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c7_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p5_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c7_s_p5_1[] = {
- 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11, 4, 4, 6, 6,
- 7, 7, 8, 8, 9, 9,11, 4, 4, 6, 6, 7, 7, 8, 8, 9,
- 9,12, 5, 5, 6, 6, 7, 7, 9, 9, 9, 9,12,12,12, 6,
- 6, 7, 7, 9, 9, 9, 9,11,11,11, 7, 7, 7, 7, 8, 8,
- 9, 9,11,11,11, 7, 7, 7, 7, 8, 8, 9, 9,11,11,11,
- 7, 7, 8, 8, 8, 8, 9, 9,11,11,11,11,11, 8, 8, 8,
- 8, 8, 9,11,11,11,11,11, 8, 8, 8, 8, 8, 8,11,11,
- 11,11,11, 7, 7, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c7_s_p5_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c7_s_p5_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c7_s_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c7_s_p6_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 8, 7, 9, 8,10,10, 6, 5, 5,
- 7, 7, 8, 8, 9, 9, 9,10,11,11, 7, 5, 5, 7, 7, 8,
- 8, 9, 9,10,10,11,11, 0, 7, 7, 7, 7, 9, 8, 9, 9,
- 10,10,11,11, 0, 8, 8, 7, 7, 8, 9, 9, 9,10,10,11,
- 11, 0,11,11, 9, 9,10,10,11,10,11,11,12,12, 0,12,
- 12, 9, 9,10,10,11,11,11,11,12,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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44c7_s_p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c7_s_p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c7_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c7_s_p6_1[] = {
- 3, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 6,
- 5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c7_s_p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c7_s_p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c7_s_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c7_s_p7_0[] = {
- 1, 4, 4, 6, 6, 7, 8, 9, 9,10,10,12,11, 6, 5, 5,
- 7, 7, 8, 8, 9,10,11,11,12,12, 7, 5, 5, 7, 7, 8,
- 8,10,10,11,11,12,12,20, 7, 7, 7, 7, 8, 9,10,10,
- 11,11,12,13,20, 7, 7, 7, 7, 9, 9,10,10,11,12,13,
- 13,20,11,11, 8, 8, 9, 9,11,11,12,12,13,13,20,11,
- 11, 8, 8, 9, 9,11,11,12,12,13,13,20,20,20,10,10,
- 10,10,12,12,13,13,13,13,20,20,20,10,10,10,10,12,
- 12,13,13,13,14,20,20,20,14,14,11,11,12,12,13,13,
- 14,14,20,20,20,14,14,11,11,12,12,13,13,14,14,20,
- 20,20,20,19,13,13,13,13,14,14,15,14,19,19,19,19,
- 19,13,13,13,13,14,14,15,15,
-};
-
-static const static_codebook _44c7_s_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c7_s_p7_0,
- 1, -523206656, 1618345984, 4, 0,
- (long *)_vq_quantlist__44c7_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c7_s_p7_1[] = {
- 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 8, 6, 6, 7, 7,
- 7, 7, 7, 7, 7, 7, 8, 6, 6, 6, 7, 7, 7, 7, 7, 7,
- 7, 8, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7,
- 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
- 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
- 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8,
- 8, 8, 8, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _44c7_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c7_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c7_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p8_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44c7_s_p8_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 8, 7, 9, 8, 9, 9,10,10, 6,
- 5, 5, 7, 7, 9, 9, 8, 8,10, 9,11,10,12,11, 6, 5,
- 5, 8, 7, 9, 9, 8, 8,10,10,11,11,12,11,19, 8, 8,
- 8, 8,10,10, 9, 9,10,10,11,11,12,11,19, 8, 8, 8,
- 8,10,10, 9, 9,10,10,11,11,12,12,19,12,12, 9, 9,
- 10,10, 9,10,10,10,11,11,12,12,19,12,12, 9, 9,10,
- 10,10,10,10,10,12,12,12,12,19,19,19, 9, 9, 9, 9,
- 11,10,11,11,12,11,13,13,19,19,19, 9, 9, 9, 9,11,
- 10,11,11,11,12,13,13,19,19,19,13,13,10,10,11,11,
- 12,12,12,12,13,12,19,19,19,14,13,10,10,11,11,12,
- 12,12,13,13,13,19,19,19,19,19,12,12,12,11,12,13,
- 14,13,13,13,19,19,19,19,19,12,12,12,11,12,12,13,
- 14,13,14,19,19,19,19,19,16,16,12,13,12,13,13,14,
- 15,14,19,18,18,18,18,16,15,12,11,12,11,14,12,14,
- 14,
-};
-
-static const static_codebook _44c7_s_p8_0 = {
- 2, 225,
- (char *)_vq_lengthlist__44c7_s_p8_0,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__44c7_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p8_1[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__44c7_s_p8_1[] = {
- 3, 5, 5, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
- 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
- 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
- 10, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10,11,10,10,10, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9,10, 9, 9,10, 9, 9,10,11,10,
- 11,10, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9,10, 9, 9,
- 9, 9,11,10,11,10,10, 9, 9, 9, 9, 9, 9,10, 9, 9,
- 10, 9, 9,10, 9, 9,10,11,10,10,11,10, 9, 9, 9, 9,
- 9,10,10, 9,10,10,10,10, 9,10,10,10,10,10,10,11,
- 11,11,10, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,11,11,10,10,10,10,10,10,10,10,10,10,10,
- 10, 9,10,10, 9,10,11,11,10,11,10,11,10, 9,10,10,
- 9,10,10,10,10,10,10,10,10,10,10,11,11,11,11,10,
- 11,11,10,10,10,10,10,10, 9,10, 9,10,10, 9,10, 9,
- 10,10,10,11,10,11,10,11,11,10,10,10,10,10,10, 9,
- 10,10,10,10,10,10,10,11,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,11,10,11,
- 11,10,10,10,10, 9, 9,10,10, 9, 9,10, 9,10,10,10,
- 10,11,11,10,10,10,10,10,10,10, 9, 9,10,10,10, 9,
- 9,10,10,10,10,10,11,10,11,10,10,10,10,10,10, 9,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c7_s_p8_1 = {
- 2, 441,
- (char *)_vq_lengthlist__44c7_s_p8_1,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c7_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p9_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c7_s_p9_0[] = {
- 1, 3, 3,11,11,11,11,11,11,11,11,11,11, 4, 6, 6,
- 11,11,11,11,11,11,11,11,11,11, 4, 7, 7,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _44c7_s_p9_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c7_s_p9_0,
- 1, -511845376, 1630791680, 4, 0,
- (long *)_vq_quantlist__44c7_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p9_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c7_s_p9_1[] = {
- 1, 4, 4, 7, 7, 7, 7, 7, 6, 8, 8, 8, 8, 6, 6, 6,
- 8, 8, 9, 8, 8, 7, 9, 8,11,10, 5, 6, 6, 8, 8, 9,
- 8, 8, 8,10, 9,11,11,16, 8, 8, 9, 8, 9, 9, 9, 8,
- 10, 9,11,10,16, 8, 8, 9, 9,10,10, 9, 9,10,10,11,
- 11,16,13,13, 9, 9,10,10, 9,10,11,11,12,11,16,13,
- 13, 9, 8,10, 9,10,10,10,10,11,11,16,14,16, 8, 9,
- 9, 9,11,10,11,11,12,11,16,16,16, 9, 7,10, 7,11,
- 10,11,11,12,11,16,16,16,12,12, 9,10,11,11,12,11,
- 12,12,16,16,16,12,10,10, 7,11, 8,12,11,12,12,16,
- 16,15,16,16,11,12,10,10,12,11,12,12,16,16,16,15,
- 15,11,11,10,10,12,12,12,12,
-};
-
-static const static_codebook _44c7_s_p9_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44c7_s_p9_1,
- 1, -518889472, 1622704128, 4, 0,
- (long *)_vq_quantlist__44c7_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__44c7_s_p9_2[] = {
- 24,
- 23,
- 25,
- 22,
- 26,
- 21,
- 27,
- 20,
- 28,
- 19,
- 29,
- 18,
- 30,
- 17,
- 31,
- 16,
- 32,
- 15,
- 33,
- 14,
- 34,
- 13,
- 35,
- 12,
- 36,
- 11,
- 37,
- 10,
- 38,
- 9,
- 39,
- 8,
- 40,
- 7,
- 41,
- 6,
- 42,
- 5,
- 43,
- 4,
- 44,
- 3,
- 45,
- 2,
- 46,
- 1,
- 47,
- 0,
- 48,
-};
-
-static const char _vq_lengthlist__44c7_s_p9_2[] = {
- 2, 4, 3, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _44c7_s_p9_2 = {
- 1, 49,
- (char *)_vq_lengthlist__44c7_s_p9_2,
- 1, -526909440, 1611661312, 6, 0,
- (long *)_vq_quantlist__44c7_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44c7_s_short[] = {
- 4,11,12,14,15,15,17,17,18,18, 5, 6, 6, 8, 9,10,
- 13,17,18,19, 7, 5, 4, 6, 8, 9,11,15,19,19, 8, 6,
- 5, 5, 6, 7,11,14,16,17, 9, 7, 7, 6, 7, 7,10,13,
- 15,19,10, 8, 7, 6, 7, 6, 7, 9,14,16,12,10, 9, 7,
- 7, 6, 4, 5,10,15,14,13,11, 7, 6, 6, 4, 2, 7,13,
- 16,16,15, 9, 8, 8, 8, 6, 9,13,19,19,17,12,11,10,
- 10, 9,11,14,
-};
-
-static const static_codebook _huff_book__44c7_s_short = {
- 2, 100,
- (char *)_huff_lengthlist__44c7_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c8_s_long[] = {
- 3, 8,12,13,14,14,14,13,14,14, 6, 4, 5, 8,10,10,
- 11,11,14,13, 9, 5, 4, 5, 7, 8, 9,10,13,13,12, 7,
- 5, 4, 5, 6, 8, 9,12,13,13, 9, 6, 5, 5, 5, 7, 9,
- 11,14,12,10, 7, 6, 5, 4, 6, 7,10,11,12,11, 9, 8,
- 7, 5, 5, 6,10,10,13,12,10, 9, 8, 6, 6, 5, 8,10,
- 14,13,12,12,11,10, 9, 7, 8,10,12,13,14,14,13,12,
- 11, 9, 9,10,
-};
-
-static const static_codebook _huff_book__44c8_s_long = {
- 2, 100,
- (char *)_huff_lengthlist__44c8_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c8_s_p1_0[] = {
- 1, 5, 5, 0, 5, 5, 0, 5, 5, 5, 7, 7, 0, 9, 8, 0,
- 9, 8, 6, 7, 7, 0, 8, 9, 0, 8, 9, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9,
- 0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9, 0, 8, 8, 0, 8,
- 8,
-};
-
-static const static_codebook _44c8_s_p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c8_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c8_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c8_s_p2_0[] = {
- 3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0,
- 7, 7, 9, 9, 0, 0, 0, 9, 9, 5, 7, 7, 9, 9, 0, 8,
- 7,10, 9, 0, 8, 7,10, 9, 0,10,10,11,11, 0, 0, 0,
- 11,11, 5, 7, 7, 9, 9, 0, 7, 8, 9,10, 0, 7, 8, 9,
- 10, 0,10,10,11,11, 0, 0, 0,11,11, 8, 9, 9,11,10,
- 0,11,10,12,11, 0,11,10,12,12, 0,13,13,14,14, 0,
- 0, 0,14,13, 8, 9, 9,10,11, 0,10,11,12,12, 0,10,
- 11,12,12, 0,13,13,14,14, 0, 0, 0,13,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, 5, 8, 7,11,10, 0, 7, 7,10,10,
- 0, 7, 7,10,10, 0, 9, 9,10,10, 0, 0, 0,11,10, 5,
- 7, 8,10,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9,
- 9,10,10, 0, 0, 0,10,10, 8,10, 9,12,12, 0,10,10,
- 12,11, 0,10,10,12,12, 0,12,12,13,12, 0, 0, 0,13,
- 12, 8, 9,10,12,12, 0,10,10,11,12, 0,10,10,11,12,
- 0,12,12,13,13, 0, 0, 0,12,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, 6, 8, 7,11,10, 0, 7, 7,10,10, 0, 7, 7,
- 10,10, 0, 9, 9,10,11, 0, 0, 0,10,10, 6, 7, 8,10,
- 11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 9,10,10,
- 0, 0, 0,10,10, 9,10, 9,12,12, 0,10,10,12,12, 0,
- 10,10,12,11, 0,12,12,13,13, 0, 0, 0,13,12, 8, 9,
- 10,12,12, 0,10,10,12,12, 0,10,10,11,12, 0,12,12,
- 13,13, 0, 0, 0,12,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,
- 7,10,10,13,13, 0, 9, 9,12,12, 0, 9, 9,12,12, 0,
- 10,10,12,12, 0, 0, 0,12,12, 7,10,10,13,13, 0, 9,
- 9,12,12, 0, 9, 9,12,12, 0,10,10,12,12, 0, 0, 0,
- 12,12, 9,11,11,14,13, 0,10,10,13,12, 0,11,10,13,
- 12, 0,12,12,13,12, 0, 0, 0,13,13, 9,11,11,13,14,
- 0,10,11,12,13, 0,10,11,13,13, 0,12,12,12,13, 0,
- 0, 0,13,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, 9,
- 11,11,14,14, 0,10,11,13,13, 0,11,10,13,13, 0,11,
- 12,13,13, 0, 0, 0,13,12, 9,11,11,14,14, 0,11,10,
- 13,13, 0,10,11,13,13, 0,12,12,13,13, 0, 0, 0,12,
- 13,
-};
-
-static const static_codebook _44c8_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c8_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c8_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c8_s_p3_0[] = {
- 2, 4, 4, 5, 5, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
- 9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 6, 6,
- 8, 8,10,10, 0, 0, 0, 6, 6, 8, 8,10,10, 0, 0, 0,
- 7, 7, 9, 9,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c8_s_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c8_s_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c8_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p4_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c8_s_p4_0[] = {
- 3, 4, 4, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
- 11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 8,10,10,11,11,
- 11,11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
- 11,11,11, 0, 6, 5, 6, 6, 7, 7, 9, 9, 9, 9,10,10,
- 11,11,12,12, 0, 0, 0, 6, 6, 7, 7, 9, 9, 9, 9,10,
- 10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,
- 11,11,11,12,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,
- 10,11,11,11,12,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,
- 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9,
- 9,10,10,11,11,12,12,13,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c8_s_p4_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c8_s_p4_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c8_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c8_s_p5_0[] = {
- 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 7, 6,10,10,10,10,
- 10,10, 4, 6, 6,10,10,10,10, 9,10, 5,10,10, 9,11,
- 11,10,11,11, 7,10,10,11,12,12,12,12,12, 7,10,10,
- 11,12,12,12,12,12, 6,10,10,10,12,12,10,12,12, 7,
- 10,10,11,12,12,12,12,12, 7,10,10,11,12,12,12,12,
- 12,
-};
-
-static const static_codebook _44c8_s_p5_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c8_s_p5_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c8_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p5_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c8_s_p5_1[] = {
- 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11, 4, 5, 6, 6,
- 7, 7, 8, 8, 8, 8,11, 5, 5, 6, 6, 7, 7, 8, 8, 8,
- 9,12, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,12,12,12, 6,
- 6, 7, 7, 8, 8, 9, 9,11,11,11, 6, 6, 7, 7, 8, 8,
- 8, 8,11,11,11, 6, 6, 7, 7, 8, 8, 8, 8,11,11,11,
- 7, 7, 7, 8, 8, 8, 8, 8,11,11,11,11,11, 7, 7, 8,
- 8, 8, 8,11,11,11,11,11, 7, 7, 7, 7, 8, 8,11,11,
- 11,11,11, 7, 7, 7, 7, 8, 8,
-};
-
-static const static_codebook _44c8_s_p5_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c8_s_p5_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c8_s_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c8_s_p6_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
- 7, 7, 8, 8, 9, 9,10,10,11,11, 6, 5, 5, 7, 7, 8,
- 8, 9, 9,10,10,11,11, 0, 7, 7, 7, 7, 9, 9,10,10,
- 10,10,11,11, 0, 7, 7, 7, 7, 9, 9,10,10,10,10,11,
- 11, 0,11,11, 9, 9,10,10,11,11,11,11,12,12, 0,12,
- 12, 9, 9,10,10,11,11,12,12,12,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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44c8_s_p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c8_s_p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c8_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c8_s_p6_1[] = {
- 3, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 6,
- 5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c8_s_p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c8_s_p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c8_s_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c8_s_p7_0[] = {
- 1, 4, 4, 6, 6, 8, 7, 9, 9,10,10,12,12, 6, 5, 5,
- 7, 7, 8, 8,10,10,11,11,12,12, 7, 5, 5, 7, 7, 8,
- 8,10,10,11,11,12,12,21, 7, 7, 7, 7, 8, 9,10,10,
- 11,11,12,12,21, 7, 7, 7, 7, 9, 9,10,10,12,12,13,
- 13,21,11,11, 8, 8, 9, 9,11,11,12,12,13,13,21,11,
- 11, 8, 8, 9, 9,11,11,12,12,13,13,21,21,21,10,10,
- 10,10,11,11,12,13,13,13,21,21,21,10,10,10,10,11,
- 11,13,13,14,13,21,21,21,13,13,11,11,12,12,13,13,
- 14,14,21,21,21,14,14,11,11,12,12,13,13,14,14,21,
- 21,21,21,20,13,13,13,12,14,14,16,15,20,20,20,20,
- 20,13,13,13,13,14,13,15,15,
-};
-
-static const static_codebook _44c8_s_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c8_s_p7_0,
- 1, -523206656, 1618345984, 4, 0,
- (long *)_vq_quantlist__44c8_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c8_s_p7_1[] = {
- 4, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 6, 6, 6, 7,
- 7, 7, 7, 7, 7, 7, 8, 6, 6, 6, 6, 7, 7, 7, 7, 7,
- 7, 8, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7,
- 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
- 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
- 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8,
- 8, 8, 8, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _44c8_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c8_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c8_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p8_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44c8_s_p8_0[] = {
- 1, 4, 4, 7, 6, 8, 8, 8, 7, 9, 8,10,10,11,10, 6,
- 5, 5, 7, 7, 9, 9, 8, 8,10,10,11,11,12,11, 6, 5,
- 5, 7, 7, 9, 9, 9, 9,10,10,11,11,12,12,20, 8, 8,
- 8, 8, 9, 9, 9, 9,10,10,11,11,12,12,20, 8, 8, 8,
- 8,10, 9, 9, 9,10,10,11,11,12,12,20,12,12, 9, 9,
- 10,10,10,10,10,11,12,12,12,12,20,12,12, 9, 9,10,
- 10,10,10,11,11,12,12,13,13,20,20,20, 9, 9, 9, 9,
- 11,10,11,11,12,12,12,13,20,19,19, 9, 9, 9, 9,11,
- 11,11,12,12,12,13,13,19,19,19,13,13,10,10,11,11,
- 12,12,13,13,13,13,19,19,19,14,13,11,10,11,11,12,
- 12,12,13,13,13,19,19,19,19,19,12,12,12,12,13,13,
- 13,13,14,13,19,19,19,19,19,12,12,12,11,12,12,13,
- 14,14,14,19,19,19,19,19,16,15,13,12,13,13,13,14,
- 14,14,19,19,19,19,19,17,17,13,12,13,11,14,13,15,
- 15,
-};
-
-static const static_codebook _44c8_s_p8_0 = {
- 2, 225,
- (char *)_vq_lengthlist__44c8_s_p8_0,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__44c8_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p8_1[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__44c8_s_p8_1[] = {
- 4, 5, 5, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
- 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
- 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
- 10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
- 10,10, 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9, 9,
- 9, 9,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9, 9,
- 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9,10,10,10,10,
- 10,10,10, 9, 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9,
- 9,10,10,10,10,10,10,10, 9,10,10, 9,10,10,10,10,
- 9,10, 9,10,10, 9,10,10,10,10,10,10,10, 9,10,10,
- 10,10,10,10, 9, 9,10,10, 9,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10, 9, 9, 9,10, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9,
- 10, 9,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10, 9, 9,10, 9, 9, 9,10,10,10,10,10,10,
- 10,10,10,10,10, 9, 9, 9, 9, 9, 9,10, 9, 9,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10, 9,10, 9,
- 9,10, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
- 10, 9, 9,10,10, 9,10, 9, 9,
-};
-
-static const static_codebook _44c8_s_p8_1 = {
- 2, 441,
- (char *)_vq_lengthlist__44c8_s_p8_1,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c8_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p9_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c8_s_p9_0[] = {
- 1, 4, 3,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11, 4, 7, 7,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11, 4, 8,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _44c8_s_p9_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c8_s_p9_0,
- 1, -509798400, 1631393792, 5, 0,
- (long *)_vq_quantlist__44c8_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p9_1[] = {
- 9,
- 8,
- 10,
- 7,
- 11,
- 6,
- 12,
- 5,
- 13,
- 4,
- 14,
- 3,
- 15,
- 2,
- 16,
- 1,
- 17,
- 0,
- 18,
-};
-
-static const char _vq_lengthlist__44c8_s_p9_1[] = {
- 1, 4, 4, 7, 6, 7, 7, 7, 7, 8, 8, 9, 9,10,10,10,
- 10,11,11, 6, 6, 6, 8, 8, 9, 8, 8, 7,10, 8,11,10,
- 12,11,12,12,13,13, 5, 5, 6, 8, 8, 9, 9, 8, 8,10,
- 9,11,11,12,12,13,13,13,13,17, 8, 8, 9, 9, 9, 9,
- 9, 9,10, 9,12,10,12,12,13,12,13,13,17, 9, 8, 9,
- 9, 9, 9, 9, 9,10,10,12,12,12,12,13,13,13,13,17,
- 13,13, 9, 9,10,10,10,10,11,11,12,11,13,12,13,13,
- 14,15,17,13,13, 9, 8,10, 9,10,10,11,11,12,12,14,
- 13,15,13,14,15,17,17,17, 9,10, 9,10,11,11,12,12,
- 12,12,13,13,14,14,15,15,17,17,17, 9, 8, 9, 8,11,
- 11,12,12,12,12,14,13,14,14,14,15,17,17,17,12,14,
- 9,10,11,11,12,12,14,13,13,14,15,13,15,15,17,17,
- 17,13,11,10, 8,11, 9,13,12,13,13,13,13,13,14,14,
- 14,17,17,17,17,17,11,12,11,11,13,13,14,13,15,14,
- 13,15,16,15,17,17,17,17,17,11,11,12, 8,13,12,14,
- 13,17,14,15,14,15,14,17,17,17,17,17,15,15,12,12,
- 12,12,13,14,14,14,15,14,17,14,17,17,17,17,17,16,
- 17,12,12,13,12,13,13,14,14,14,14,14,14,17,17,17,
- 17,17,17,17,14,14,13,12,13,13,15,15,14,13,15,17,
- 17,17,17,17,17,17,17,13,14,13,13,13,13,14,15,15,
- 15,14,15,17,17,17,17,17,17,17,16,15,13,14,13,13,
- 14,14,15,14,14,16,17,17,17,17,17,17,17,16,16,13,
- 14,13,13,14,14,15,14,15,14,
-};
-
-static const static_codebook _44c8_s_p9_1 = {
- 2, 361,
- (char *)_vq_lengthlist__44c8_s_p9_1,
- 1, -518287360, 1622704128, 5, 0,
- (long *)_vq_quantlist__44c8_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__44c8_s_p9_2[] = {
- 24,
- 23,
- 25,
- 22,
- 26,
- 21,
- 27,
- 20,
- 28,
- 19,
- 29,
- 18,
- 30,
- 17,
- 31,
- 16,
- 32,
- 15,
- 33,
- 14,
- 34,
- 13,
- 35,
- 12,
- 36,
- 11,
- 37,
- 10,
- 38,
- 9,
- 39,
- 8,
- 40,
- 7,
- 41,
- 6,
- 42,
- 5,
- 43,
- 4,
- 44,
- 3,
- 45,
- 2,
- 46,
- 1,
- 47,
- 0,
- 48,
-};
-
-static const char _vq_lengthlist__44c8_s_p9_2[] = {
- 2, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _44c8_s_p9_2 = {
- 1, 49,
- (char *)_vq_lengthlist__44c8_s_p9_2,
- 1, -526909440, 1611661312, 6, 0,
- (long *)_vq_quantlist__44c8_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44c8_s_short[] = {
- 4,11,13,14,15,15,18,17,19,17, 5, 6, 8, 9,10,10,
- 12,15,19,19, 6, 6, 6, 6, 8, 8,11,14,18,19, 8, 6,
- 5, 4, 6, 7,10,13,16,17, 9, 7, 6, 5, 6, 7, 9,12,
- 15,19,10, 8, 7, 6, 6, 6, 7, 9,13,15,12,10, 9, 8,
- 7, 6, 4, 5,10,15,13,13,11, 8, 6, 6, 4, 2, 7,12,
- 17,15,16,10, 8, 8, 7, 6, 9,12,19,18,17,13,11,10,
- 10, 9,11,14,
-};
-
-static const static_codebook _huff_book__44c8_s_short = {
- 2, 100,
- (char *)_huff_lengthlist__44c8_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c9_s_long[] = {
- 3, 8,12,14,15,15,15,13,15,15, 6, 5, 8,10,12,12,
- 13,12,14,13,10, 6, 5, 6, 8, 9,11,11,13,13,13, 8,
- 5, 4, 5, 6, 8,10,11,13,14,10, 7, 5, 4, 5, 7, 9,
- 11,12,13,11, 8, 6, 5, 4, 5, 7, 9,11,12,11,10, 8,
- 7, 5, 4, 5, 9,10,13,13,11,10, 8, 6, 5, 4, 7, 9,
- 15,14,13,12,10, 9, 8, 7, 8, 9,12,12,14,13,12,11,
- 10, 9, 8, 9,
-};
-
-static const static_codebook _huff_book__44c9_s_long = {
- 2, 100,
- (char *)_huff_lengthlist__44c9_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c9_s_p1_0[] = {
- 1, 5, 5, 0, 5, 5, 0, 5, 5, 6, 8, 8, 0, 9, 8, 0,
- 9, 8, 6, 8, 8, 0, 8, 9, 0, 8, 9, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 5, 8, 8, 0, 7, 7, 0, 8, 8, 5, 8, 8,
- 0, 7, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 9, 8, 0, 8, 8, 0, 7, 7, 5, 8, 9, 0, 8, 8, 0, 7,
- 7,
-};
-
-static const static_codebook _44c9_s_p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c9_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c9_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c9_s_p2_0[] = {
- 3, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0, 5, 5, 8, 8, 0,
- 7, 7, 9, 9, 0, 0, 0, 9, 9, 6, 7, 7, 9, 8, 0, 8,
- 8, 9, 9, 0, 8, 7, 9, 9, 0, 9,10,10,10, 0, 0, 0,
- 11,10, 6, 7, 7, 8, 9, 0, 8, 8, 9, 9, 0, 7, 8, 9,
- 9, 0,10, 9,11,10, 0, 0, 0,10,10, 8, 9, 8,10,10,
- 0,10,10,12,11, 0,10,10,11,11, 0,12,13,13,13, 0,
- 0, 0,13,12, 8, 8, 9,10,10, 0,10,10,11,12, 0,10,
- 10,11,11, 0,13,12,13,13, 0, 0, 0,13,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, 6, 8, 7,10,10, 0, 7, 7,10, 9,
- 0, 7, 7,10,10, 0, 9, 9,10,10, 0, 0, 0,10,10, 6,
- 7, 8,10,10, 0, 7, 7, 9,10, 0, 7, 7,10,10, 0, 9,
- 9,10,10, 0, 0, 0,10,10, 8, 9, 9,11,11, 0,10,10,
- 11,11, 0,10,10,11,11, 0,12,12,12,12, 0, 0, 0,12,
- 12, 8, 9,10,11,11, 0, 9,10,11,11, 0,10,10,11,11,
- 0,12,12,12,12, 0, 0, 0,12,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, 5, 8, 7,10,10, 0, 7, 7,10,10, 0, 7, 7,
- 10, 9, 0, 9, 9,10,10, 0, 0, 0,10,10, 6, 7, 8,10,
- 10, 0, 7, 7,10,10, 0, 7, 7, 9,10, 0, 9, 9,10,10,
- 0, 0, 0,10,10, 8,10, 9,12,11, 0,10,10,12,11, 0,
- 10, 9,11,11, 0,11,12,12,12, 0, 0, 0,12,12, 8, 9,
- 10,11,12, 0,10,10,11,11, 0, 9,10,11,11, 0,12,11,
- 12,12, 0, 0, 0,12,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,
- 7,10, 9,12,12, 0, 9, 9,12,11, 0, 9, 9,11,11, 0,
- 10,10,12,11, 0, 0, 0,11,12, 7, 9,10,12,12, 0, 9,
- 9,11,12, 0, 9, 9,11,11, 0,10,10,11,12, 0, 0, 0,
- 11,11, 9,11,10,13,12, 0,10,10,12,12, 0,10,10,12,
- 12, 0,11,11,12,12, 0, 0, 0,13,12, 9,10,11,12,13,
- 0,10,10,12,12, 0,10,10,12,12, 0,11,12,12,12, 0,
- 0, 0,12,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, 9,
- 11,10,13,13, 0,10,10,12,12, 0,10,10,12,12, 0,11,
- 12,12,12, 0, 0, 0,12,12, 9,10,11,13,13, 0,10,10,
- 12,12, 0,10,10,12,12, 0,12,11,13,12, 0, 0, 0,12,
- 12,
-};
-
-static const static_codebook _44c9_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c9_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c9_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c9_s_p3_0[] = {
- 3, 4, 4, 5, 5, 6, 6, 8, 8, 0, 4, 4, 5, 5, 6, 7,
- 8, 8, 0, 4, 4, 5, 5, 7, 7, 8, 8, 0, 5, 5, 6, 6,
- 7, 7, 9, 9, 0, 0, 0, 6, 6, 7, 7, 9, 9, 0, 0, 0,
- 7, 7, 8, 8, 9, 9, 0, 0, 0, 7, 7, 8, 8, 9, 9, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c9_s_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c9_s_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c9_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p4_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c9_s_p4_0[] = {
- 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,10,
- 10, 0, 5, 4, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,10,
- 11,11, 0, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,
- 10,11,11, 0, 6, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,
- 11,11,11,12, 0, 0, 0, 6, 6, 7, 7, 8, 8, 9, 9,10,
- 10,11,11,12,12, 0, 0, 0, 7, 7, 7, 7, 9, 9, 9, 9,
- 10,10,11,11,12,12, 0, 0, 0, 7, 7, 7, 8, 9, 9, 9,
- 9,10,10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,
- 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9,
- 9,10,10,11,11,12,12,12,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c9_s_p4_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c9_s_p4_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c9_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c9_s_p5_0[] = {
- 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 7, 6, 9,10,10,10,
- 10, 9, 4, 6, 7, 9,10,10,10, 9,10, 5, 9, 9, 9,11,
- 11,10,11,11, 7,10, 9,11,12,11,12,12,12, 7, 9,10,
- 11,11,12,12,12,12, 6,10,10,10,12,12,10,12,11, 7,
- 10,10,11,12,12,11,12,12, 7,10,10,11,12,12,12,12,
- 12,
-};
-
-static const static_codebook _44c9_s_p5_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c9_s_p5_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c9_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p5_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c9_s_p5_1[] = {
- 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7,11, 5, 5, 6, 6,
- 7, 7, 7, 7, 8, 8,11, 5, 5, 6, 6, 7, 7, 7, 7, 8,
- 8,11, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11,11,11, 6,
- 6, 7, 7, 7, 8, 8, 8,11,11,11, 6, 6, 7, 7, 7, 8,
- 8, 8,11,11,11, 6, 6, 7, 7, 7, 7, 8, 8,11,11,11,
- 7, 7, 7, 7, 7, 7, 8, 8,11,11,11,10,10, 7, 7, 7,
- 7, 8, 8,11,11,11,11,11, 7, 7, 7, 7, 7, 7,11,11,
- 11,11,11, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _44c9_s_p5_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c9_s_p5_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c9_s_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c9_s_p6_0[] = {
- 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 5, 4, 4,
- 6, 6, 8, 8, 9, 9, 9, 9,10,10, 6, 4, 4, 6, 6, 8,
- 8, 9, 9, 9, 9,10,10, 0, 6, 6, 7, 7, 8, 8, 9, 9,
- 10,10,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
- 11, 0,10,10, 8, 8, 9, 9,10,10,11,11,12,12, 0,11,
- 11, 8, 8, 9, 9,10,10,11,11,12,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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _44c9_s_p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c9_s_p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c9_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c9_s_p6_1[] = {
- 4, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44c9_s_p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c9_s_p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c9_s_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c9_s_p7_0[] = {
- 2, 4, 4, 6, 6, 7, 7, 8, 8,10,10,11,11, 6, 4, 4,
- 6, 6, 8, 8, 9, 9,10,10,12,12, 6, 4, 5, 6, 6, 8,
- 8, 9, 9,10,10,12,12,20, 6, 6, 6, 6, 8, 8, 9,10,
- 11,11,12,12,20, 6, 6, 6, 6, 8, 8,10,10,11,11,12,
- 12,20,10,10, 7, 7, 9, 9,10,10,11,11,12,12,20,11,
- 11, 7, 7, 9, 9,10,10,11,11,12,12,20,20,20, 9, 9,
- 9, 9,11,11,12,12,13,13,20,20,20, 9, 9, 9, 9,11,
- 11,12,12,13,13,20,20,20,13,13,10,10,11,11,12,13,
- 13,13,20,20,20,13,13,10,10,11,11,12,13,13,13,20,
- 20,20,20,19,12,12,12,12,13,13,14,15,19,19,19,19,
- 19,12,12,12,12,13,13,14,14,
-};
-
-static const static_codebook _44c9_s_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c9_s_p7_0,
- 1, -523206656, 1618345984, 4, 0,
- (long *)_vq_quantlist__44c9_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c9_s_p7_1[] = {
- 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6,
- 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7, 7,
- 7, 8, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 6,
- 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7,
- 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
- 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
- 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8,
- 8, 8, 8, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _44c9_s_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c9_s_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c9_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p8_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44c9_s_p8_0[] = {
- 1, 4, 4, 7, 6, 8, 8, 8, 8, 9, 9,10,10,11,10, 6,
- 5, 5, 7, 7, 9, 9, 8, 9,10,10,11,11,12,12, 6, 5,
- 5, 7, 7, 9, 9, 9, 9,10,10,11,11,12,12,21, 7, 8,
- 8, 8, 9, 9, 9, 9,10,10,11,11,12,12,21, 8, 8, 8,
- 8, 9, 9, 9, 9,10,10,11,11,12,12,21,11,12, 9, 9,
- 10,10,10,10,10,11,11,12,12,12,21,12,12, 9, 8,10,
- 10,10,10,11,11,12,12,13,13,21,21,21, 9, 9, 9, 9,
- 11,11,11,11,12,12,12,13,21,20,20, 9, 9, 9, 9,10,
- 11,11,11,12,12,13,13,20,20,20,13,13,10,10,11,11,
- 12,12,13,13,13,13,20,20,20,13,13,10,10,11,11,12,
- 12,13,13,13,13,20,20,20,20,20,12,12,12,12,12,12,
- 13,13,14,14,20,20,20,20,20,12,12,12,11,13,12,13,
- 13,14,14,20,20,20,20,20,15,16,13,12,13,13,14,13,
- 14,14,20,20,20,20,20,16,15,12,12,13,12,14,13,14,
- 14,
-};
-
-static const static_codebook _44c9_s_p8_0 = {
- 2, 225,
- (char *)_vq_lengthlist__44c9_s_p8_0,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__44c9_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p8_1[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__44c9_s_p8_1[] = {
- 4, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
- 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
- 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
- 10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
- 10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10,10,10,10,
- 10,10,10, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9, 9, 9,
- 9,10,10,10,10,10,10,10, 9, 9, 9,10,10,10,10,10,
- 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10, 9, 9,10,
- 9,10, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,
- 10,10,10,10, 9, 9,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
- 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
- 10,10, 9, 9,10, 9, 9, 9, 9, 9,10,10,10,10,10,10,
- 10,10,10,10,10, 9, 9,10,10, 9, 9,10, 9, 9, 9,10,
- 10,10,10,10,10,10,10,10,10,10, 9, 9,10, 9, 9, 9,
- 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10, 9,
- 9, 9, 9,10, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _44c9_s_p8_1 = {
- 2, 441,
- (char *)_vq_lengthlist__44c9_s_p8_1,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c9_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p9_0[] = {
- 9,
- 8,
- 10,
- 7,
- 11,
- 6,
- 12,
- 5,
- 13,
- 4,
- 14,
- 3,
- 15,
- 2,
- 16,
- 1,
- 17,
- 0,
- 18,
-};
-
-static const char _vq_lengthlist__44c9_s_p9_0[] = {
- 1, 4, 3,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12, 4, 5, 6,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12, 4, 6, 6,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,11,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _44c9_s_p9_0 = {
- 2, 361,
- (char *)_vq_lengthlist__44c9_s_p9_0,
- 1, -508535424, 1631393792, 5, 0,
- (long *)_vq_quantlist__44c9_s_p9_0,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p9_1[] = {
- 9,
- 8,
- 10,
- 7,
- 11,
- 6,
- 12,
- 5,
- 13,
- 4,
- 14,
- 3,
- 15,
- 2,
- 16,
- 1,
- 17,
- 0,
- 18,
-};
-
-static const char _vq_lengthlist__44c9_s_p9_1[] = {
- 1, 4, 4, 7, 7, 7, 7, 8, 7, 9, 8, 9, 9,10,10,11,
- 11,11,11, 6, 5, 5, 8, 8, 9, 9, 9, 8,10, 9,11,10,
- 12,12,13,12,13,13, 5, 5, 5, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,12,12,13,12,13,13,17, 8, 8, 9, 9, 9, 9,
- 9, 9,10,10,12,11,13,12,13,13,13,13,18, 8, 8, 9,
- 9, 9, 9, 9, 9,11,11,12,12,13,13,13,13,13,13,17,
- 13,12, 9, 9,10,10,10,10,11,11,12,12,12,13,13,13,
- 14,14,18,13,12, 9, 9,10,10,10,10,11,11,12,12,13,
- 13,13,14,14,14,17,18,18,10,10,10,10,11,11,11,12,
- 12,12,14,13,14,13,13,14,18,18,18,10, 9,10, 9,11,
- 11,12,12,12,12,13,13,15,14,14,14,18,18,16,13,14,
- 10,11,11,11,12,13,13,13,13,14,13,13,14,14,18,18,
- 18,14,12,11, 9,11,10,13,12,13,13,13,14,14,14,13,
- 14,18,18,17,18,18,11,12,12,12,13,13,14,13,14,14,
- 13,14,14,14,18,18,18,18,17,12,10,12, 9,13,11,13,
- 14,14,14,14,14,15,14,18,18,17,17,18,14,15,12,13,
- 13,13,14,13,14,14,15,14,15,14,18,17,18,18,18,15,
- 15,12,10,14,10,14,14,13,13,14,14,14,14,18,16,18,
- 18,18,18,17,14,14,13,14,14,13,13,14,14,14,15,15,
- 18,18,18,18,17,17,17,14,14,14,12,14,13,14,14,15,
- 14,15,14,18,18,18,18,18,18,18,17,16,13,13,13,14,
- 14,14,14,15,16,15,18,18,18,18,18,18,18,17,17,13,
- 13,13,13,14,13,14,15,15,15,
-};
-
-static const static_codebook _44c9_s_p9_1 = {
- 2, 361,
- (char *)_vq_lengthlist__44c9_s_p9_1,
- 1, -518287360, 1622704128, 5, 0,
- (long *)_vq_quantlist__44c9_s_p9_1,
- 0
-};
-
-static const long _vq_quantlist__44c9_s_p9_2[] = {
- 24,
- 23,
- 25,
- 22,
- 26,
- 21,
- 27,
- 20,
- 28,
- 19,
- 29,
- 18,
- 30,
- 17,
- 31,
- 16,
- 32,
- 15,
- 33,
- 14,
- 34,
- 13,
- 35,
- 12,
- 36,
- 11,
- 37,
- 10,
- 38,
- 9,
- 39,
- 8,
- 40,
- 7,
- 41,
- 6,
- 42,
- 5,
- 43,
- 4,
- 44,
- 3,
- 45,
- 2,
- 46,
- 1,
- 47,
- 0,
- 48,
-};
-
-static const char _vq_lengthlist__44c9_s_p9_2[] = {
- 2, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _44c9_s_p9_2 = {
- 1, 49,
- (char *)_vq_lengthlist__44c9_s_p9_2,
- 1, -526909440, 1611661312, 6, 0,
- (long *)_vq_quantlist__44c9_s_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44c9_s_short[] = {
- 5,13,18,16,17,17,19,18,19,19, 5, 7,10,11,12,12,
- 13,16,17,18, 6, 6, 7, 7, 9, 9,10,14,17,19, 8, 7,
- 6, 5, 6, 7, 9,12,19,17, 8, 7, 7, 6, 5, 6, 8,11,
- 15,19, 9, 8, 7, 6, 5, 5, 6, 8,13,15,11,10, 8, 8,
- 7, 5, 4, 4,10,14,12,13,11, 9, 7, 6, 4, 2, 6,12,
- 18,16,16,13, 8, 7, 7, 5, 8,13,16,17,18,15,11, 9,
- 9, 8,10,13,
-};
-
-static const static_codebook _huff_book__44c9_s_short = {
- 2, 100,
- (char *)_huff_lengthlist__44c9_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c0_s_long[] = {
- 5, 4, 8, 9, 8, 9,10,12,15, 4, 1, 5, 5, 6, 8,11,
- 12,12, 8, 5, 8, 9, 9,11,13,12,12, 9, 5, 8, 5, 7,
- 9,12,13,13, 8, 6, 8, 7, 7, 9,11,11,11, 9, 7, 9,
- 7, 7, 7, 7,10,12,10,10,11, 9, 8, 7, 7, 9,11,11,
- 12,13,12,11, 9, 8, 9,11,13,16,16,15,15,12,10,11,
- 12,
-};
-
-static const static_codebook _huff_book__44c0_s_long = {
- 2, 81,
- (char *)_huff_lengthlist__44c0_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c0_s_p1_0[] = {
- 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 5, 7, 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, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 7, 9, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 7, 7, 0, 0, 0, 0,
- 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 7, 9, 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, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 9,11,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, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0, 9,10,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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 8, 9, 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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
- 0, 0, 0, 0, 0, 9, 9,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, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,10,11,
- 0, 0, 0, 0, 0, 0, 9,11,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c0_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__44c0_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c0_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c0_s_p2_0[] = {
- 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 5, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 7, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c0_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c0_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c0_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c0_s_p3_0[] = {
- 1, 3, 2, 8, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
- 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
- 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c0_s_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c0_s_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c0_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c0_s_p4_0[] = {
- 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
- 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 7, 7,
- 7, 8, 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0,
- 9, 9, 8, 8,10,10, 0, 0, 0, 8, 9, 8, 8,10,10, 0,
- 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
- 10,
-};
-
-static const static_codebook _44c0_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c0_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c0_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p5_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c0_s_p5_0[] = {
- 1, 4, 3, 6, 6, 8, 7, 8, 8, 8, 8, 9, 9,10,10,11,
- 11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9, 9,10,10,10,
- 11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
- 10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,11,11, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,10,
- 10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,
- 10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
- 10,10,11,11,11,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,
- 10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
- 9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
- 10,10,11,11,11,11,11,12,12,12,13,13, 0, 0, 0, 0,
- 0, 0, 0,11,10,11,11,11,11,12,12,13,13, 0, 0, 0,
- 0, 0, 0, 0,11,11,12,11,12,12,12,12,13,13, 0, 0,
- 0, 0, 0, 0, 0,11,11,11,12,12,12,12,13,13,13, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,12,12,13,13,13,14,14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
- 14,
-};
-
-static const static_codebook _44c0_s_p5_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c0_s_p5_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c0_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c0_s_p6_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
- 9, 9, 4, 6, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11,
- 11,12,10,11, 6, 9, 9,11,10,11,11,10,10, 6, 9, 9,
- 11,10,11,11,10,10, 7,11,10,12,11,11,11,11,11, 7,
- 9, 9,10,10,10,11,11,10, 6, 9, 9,11,10,10,11,10,
- 10,
-};
-
-static const static_codebook _44c0_s_p6_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c0_s_p6_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c0_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p6_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c0_s_p6_1[] = {
- 2, 3, 3, 6, 6, 7, 7, 7, 7, 7, 8,10,10,10, 6, 6,
- 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
- 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
- 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 7, 8, 8, 8, 8,
- 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
- 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
- 10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c0_s_p6_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c0_s_p6_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c0_s_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c0_s_p7_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5,
- 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 6, 7, 7, 8,
- 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13,
- 13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0,10,10,
- 10,10,11,11,11,11,12,12, 0, 0, 0,10,10, 9, 9,11,
- 11,11,12,12,12, 0, 0, 0,13,13,10,10,11,11,12,12,
- 13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
- 0, 0, 0, 0,11,11,11,11,13,12,13,13, 0, 0, 0, 0,
- 0,12,12,11,11,12,12,13,13,
-};
-
-static const static_codebook _44c0_s_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c0_s_p7_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c0_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p7_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c0_s_p7_1[] = {
- 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
- 6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c0_s_p7_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c0_s_p7_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c0_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p8_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c0_s_p8_0[] = {
- 1, 5, 5,10,10, 6, 9, 8,10,10, 6,10, 9,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10, 8,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,
-};
-
-static const static_codebook _44c0_s_p8_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c0_s_p8_0,
- 1, -518283264, 1627103232, 3, 0,
- (long *)_vq_quantlist__44c0_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p8_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c0_s_p8_1[] = {
- 1, 4, 4, 6, 6, 7, 7, 9, 9,11,12,13,12, 6, 5, 5,
- 7, 7, 8, 8,10, 9,12,12,12,12, 6, 5, 5, 7, 7, 8,
- 8,10, 9,12,11,11,13,16, 7, 7, 8, 8, 9, 9,10,10,
- 12,12,13,12,16, 7, 7, 8, 7, 9, 9,10,10,11,12,12,
- 13,16,10,10, 8, 8,10,10,11,12,12,12,13,13,16,11,
- 10, 8, 7,11,10,11,11,12,11,13,13,16,16,16,10,10,
- 10,10,11,11,13,12,13,13,16,16,16,11, 9,11, 9,15,
- 13,12,13,13,13,16,16,16,15,13,11,11,12,13,12,12,
- 14,13,16,16,16,14,13,11,11,13,12,14,13,13,13,16,
- 16,16,16,16,13,13,13,12,14,13,14,14,16,16,16,16,
- 16,13,13,12,12,14,14,15,13,
-};
-
-static const static_codebook _44c0_s_p8_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44c0_s_p8_1,
- 1, -522616832, 1620115456, 4, 0,
- (long *)_vq_quantlist__44c0_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c0_s_p8_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c0_s_p8_2[] = {
- 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
- 8,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9,10,10,10, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
- 9,10, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9,
- 9,10, 9, 9,10,10,10,10, 8, 8, 8, 8, 9, 8, 9, 9,
- 9, 9, 9,10, 9,10,10,10,10, 7, 7, 8, 8, 9, 9, 9,
- 9, 9, 9,10, 9,10,10,10,10,10, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 9,10,10,10, 9,11,10,10,10,10, 8, 8, 9,
- 9, 9, 9, 9,10, 9, 9, 9,10,10,10,10,11,11, 9, 9,
- 9, 9, 9, 9, 9, 9,10, 9, 9,10,11,10,10,11,11, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,11,10,11,11,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,10,10,11,
- 11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
- 11,11,11,11, 9,10, 9,10, 9, 9, 9, 9,10, 9,10,11,
- 10,11,10,10,10,10,10, 9, 9, 9,10, 9, 9, 9,10,11,
- 11,10,11,11,10,11,10,10,10, 9, 9, 9, 9,10, 9, 9,
- 10,11,10,11,11,11,11,10,11,10,10, 9,10, 9, 9, 9,
- 10,
-};
-
-static const static_codebook _44c0_s_p8_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44c0_s_p8_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c0_s_p8_2,
- 0
-};
-
-static const char _huff_lengthlist__44c0_s_short[] = {
- 9, 8,12,11,12,13,14,14,16, 6, 1, 5, 6, 6, 9,12,
- 14,17, 9, 4, 5, 9, 7, 9,13,15,16, 8, 5, 8, 6, 8,
- 10,13,17,17, 9, 6, 7, 7, 8, 9,13,15,17,11, 8, 9,
- 9, 9,10,12,16,16,13, 7, 8, 7, 7, 9,12,14,15,13,
- 6, 7, 5, 5, 7,10,13,13,14, 7, 8, 5, 6, 7, 9,10,
- 12,
-};
-
-static const static_codebook _huff_book__44c0_s_short = {
- 2, 81,
- (char *)_huff_lengthlist__44c0_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c0_sm_long[] = {
- 5, 4, 9,10, 9,10,11,12,13, 4, 1, 5, 7, 7, 9,11,
- 12,14, 8, 5, 7, 9, 8,10,13,13,13,10, 7, 9, 4, 6,
- 7,10,12,14, 9, 6, 7, 6, 6, 7,10,12,12, 9, 8, 9,
- 7, 6, 7, 8,11,12,11,11,11, 9, 8, 7, 8,10,12,12,
- 13,14,12,11, 9, 9, 9,12,12,17,17,15,16,12,10,11,
- 13,
-};
-
-static const static_codebook _huff_book__44c0_sm_long = {
- 2, 81,
- (char *)_huff_lengthlist__44c0_sm_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c0_sm_p1_0[] = {
- 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 5, 7, 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, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 7, 8, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
- 0, 0, 0, 0, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 8, 7, 0, 0, 0, 0,
- 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 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, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 9,10,10, 0, 0, 0, 0, 0, 0, 9,10,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, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 8, 9, 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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
- 0, 0, 0, 0, 0, 9, 9,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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
- 0, 0, 0, 0, 0, 0, 9,10,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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c0_sm_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__44c0_sm_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c0_sm_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c0_sm_p2_0[] = {
- 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c0_sm_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c0_sm_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c0_sm_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c0_sm_p3_0[] = {
- 1, 3, 3, 7, 7, 0, 0, 0, 0, 0, 5, 4, 7, 7, 0, 0,
- 0, 0, 0, 5, 5, 7, 7, 0, 0, 0, 0, 0, 6, 7, 8, 8,
- 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0,
- 9,10, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
- 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c0_sm_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c0_sm_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c0_sm_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c0_sm_p4_0[] = {
- 1, 4, 3, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 8, 7,
- 9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8,
- 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
- 9, 9, 9, 9,11,11, 0, 0, 0, 9, 9, 9, 9,11,11, 0,
- 0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0, 9, 9,11,
- 11,
-};
-
-static const static_codebook _44c0_sm_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c0_sm_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c0_sm_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p5_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c0_sm_p5_0[] = {
- 1, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 9, 9,10,10,11,
- 11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,11,
- 11,11, 0, 5, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
- 11,11,11, 0, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
- 11,11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
- 10,11,11,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
- 10,10,11,11,12,12,12,13, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
- 10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
- 9,10,10,11,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
- 10,10,10,10,11,11,12,12,12,13,13,13, 0, 0, 0, 0,
- 0, 0, 0,10,10,11,11,12,12,12,13,13,13, 0, 0, 0,
- 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0, 0,
- 0, 0, 0, 0, 0,11,11,12,11,12,12,13,13,13,13, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
- 14,
-};
-
-static const static_codebook _44c0_sm_p5_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c0_sm_p5_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c0_sm_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c0_sm_p6_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
- 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,10,11,
- 11,11,10,10, 6, 9, 9,11,11,10,11,10,10, 6, 9, 9,
- 11,10,11,11,10,10, 7,11,10,11,11,11,11,11,11, 6,
- 9, 9,11,10,10,11,11,10, 6, 9, 9,11,10,10,11,10,
- 11,
-};
-
-static const static_codebook _44c0_sm_p6_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c0_sm_p6_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c0_sm_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p6_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c0_sm_p6_1[] = {
- 2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 8, 9, 5, 5, 6, 6,
- 7, 7, 8, 8, 8, 8, 9, 5, 5, 6, 6, 7, 7, 8, 8, 8,
- 8,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
- 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8,
- 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
- 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
- 10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c0_sm_p6_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c0_sm_p6_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c0_sm_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c0_sm_p7_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5,
- 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 6, 5, 7, 7, 8,
- 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13,
- 13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0, 9,10,
- 10,10,11,11,12,11,12,12, 0, 0, 0,10,10, 9, 9,11,
- 11,12,12,12,12, 0, 0, 0,13,13,10,10,11,11,12,12,
- 13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
- 0, 0, 0, 0,11,12,11,11,13,12,13,13, 0, 0, 0, 0,
- 0,12,12,11,11,13,12,14,14,
-};
-
-static const static_codebook _44c0_sm_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c0_sm_p7_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c0_sm_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p7_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c0_sm_p7_1[] = {
- 2, 4, 4, 4, 4, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
- 6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c0_sm_p7_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c0_sm_p7_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c0_sm_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p8_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c0_sm_p8_0[] = {
- 1, 3, 3,11,11,11,11,11,11, 3, 7, 6,11,11,11,11,
- 11,11, 4, 8, 7,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,
-};
-
-static const static_codebook _44c0_sm_p8_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c0_sm_p8_0,
- 1, -516186112, 1627103232, 4, 0,
- (long *)_vq_quantlist__44c0_sm_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p8_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c0_sm_p8_1[] = {
- 1, 4, 4, 6, 6, 7, 7, 9, 9,10,11,12,12, 6, 5, 5,
- 7, 7, 8, 8,10,10,12,11,12,12, 6, 5, 5, 7, 7, 8,
- 8,10,10,12,11,12,12,17, 7, 7, 8, 8, 9, 9,10,10,
- 12,12,13,13,18, 7, 7, 8, 7, 9, 9,10,10,12,12,12,
- 13,19,10,10, 8, 8,10,10,11,11,12,12,13,14,19,11,
- 10, 8, 7,10,10,11,11,12,12,13,12,19,19,19,10,10,
- 10,10,11,11,12,12,13,13,19,19,19,11, 9,11, 9,14,
- 12,13,12,13,13,19,20,18,13,14,11,11,12,12,13,13,
- 14,13,20,20,20,15,13,11,10,13,11,13,13,14,13,20,
- 20,20,20,20,13,14,12,12,13,13,13,13,20,20,20,20,
- 20,13,13,12,12,16,13,15,13,
-};
-
-static const static_codebook _44c0_sm_p8_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44c0_sm_p8_1,
- 1, -522616832, 1620115456, 4, 0,
- (long *)_vq_quantlist__44c0_sm_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c0_sm_p8_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c0_sm_p8_2[] = {
- 2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
- 8,10, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9,10, 6, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9,
- 9,10, 9, 9,10,10,10,11, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9, 9,10, 9,10,10,10,10, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 9, 9,10,10,11,10,10, 8, 8, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10,10,10,10,11,11, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10,11,11,11,11,11, 9, 9,
- 9, 9, 9, 9, 9, 9,10, 9,10, 9,11,11,10,11,11, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,11,10,11,11,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,10,11,11,
- 11,11,11, 9, 9,10, 9, 9, 9, 9, 9, 9, 9,10,11,10,
- 11,11,11,11,10,10,10,10, 9, 9, 9, 9, 9, 9,10,11,
- 11,11,11,11,11, 9,10, 9, 9, 9, 9, 9, 9, 9, 9,11,
- 11,10,11,11,11,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
- 10,11,10,11,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9,
- 9,
-};
-
-static const static_codebook _44c0_sm_p8_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44c0_sm_p8_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c0_sm_p8_2,
- 0
-};
-
-static const char _huff_lengthlist__44c0_sm_short[] = {
- 6, 6,12,13,13,14,16,17,17, 4, 2, 5, 8, 7, 9,12,
- 15,15, 9, 4, 5, 9, 7, 9,12,16,18,11, 6, 7, 4, 6,
- 8,11,14,18,10, 5, 6, 5, 5, 7,10,14,17,10, 5, 7,
- 7, 6, 7,10,13,16,11, 5, 7, 7, 7, 8,10,12,15,13,
- 6, 7, 5, 5, 7, 9,12,13,16, 8, 9, 6, 6, 7, 9,10,
- 12,
-};
-
-static const static_codebook _huff_book__44c0_sm_short = {
- 2, 81,
- (char *)_huff_lengthlist__44c0_sm_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c1_s_long[] = {
- 5, 5, 9,10, 9, 9,10,11,12, 5, 1, 5, 6, 6, 7,10,
- 12,14, 9, 5, 6, 8, 8,10,12,14,14,10, 5, 8, 5, 6,
- 8,11,13,14, 9, 5, 7, 6, 6, 8,10,12,11, 9, 7, 9,
- 7, 6, 6, 7,10,10,10, 9,12, 9, 8, 7, 7,10,12,11,
- 11,13,12,10, 9, 8, 9,11,11,14,15,15,13,11, 9, 9,
- 11,
-};
-
-static const static_codebook _huff_book__44c1_s_long = {
- 2, 81,
- (char *)_huff_lengthlist__44c1_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c1_s_p1_0[] = {
- 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 0,
- 0, 0, 5, 6, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
- 0, 0, 0, 7, 8, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
- 0, 0, 0, 0, 7, 8, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 7, 7, 0, 0, 0, 0,
- 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 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, 7, 8, 8, 0, 0, 0,
- 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 8, 9, 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, 6, 8, 8, 0, 0,
- 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
- 0, 0, 0, 0, 7, 8, 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, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8,10, 9, 0,
- 0, 0, 0, 0, 0, 8, 8, 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, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
- 0, 0, 0, 0, 0, 0, 8, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c1_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__44c1_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c1_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c1_s_p2_0[] = {
- 2, 3, 4, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 8, 8,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 6, 8, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c1_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c1_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c1_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c1_s_p3_0[] = {
- 1, 3, 2, 7, 7, 0, 0, 0, 0, 0,13,13, 6, 6, 0, 0,
- 0, 0, 0,12, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
- 8, 9, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
- 0, 0,11,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c1_s_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c1_s_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c1_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c1_s_p4_0[] = {
- 1, 3, 3, 6, 5, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
- 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 7, 7,
- 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0,
- 9, 9, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
- 0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11,
- 11,
-};
-
-static const static_codebook _44c1_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c1_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c1_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p5_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c1_s_p5_0[] = {
- 1, 4, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
- 11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10,
- 11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
- 10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,12,11, 0, 0, 0, 8, 8, 9, 9, 9,10,10,10,
- 10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10, 9,10,
- 10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
- 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,
- 10,10,10,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
- 9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
- 10,10,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0,
- 0, 0, 0,10,10,11,11,12,12,12,12,13,13, 0, 0, 0,
- 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,13, 0, 0,
- 0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,12,12,12,13,13,14,14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
- 14,
-};
-
-static const static_codebook _44c1_s_p5_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c1_s_p5_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c1_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c1_s_p6_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
- 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 6,10,10,11,11,
- 11,11,10,10, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
- 11,10,11,11,10,10, 7,11,10,11,11,11,12,11,11, 7,
- 9, 9,11,10,10,11,11,10, 6, 9, 9,10,10,10,12,10,
- 11,
-};
-
-static const static_codebook _44c1_s_p6_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c1_s_p6_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c1_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p6_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c1_s_p6_1[] = {
- 2, 3, 3, 6, 6, 7, 7, 7, 7, 8, 8,10,10,10, 6, 6,
- 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
- 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
- 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
- 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
- 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
- 10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c1_s_p6_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c1_s_p6_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c1_s_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c1_s_p7_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 9, 7, 5, 6,
- 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 5, 7, 7, 8,
- 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9, 9,10,10,10,11,11,11,11, 0,13,
- 13, 9, 9, 9, 9,10,10,11,11,11,11, 0, 0, 0,10,10,
- 10,10,11,11,12,11,12,12, 0, 0, 0,10,10,10, 9,11,
- 11,12,11,13,12, 0, 0, 0,13,13,10,10,11,11,12,12,
- 13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
- 0, 0, 0, 0,11,12,11,11,12,12,14,13, 0, 0, 0, 0,
- 0,12,11,11,11,13,10,14,13,
-};
-
-static const static_codebook _44c1_s_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c1_s_p7_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c1_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p7_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c1_s_p7_1[] = {
- 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
- 6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c1_s_p7_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c1_s_p7_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c1_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p8_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c1_s_p8_0[] = {
- 1, 4, 3,10,10,10,10,10,10,10,10,10,10, 4, 8, 6,
- 10,10,10,10,10,10,10,10,10,10, 4, 8, 7,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44c1_s_p8_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c1_s_p8_0,
- 1, -514541568, 1627103232, 4, 0,
- (long *)_vq_quantlist__44c1_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p8_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c1_s_p8_1[] = {
- 1, 4, 4, 6, 5, 7, 7, 9, 9,10,10,12,12, 6, 5, 5,
- 7, 7, 8, 8,10,10,12,11,12,12, 6, 5, 5, 7, 7, 8,
- 8,10,10,11,11,12,12,15, 7, 7, 8, 8, 9, 9,11,11,
- 12,12,13,12,15, 8, 8, 8, 7, 9, 9,10,10,12,12,13,
- 13,16,11,10, 8, 8,10,10,11,11,12,12,13,13,16,11,
- 11, 9, 8,11,10,11,11,12,12,13,12,16,16,16,10,11,
- 10,11,12,12,12,12,13,13,16,16,16,11, 9,11, 9,14,
- 12,12,12,13,13,16,16,16,12,14,11,12,12,12,13,13,
- 14,13,16,16,16,15,13,12,10,13,10,13,14,13,13,16,
- 16,16,16,16,13,14,12,13,13,12,13,13,16,16,16,16,
- 16,13,12,12,11,14,12,15,13,
-};
-
-static const static_codebook _44c1_s_p8_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44c1_s_p8_1,
- 1, -522616832, 1620115456, 4, 0,
- (long *)_vq_quantlist__44c1_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c1_s_p8_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c1_s_p8_2[] = {
- 2, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8,
- 8,10,10,10, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9,10,10,10, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
- 9,10, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9,
- 9,10, 9, 9,10,10,11,11, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9,10, 9, 9,10,10,10,10, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 9, 9,10,10,11,11,11, 8, 8, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10,10,10,11,11,11, 8, 8, 9,
- 9, 9, 9,10, 9, 9, 9, 9, 9,11,11,11,11,11, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,10,11,11, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,11,10,11,11,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10,10,11,11,
- 11,11,11, 9, 9, 9,10, 9, 9, 9, 9, 9, 9,10,11,11,
- 11,11,11,11,10,10,10,10, 9, 9, 9, 9, 9, 9,10,11,
- 11,11,11,11,11, 9,10, 9, 9, 9, 9,10, 9, 9, 9,11,
- 11,11,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9,10, 9,
- 11,11,10,11,11,11,11,10,11, 9, 9, 9, 9, 9, 9, 9,
- 9,
-};
-
-static const static_codebook _44c1_s_p8_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44c1_s_p8_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c1_s_p8_2,
- 0
-};
-
-static const char _huff_lengthlist__44c1_s_short[] = {
- 6, 8,13,12,13,14,15,16,16, 4, 2, 4, 7, 6, 8,11,
- 13,15,10, 4, 4, 8, 6, 8,11,14,17,11, 5, 6, 5, 6,
- 8,12,14,17,11, 5, 5, 6, 5, 7,10,13,16,12, 6, 7,
- 8, 7, 8,10,13,15,13, 8, 8, 7, 7, 8,10,12,15,15,
- 7, 7, 5, 5, 7, 9,12,14,15, 8, 8, 6, 6, 7, 8,10,
- 11,
-};
-
-static const static_codebook _huff_book__44c1_s_short = {
- 2, 81,
- (char *)_huff_lengthlist__44c1_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44c1_sm_long[] = {
- 5, 4, 8,10, 9, 9,10,11,12, 4, 2, 5, 6, 6, 8,10,
- 11,13, 8, 4, 6, 8, 7, 9,12,12,14,10, 6, 8, 4, 5,
- 6, 9,11,12, 9, 5, 6, 5, 5, 6, 9,11,11, 9, 7, 9,
- 6, 5, 5, 7,10,10,10, 9,11, 8, 7, 6, 7, 9,11,11,
- 12,13,10,10, 9, 8, 9,11,11,15,15,12,13,11, 9,10,
- 11,
-};
-
-static const static_codebook _huff_book__44c1_sm_long = {
- 2, 81,
- (char *)_huff_lengthlist__44c1_sm_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c1_sm_p1_0[] = {
- 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 5, 7, 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, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 7, 8, 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, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
- 0, 0, 0, 0, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 8, 7, 0, 0, 0, 0,
- 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 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, 7, 9, 9, 0, 0, 0,
- 0, 0, 0, 9, 9,10, 0, 0, 0, 0, 0, 0, 9,10,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, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
- 0, 0, 0, 0, 8, 9, 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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
- 0, 0, 0, 0, 0, 8, 9,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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
- 0, 0, 0, 0, 0, 0, 9,10, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c1_sm_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__44c1_sm_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44c1_sm_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c1_sm_p2_0[] = {
- 2, 3, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 6, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c1_sm_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44c1_sm_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c1_sm_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c1_sm_p3_0[] = {
- 1, 3, 3, 7, 7, 0, 0, 0, 0, 0, 5, 5, 6, 6, 0, 0,
- 0, 0, 0, 5, 5, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
- 8, 9, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
- 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44c1_sm_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c1_sm_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c1_sm_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44c1_sm_p4_0[] = {
- 1, 3, 3, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7, 8, 8,
- 9, 9, 0, 6, 6, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8,
- 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
- 8, 8, 9, 9,11,11, 0, 0, 0, 9, 9, 9, 9,11,11, 0,
- 0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0, 9, 9,11,
- 11,
-};
-
-static const static_codebook _44c1_sm_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44c1_sm_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c1_sm_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p5_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c1_sm_p5_0[] = {
- 2, 3, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
- 11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,10,
- 11,11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,
- 10,11,11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9,10,10,
- 10,11,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9,10,
- 10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
- 10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
- 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
- 9, 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
- 9, 9,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0,
- 0, 0, 0,10,10,11,11,12,12,12,12,13,13, 0, 0, 0,
- 0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0, 0,
- 0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0,
- 0, 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
- 14,
-};
-
-static const static_codebook _44c1_sm_p5_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44c1_sm_p5_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c1_sm_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44c1_sm_p6_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,11,
- 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,10,11,
- 11,11,10,10, 6, 9, 9,11,11,10,11,10,10, 6, 9, 9,
- 11,10,11,11,10,10, 7,11,11,11,11,11,11,11,11, 6,
- 9, 9,11,10,10,11,11,10, 6, 9, 9,10,10,10,11,10,
- 11,
-};
-
-static const static_codebook _44c1_sm_p6_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44c1_sm_p6_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44c1_sm_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p6_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44c1_sm_p6_1[] = {
- 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6,
- 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
- 8,10, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
- 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
- 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 9, 8,10,10,10,10,10, 8, 8, 8,
- 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
- 10,10,10, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44c1_sm_p6_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44c1_sm_p6_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44c1_sm_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c1_sm_p7_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5,
- 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 6, 7, 7, 8,
- 8, 8, 8, 9, 9,11,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13,
- 13, 9, 9, 9, 9,10,10,11,11,12,12, 0, 0, 0, 9,10,
- 9,10,11,11,12,11,13,12, 0, 0, 0,10,10, 9, 9,11,
- 11,12,12,13,12, 0, 0, 0,13,13,10,10,11,11,12,12,
- 13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
- 0, 0, 0, 0,11,12,11,11,12,13,14,13, 0, 0, 0, 0,
- 0,12,12,11,11,13,12,14,13,
-};
-
-static const static_codebook _44c1_sm_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c1_sm_p7_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44c1_sm_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p7_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44c1_sm_p7_1[] = {
- 2, 4, 4, 4, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
- 5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44c1_sm_p7_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44c1_sm_p7_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44c1_sm_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p8_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c1_sm_p8_0[] = {
- 1, 3, 3,13,13,13,13,13,13,13,13,13,13, 3, 6, 6,
- 13,13,13,13,13,13,13,13,13,13, 4, 8, 7,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,
-};
-
-static const static_codebook _44c1_sm_p8_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44c1_sm_p8_0,
- 1, -514541568, 1627103232, 4, 0,
- (long *)_vq_quantlist__44c1_sm_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p8_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44c1_sm_p8_1[] = {
- 1, 4, 4, 6, 6, 7, 7, 9, 9,10,11,12,12, 6, 5, 5,
- 7, 7, 8, 7,10,10,11,11,12,12, 6, 5, 5, 7, 7, 8,
- 8,10,10,11,11,12,12,16, 7, 7, 8, 8, 9, 9,11,11,
- 12,12,13,13,17, 7, 7, 8, 7, 9, 9,11,10,12,12,13,
- 13,19,11,10, 8, 8,10,10,11,11,12,12,13,13,19,11,
- 11, 9, 7,11,10,11,11,12,12,13,12,19,19,19,10,10,
- 10,10,11,12,12,12,13,14,18,19,19,11, 9,11, 9,13,
- 12,12,12,13,13,19,20,19,13,15,11,11,12,12,13,13,
- 14,13,18,19,20,15,13,12,10,13,10,13,13,13,14,20,
- 20,20,20,20,13,14,12,12,13,12,13,13,20,20,20,20,
- 20,13,12,12,12,14,12,14,13,
-};
-
-static const static_codebook _44c1_sm_p8_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44c1_sm_p8_1,
- 1, -522616832, 1620115456, 4, 0,
- (long *)_vq_quantlist__44c1_sm_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44c1_sm_p8_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44c1_sm_p8_2[] = {
- 2, 5, 5, 6, 6, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8,
- 8,10, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9,10,11,11, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9,10,10, 9,10,10,10,10, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 9, 9,10,10,11,10,10, 8, 8, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9,10, 9,10,10,10,11,11, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,11,11,11, 9, 9,
- 9, 9, 9, 9, 9, 9,10, 9,10, 9,11,11,11,11,11, 9,
- 8, 9, 9, 9, 9, 9, 9, 9,10,10, 9,11,11,10,11,11,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,11,11,11,11,
- 11,11,11, 9, 9,10, 9, 9, 9, 9,10, 9,10,10,11,10,
- 11,11,11,11, 9,10,10,10, 9, 9, 9, 9, 9, 9,10,11,
- 11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,
- 11,10,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9,10, 9,
- 10,11,10,11,11,11,11,11,11, 9, 9,10, 9, 9, 9, 9,
- 9,
-};
-
-static const static_codebook _44c1_sm_p8_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44c1_sm_p8_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44c1_sm_p8_2,
- 0
-};
-
-static const char _huff_lengthlist__44c1_sm_short[] = {
- 4, 7,13,14,14,15,16,18,18, 4, 2, 5, 8, 7, 9,12,
- 15,15,10, 4, 5,10, 6, 8,11,15,17,12, 5, 7, 5, 6,
- 8,11,14,17,11, 5, 6, 6, 5, 6, 9,13,17,12, 6, 7,
- 6, 5, 6, 8,12,14,14, 7, 8, 6, 6, 7, 9,11,14,14,
- 8, 9, 6, 5, 6, 9,11,13,16,10,10, 7, 6, 7, 8,10,
- 11,
-};
-
-static const static_codebook _huff_book__44c1_sm_short = {
- 2, 81,
- (char *)_huff_lengthlist__44c1_sm_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44cn1_s_long[] = {
- 4, 4, 7, 8, 7, 8,10,12,17, 3, 1, 6, 6, 7, 8,10,
- 12,15, 7, 6, 9, 9, 9,11,12,14,17, 8, 6, 9, 6, 7,
- 9,11,13,17, 7, 6, 9, 7, 7, 8, 9,12,15, 8, 8,10,
- 8, 7, 7, 7,10,14, 9,10,12,10, 8, 8, 8,10,14,11,
- 13,15,13,12,11,11,12,16,17,18,18,19,20,18,16,16,
- 20,
-};
-
-static const static_codebook _huff_book__44cn1_s_long = {
- 2, 81,
- (char *)_huff_lengthlist__44cn1_s_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44cn1_s_p1_0[] = {
- 1, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 5, 7, 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, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0,
- 0, 0, 0, 7, 9,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, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7,10, 9, 0, 0,
- 0, 0, 0, 0, 8,10, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 8, 8, 0, 0, 0, 0,
- 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8, 9,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, 7,10,10, 0, 0, 0,
- 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0,10,11,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, 7,10,10, 0, 0,
- 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0,10,11,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,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 8, 8, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0,
- 0, 0, 0, 0, 8,10,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, 7,10,10, 0, 0, 0, 0, 0, 0,10,11,11, 0,
- 0, 0, 0, 0, 0, 9, 9,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, 7,10,10, 0, 0, 0, 0, 0, 0,10,11,11,
- 0, 0, 0, 0, 0, 0, 9,11, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44cn1_s_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__44cn1_s_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44cn1_s_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44cn1_s_p2_0[] = {
- 1, 4, 4, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 6, 7, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44cn1_s_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44cn1_s_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44cn1_s_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44cn1_s_p3_0[] = {
- 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
- 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
- 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
- 9, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
- 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44cn1_s_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44cn1_s_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44cn1_s_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44cn1_s_p4_0[] = {
- 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 6, 6, 7, 7,
- 9, 9, 0, 0, 0, 6, 6, 7, 7, 9, 9, 0, 0, 0, 7, 7,
- 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0,
- 9, 9, 9, 9,10,10, 0, 0, 0, 9, 9, 9, 9,10,10, 0,
- 0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0,10,10,11,
- 11,
-};
-
-static const static_codebook _44cn1_s_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44cn1_s_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44cn1_s_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p5_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44cn1_s_p5_0[] = {
- 1, 4, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,10,
- 10, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10,
- 11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
- 10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,11,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,11,11, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,10,
- 10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,
- 10,10,11,11,11,12,12, 0, 0, 0, 9, 9,10, 9,10,10,
- 10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,
- 10,10,10,11,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
- 9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
- 10,10,11,10,11,11,11,12,13,12,13,13, 0, 0, 0, 0,
- 0, 0, 0,11,10,11,11,12,12,12,12,13,13, 0, 0, 0,
- 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, 0,
- 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,13,13,13,13,13,14,14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,12,13,13,14,
- 14,
-};
-
-static const static_codebook _44cn1_s_p5_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44cn1_s_p5_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44cn1_s_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44cn1_s_p6_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 6, 6,10, 9, 9,11,
- 9, 9, 4, 6, 6,10, 9, 9,10, 9, 9, 7,10,10,11,11,
- 11,12,11,11, 7, 9, 9,11,11,10,11,10,10, 7, 9, 9,
- 11,10,11,11,10,10, 7,10,10,11,11,11,12,11,11, 7,
- 9, 9,11,10,10,11,10,10, 7, 9, 9,11,10,10,11,10,
- 10,
-};
-
-static const static_codebook _44cn1_s_p6_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44cn1_s_p6_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44cn1_s_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p6_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44cn1_s_p6_1[] = {
- 1, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,10, 7, 6,
- 8, 8, 8, 8, 8, 8,10,10,10, 7, 6, 7, 7, 8, 8, 8,
- 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
- 7, 8, 8, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 9, 9,
- 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10,
- 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9,
- 9, 9, 9,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,10,
- 10,10,10, 9, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _44cn1_s_p6_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44cn1_s_p6_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44cn1_s_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44cn1_s_p7_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
- 7, 7, 8, 8, 8, 8, 9, 9,11,11, 7, 5, 5, 7, 7, 8,
- 8, 8, 8, 9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9, 9,10,10,10,11,11,11,12, 0,13,
- 13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0,10,10,
- 10,10,11,11,12,12,12,13, 0, 0, 0,10,10,10,10,11,
- 11,12,12,13,12, 0, 0, 0,14,14,11,10,11,12,12,13,
- 13,14, 0, 0, 0,15,15,11,11,12,11,12,12,14,13, 0,
- 0, 0, 0, 0,12,12,12,12,13,13,14,14, 0, 0, 0, 0,
- 0,13,13,12,12,13,13,13,14,
-};
-
-static const static_codebook _44cn1_s_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44cn1_s_p7_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44cn1_s_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p7_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44cn1_s_p7_1[] = {
- 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
- 6, 6, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44cn1_s_p7_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44cn1_s_p7_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44cn1_s_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p8_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44cn1_s_p8_0[] = {
- 1, 7, 7,11,11, 8,11,11,11,11, 4,11, 3,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11, 7,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,10,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11, 8,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,
-};
-
-static const static_codebook _44cn1_s_p8_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44cn1_s_p8_0,
- 1, -518283264, 1627103232, 3, 0,
- (long *)_vq_quantlist__44cn1_s_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p8_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44cn1_s_p8_1[] = {
- 1, 4, 4, 6, 6, 8, 8, 9,10,10,11,11,11, 6, 5, 5,
- 7, 7, 8, 8, 9,10, 9,11,11,12, 5, 5, 5, 7, 7, 8,
- 9,10,10,12,12,14,13,15, 7, 7, 8, 8, 9,10,11,11,
- 10,12,10,11,15, 7, 8, 8, 8, 9, 9,11,11,13,12,12,
- 13,15,10,10, 8, 8,10,10,12,12,11,14,10,10,15,11,
- 11, 8, 8,10,10,12,13,13,14,15,13,15,15,15,10,10,
- 10,10,12,12,13,12,13,10,15,15,15,10,10,11,10,13,
- 11,13,13,15,13,15,15,15,13,13,10,11,11,11,12,10,
- 14,11,15,15,14,14,13,10,10,12,11,13,13,14,14,15,
- 15,15,15,15,11,11,11,11,12,11,15,12,15,15,15,15,
- 15,12,12,11,11,14,12,13,14,
-};
-
-static const static_codebook _44cn1_s_p8_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44cn1_s_p8_1,
- 1, -522616832, 1620115456, 4, 0,
- (long *)_vq_quantlist__44cn1_s_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44cn1_s_p8_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44cn1_s_p8_2[] = {
- 3, 4, 3, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,
- 9,10,11,11, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9,10,10,10, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9,
- 9, 9,10, 9,10,11,10, 7, 6, 7, 7, 8, 8, 9, 9, 9,
- 9, 9, 9, 9,10,10,10,11, 7, 7, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9,10,11,11,11, 8, 8, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9,11,10,10,11,11, 8, 8, 8,
- 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,11,11, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,10,11,11, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,11,10,11,11,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,10,11,
- 11,11,11, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,11,11,
- 10,11,11,11, 9,10,10, 9, 9, 9, 9, 9, 9, 9,10,11,
- 11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
- 11,11,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
- 11,11,11,10,11,11,11,11,11, 9, 9, 9,10, 9, 9, 9,
- 9,
-};
-
-static const static_codebook _44cn1_s_p8_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44cn1_s_p8_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44cn1_s_p8_2,
- 0
-};
-
-static const char _huff_lengthlist__44cn1_s_short[] = {
- 10, 9,12,15,12,13,16,14,16, 7, 1, 5,14, 7,10,13,
- 16,16, 9, 4, 6,16, 8,11,16,16,16,14, 4, 7,16, 9,
- 12,14,16,16,10, 5, 7,14, 9,12,14,15,15,13, 8, 9,
- 14,10,12,13,14,15,13, 9, 9, 7, 6, 8,11,12,12,14,
- 8, 8, 5, 4, 5, 8,11,12,16,10,10, 6, 5, 6, 8, 9,
- 10,
-};
-
-static const static_codebook _huff_book__44cn1_s_short = {
- 2, 81,
- (char *)_huff_lengthlist__44cn1_s_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44cn1_sm_long[] = {
- 3, 3, 8, 8, 8, 8,10,12,14, 3, 2, 6, 7, 7, 8,10,
- 12,16, 7, 6, 7, 9, 8,10,12,14,16, 8, 6, 8, 4, 5,
- 7, 9,11,13, 7, 6, 8, 5, 6, 7, 9,11,14, 8, 8,10,
- 7, 7, 6, 8,10,13, 9,11,12, 9, 9, 7, 8,10,12,10,
- 13,15,11,11,10, 9,10,13,13,16,17,14,15,14,13,14,
- 17,
-};
-
-static const static_codebook _huff_book__44cn1_sm_long = {
- 2, 81,
- (char *)_huff_lengthlist__44cn1_sm_long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p1_0[] = {
- 1, 4, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
- 0, 0, 5, 7, 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, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0,
- 0, 0, 0, 7, 8, 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, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
- 0, 0, 0, 0, 8, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 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, 8, 8, 0, 0, 0, 0,
- 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 8, 9, 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, 7,10, 9, 0, 0, 0,
- 0, 0, 0, 9, 9,10, 0, 0, 0, 0, 0, 0, 9,10,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, 7, 9, 9, 0, 0,
- 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,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, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
- 0, 0, 0, 0, 8, 9,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, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
- 0, 0, 0, 0, 0, 8, 9,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, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,10,10,
- 0, 0, 0, 0, 0, 0, 9,10, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44cn1_sm_p1_0 = {
- 8, 6561,
- (char *)_vq_lengthlist__44cn1_sm_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44cn1_sm_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p2_0[] = {
- 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 7, 7, 7, 9, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44cn1_sm_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44cn1_sm_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44cn1_sm_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p3_0[] = {
- 1, 3, 4, 7, 7, 0, 0, 0, 0, 0, 4, 4, 7, 7, 0, 0,
- 0, 0, 0, 4, 5, 7, 7, 0, 0, 0, 0, 0, 6, 7, 8, 8,
- 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0,
- 9, 9, 0, 0, 0, 0, 0, 0, 0,10, 9, 0, 0, 0, 0, 0,
- 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
-};
-
-static const static_codebook _44cn1_sm_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44cn1_sm_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44cn1_sm_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p4_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p4_0[] = {
- 1, 4, 3, 6, 6, 7, 7, 9, 9, 0, 5, 5, 7, 7, 8, 7,
- 9, 9, 0, 5, 5, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 8,
- 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
- 9, 9, 9, 9,10,10, 0, 0, 0, 9, 9, 9, 9,10,10, 0,
- 0, 0,10,10,10,10,11,11, 0, 0, 0, 0, 0,10,10,11,
- 11,
-};
-
-static const static_codebook _44cn1_sm_p4_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44cn1_sm_p4_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44cn1_sm_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p5_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p5_0[] = {
- 1, 4, 4, 6, 6, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,
- 11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
- 12,12, 0, 6, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
- 11,12,12, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,11,
- 11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
- 11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
- 10,11,11,12,12,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
- 10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10,
- 10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
- 10,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0, 0, 9,
- 9,10,10,11,11,12,12,12,13,13,13, 0, 0, 0, 0, 0,
- 10,10,11,11,11,11,12,12,13,13,14,14, 0, 0, 0, 0,
- 0, 0, 0,11,11,11,11,12,12,13,13,14,14, 0, 0, 0,
- 0, 0, 0, 0,11,11,12,12,13,13,13,13,14,14, 0, 0,
- 0, 0, 0, 0, 0,11,11,12,12,13,13,13,13,14,14, 0,
- 0, 0, 0, 0, 0, 0,12,12,12,13,13,13,14,14,14,14,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,14,14,14,
- 14,
-};
-
-static const static_codebook _44cn1_sm_p5_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44cn1_sm_p5_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44cn1_sm_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p6_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p6_0[] = {
- 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 6,10, 9, 9,11,
- 9, 9, 4, 6, 7,10, 9, 9,11, 9, 9, 7,10,10,10,11,
- 11,11,11,10, 6, 9, 9,11,10,10,11,10,10, 6, 9, 9,
- 11,10,11,11,10,10, 7,11,11,11,11,11,12,11,11, 7,
- 9, 9,11,10,10,12,10,10, 7, 9, 9,11,10,10,11,10,
- 10,
-};
-
-static const static_codebook _44cn1_sm_p6_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44cn1_sm_p6_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44cn1_sm_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p6_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p6_1[] = {
- 2, 4, 4, 5, 5, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6,
- 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
- 8,10, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
- 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8,
- 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,
- 8, 8, 8, 8, 8, 8, 9, 9,10,10,10,10,10, 8, 8, 8,
- 8, 9, 9,10,10,10,10,10, 9, 9, 9, 9, 8, 9,10,10,
- 10,10,10, 8, 9, 8, 8, 9, 8,
-};
-
-static const static_codebook _44cn1_sm_p6_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44cn1_sm_p6_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44cn1_sm_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p7_0[] = {
- 1, 4, 4, 6, 6, 7, 7, 7, 7, 9, 9,10,10, 7, 5, 5,
- 7, 7, 8, 8, 8, 8,10, 9,11,10, 7, 5, 5, 7, 7, 8,
- 8, 8, 8, 9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
- 11, 0,12,12, 9, 9, 9,10,10,10,11,11,12,12, 0,13,
- 13, 9, 9, 9, 9,10,10,11,11,12,12, 0, 0, 0,10,10,
- 10,10,11,11,12,12,12,13, 0, 0, 0,10,10,10,10,11,
- 11,12,12,12,12, 0, 0, 0,14,14,11,11,11,11,12,13,
- 13,13, 0, 0, 0,14,14,11,10,11,11,12,12,13,13, 0,
- 0, 0, 0, 0,12,12,12,12,13,13,13,14, 0, 0, 0, 0,
- 0,13,12,12,12,13,13,13,14,
-};
-
-static const static_codebook _44cn1_sm_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44cn1_sm_p7_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44cn1_sm_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p7_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p7_1[] = {
- 2, 4, 4, 4, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
- 5, 5, 5, 5, 6, 6, 6, 5, 5,
-};
-
-static const static_codebook _44cn1_sm_p7_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44cn1_sm_p7_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44cn1_sm_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p8_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p8_0[] = {
- 1, 4, 4,12,11,13,13,14,14, 4, 7, 7,11,13,14,14,
- 14,14, 3, 8, 3,14,14,14,14,14,14,14,10,12,14,14,
- 14,14,14,14,14,14, 5,14, 8,14,14,14,14,14,12,14,
- 13,14,14,14,14,14,14,14,13,14,10,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,
-};
-
-static const static_codebook _44cn1_sm_p8_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44cn1_sm_p8_0,
- 1, -516186112, 1627103232, 4, 0,
- (long *)_vq_quantlist__44cn1_sm_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p8_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p8_1[] = {
- 1, 4, 4, 6, 6, 8, 8, 9, 9,10,11,11,11, 6, 5, 5,
- 7, 7, 8, 8,10,10,10,11,11,11, 6, 5, 5, 7, 7, 8,
- 8,10,10,11,12,12,12,14, 7, 7, 7, 8, 9, 9,11,11,
- 11,12,11,12,17, 7, 7, 8, 7, 9, 9,11,11,12,12,12,
- 12,14,11,11, 8, 8,10,10,11,12,12,13,11,12,14,11,
- 11, 8, 8,10,10,11,12,12,13,13,12,14,15,14,10,10,
- 10,10,11,12,12,12,12,11,14,13,16,10,10,10, 9,12,
- 11,12,12,13,14,14,15,14,14,13,10,10,11,11,12,11,
- 13,11,14,12,15,13,14,11,10,12,10,12,12,13,13,13,
- 13,14,15,15,12,12,11,11,12,11,13,12,14,14,14,14,
- 17,12,12,11,10,13,11,13,13,
-};
-
-static const static_codebook _44cn1_sm_p8_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44cn1_sm_p8_1,
- 1, -522616832, 1620115456, 4, 0,
- (long *)_vq_quantlist__44cn1_sm_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44cn1_sm_p8_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44cn1_sm_p8_2[] = {
- 3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9,10, 6, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9,10, 6, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9, 9, 9,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9,11,10,11, 8, 8, 8, 8, 8, 8,
- 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,11,11, 8, 8, 8,
- 8, 9, 9, 9, 9, 9, 9, 9, 9,11,10,11,11,11, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,10,11,11, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,11,10,11,11,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,11,11,
- 11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11,11,
- 11,11,11,11, 9,10,10,10, 9, 9, 9, 9, 9, 9,11,10,
- 11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
- 11,11,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
- 10,11,11,11,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9,
- 9,
-};
-
-static const static_codebook _44cn1_sm_p8_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44cn1_sm_p8_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44cn1_sm_p8_2,
- 0
-};
-
-static const char _huff_lengthlist__44cn1_sm_short[] = {
- 5, 6,12,14,12,14,16,17,18, 4, 2, 5,11, 7,10,12,
- 14,15, 9, 4, 5,11, 7,10,13,15,18,15, 6, 7, 5, 6,
- 8,11,13,16,11, 5, 6, 5, 5, 6, 9,13,15,12, 5, 7,
- 6, 5, 6, 9,12,14,12, 6, 7, 8, 6, 7, 9,12,13,14,
- 8, 8, 7, 5, 5, 8,10,12,16, 9, 9, 8, 6, 6, 7, 9,
- 9,
-};
-
-static const static_codebook _huff_book__44cn1_sm_short = {
- 2, 81,
- (char *)_huff_lengthlist__44cn1_sm_short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
diff --git a/drivers/vorbis/books/floor/floor_books.h b/drivers/vorbis/books/floor/floor_books.h
deleted file mode 100644
index e925313f7b..0000000000
--- a/drivers/vorbis/books/floor/floor_books.h
+++ /dev/null
@@ -1,1547 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: static codebooks autogenerated by huff/huffbuld
- last modified: $Id: floor_books.h 19057 2014-01-22 12:32:31Z xiphmont $
-
- ********************************************************************/
-
-#include "codebook.h"
-
-static const char _huff_lengthlist_line_256x7_0sub1[] = {
- 0, 2, 3, 3, 3, 3, 4, 3, 4,
-};
-
-static const static_codebook _huff_book_line_256x7_0sub1 = {
- 1, 9,
- (char *)_huff_lengthlist_line_256x7_0sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x7_0sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 3, 4, 3, 5, 3,
- 6, 3, 6, 4, 6, 4, 7, 5, 7,
-};
-
-static const static_codebook _huff_book_line_256x7_0sub2 = {
- 1, 25,
- (char *)_huff_lengthlist_line_256x7_0sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x7_0sub3[] = {
- 0, 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, 5, 2, 5, 3, 5, 3,
- 6, 3, 6, 4, 7, 6, 7, 8, 7, 9, 8, 9, 9, 9,10, 9,
- 11,13,11,13,10,10,13,13,13,13,13,13,12,12,12,12,
-};
-
-static const static_codebook _huff_book_line_256x7_0sub3 = {
- 1, 64,
- (char *)_huff_lengthlist_line_256x7_0sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x7_1sub1[] = {
- 0, 3, 3, 3, 3, 2, 4, 3, 4,
-};
-
-static const static_codebook _huff_book_line_256x7_1sub1 = {
- 1, 9,
- (char *)_huff_lengthlist_line_256x7_1sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x7_1sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 4, 3, 4, 4,
- 5, 4, 6, 5, 6, 7, 6, 8, 8,
-};
-
-static const static_codebook _huff_book_line_256x7_1sub2 = {
- 1, 25,
- (char *)_huff_lengthlist_line_256x7_1sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x7_1sub3[] = {
- 0, 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, 4, 3, 6, 3, 7,
- 3, 8, 5, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7,
-};
-
-static const static_codebook _huff_book_line_256x7_1sub3 = {
- 1, 64,
- (char *)_huff_lengthlist_line_256x7_1sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x7_class0[] = {
- 7, 5, 5, 9, 9, 6, 6, 9,12, 8, 7, 8,11, 8, 9,15,
- 6, 3, 3, 7, 7, 4, 3, 6, 9, 6, 5, 6, 8, 6, 8,15,
- 8, 5, 5, 9, 8, 5, 4, 6,10, 7, 5, 5,11, 8, 7,15,
- 14,15,13,13,13,13, 8,11,15,10, 7, 6,11, 9,10,15,
-};
-
-static const static_codebook _huff_book_line_256x7_class0 = {
- 1, 64,
- (char *)_huff_lengthlist_line_256x7_class0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x7_class1[] = {
- 5, 6, 8,15, 6, 9,10,15,10,11,12,15,15,15,15,15,
- 4, 6, 7,15, 6, 7, 8,15, 9, 8, 9,15,15,15,15,15,
- 6, 8, 9,15, 7, 7, 8,15,10, 9,10,15,15,15,15,15,
- 15,13,15,15,15,10,11,15,15,13,13,15,15,15,15,15,
- 4, 6, 7,15, 6, 8, 9,15,10,10,12,15,15,15,15,15,
- 2, 5, 6,15, 5, 6, 7,15, 8, 6, 7,15,15,15,15,15,
- 5, 6, 8,15, 5, 6, 7,15, 9, 6, 7,15,15,15,15,15,
- 14,12,13,15,12,10,11,15,15,15,15,15,15,15,15,15,
- 7, 8, 9,15, 9,10,10,15,15,14,14,15,15,15,15,15,
- 5, 6, 7,15, 7, 8, 9,15,12, 9,10,15,15,15,15,15,
- 7, 7, 9,15, 7, 7, 8,15,12, 8, 9,15,15,15,15,15,
- 13,13,14,15,12,11,12,15,15,15,15,15,15,15,15,15,
- 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
- 13,13,13,15,15,15,15,15,15,15,15,15,15,15,15,15,
- 15,12,13,15,15,12,13,15,15,14,15,15,15,15,15,15,
- 15,15,15,15,15,15,13,15,15,15,15,15,15,15,15,15,
-};
-
-static const static_codebook _huff_book_line_256x7_class1 = {
- 1, 256,
- (char *)_huff_lengthlist_line_256x7_class1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_0sub0[] = {
- 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 6, 5, 6, 6, 6, 6, 5, 6, 6, 7, 6, 7, 6, 7, 6,
- 7, 6, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 9, 7, 9, 7,
- 9, 7, 9, 8, 9, 8,10, 8,10, 8,10, 7,10, 6,10, 8,
- 10, 8,11, 7,10, 7,11, 8,11,11,12,12,11,11,12,11,
- 13,11,13,11,13,12,15,12,13,13,14,14,14,14,14,15,
- 15,15,16,14,17,19,19,18,18,18,18,18,18,18,18,18,
- 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
-};
-
-static const static_codebook _huff_book_line_512x17_0sub0 = {
- 1, 128,
- (char *)_huff_lengthlist_line_512x17_0sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_1sub0[] = {
- 2, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 6, 5,
- 6, 5, 6, 6, 7, 6, 7, 6, 8, 7, 8, 7, 8, 7, 8, 7,
-};
-
-static const static_codebook _huff_book_line_512x17_1sub0 = {
- 1, 32,
- (char *)_huff_lengthlist_line_512x17_1sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_1sub1[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 3, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 6, 5,
- 6, 5, 7, 5, 8, 6, 8, 6, 8, 6, 8, 6, 8, 7, 9, 7,
- 9, 7,11, 9,11,11,12,11,14,12,14,16,14,16,13,16,
- 14,16,12,15,13,16,14,16,13,14,12,15,13,15,13,13,
- 13,15,12,14,14,15,13,15,12,15,15,15,15,15,15,15,
- 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
-};
-
-static const static_codebook _huff_book_line_512x17_1sub1 = {
- 1, 128,
- (char *)_huff_lengthlist_line_512x17_1sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_2sub1[] = {
- 0, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 5, 4, 5, 3,
- 5, 3,
-};
-
-static const static_codebook _huff_book_line_512x17_2sub1 = {
- 1, 18,
- (char *)_huff_lengthlist_line_512x17_2sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_2sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 3, 4, 3, 4, 4, 5, 4, 5, 4, 6, 4, 6, 5,
- 6, 5, 7, 5, 7, 6, 8, 6, 8, 6, 8, 7, 8, 7, 9, 7,
- 9, 8,
-};
-
-static const static_codebook _huff_book_line_512x17_2sub2 = {
- 1, 50,
- (char *)_huff_lengthlist_line_512x17_2sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_2sub3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 3, 3, 4, 3, 4, 4, 5, 5, 6, 6, 7, 7,
- 7, 8, 8,11, 8, 9, 9, 9,10,11,11,11, 9,10,10,11,
- 11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _huff_book_line_512x17_2sub3 = {
- 1, 128,
- (char *)_huff_lengthlist_line_512x17_2sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_3sub1[] = {
- 0, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 5, 4, 5,
- 5, 5,
-};
-
-static const static_codebook _huff_book_line_512x17_3sub1 = {
- 1, 18,
- (char *)_huff_lengthlist_line_512x17_3sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_3sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 3, 3, 4, 3, 5, 4, 6, 4, 6, 5, 7, 6, 7,
- 6, 8, 6, 8, 7, 9, 8,10, 8,12, 9,13,10,15,10,15,
- 11,14,
-};
-
-static const static_codebook _huff_book_line_512x17_3sub2 = {
- 1, 50,
- (char *)_huff_lengthlist_line_512x17_3sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_3sub3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 8, 4, 8, 4, 8, 4, 8, 5, 8, 5, 8, 6, 8,
- 4, 8, 4, 8, 5, 8, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _huff_book_line_512x17_3sub3 = {
- 1, 128,
- (char *)_huff_lengthlist_line_512x17_3sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_class1[] = {
- 1, 2, 3, 6, 5, 4, 7, 7,
-};
-
-static const static_codebook _huff_book_line_512x17_class1 = {
- 1, 8,
- (char *)_huff_lengthlist_line_512x17_class1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_class2[] = {
- 3, 3, 3,14, 5, 4, 4,11, 8, 6, 6,10,17,12,11,17,
- 6, 5, 5,15, 5, 3, 4,11, 8, 5, 5, 8,16, 9,10,14,
- 10, 8, 9,17, 8, 6, 6,13,10, 7, 7,10,16,11,13,14,
- 17,17,17,17,17,16,16,16,16,15,16,16,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_512x17_class2 = {
- 1, 64,
- (char *)_huff_lengthlist_line_512x17_class2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_512x17_class3[] = {
- 2, 4, 6,17, 4, 5, 7,17, 8, 7,10,17,17,17,17,17,
- 3, 4, 6,15, 3, 3, 6,15, 7, 6, 9,17,17,17,17,17,
- 6, 8,10,17, 6, 6, 8,16, 9, 8,10,17,17,15,16,17,
- 17,17,17,17,12,15,15,16,12,15,15,16,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_512x17_class3 = {
- 1, 64,
- (char *)_huff_lengthlist_line_512x17_class3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x4_class0[] = {
- 7, 7, 7,11, 6, 6, 7,11, 7, 6, 6,10,12,10,10,13,
- 7, 7, 8,11, 7, 7, 7,11, 7, 6, 7,10,11,10,10,13,
- 10,10, 9,12, 9, 9, 9,11, 8, 8, 8,11,13,11,10,14,
- 15,15,14,15,15,14,13,14,15,12,12,17,17,17,17,17,
- 7, 7, 6, 9, 6, 6, 6, 9, 7, 6, 6, 8,11,11,10,12,
- 7, 7, 7, 9, 7, 6, 6, 9, 7, 6, 6, 9,13,10,10,11,
- 10, 9, 8,10, 9, 8, 8,10, 8, 8, 7, 9,13,12,10,11,
- 17,14,14,13,15,14,12,13,17,13,12,15,17,17,14,17,
- 7, 6, 6, 7, 6, 6, 5, 7, 6, 6, 6, 6,11, 9, 9, 9,
- 7, 7, 6, 7, 7, 6, 6, 7, 6, 6, 6, 6,10, 9, 8, 9,
- 10, 9, 8, 8, 9, 8, 7, 8, 8, 7, 6, 8,11,10, 9,10,
- 17,17,12,15,15,15,12,14,14,14,10,12,15,13,12,13,
- 11,10, 8,10,11,10, 8, 8,10, 9, 7, 7,10, 9, 9,11,
- 11,11, 9,10,11,10, 8, 9,10, 8, 6, 8,10, 9, 9,11,
- 14,13,10,12,12,11,10,10, 8, 7, 8,10,10,11,11,12,
- 17,17,15,17,17,17,17,17,17,13,12,17,17,17,14,17,
-};
-
-static const static_codebook _huff_book_line_128x4_class0 = {
- 1, 256,
- (char *)_huff_lengthlist_line_128x4_class0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x4_0sub0[] = {
- 2, 2, 2, 2,
-};
-
-static const static_codebook _huff_book_line_128x4_0sub0 = {
- 1, 4,
- (char *)_huff_lengthlist_line_128x4_0sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x4_0sub1[] = {
- 0, 0, 0, 0, 3, 2, 3, 2, 3, 3,
-};
-
-static const static_codebook _huff_book_line_128x4_0sub1 = {
- 1, 10,
- (char *)_huff_lengthlist_line_128x4_0sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x4_0sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 4, 3, 4, 3,
- 4, 4, 5, 4, 5, 4, 6, 5, 6,
-};
-
-static const static_codebook _huff_book_line_128x4_0sub2 = {
- 1, 25,
- (char *)_huff_lengthlist_line_128x4_0sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x4_0sub3[] = {
- 0, 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, 4, 3, 5, 3, 5, 3,
- 5, 4, 6, 5, 6, 5, 7, 6, 6, 7, 7, 9, 9,11,11,16,
- 11,14,10,11,11,13,16,15,15,15,15,15,15,15,15,15,
-};
-
-static const static_codebook _huff_book_line_128x4_0sub3 = {
- 1, 64,
- (char *)_huff_lengthlist_line_128x4_0sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x4_class0[] = {
- 6, 7, 7,12, 6, 6, 7,12, 7, 6, 6,10,15,12,11,13,
- 7, 7, 8,13, 7, 7, 8,12, 7, 7, 7,11,12,12,11,13,
- 10, 9, 9,11, 9, 9, 9,10,10, 8, 8,12,14,12,12,14,
- 11,11,12,14,11,12,11,15,15,12,13,15,15,15,15,15,
- 6, 6, 7,10, 6, 6, 6,11, 7, 6, 6, 9,14,12,11,13,
- 7, 7, 7,10, 6, 6, 7, 9, 7, 7, 6,10,13,12,10,12,
- 9, 9, 9,11, 9, 9, 8, 9, 9, 8, 8,10,13,12,10,12,
- 12,12,11,13,12,12,11,12,15,13,12,15,15,15,14,14,
- 6, 6, 6, 8, 6, 6, 5, 6, 7, 7, 6, 5,11,10, 9, 8,
- 7, 6, 6, 7, 6, 6, 5, 6, 7, 7, 6, 6,11,10, 9, 8,
- 8, 8, 8, 9, 8, 8, 7, 8, 8, 8, 6, 7,11,10, 9, 9,
- 14,11,10,14,14,11,10,15,13,11, 9,11,15,12,12,11,
- 11, 9, 8, 8,10, 9, 8, 9,11,10, 9, 8,12,11,12,11,
- 13,10, 8, 9,11,10, 8, 9,10, 9, 8, 9,10, 8,12,12,
- 15,11,10,10,13,11,10,10, 8, 8, 7,12,10, 9,11,12,
- 15,12,11,15,13,11,11,15,12,14,11,13,15,15,13,13,
-};
-
-static const static_codebook _huff_book_line_256x4_class0 = {
- 1, 256,
- (char *)_huff_lengthlist_line_256x4_class0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x4_0sub0[] = {
- 2, 2, 2, 2,
-};
-
-static const static_codebook _huff_book_line_256x4_0sub0 = {
- 1, 4,
- (char *)_huff_lengthlist_line_256x4_0sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x4_0sub1[] = {
- 0, 0, 0, 0, 2, 2, 3, 3, 3, 3,
-};
-
-static const static_codebook _huff_book_line_256x4_0sub1 = {
- 1, 10,
- (char *)_huff_lengthlist_line_256x4_0sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x4_0sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 4, 3, 4, 3,
- 5, 3, 5, 4, 5, 4, 6, 4, 6,
-};
-
-static const static_codebook _huff_book_line_256x4_0sub2 = {
- 1, 25,
- (char *)_huff_lengthlist_line_256x4_0sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x4_0sub3[] = {
- 0, 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, 4, 3, 5, 3, 5, 3,
- 6, 4, 7, 4, 7, 5, 7, 6, 7, 6, 7, 8,10,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,12,12,12,12,12,
-};
-
-static const static_codebook _huff_book_line_256x4_0sub3 = {
- 1, 64,
- (char *)_huff_lengthlist_line_256x4_0sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x7_class0[] = {
- 10, 7, 8,13, 9, 6, 7,11,10, 8, 8,12,17,17,17,17,
- 7, 5, 5, 9, 6, 4, 4, 8, 8, 5, 5, 8,16,14,13,16,
- 7, 5, 5, 7, 6, 3, 3, 5, 8, 5, 4, 7,14,12,12,15,
- 10, 7, 8, 9, 7, 5, 5, 6, 9, 6, 5, 5,15,12, 9,10,
-};
-
-static const static_codebook _huff_book_line_128x7_class0 = {
- 1, 64,
- (char *)_huff_lengthlist_line_128x7_class0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x7_class1[] = {
- 8,13,17,17, 8,11,17,17,11,13,17,17,17,17,17,17,
- 6,10,16,17, 6,10,15,17, 8,10,16,17,17,17,17,17,
- 9,13,15,17, 8,11,17,17,10,12,17,17,17,17,17,17,
- 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
- 6,11,15,17, 7,10,15,17, 8,10,17,17,17,15,17,17,
- 4, 8,13,17, 4, 7,13,17, 6, 8,15,17,16,15,17,17,
- 6,11,15,17, 6, 9,13,17, 8,10,17,17,15,17,17,17,
- 16,17,17,17,12,14,15,17,13,14,15,17,17,17,17,17,
- 5,10,14,17, 5, 9,14,17, 7, 9,15,17,15,15,17,17,
- 3, 7,12,17, 3, 6,11,17, 5, 7,13,17,12,12,17,17,
- 5, 9,14,17, 3, 7,11,17, 5, 8,13,17,13,11,16,17,
- 12,17,17,17, 9,14,15,17,10,11,14,17,16,14,17,17,
- 8,12,17,17, 8,12,17,17,10,12,17,17,17,17,17,17,
- 5,10,17,17, 5, 9,15,17, 7, 9,17,17,13,13,17,17,
- 7,11,17,17, 6,10,15,17, 7, 9,15,17,12,11,17,17,
- 12,15,17,17,11,14,17,17,11,10,15,17,17,16,17,17,
-};
-
-static const static_codebook _huff_book_line_128x7_class1 = {
- 1, 256,
- (char *)_huff_lengthlist_line_128x7_class1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x7_0sub1[] = {
- 0, 3, 3, 3, 3, 3, 3, 3, 3,
-};
-
-static const static_codebook _huff_book_line_128x7_0sub1 = {
- 1, 9,
- (char *)_huff_lengthlist_line_128x7_0sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x7_0sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 4, 4, 4, 4,
- 5, 4, 5, 4, 5, 4, 6, 4, 6,
-};
-
-static const static_codebook _huff_book_line_128x7_0sub2 = {
- 1, 25,
- (char *)_huff_lengthlist_line_128x7_0sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x7_0sub3[] = {
- 0, 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, 5, 3, 5, 3, 5, 4,
- 5, 4, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
- 7, 8, 9,11,13,13,13,13,13,13,13,13,13,13,13,13,
-};
-
-static const static_codebook _huff_book_line_128x7_0sub3 = {
- 1, 64,
- (char *)_huff_lengthlist_line_128x7_0sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x7_1sub1[] = {
- 0, 3, 3, 2, 3, 3, 4, 3, 4,
-};
-
-static const static_codebook _huff_book_line_128x7_1sub1 = {
- 1, 9,
- (char *)_huff_lengthlist_line_128x7_1sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x7_1sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 3, 6, 3, 6, 3,
- 6, 3, 7, 3, 8, 4, 9, 4, 9,
-};
-
-static const static_codebook _huff_book_line_128x7_1sub2 = {
- 1, 25,
- (char *)_huff_lengthlist_line_128x7_1sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x7_1sub3[] = {
- 0, 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, 7, 2, 7, 3, 8, 4,
- 9, 5, 9, 8,10,11,11,12,14,14,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,13,13,13,13,
-};
-
-static const static_codebook _huff_book_line_128x7_1sub3 = {
- 1, 64,
- (char *)_huff_lengthlist_line_128x7_1sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_class1[] = {
- 1, 6, 3, 7, 2, 4, 5, 7,
-};
-
-static const static_codebook _huff_book_line_128x11_class1 = {
- 1, 8,
- (char *)_huff_lengthlist_line_128x11_class1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_class2[] = {
- 1, 6,12,16, 4,12,15,16, 9,15,16,16,16,16,16,16,
- 2, 5,11,16, 5,11,13,16, 9,13,16,16,16,16,16,16,
- 4, 8,12,16, 5, 9,12,16, 9,13,15,16,16,16,16,16,
- 15,16,16,16,11,14,13,16,12,15,16,16,16,16,16,15,
-};
-
-static const static_codebook _huff_book_line_128x11_class2 = {
- 1, 64,
- (char *)_huff_lengthlist_line_128x11_class2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_class3[] = {
- 7, 6, 9,17, 7, 6, 8,17,12, 9,11,16,16,16,16,16,
- 5, 4, 7,16, 5, 3, 6,14, 9, 6, 8,15,16,16,16,16,
- 5, 4, 6,13, 3, 2, 4,11, 7, 4, 6,13,16,11,10,14,
- 12,12,12,16, 9, 7,10,15,12, 9,11,16,16,15,15,16,
-};
-
-static const static_codebook _huff_book_line_128x11_class3 = {
- 1, 64,
- (char *)_huff_lengthlist_line_128x11_class3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_0sub0[] = {
- 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
- 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 6, 6, 6, 7, 6,
- 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 8, 6, 8, 6, 8, 7,
- 8, 7, 8, 7, 8, 7, 9, 7, 9, 8, 9, 8, 9, 8,10, 8,
- 10, 9,10, 9,10, 9,11, 9,11, 9,10,10,11,10,11,10,
- 11,11,11,11,11,11,12,13,14,14,14,15,15,16,16,16,
- 17,15,16,15,16,16,17,17,16,17,17,17,17,17,17,17,
- 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
-};
-
-static const static_codebook _huff_book_line_128x11_0sub0 = {
- 1, 128,
- (char *)_huff_lengthlist_line_128x11_0sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_1sub0[] = {
- 2, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5,
- 6, 5, 6, 5, 6, 5, 7, 6, 7, 6, 7, 6, 8, 6, 8, 6,
-};
-
-static const static_codebook _huff_book_line_128x11_1sub0 = {
- 1, 32,
- (char *)_huff_lengthlist_line_128x11_1sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_1sub1[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 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, 3, 5, 3, 6, 4, 6, 4, 7, 4, 7, 4, 7, 4, 8, 4,
- 8, 4, 9, 5, 9, 5, 9, 5, 9, 6,10, 6,10, 6,11, 7,
- 10, 7,10, 8,11, 9,11, 9,11,10,11,11,12,11,11,12,
- 15,15,12,14,11,14,12,14,11,14,13,14,12,14,11,14,
- 11,14,12,14,11,14,11,14,13,13,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
-};
-
-static const static_codebook _huff_book_line_128x11_1sub1 = {
- 1, 128,
- (char *)_huff_lengthlist_line_128x11_1sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_2sub1[] = {
- 0, 4, 5, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 4, 4,
- 5, 5,
-};
-
-static const static_codebook _huff_book_line_128x11_2sub1 = {
- 1, 18,
- (char *)_huff_lengthlist_line_128x11_2sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_2sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 3, 3, 4, 4, 4, 4, 5, 4, 5, 4, 6, 5, 7,
- 5, 7, 6, 8, 6, 8, 6, 9, 7, 9, 7,10, 7, 9, 8,11,
- 8,11,
-};
-
-static const static_codebook _huff_book_line_128x11_2sub2 = {
- 1, 50,
- (char *)_huff_lengthlist_line_128x11_2sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_2sub3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 8, 3, 8, 4, 8, 4, 8, 6, 8, 5, 8, 4, 8,
- 4, 8, 6, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _huff_book_line_128x11_2sub3 = {
- 1, 128,
- (char *)_huff_lengthlist_line_128x11_2sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_3sub1[] = {
- 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4,
- 5, 4,
-};
-
-static const static_codebook _huff_book_line_128x11_3sub1 = {
- 1, 18,
- (char *)_huff_lengthlist_line_128x11_3sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_3sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 3, 5, 4, 6, 4, 6, 4, 7, 4, 7, 4, 8, 4,
- 8, 4, 9, 4, 9, 4,10, 4,10, 5,10, 5,11, 5,12, 6,
- 12, 6,
-};
-
-static const static_codebook _huff_book_line_128x11_3sub2 = {
- 1, 50,
- (char *)_huff_lengthlist_line_128x11_3sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x11_3sub3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 6, 3, 7, 3, 8, 4, 8, 5, 8, 8, 8, 9,
- 7, 8, 8, 7, 7, 7, 8, 9,10, 9, 9,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9,
-};
-
-static const static_codebook _huff_book_line_128x11_3sub3 = {
- 1, 128,
- (char *)_huff_lengthlist_line_128x11_3sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_class1[] = {
- 1, 3, 4, 7, 2, 5, 6, 7,
-};
-
-static const static_codebook _huff_book_line_128x17_class1 = {
- 1, 8,
- (char *)_huff_lengthlist_line_128x17_class1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_class2[] = {
- 1, 4,10,19, 3, 8,13,19, 7,12,19,19,19,19,19,19,
- 2, 6,11,19, 8,13,19,19, 9,11,19,19,19,19,19,19,
- 6, 7,13,19, 9,13,19,19,10,13,18,18,18,18,18,18,
- 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
-};
-
-static const static_codebook _huff_book_line_128x17_class2 = {
- 1, 64,
- (char *)_huff_lengthlist_line_128x17_class2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_class3[] = {
- 3, 6,10,17, 4, 8,11,20, 8,10,11,20,20,20,20,20,
- 2, 4, 8,18, 4, 6, 8,17, 7, 8,10,20,20,17,20,20,
- 3, 5, 8,17, 3, 4, 6,17, 8, 8,10,17,17,12,16,20,
- 13,13,15,20,10,10,12,20,15,14,15,20,20,20,19,19,
-};
-
-static const static_codebook _huff_book_line_128x17_class3 = {
- 1, 64,
- (char *)_huff_lengthlist_line_128x17_class3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_0sub0[] = {
- 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
- 7, 5, 7, 5, 7, 5, 7, 5, 7, 5, 7, 5, 8, 5, 8, 5,
- 8, 5, 8, 5, 8, 6, 8, 6, 8, 6, 9, 6, 9, 6, 9, 6,
- 9, 6, 9, 7, 9, 7, 9, 7, 9, 7,10, 7,10, 8,10, 8,
- 10, 8,10, 8,10, 8,11, 8,11, 8,11, 8,11, 8,11, 9,
- 12, 9,12, 9,12, 9,12, 9,12,10,12,10,13,11,13,11,
- 14,12,14,13,15,14,16,14,17,15,18,16,20,20,20,20,
- 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
-};
-
-static const static_codebook _huff_book_line_128x17_0sub0 = {
- 1, 128,
- (char *)_huff_lengthlist_line_128x17_0sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_1sub0[] = {
- 2, 5, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 6, 5,
- 6, 5, 6, 5, 7, 6, 7, 6, 7, 6, 8, 6, 9, 7, 9, 7,
-};
-
-static const static_codebook _huff_book_line_128x17_1sub0 = {
- 1, 32,
- (char *)_huff_lengthlist_line_128x17_1sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_1sub1[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 3, 5, 3, 6, 3, 6, 4, 6, 4, 7, 4, 7, 5,
- 8, 5, 8, 6, 9, 7, 9, 7, 9, 8,10, 9,10, 9,11,10,
- 11,11,11,11,11,11,12,12,12,13,12,13,12,14,12,15,
- 12,14,12,16,13,17,13,17,14,17,14,16,13,17,14,17,
- 14,17,15,17,15,15,16,17,17,17,17,17,17,17,17,17,
- 17,17,17,17,17,17,16,16,16,16,16,16,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_128x17_1sub1 = {
- 1, 128,
- (char *)_huff_lengthlist_line_128x17_1sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_2sub1[] = {
- 0, 4, 5, 4, 6, 4, 8, 3, 9, 3, 9, 2, 9, 3, 8, 4,
- 9, 4,
-};
-
-static const static_codebook _huff_book_line_128x17_2sub1 = {
- 1, 18,
- (char *)_huff_lengthlist_line_128x17_2sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_2sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 1, 5, 3, 5, 3, 5, 4, 7, 5,10, 7,10, 7,
- 12,10,14,10,14, 9,14,11,14,14,14,13,13,13,13,13,
- 13,13,
-};
-
-static const static_codebook _huff_book_line_128x17_2sub2 = {
- 1, 50,
- (char *)_huff_lengthlist_line_128x17_2sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_2sub3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static const static_codebook _huff_book_line_128x17_2sub3 = {
- 1, 128,
- (char *)_huff_lengthlist_line_128x17_2sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_3sub1[] = {
- 0, 4, 4, 4, 4, 4, 4, 4, 5, 3, 5, 3, 5, 4, 6, 4,
- 6, 4,
-};
-
-static const static_codebook _huff_book_line_128x17_3sub1 = {
- 1, 18,
- (char *)_huff_lengthlist_line_128x17_3sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_3sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 5, 3, 6, 3, 6, 4, 7, 4, 7, 4, 7, 4, 8, 4,
- 8, 4, 8, 4, 8, 4, 9, 4, 9, 5,10, 5,10, 7,10, 8,
- 10, 8,
-};
-
-static const static_codebook _huff_book_line_128x17_3sub2 = {
- 1, 50,
- (char *)_huff_lengthlist_line_128x17_3sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_128x17_3sub3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 3, 4, 4, 4, 5, 4, 7, 5, 8, 5,11,
- 6,10, 6,12, 7,12, 7,12, 8,12, 8,12,10,12,12,12,
- 12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _huff_book_line_128x17_3sub3 = {
- 1, 128,
- (char *)_huff_lengthlist_line_128x17_3sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_class1[] = {
- 2,10, 8,14, 7,12,11,14, 1, 5, 3, 7, 4, 9, 7,13,
-};
-
-static const static_codebook _huff_book_line_1024x27_class1 = {
- 1, 16,
- (char *)_huff_lengthlist_line_1024x27_class1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_class2[] = {
- 1, 4, 2, 6, 3, 7, 5, 7,
-};
-
-static const static_codebook _huff_book_line_1024x27_class2 = {
- 1, 8,
- (char *)_huff_lengthlist_line_1024x27_class2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_class3[] = {
- 1, 5, 7,21, 5, 8, 9,21,10, 9,12,20,20,16,20,20,
- 4, 8, 9,20, 6, 8, 9,20,11,11,13,20,20,15,17,20,
- 9,11,14,20, 8,10,15,20,11,13,15,20,20,20,20,20,
- 20,20,20,20,13,20,20,20,18,18,20,20,20,20,20,20,
- 3, 6, 8,20, 6, 7, 9,20,10, 9,12,20,20,20,20,20,
- 5, 7, 9,20, 6, 6, 9,20,10, 9,12,20,20,20,20,20,
- 8,10,13,20, 8, 9,12,20,11,10,12,20,20,20,20,20,
- 18,20,20,20,15,17,18,20,18,17,18,20,20,20,20,20,
- 7,10,12,20, 8, 9,11,20,14,13,14,20,20,20,20,20,
- 6, 9,12,20, 7, 8,11,20,12,11,13,20,20,20,20,20,
- 9,11,15,20, 8,10,14,20,12,11,14,20,20,20,20,20,
- 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
- 11,16,18,20,15,15,17,20,20,17,20,20,20,20,20,20,
- 9,14,16,20,12,12,15,20,17,15,18,20,20,20,20,20,
- 16,19,18,20,15,16,20,20,17,17,20,20,20,20,20,20,
- 20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
-};
-
-static const static_codebook _huff_book_line_1024x27_class3 = {
- 1, 256,
- (char *)_huff_lengthlist_line_1024x27_class3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_class4[] = {
- 2, 3, 7,13, 4, 4, 7,15, 8, 6, 9,17,21,16,15,21,
- 2, 5, 7,11, 5, 5, 7,14, 9, 7,10,16,17,15,16,21,
- 4, 7,10,17, 7, 7, 9,15,11, 9,11,16,21,18,15,21,
- 18,21,21,21,15,17,17,19,21,19,18,20,21,21,21,20,
-};
-
-static const static_codebook _huff_book_line_1024x27_class4 = {
- 1, 64,
- (char *)_huff_lengthlist_line_1024x27_class4,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_0sub0[] = {
- 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
- 6, 5, 6, 5, 6, 5, 6, 5, 7, 5, 7, 5, 7, 5, 7, 5,
- 8, 6, 8, 6, 8, 6, 9, 6, 9, 6,10, 6,10, 6,11, 6,
- 11, 7,11, 7,12, 7,12, 7,12, 7,12, 7,12, 7,12, 7,
- 12, 7,12, 8,13, 8,12, 8,12, 8,13, 8,13, 9,13, 9,
- 13, 9,13, 9,12,10,12,10,13,10,14,11,14,12,14,13,
- 14,13,14,14,15,16,15,15,15,14,15,17,21,22,22,21,
- 22,22,22,22,22,22,21,21,21,21,21,21,21,21,21,21,
-};
-
-static const static_codebook _huff_book_line_1024x27_0sub0 = {
- 1, 128,
- (char *)_huff_lengthlist_line_1024x27_0sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_1sub0[] = {
- 2, 5, 5, 4, 5, 4, 5, 4, 5, 4, 6, 5, 6, 5, 6, 5,
- 6, 5, 7, 5, 7, 6, 8, 6, 8, 6, 8, 6, 9, 6, 9, 6,
-};
-
-static const static_codebook _huff_book_line_1024x27_1sub0 = {
- 1, 32,
- (char *)_huff_lengthlist_line_1024x27_1sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_1sub1[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 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, 8, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 4,
- 9, 4, 9, 4, 9, 4, 8, 4, 8, 4, 9, 5, 9, 5, 9, 5,
- 9, 5, 9, 6,10, 6,10, 7,10, 8,11, 9,11,11,12,13,
- 12,14,13,15,13,15,14,16,14,17,15,17,15,15,16,16,
- 15,16,16,16,15,18,16,15,17,17,19,19,19,19,19,19,
- 19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
-};
-
-static const static_codebook _huff_book_line_1024x27_1sub1 = {
- 1, 128,
- (char *)_huff_lengthlist_line_1024x27_1sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_2sub0[] = {
- 1, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5,
- 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 9, 8,10, 9,10, 9,
-};
-
-static const static_codebook _huff_book_line_1024x27_2sub0 = {
- 1, 32,
- (char *)_huff_lengthlist_line_1024x27_2sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_2sub1[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 3, 4, 4, 5, 4, 5, 4, 5, 5, 6, 5, 6, 5,
- 7, 5, 7, 6, 7, 6, 8, 7, 8, 7, 8, 7, 9, 8, 9, 9,
- 9, 9,10,10,10,11, 9,12, 9,12, 9,15,10,14, 9,13,
- 10,13,10,12,10,12,10,13,10,12,11,13,11,14,12,13,
- 13,14,14,13,14,15,14,16,13,13,14,16,16,16,16,16,
- 16,16,16,16,16,16,16,16,16,16,16,16,16,16,15,15,
-};
-
-static const static_codebook _huff_book_line_1024x27_2sub1 = {
- 1, 128,
- (char *)_huff_lengthlist_line_1024x27_2sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_3sub1[] = {
- 0, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 4, 4, 4, 5,
- 5, 5,
-};
-
-static const static_codebook _huff_book_line_1024x27_3sub1 = {
- 1, 18,
- (char *)_huff_lengthlist_line_1024x27_3sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_3sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 3, 4, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6,
- 5, 7, 5, 8, 6, 8, 6, 9, 7,10, 7,10, 8,10, 8,11,
- 9,11,
-};
-
-static const static_codebook _huff_book_line_1024x27_3sub2 = {
- 1, 50,
- (char *)_huff_lengthlist_line_1024x27_3sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_3sub3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 3, 8, 3,10, 3, 8, 3, 9, 3, 8, 4, 9,
- 4, 9, 5, 9, 6,10, 6, 9, 7,11, 7,12, 9,13,10,13,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-};
-
-static const static_codebook _huff_book_line_1024x27_3sub3 = {
- 1, 128,
- (char *)_huff_lengthlist_line_1024x27_3sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_4sub1[] = {
- 0, 4, 5, 4, 5, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4,
- 5, 4,
-};
-
-static const static_codebook _huff_book_line_1024x27_4sub1 = {
- 1, 18,
- (char *)_huff_lengthlist_line_1024x27_4sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_4sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 2, 4, 2, 5, 3, 5, 4, 6, 6, 6, 7, 7, 8,
- 7, 8, 7, 8, 7, 9, 8, 9, 8, 9, 8,10, 8,11, 9,12,
- 9,12,
-};
-
-static const static_codebook _huff_book_line_1024x27_4sub2 = {
- 1, 50,
- (char *)_huff_lengthlist_line_1024x27_4sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_1024x27_4sub3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 5, 2, 6, 3, 6, 4, 7, 4, 7, 5, 9, 5,11,
- 6,11, 6,11, 7,11, 6,11, 6,11, 9,11, 8,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,
-};
-
-static const static_codebook _huff_book_line_1024x27_4sub3 = {
- 1, 128,
- (char *)_huff_lengthlist_line_1024x27_4sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_class1[] = {
- 2, 6, 8, 9, 7,11,13,13, 1, 3, 5, 5, 6, 6,12,10,
-};
-
-static const static_codebook _huff_book_line_2048x27_class1 = {
- 1, 16,
- (char *)_huff_lengthlist_line_2048x27_class1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_class2[] = {
- 1, 2, 3, 6, 4, 7, 5, 7,
-};
-
-static const static_codebook _huff_book_line_2048x27_class2 = {
- 1, 8,
- (char *)_huff_lengthlist_line_2048x27_class2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_class3[] = {
- 3, 3, 6,16, 5, 5, 7,16, 9, 8,11,16,16,16,16,16,
- 5, 5, 8,16, 5, 5, 7,16, 8, 7, 9,16,16,16,16,16,
- 9, 9,12,16, 6, 8,11,16, 9,10,11,16,16,16,16,16,
- 16,16,16,16,13,16,16,16,15,16,16,16,16,16,16,16,
- 5, 4, 7,16, 6, 5, 8,16, 9, 8,10,16,16,16,16,16,
- 5, 5, 7,15, 5, 4, 6,15, 7, 6, 8,16,16,16,16,16,
- 9, 9,11,15, 7, 7, 9,16, 8, 8, 9,16,16,16,16,16,
- 16,16,16,16,15,15,15,16,15,15,14,16,16,16,16,16,
- 8, 8,11,16, 8, 9,10,16,11,10,14,16,16,16,16,16,
- 6, 8,10,16, 6, 7,10,16, 8, 8,11,16,14,16,16,16,
- 10,11,14,16, 9, 9,11,16,10,10,11,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,16,16,16,16,16,16,16,16,16,
- 12,16,15,16,12,14,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,16,16,16,16,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_2048x27_class3 = {
- 1, 256,
- (char *)_huff_lengthlist_line_2048x27_class3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_class4[] = {
- 2, 4, 7,13, 4, 5, 7,15, 8, 7,10,16,16,14,16,16,
- 2, 4, 7,16, 3, 4, 7,14, 8, 8,10,16,16,16,15,16,
- 6, 8,11,16, 7, 7, 9,16,11, 9,13,16,16,16,15,16,
- 16,16,16,16,14,16,16,16,16,16,16,16,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_2048x27_class4 = {
- 1, 64,
- (char *)_huff_lengthlist_line_2048x27_class4,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_0sub0[] = {
- 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
- 6, 5, 7, 5, 7, 5, 7, 5, 8, 5, 8, 5, 8, 5, 9, 5,
- 9, 6,10, 6,10, 6,11, 6,11, 6,11, 6,11, 6,11, 6,
- 11, 6,11, 6,12, 7,11, 7,11, 7,11, 7,11, 7,10, 7,
- 11, 7,11, 7,12, 7,11, 8,11, 8,11, 8,11, 8,13, 8,
- 12, 9,11, 9,11, 9,11,10,12,10,12, 9,12,10,12,11,
- 14,12,16,12,12,11,14,16,17,17,17,17,17,17,17,17,
- 17,17,17,17,17,17,17,17,17,17,17,17,16,16,16,16,
-};
-
-static const static_codebook _huff_book_line_2048x27_0sub0 = {
- 1, 128,
- (char *)_huff_lengthlist_line_2048x27_0sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_1sub0[] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 6, 6, 6, 6, 6, 6, 7, 6, 7, 6, 7, 6, 7, 6,
-};
-
-static const static_codebook _huff_book_line_2048x27_1sub0 = {
- 1, 32,
- (char *)_huff_lengthlist_line_2048x27_1sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_1sub1[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 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, 7, 5, 7, 4, 7, 4, 8, 4, 8, 4, 8, 4, 8, 3,
- 8, 4, 9, 4, 9, 4, 9, 4, 9, 4, 9, 5, 9, 5, 9, 6,
- 9, 7, 9, 8, 9, 9, 9,10, 9,11, 9,14, 9,15,10,15,
- 10,15,10,15,10,15,11,15,10,14,12,14,11,14,13,14,
- 13,15,15,15,12,15,15,15,13,15,13,15,13,15,15,15,
- 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,14,
-};
-
-static const static_codebook _huff_book_line_2048x27_1sub1 = {
- 1, 128,
- (char *)_huff_lengthlist_line_2048x27_1sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_2sub0[] = {
- 2, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 6, 5,
- 6, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
-};
-
-static const static_codebook _huff_book_line_2048x27_2sub0 = {
- 1, 32,
- (char *)_huff_lengthlist_line_2048x27_2sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_2sub1[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 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, 4, 3, 4, 3, 4, 4, 5, 4, 5, 5, 5, 6, 6, 6, 7,
- 6, 8, 6, 8, 6, 9, 7,10, 7,10, 7,10, 7,12, 7,12,
- 7,12, 9,12,11,12,10,12,10,12,11,12,12,12,10,12,
- 10,12,10,12, 9,12,11,12,12,12,12,12,11,12,11,12,
- 12,12,12,12,12,12,12,12,10,10,12,12,12,12,12,10,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
-};
-
-static const static_codebook _huff_book_line_2048x27_2sub1 = {
- 1, 128,
- (char *)_huff_lengthlist_line_2048x27_2sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_3sub1[] = {
- 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5,
-};
-
-static const static_codebook _huff_book_line_2048x27_3sub1 = {
- 1, 18,
- (char *)_huff_lengthlist_line_2048x27_3sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_3sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6,
- 6, 7, 6, 7, 6, 8, 6, 9, 7, 9, 7, 9, 9,11, 9,12,
- 10,12,
-};
-
-static const static_codebook _huff_book_line_2048x27_3sub2 = {
- 1, 50,
- (char *)_huff_lengthlist_line_2048x27_3sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_3sub3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 3, 7, 3, 7, 5, 7, 7, 7, 7, 7, 6, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-};
-
-static const static_codebook _huff_book_line_2048x27_3sub3 = {
- 1, 128,
- (char *)_huff_lengthlist_line_2048x27_3sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_4sub1[] = {
- 0, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 5, 4, 5, 4,
- 4, 5,
-};
-
-static const static_codebook _huff_book_line_2048x27_4sub1 = {
- 1, 18,
- (char *)_huff_lengthlist_line_2048x27_4sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_4sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 3, 2, 4, 3, 4, 4, 4, 5, 5, 6, 5, 6, 5, 7,
- 6, 6, 6, 7, 7, 7, 8, 9, 9, 9,12,10,11,10,10,12,
- 10,10,
-};
-
-static const static_codebook _huff_book_line_2048x27_4sub2 = {
- 1, 50,
- (char *)_huff_lengthlist_line_2048x27_4sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_2048x27_4sub3[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 6, 5, 7, 5, 7, 7, 7, 7, 7, 5, 7, 5, 7,
- 5, 7, 5, 7, 7, 7, 7, 7, 4, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static const static_codebook _huff_book_line_2048x27_4sub3 = {
- 1, 128,
- (char *)_huff_lengthlist_line_2048x27_4sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x4low_class0[] = {
- 4, 5, 6,11, 5, 5, 6,10, 7, 7, 6, 6,14,13, 9, 9,
- 6, 6, 6,10, 6, 6, 6, 9, 8, 7, 7, 9,14,12, 8,11,
- 8, 7, 7,11, 8, 8, 7,11, 9, 9, 7, 9,13,11, 9,13,
- 19,19,18,19,15,16,16,19,11,11,10,13,10,10, 9,15,
- 5, 5, 6,13, 6, 6, 6,11, 8, 7, 6, 7,14,11,10,11,
- 6, 6, 6,12, 7, 6, 6,11, 8, 7, 7,11,13,11, 9,11,
- 9, 7, 6,12, 8, 7, 6,12, 9, 8, 8,11,13,10, 7,13,
- 19,19,17,19,17,14,14,19,12,10, 8,12,13,10, 9,16,
- 7, 8, 7,12, 7, 7, 7,11, 8, 7, 7, 8,12,12,11,11,
- 8, 8, 7,12, 8, 7, 6,11, 8, 7, 7,10,10,11,10,11,
- 9, 8, 8,13, 9, 8, 7,12,10, 9, 7,11, 9, 8, 7,11,
- 18,18,15,18,18,16,17,18,15,11,10,18,11, 9, 9,18,
- 16,16,13,16,12,11,10,16,12,11, 9, 6,15,12,11,13,
- 16,16,14,14,13,11,12,16,12, 9, 9,13,13,10,10,12,
- 17,18,17,17,14,15,14,16,14,12,14,15,12,10,11,12,
- 18,18,18,18,18,18,18,18,18,12,13,18,16,11, 9,18,
-};
-
-static const static_codebook _huff_book_line_256x4low_class0 = {
- 1, 256,
- (char *)_huff_lengthlist_line_256x4low_class0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x4low_0sub0[] = {
- 1, 3, 2, 3,
-};
-
-static const static_codebook _huff_book_line_256x4low_0sub0 = {
- 1, 4,
- (char *)_huff_lengthlist_line_256x4low_0sub0,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x4low_0sub1[] = {
- 0, 0, 0, 0, 2, 3, 2, 3, 3, 3,
-};
-
-static const static_codebook _huff_book_line_256x4low_0sub1 = {
- 1, 10,
- (char *)_huff_lengthlist_line_256x4low_0sub1,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x4low_0sub2[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 4, 3, 4,
- 4, 4, 4, 4, 5, 5, 5, 6, 6,
-};
-
-static const static_codebook _huff_book_line_256x4low_0sub2 = {
- 1, 25,
- (char *)_huff_lengthlist_line_256x4low_0sub2,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist_line_256x4low_0sub3[] = {
- 0, 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, 4, 2, 4, 3, 5, 4,
- 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 6, 9,
- 7,12,11,16,13,16,12,15,13,15,12,14,12,15,15,15,
-};
-
-static const static_codebook _huff_book_line_256x4low_0sub3 = {
- 1, 64,
- (char *)_huff_lengthlist_line_256x4low_0sub3,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
diff --git a/drivers/vorbis/books/uncoupled/res_books_uncoupled.h b/drivers/vorbis/books/uncoupled/res_books_uncoupled.h
deleted file mode 100644
index 736353b675..0000000000
--- a/drivers/vorbis/books/uncoupled/res_books_uncoupled.h
+++ /dev/null
@@ -1,7758 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: static codebooks autogenerated by huff/huffbuld
- last modified: $Id: res_books_uncoupled.h 19057 2014-01-22 12:32:31Z xiphmont $
-
- ********************************************************************/
-
-#include "codebook.h"
-
-static const long _vq_quantlist__16u0__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16u0__p1_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 8, 5, 8, 8, 8,10,10, 8,
- 10,11, 5, 8, 8, 8,10,10, 8,10,10, 4, 9, 9, 9,12,
- 11, 8,11,11, 8,12,11,10,12,14,10,13,13, 7,11,11,
- 10,14,12,11,14,14, 4, 9, 9, 8,11,11, 9,11,12, 7,
- 11,11,10,13,14,10,12,14, 8,11,12,10,14,14,10,13,
- 12,
-};
-
-static const static_codebook _16u0__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16u0__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__16u0__p1_0,
- 0
-};
-
-static const long _vq_quantlist__16u0__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16u0__p2_0[] = {
- 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 9, 7,
- 8, 9, 5, 7, 7, 7, 9, 8, 7, 9, 7, 4, 7, 7, 7, 9,
- 9, 7, 8, 8, 6, 9, 8, 7, 8,11, 9,11,10, 6, 8, 9,
- 8,11, 8, 9,10,11, 4, 7, 7, 7, 8, 8, 7, 9, 9, 6,
- 9, 8, 9,11,10, 8, 8,11, 6, 8, 9, 9,10,11, 8,11,
- 8,
-};
-
-static const static_codebook _16u0__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16u0__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__16u0__p2_0,
- 0
-};
-
-static const long _vq_quantlist__16u0__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16u0__p3_0[] = {
- 1, 5, 5, 7, 7, 6, 7, 7, 8, 8, 6, 7, 8, 8, 8, 8,
- 9, 9,11,11, 8, 9, 9,11,11, 6, 9, 8,10,10, 8,10,
- 10,11,11, 8,10,10,11,11,10,11,10,13,12, 9,11,10,
- 13,13, 6, 8, 9,10,10, 8,10,10,11,11, 8,10,10,11,
- 11, 9,10,11,13,12,10,10,11,12,12, 8,11,11,14,13,
- 10,12,11,15,13, 9,12,11,15,14,12,14,13,16,14,12,
- 13,13,17,14, 8,11,11,13,14, 9,11,12,14,15,10,11,
- 12,13,15,11,13,13,14,16,12,13,14,14,16, 5, 9, 9,
- 11,11, 9,11,11,12,12, 8,11,11,12,12,11,12,12,15,
- 14,10,12,12,15,15, 8,11,11,13,12,10,12,12,13,13,
- 10,12,12,14,13,12,12,13,14,15,11,13,13,17,16, 7,
- 11,11,13,13,10,12,12,14,13,10,12,12,13,14,12,13,
- 12,15,14,11,13,13,15,14, 9,12,12,16,15,11,13,13,
- 17,16,10,13,13,16,16,13,14,15,15,16,13,15,14,19,
- 17, 9,12,12,14,16,11,13,13,15,16,10,13,13,17,16,
- 13,14,13,17,15,12,15,15,16,17, 5, 9, 9,11,11, 8,
- 11,11,13,12, 9,11,11,12,12,10,12,12,14,15,11,12,
- 12,14,14, 7,11,10,13,12,10,12,12,14,13,10,11,12,
- 13,13,11,13,13,15,16,12,12,13,15,15, 7,11,11,13,
- 13,10,13,13,14,14,10,12,12,13,13,11,13,13,16,15,
- 12,13,13,15,14, 9,12,12,15,15,10,13,13,17,16,11,
- 12,13,15,15,12,15,14,18,18,13,14,14,16,17, 9,12,
- 12,15,16,10,13,13,15,16,11,13,13,15,16,13,15,15,
- 17,17,13,15,14,16,15, 7,11,11,15,16,10,13,12,16,
- 17,10,12,13,15,17,15,16,16,18,17,13,15,15,17,18,
- 8,12,12,16,16,11,13,14,17,18,11,13,13,18,16,15,
- 17,16,17,19,14,15,15,17,16, 8,12,12,16,15,11,14,
- 13,18,17,11,13,14,18,17,15,16,16,18,17,13,16,16,
- 18,18,11,15,14,18,17,13,14,15,18, 0,12,15,15, 0,
- 17,17,16,17,17,18,14,16,18,18, 0,11,14,14,17, 0,
- 12,15,14,17,19,12,15,14,18, 0,15,18,16, 0,17,14,
- 18,16,18, 0, 7,11,11,16,15,10,12,12,18,16,10,13,
- 13,16,15,13,15,14,17,17,14,16,16,19,18, 8,12,12,
- 16,16,11,13,13,18,16,11,13,14,17,16,14,15,15,19,
- 18,15,16,16, 0,19, 8,12,12,16,17,11,13,13,17,17,
- 11,14,13,17,17,13,15,15,17,19,15,17,17,19, 0,11,
- 14,15,19,17,12,15,16,18,18,12,14,15,19,17,14,16,
- 17, 0,18,16,16,19,17, 0,11,14,14,18,19,12,15,14,
- 17,17,13,16,14,17,16,14,17,16,18,18,15,18,15, 0,
- 18,
-};
-
-static const static_codebook _16u0__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__16u0__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16u0__p3_0,
- 0
-};
-
-static const long _vq_quantlist__16u0__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16u0__p4_0[] = {
- 3, 5, 5, 8, 8, 6, 6, 6, 9, 9, 6, 6, 6, 9, 9, 9,
- 10, 9,11,11, 9, 9, 9,11,11, 6, 7, 7,10,10, 7, 7,
- 8,10,10, 7, 7, 8,10,10,10,10,10,11,12, 9,10,10,
- 11,12, 6, 7, 7,10,10, 7, 8, 7,10,10, 7, 8, 7,10,
- 10,10,11,10,12,11,10,10,10,13,10, 9,10,10,12,12,
- 10,11,10,14,12, 9,11,11,13,13,11,12,13,13,13,11,
- 12,12,15,13, 9,10,10,12,13, 9,11,10,12,13,10,10,
- 11,12,13,11,12,12,12,13,11,12,12,13,13, 5, 7, 7,
- 10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,12,
- 13,10,10,11,12,12, 6, 8, 8,11,10, 7, 8, 9,10,12,
- 8, 9, 9,11,11,11,10,11,11,12,10,11,11,13,12, 7,
- 8, 8,10,11, 8, 9, 8,11,10, 8, 9, 9,11,11,10,12,
- 10,13,11,10,11,11,13,13,10,11,10,14,13,10,10,11,
- 13,13,10,12,11,14,13,12,11,13,12,13,13,12,13,14,
- 14,10,11,11,13,13,10,11,10,12,13,10,12,12,12,14,
- 12,12,12,14,12,12,13,12,17,15, 5, 7, 7,10,10, 7,
- 8, 8,10,10, 7, 8, 8,11,10,10,10,11,12,12,10,11,
- 11,12,13, 6, 8, 8,11,10, 8, 9, 9,11,11, 7, 8, 9,
- 10,11,11,11,11,12,12,10,10,11,12,13, 6, 8, 8,10,
- 11, 8, 9, 9,11,11, 7, 9, 7,11,10,10,12,12,13,13,
- 11,11,10,13,11, 9,11,10,14,13,11,11,11,15,13,10,
- 10,11,13,13,12,13,13,14,14,12,11,12,12,13,10,11,
- 11,12,13,10,11,12,13,13,10,11,10,13,12,12,12,13,
- 14, 0,12,13,11,13,11, 8,10,10,13,13,10,11,11,14,
- 13,10,11,11,13,12,13,14,14,14,15,12,12,12,15,14,
- 9,11,10,13,12,10,10,11,13,14,11,11,11,15,12,13,
- 12,14,15,16,13,13,13,14,13, 9,11,11,12,12,10,12,
- 11,13,13,10,11,11,13,14,13,13,13,15,15,13,13,14,
- 17,15,11,12,12,14,14,10,11,12,13,15,12,13,13, 0,
- 15,13,11,14,12,16,14,16,14, 0,15,11,12,12,14,16,
- 11,13,12,16,15,12,13,13,14,15,12,14,12,15,13,15,
- 14,14,16,16, 8,10,10,13,13,10,11,10,13,14,10,11,
- 11,13,13,13,13,12,14,14,14,13,13,16,17, 9,10,10,
- 12,14,10,12,11,14,13,10,11,12,13,14,12,12,12,15,
- 15,13,13,13,14,14, 9,10,10,13,13,10,11,12,12,14,
- 10,11,10,13,13,13,13,13,14,16,13,13,13,14,14,11,
- 12,13,15,13,12,14,13,14,16,12,12,13,13,14,13,14,
- 14,17,15,13,12,17,13,16,11,12,13,14,15,12,13,14,
- 14,17,11,12,11,14,14,13,16,14,16, 0,14,15,11,15,
- 11,
-};
-
-static const static_codebook _16u0__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__16u0__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16u0__p4_0,
- 0
-};
-
-static const long _vq_quantlist__16u0__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__16u0__p5_0[] = {
- 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8,
- 9, 9, 4, 6, 6, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 9,
- 9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,11, 7, 8, 8,
- 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
- 9, 9,10,10,11,11,12,12, 9, 9, 9,10,10,11,11,12,
- 12,
-};
-
-static const static_codebook _16u0__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__16u0__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__16u0__p5_0,
- 0
-};
-
-static const long _vq_quantlist__16u0__p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__16u0__p6_0[] = {
- 1, 4, 4, 7, 7,10,10,12,12,13,13,18,17, 3, 6, 6,
- 9, 9,11,11,13,13,14,14,18,17, 3, 6, 6, 9, 9,11,
- 11,13,13,14,14,17,18, 7, 9, 9,11,11,13,13,14,14,
- 15,15, 0, 0, 7, 9, 9,11,11,13,13,14,14,15,16,19,
- 18,10,11,11,13,13,14,14,16,15,17,18, 0, 0,10,11,
- 11,13,13,14,14,15,15,16,18, 0, 0,11,13,13,14,14,
- 15,15,17,17, 0,19, 0, 0,11,13,13,14,14,14,15,16,
- 18, 0,19, 0, 0,13,14,14,15,15,18,17,18,18, 0,19,
- 0, 0,13,14,14,15,16,16,16,18,18,19, 0, 0, 0,16,
- 17,17, 0,17,19,19, 0,19, 0, 0, 0, 0,16,19,16,17,
- 18, 0,19, 0, 0, 0, 0, 0, 0,
-};
-
-static const static_codebook _16u0__p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__16u0__p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__16u0__p6_0,
- 0
-};
-
-static const long _vq_quantlist__16u0__p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16u0__p6_1[] = {
- 1, 4, 5, 6, 6, 4, 6, 6, 6, 6, 4, 6, 6, 6, 6, 6,
- 6, 6, 7, 7, 6, 6, 6, 7, 7,
-};
-
-static const static_codebook _16u0__p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__16u0__p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16u0__p6_1,
- 0
-};
-
-static const long _vq_quantlist__16u0__p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16u0__p7_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _16u0__p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16u0__p7_0,
- 1, -518803456, 1628680192, 2, 0,
- (long *)_vq_quantlist__16u0__p7_0,
- 0
-};
-
-static const long _vq_quantlist__16u0__p7_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__16u0__p7_1[] = {
- 1, 5, 5, 6, 5, 9,10,11,11,10,10,10,10,10,10, 5,
- 8, 8, 8,10,10,10,10,10,10,10,10,10,10,10, 5, 8,
- 9, 9, 9,10,10,10,10,10,10,10,10,10,10, 5,10, 8,
- 10,10,10,10,10,10,10,10,10,10,10,10, 4, 8, 9,10,
- 10,10,10,10,10,10,10,10,10,10,10, 9,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10, 9,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _16u0__p7_1 = {
- 2, 225,
- (char *)_vq_lengthlist__16u0__p7_1,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__16u0__p7_1,
- 0
-};
-
-static const long _vq_quantlist__16u0__p7_2[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__16u0__p7_2[] = {
- 1, 6, 6, 7, 8, 7, 7,10, 9,10, 9,11,10, 9,11,10,
- 9, 9, 9, 9,10, 6, 8, 7, 9, 9, 8, 8,10,10, 9,11,
- 11,12,12,10, 9,11, 9,12,10, 9, 6, 9, 8, 9,12, 8,
- 8,11, 9,11,11,12,11,12,12,10,11,11,10,10,11, 7,
- 10, 9, 9, 9, 9, 9,10, 9,10, 9,10,10,12,10,10,10,
- 11,12,10,10, 7, 9, 9, 9,10, 9, 9,10,10, 9, 9, 9,
- 11,11,10,10,10,10, 9, 9,12, 7, 9,10, 9,11, 9,10,
- 9,10,11,11,11,10,11,12, 9,12,11,10,10,10, 7, 9,
- 9, 9, 9,10,12,10, 9,11,12,10,11,12,12,11, 9,10,
- 11,10,11, 7, 9,10,10,11,10, 9,10,11,11,11,10,12,
- 12,12,11,11,10,11,11,12, 8, 9,10,12,11,10,10,12,
- 12,12,12,12,10,11,11, 9,11,10,12,11,11, 8, 9,10,
- 10,11,12,11,11,10,10,10,12,12,12, 9,10,12,12,12,
- 12,12, 8,10,11,10,10,12, 9,11,12,12,11,12,12,12,
- 12,10,12,10,10,10,10, 8,12,11,11,11,10,10,11,12,
- 12,12,12,11,12,12,12,11,11,11,12,10, 9,10,10,12,
- 10,12,10,12,12,10,10,10,11,12,12,12,11,12,12,12,
- 11,10,11,12,12,12,11,12,12,11,12,12,11,12,12,12,
- 12,11,12,12,10,10,10,10,11,11,12,11,12,12,12,12,
- 12,12,12,11,12,11,10,11,11,12,11,11, 9,10,10,10,
- 12,10,10,11, 9,11,12,11,12,11,12,12,10,11,10,12,
- 9, 9, 9,12,11,10,11,10,12,10,12,10,12,12,12,11,
- 11,11,11,11,10, 9,10,10,11,10,11,11,12,11,10,11,
- 12,12,12,11,11, 9,12,10,12, 9,10,12,10,10,11,10,
- 11,11,12,11,10,11,10,11,11,11,11,12,11,11,10, 9,
- 10,10,10, 9,11,11,10, 9,12,10,11,12,11,12,12,11,
- 12,11,12,11,10,11,10,12,11,12,11,12,11,12,10,11,
- 10,10,12,11,10,11,11,11,10,
-};
-
-static const static_codebook _16u0__p7_2 = {
- 2, 441,
- (char *)_vq_lengthlist__16u0__p7_2,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__16u0__p7_2,
- 0
-};
-
-static const char _huff_lengthlist__16u0__single[] = {
- 3, 5, 8, 7,14, 8, 9,19, 5, 2, 5, 5, 9, 6, 9,19,
- 8, 4, 5, 7, 8, 9,13,19, 7, 4, 6, 5, 9, 6, 9,19,
- 12, 8, 7, 9,10,11,13,19, 8, 5, 8, 6, 9, 6, 7,19,
- 8, 8,10, 7, 7, 4, 5,19,12,17,19,15,18,13,11,18,
-};
-
-static const static_codebook _huff_book__16u0__single = {
- 2, 64,
- (char *)_huff_lengthlist__16u0__single,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__16u1__long[] = {
- 3, 6,10, 8,12, 8,14, 8,14,19, 5, 3, 5, 5, 7, 6,
- 11, 7,16,19, 7, 5, 6, 7, 7, 9,11,12,19,19, 6, 4,
- 7, 5, 7, 6,10, 7,18,18, 8, 6, 7, 7, 7, 7, 8, 9,
- 18,18, 7, 5, 8, 5, 7, 5, 8, 6,18,18,12, 9,10, 9,
- 9, 9, 8, 9,18,18, 8, 7,10, 6, 8, 5, 6, 4,11,18,
- 11,15,16,12,11, 8, 8, 6, 9,18,14,18,18,18,16,16,
- 16,13,16,18,
-};
-
-static const static_codebook _huff_book__16u1__long = {
- 2, 100,
- (char *)_huff_lengthlist__16u1__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__16u1__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16u1__p1_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 7, 7,10,10, 7,
- 9,10, 5, 7, 8, 7,10, 9, 7,10,10, 5, 8, 8, 8,10,
- 10, 8,10,10, 7,10,10,10,11,12,10,12,13, 7,10,10,
- 9,13,11,10,12,13, 5, 8, 8, 8,10,10, 8,10,10, 7,
- 10,10,10,12,12, 9,11,12, 7,10,11,10,12,12,10,13,
- 11,
-};
-
-static const static_codebook _16u1__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16u1__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__16u1__p1_0,
- 0
-};
-
-static const long _vq_quantlist__16u1__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16u1__p2_0[] = {
- 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 7, 8, 6,
- 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 7, 5, 6, 6, 6, 8,
- 8, 6, 8, 8, 6, 8, 8, 7, 7,10, 8, 9, 9, 6, 8, 8,
- 7, 9, 8, 8, 9,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6,
- 8, 8, 8,10, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 7,10,
- 8,
-};
-
-static const static_codebook _16u1__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16u1__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__16u1__p2_0,
- 0
-};
-
-static const long _vq_quantlist__16u1__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16u1__p3_0[] = {
- 1, 5, 5, 8, 8, 6, 7, 7, 9, 9, 5, 7, 7, 9, 9, 9,
- 10, 9,11,11, 9, 9,10,11,11, 6, 8, 8,10,10, 8, 9,
- 10,11,11, 8, 9,10,11,11,10,11,11,12,13,10,11,11,
- 13,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10, 9,11,
- 11,10,11,11,13,13,10,11,11,13,12, 9,11,11,14,13,
- 10,12,12,15,14,10,12,11,14,13,12,13,13,15,15,12,
- 13,13,16,14, 9,11,11,13,14,10,11,12,14,14,10,12,
- 12,14,15,12,13,13,14,15,12,13,14,15,16, 5, 8, 8,
- 11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14,
- 14,11,12,12,14,14, 8,10,10,12,12, 9,11,12,12,13,
- 10,12,12,13,13,12,12,13,14,15,11,13,13,15,15, 7,
- 10,10,12,12, 9,12,11,13,12,10,11,12,13,13,12,13,
- 12,15,14,11,12,13,15,15,10,12,12,15,14,11,13,13,
- 16,15,11,13,13,16,15,14,13,14,15,16,13,15,15,17,
- 17,10,12,12,14,15,11,12,12,15,15,11,13,13,15,16,
- 13,15,13,16,15,13,15,15,16,17, 5, 8, 8,11,11, 8,
- 10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12,
- 12,14,14, 7,10,10,12,12,10,12,12,14,13, 9,11,12,
- 12,13,12,13,13,15,15,12,12,13,13,15, 7,10,10,12,
- 13,10,11,12,13,13,10,12,11,13,13,11,13,13,15,15,
- 12,13,12,15,14, 9,12,12,15,14,11,13,13,15,15,11,
- 12,13,15,15,13,14,14,17,19,13,13,14,16,16,10,12,
- 12,14,15,11,13,13,15,16,11,13,12,16,15,13,15,15,
- 17,18,14,15,13,16,15, 8,11,11,15,14,10,12,12,16,
- 15,10,12,12,16,16,14,15,15,18,17,13,14,15,16,18,
- 9,12,12,15,15,11,12,14,16,17,11,13,13,16,15,15,
- 15,15,17,18,14,15,16,17,17, 9,12,12,15,15,11,14,
- 13,16,16,11,13,13,16,16,15,16,15,17,18,14,16,15,
- 17,16,12,14,14,17,16,12,14,15,18,17,13,15,15,17,
- 17,15,15,18,16,20,15,16,17,18,18,11,14,14,16,17,
- 13,15,14,18,17,13,15,15,17,17,15,17,15,18,17,15,
- 17,16,19,18, 8,11,11,14,15,10,12,12,15,15,10,12,
- 12,16,16,13,14,14,17,16,14,15,15,17,17, 9,12,12,
- 15,16,11,13,13,16,16,11,12,13,16,16,14,16,15,20,
- 17,14,16,16,17,17, 9,12,12,15,16,11,13,13,16,17,
- 11,13,13,17,16,14,15,15,17,18,15,15,15,18,18,11,
- 14,14,17,16,13,15,15,17,17,13,14,14,18,17,15,16,
- 16,18,19,15,15,17,17,19,11,14,14,16,17,13,15,14,
- 17,19,13,15,14,18,17,15,17,16,18,18,15,17,15,18,
- 16,
-};
-
-static const static_codebook _16u1__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__16u1__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16u1__p3_0,
- 0
-};
-
-static const long _vq_quantlist__16u1__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16u1__p4_0[] = {
- 4, 5, 5, 8, 8, 6, 6, 7, 9, 9, 6, 6, 6, 9, 9, 9,
- 10, 9,11,11, 9, 9,10,11,11, 6, 7, 7,10, 9, 7, 7,
- 8, 9,10, 7, 7, 8,10,10,10,10,10,10,12, 9, 9,10,
- 11,12, 6, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 7,10,
- 10, 9,10, 9,12,11,10,10, 9,12,10, 9,10,10,12,11,
- 10,10,10,12,12, 9,10,10,12,12,12,11,12,13,13,11,
- 11,12,12,13, 9,10,10,11,12, 9,10,10,12,12,10,10,
- 10,12,12,11,12,11,14,13,11,12,12,14,13, 5, 7, 7,
- 10,10, 7, 8, 8,10,10, 7, 8, 7,10,10,10,10,10,12,
- 12,10,10,10,12,12, 6, 8, 7,10,10, 7, 7, 9,10,11,
- 8, 9, 9,11,10,10,10,11,11,13,10,10,11,12,13, 6,
- 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,10,11,10,11,
- 10,13,11,10,11,10,12,12,10,11,10,12,11,10,10,10,
- 12,13,10,11,11,13,12,11,11,13,11,14,12,12,13,14,
- 14, 9,10,10,12,13,10,11,10,13,12,10,11,11,12,13,
- 11,12,11,14,12,12,13,13,15,14, 5, 7, 7,10,10, 7,
- 7, 8,10,10, 7, 8, 8,10,10,10,10,10,11,12,10,10,
- 10,12,12, 7, 8, 8,10,10, 8, 9, 8,11,10, 7, 8, 9,
- 10,11,10,11,11,12,12,10,10,11,11,13, 7, 7, 8,10,
- 10, 8, 8, 9,10,11, 7, 9, 7,11,10,10,11,11,13,12,
- 11,11,10,13,11, 9,10,10,12,12,10,11,11,13,12,10,
- 10,11,12,12,12,13,13,14,14,11,11,12,12,14,10,10,
- 11,12,12,10,11,11,12,13,10,10,10,13,12,12,13,13,
- 15,14,12,13,10,14,11, 8,10,10,12,12,10,11,10,13,
- 13, 9,10,10,12,12,12,13,13,15,14,11,12,12,13,13,
- 9,10,10,13,12,10,10,11,13,13,10,11,10,13,12,12,
- 12,13,14,15,12,13,12,15,13, 9,10,10,12,13,10,11,
- 10,13,12,10,10,11,12,13,12,14,12,15,13,12,12,13,
- 14,15,11,12,11,14,13,11,11,12,14,15,12,13,12,15,
- 14,13,11,15,11,16,13,14,14,16,15,11,12,12,14,14,
- 11,12,11,14,13,12,12,13,14,15,13,14,12,16,12,14,
- 14,14,15,15, 8,10,10,12,12, 9,10,10,12,12,10,10,
- 11,13,13,11,12,12,13,13,12,13,13,14,15, 9,10,10,
- 13,12,10,11,11,13,12,10,10,11,13,13,12,13,12,15,
- 14,12,12,13,13,16, 9, 9,10,12,13,10,10,11,12,13,
- 10,11,10,13,13,12,12,13,13,15,13,13,12,15,13,11,
- 12,12,14,14,12,13,12,15,14,11,11,12,13,14,14,14,
- 14,16,15,13,12,15,12,16,11,11,12,13,14,12,13,13,
- 14,15,10,12,11,14,13,14,15,14,16,16,13,14,11,15,
- 11,
-};
-
-static const static_codebook _16u1__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__16u1__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16u1__p4_0,
- 0
-};
-
-static const long _vq_quantlist__16u1__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__16u1__p5_0[] = {
- 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8,
- 10,10, 4, 5, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9,
- 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 7, 8, 8,
- 10, 9,11,11,12,11, 7, 8, 8, 9, 9,11,11,12,12, 9,
- 10,10,11,11,12,12,13,12, 9,10,10,11,11,12,12,12,
- 13,
-};
-
-static const static_codebook _16u1__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__16u1__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__16u1__p5_0,
- 0
-};
-
-static const long _vq_quantlist__16u1__p6_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__16u1__p6_0[] = {
- 3, 4, 4, 6, 6, 7, 7, 9, 9, 4, 4, 4, 6, 6, 8, 8,
- 9, 9, 4, 4, 4, 6, 6, 7, 7, 9, 9, 6, 6, 6, 7, 7,
- 8, 8,10, 9, 6, 6, 6, 7, 7, 8, 8, 9,10, 7, 8, 7,
- 8, 8, 9, 9,10,10, 7, 8, 8, 8, 8, 9, 9,10,10, 9,
- 9, 9,10,10,10,10,11,11, 9, 9, 9,10,10,10,10,11,
- 11,
-};
-
-static const static_codebook _16u1__p6_0 = {
- 2, 81,
- (char *)_vq_lengthlist__16u1__p6_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__16u1__p6_0,
- 0
-};
-
-static const long _vq_quantlist__16u1__p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16u1__p7_0[] = {
- 1, 4, 4, 4, 8, 8, 4, 8, 8, 5,11, 9, 8,12,11, 8,
- 12,11, 5,10,11, 8,11,12, 8,11,12, 4,11,11,11,14,
- 13,10,13,13, 8,14,13,12,14,16,12,16,15, 8,14,14,
- 13,16,14,12,15,16, 4,11,11,10,14,13,11,14,14, 8,
- 15,14,12,15,15,12,14,16, 8,14,14,11,16,15,12,15,
- 13,
-};
-
-static const static_codebook _16u1__p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16u1__p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__16u1__p7_0,
- 0
-};
-
-static const long _vq_quantlist__16u1__p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__16u1__p7_1[] = {
- 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 6, 5, 7, 7,
- 8, 8, 8, 8, 8, 8, 4, 5, 6, 7, 7, 8, 8, 8, 8, 8,
- 8, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8,
- 8, 8, 8, 9, 9, 9, 9, 7, 8, 8, 8, 8, 9, 9, 9,10,
- 9,10, 7, 8, 8, 8, 8, 9, 9, 9, 9,10, 9, 8, 8, 8,
- 9, 9,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9,10,
- 10,10,10, 8, 8, 8, 9, 9, 9,10,10,10,10,10, 8, 8,
- 8, 9, 9,10,10,10,10,10,10,
-};
-
-static const static_codebook _16u1__p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__16u1__p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__16u1__p7_1,
- 0
-};
-
-static const long _vq_quantlist__16u1__p8_0[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__16u1__p8_0[] = {
- 1, 4, 4, 5, 5, 8, 8,10,10,12,12, 4, 7, 7, 8, 8,
- 9, 9,12,11,14,13, 4, 7, 7, 7, 8, 9,10,11,11,13,
- 12, 5, 8, 8, 9, 9,11,11,12,13,15,14, 5, 7, 8, 9,
- 9,11,11,13,13,17,15, 8, 9,10,11,11,12,13,17,14,
- 17,16, 8,10, 9,11,11,12,12,13,15,15,17,10,11,11,
- 12,13,14,15,15,16,16,17, 9,11,11,12,12,14,15,17,
- 15,15,16,11,14,12,14,15,16,15,16,16,16,15,11,13,
- 13,14,14,15,15,16,16,15,16,
-};
-
-static const static_codebook _16u1__p8_0 = {
- 2, 121,
- (char *)_vq_lengthlist__16u1__p8_0,
- 1, -524582912, 1618345984, 4, 0,
- (long *)_vq_quantlist__16u1__p8_0,
- 0
-};
-
-static const long _vq_quantlist__16u1__p8_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__16u1__p8_1[] = {
- 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 4, 6, 6, 7, 7,
- 8, 7, 8, 8, 8, 8, 4, 6, 6, 7, 7, 7, 7, 8, 8, 8,
- 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 6, 7, 7, 7,
- 7, 8, 8, 8, 8, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9,
- 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8,
- 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 8,
- 8, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _16u1__p8_1 = {
- 2, 121,
- (char *)_vq_lengthlist__16u1__p8_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__16u1__p8_1,
- 0
-};
-
-static const long _vq_quantlist__16u1__p9_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__16u1__p9_0[] = {
- 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8,
-};
-
-static const static_codebook _16u1__p9_0 = {
- 2, 225,
- (char *)_vq_lengthlist__16u1__p9_0,
- 1, -514071552, 1627381760, 4, 0,
- (long *)_vq_quantlist__16u1__p9_0,
- 0
-};
-
-static const long _vq_quantlist__16u1__p9_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__16u1__p9_1[] = {
- 1, 6, 5, 9, 9,10,10, 6, 7, 9, 9,10,10,10,10, 5,
- 10, 8,10, 8,10,10, 8, 8,10, 9,10,10,10,10, 5, 8,
- 9,10,10,10,10, 8,10,10,10,10,10,10,10, 9,10,10,
- 10,10,10,10, 9, 9,10,10,10,10,10,10, 9, 9, 8, 9,
- 10,10,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10, 8,10,10,10,10,
- 10,10,10,10,10,10,10,10,10, 6, 8, 8,10,10,10, 8,
- 10,10,10,10,10,10,10,10, 5, 8, 8,10,10,10, 9, 9,
- 10,10,10,10,10,10,10,10, 9,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9,
-};
-
-static const static_codebook _16u1__p9_1 = {
- 2, 225,
- (char *)_vq_lengthlist__16u1__p9_1,
- 1, -522338304, 1620115456, 4, 0,
- (long *)_vq_quantlist__16u1__p9_1,
- 0
-};
-
-static const long _vq_quantlist__16u1__p9_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__16u1__p9_2[] = {
- 1, 6, 6, 7, 8, 8,11,10, 9, 9,11, 9,10, 9,11,11,
- 9, 6, 7, 6,11, 8,11, 9,10,10,11, 9,11,10,10,10,
- 11, 9, 5, 7, 7, 8, 8,10,11, 8, 8,11, 9, 9,10,11,
- 9,10,11, 8, 9, 6, 8, 8, 9, 9,10,10,11,11,11, 9,
- 11,10, 9,11, 8, 8, 8, 9, 8, 9,10,11, 9, 9,11,11,
- 10, 9, 9,11,10, 8,11, 8, 9, 8,11, 9,10, 9,10,11,
- 11,10,10, 9,10,10, 8, 8, 9,10,10,10, 9,11, 9,10,
- 11,11,11,11,10, 9,11, 9, 9,11,11,10, 8,11,11,11,
- 9,10,10,11,10,11,11, 9,11,10, 9,11,10,10,10,10,
- 9,11,10,11,10, 9, 9,10,11, 9, 8,10,11,11,10,10,
- 11, 9,11,10,11,11,10,11, 9, 9, 8,10, 8, 9,11, 9,
- 8,10,10, 9,11,10,11,10,11, 9,11, 8,10,11,11,11,
- 11,10,10,11,11,11,11,10,11,11,10, 9, 8,10,10, 9,
- 11,10,11,11,11, 9, 9, 9,11,11,11,10,10, 9, 9,10,
- 9,11,11,11,11, 8,10,11,10,11,11,10,11,11, 9, 9,
- 9,10, 9,11, 9,11,11,11,11,11,10,11,11,10,11,10,
- 11,11, 9,11,10,11,10, 9,10, 9,10,10,11,11,11,11,
- 9,10, 9,10,11,11,10,11,11,11,11,11,11,10,11,11,
- 10,
-};
-
-static const static_codebook _16u1__p9_2 = {
- 2, 289,
- (char *)_vq_lengthlist__16u1__p9_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__16u1__p9_2,
- 0
-};
-
-static const char _huff_lengthlist__16u1__short[] = {
- 5, 7,10, 9,11,10,15,11,13,16, 6, 4, 6, 6, 7, 7,
- 10, 9,12,16,10, 6, 5, 6, 6, 7,10,11,16,16, 9, 6,
- 7, 6, 7, 7,10, 8,14,16,11, 6, 5, 4, 5, 6, 8, 9,
- 15,16, 9, 6, 6, 5, 6, 6, 9, 8,14,16,12, 7, 6, 6,
- 5, 6, 6, 7,13,16, 8, 6, 7, 6, 5, 5, 4, 4,11,16,
- 9, 8, 9, 9, 7, 7, 6, 5,13,16,14,14,16,15,16,15,
- 16,16,16,16,
-};
-
-static const static_codebook _huff_book__16u1__short = {
- 2, 100,
- (char *)_huff_lengthlist__16u1__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__16u2__long[] = {
- 5, 8,10,10,10,11,11,12,14,18, 7, 5, 5, 6, 8, 9,
- 10,12,14,17, 9, 5, 4, 5, 6, 8,10,11,13,19, 9, 5,
- 4, 4, 5, 6, 9,10,12,17, 8, 6, 5, 4, 4, 5, 7,10,
- 11,15, 8, 7, 7, 6, 5, 5, 6, 9,11,14, 8, 9, 8, 7,
- 6, 5, 6, 7,11,14, 9,11,11, 9, 7, 6, 6, 6, 9,14,
- 11,14,15,13, 9, 8, 7, 7, 9,14,13,15,19,17,12,11,
- 10, 9,10,14,
-};
-
-static const static_codebook _huff_book__16u2__long = {
- 2, 100,
- (char *)_huff_lengthlist__16u2__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__16u2_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16u2_p1_0[] = {
- 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 9, 9, 7,
- 9, 9, 5, 7, 7, 7, 9, 9, 8, 9, 9, 5, 7, 7, 8, 9,
- 9, 7, 9, 9, 7, 9, 9, 9,10,11, 9,10,10, 7, 9, 9,
- 9,10, 9, 9,10,11, 5, 8, 7, 7, 9, 9, 8, 9, 9, 7,
- 9, 9, 9,11,10, 9, 9,10, 7, 9, 9, 9,10,10, 9,11,
- 10,
-};
-
-static const static_codebook _16u2_p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16u2_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__16u2_p1_0,
- 0
-};
-
-static const long _vq_quantlist__16u2_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16u2_p2_0[] = {
- 3, 5, 5, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 9,
- 10, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
- 8,10,10, 7, 8, 8,10,10,10,10,10,12,12, 9,10,10,
- 11,12, 5, 7, 7, 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,
- 10, 9,10,10,12,11,10,10,10,12,12, 9,10,10,12,12,
- 10,10,10,12,12, 9,10,10,12,12,12,12,12,14,14,11,
- 12,12,13,14, 9,10,10,12,12, 9,10,10,12,12,10,10,
- 10,12,12,11,12,12,14,13,12,12,12,14,13, 5, 7, 7,
- 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,
- 12,10,10,10,12,12, 7, 8, 8,11,10, 8, 9, 9,11,11,
- 8, 9, 9,11,11,10,11,11,12,13,10,11,11,12,13, 7,
- 8, 8,10,10, 8, 9, 8,11,10, 8, 9, 9,11,11,10,11,
- 10,13,12,10,11,11,13,13,10,11,10,13,12,10,11,11,
- 13,13,10,11,11,13,13,12,12,13,13,14,12,13,13,14,
- 14, 9,10,10,12,12,10,11,10,13,12,10,11,11,13,13,
- 12,13,12,14,13,12,13,13,14,15, 5, 7, 7, 9,10, 7,
- 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,12,10,10,
- 11,12,12, 7, 8, 8,10,10, 8, 9, 9,11,11, 8, 8, 9,
- 10,11,10,11,11,13,13,10,10,11,12,13, 7, 8, 8,10,
- 10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,11,13,12,
- 10,11,11,13,12, 9,10,10,12,12,10,11,11,13,13,10,
- 10,11,12,13,12,13,13,15,14,12,12,13,12,14, 9,10,
- 11,12,13,10,11,11,13,13,10,11,11,13,13,12,13,13,
- 14,14,12,13,12,14,13, 8,10,10,12,12, 9,11,10,13,
- 12, 9,10,10,12,13,12,13,13,14,14,12,12,12,14,14,
- 9,10,10,13,13,10,11,11,13,13,10,11,11,13,13,13,
- 13,13,14,15,12,13,13,14,15, 9,10,10,12,13,10,11,
- 10,13,13,10,11,11,12,13,12,13,12,15,14,12,13,13,
- 14,15,11,12,12,15,14,12,12,13,14,15,12,13,13,15,
- 14,13,13,15,14,16,14,14,14,16,15,11,12,12,14,14,
- 11,12,12,14,14,12,13,13,14,15,13,14,13,15,13,14,
- 14,14,15,16, 8, 9,10,12,12, 9,10,10,13,12, 9,10,
- 11,12,13,12,12,12,14,14,12,13,13,14,14, 9,10,10,
- 13,12,10,11,11,13,13,10,10,11,13,13,12,13,13,15,
- 14,12,12,13,14,15, 9,10,10,13,13,10,11,11,13,13,
- 10,11,11,13,13,12,13,13,14,14,13,13,13,15,15,11,
- 12,12,14,13,12,13,13,15,14,11,12,12,14,14,14,14,
- 14,16,15,13,13,14,13,16,11,12,12,14,14,12,13,13,
- 14,15,12,13,12,14,14,14,14,14,16,16,14,15,13,16,
- 14,
-};
-
-static const static_codebook _16u2_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__16u2_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16u2_p2_0,
- 0
-};
-
-static const long _vq_quantlist__16u2_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__16u2_p3_0[] = {
- 2, 4, 4, 6, 6, 7, 7, 9, 9, 4, 5, 5, 6, 6, 8, 7,
- 9, 9, 4, 5, 5, 6, 6, 7, 8, 9, 9, 6, 6, 6, 7, 7,
- 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8,10,10, 7, 8, 7,
- 8, 8, 9, 9,11,10, 7, 7, 8, 8, 8, 9, 9,10,11, 9,
- 9, 9,10,10,11,10,11,11, 9, 9, 9,10,10,10,11,11,
- 11,
-};
-
-static const static_codebook _16u2_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__16u2_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__16u2_p3_0,
- 0
-};
-
-static const long _vq_quantlist__16u2_p4_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__16u2_p4_0[] = {
- 2, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,11,
- 11, 5, 5, 5, 7, 6, 8, 7, 9, 9, 9, 9,10,10,11,11,
- 12,12, 5, 5, 5, 6, 6, 7, 8, 8, 9, 9, 9,10,10,11,
- 11,12,12, 6, 7, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,12,12, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,12,12, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,11,11,12,12, 7, 7, 8, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,11,11,12,12, 8, 9, 9, 9, 9, 9, 9,10,10,
- 10,10,11,11,12,12,12,12, 8, 9, 9, 9, 9, 9, 9,10,
- 10,10,10,11,11,12,12,12,12, 9, 9, 9, 9, 9,10,10,
- 10,10,10,11,11,11,12,12,13,13, 9, 9, 9, 9, 9,10,
- 10,10,10,11,10,11,11,12,12,13,13,10,10,10,10,10,
- 11,11,11,11,11,11,11,12,12,12,13,13,10,10,10,10,
- 10,11,11,11,11,11,11,12,11,12,12,13,13,11,11,11,
- 11,11,11,11,12,12,12,12,12,12,13,13,13,13,11,11,
- 11,11,11,11,11,12,12,12,12,13,12,13,13,13,13,11,
- 12,12,12,12,12,12,12,12,13,13,13,13,13,13,14,14,
- 11,12,12,12,12,12,12,12,13,13,13,13,13,13,13,14,
- 14,
-};
-
-static const static_codebook _16u2_p4_0 = {
- 2, 289,
- (char *)_vq_lengthlist__16u2_p4_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__16u2_p4_0,
- 0
-};
-
-static const long _vq_quantlist__16u2_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__16u2_p5_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 7, 9, 9, 7,
- 9,10, 5, 8, 8, 7,10, 9, 7,10, 9, 5, 8, 8, 8,11,
- 10, 8,10,10, 7,10,10, 9, 9,12,10,12,12, 7,10,10,
- 9,12,10,10,11,12, 5, 8, 8, 8,10,10, 8,11,11, 7,
- 11,10,10,12,11, 9,10,12, 7,10,11,10,12,12, 9,12,
- 9,
-};
-
-static const static_codebook _16u2_p5_0 = {
- 4, 81,
- (char *)_vq_lengthlist__16u2_p5_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__16u2_p5_0,
- 0
-};
-
-static const long _vq_quantlist__16u2_p5_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__16u2_p5_1[] = {
- 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 5, 6, 6, 7, 7,
- 7, 7, 8, 8, 8, 8, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8,
- 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7,
- 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
- 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8,
- 8, 8, 8, 8, 8, 9, 9, 9, 9,
-};
-
-static const static_codebook _16u2_p5_1 = {
- 2, 121,
- (char *)_vq_lengthlist__16u2_p5_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__16u2_p5_1,
- 0
-};
-
-static const long _vq_quantlist__16u2_p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__16u2_p6_0[] = {
- 1, 5, 4, 7, 7, 8, 8, 8, 8,10,10,11,11, 4, 6, 6,
- 7, 7, 9, 9, 9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9,
- 9, 9, 9,10,10,11,11, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,12,12, 7, 7, 7, 9, 8,10, 9,10,10,11,11,12,
- 12, 8, 9, 9, 9,10,10,10,11,11,12,12,13,13, 8, 9,
- 9,10, 9,10,10,11,11,12,12,13,13, 8, 9, 9,10,10,
- 11,11,11,11,12,12,13,13, 8, 9, 9,10,10,11,11,12,
- 11,12,12,13,13,10,10,10,11,11,12,12,12,12,13,13,
- 14,14,10,10,10,11,11,12,12,12,12,13,13,14,14,11,
- 11,11,12,12,13,13,13,13,14,14,14,14,11,11,11,12,
- 12,13,13,13,13,14,14,14,14,
-};
-
-static const static_codebook _16u2_p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__16u2_p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__16u2_p6_0,
- 0
-};
-
-static const long _vq_quantlist__16u2_p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__16u2_p6_1[] = {
- 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _16u2_p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__16u2_p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__16u2_p6_1,
- 0
-};
-
-static const long _vq_quantlist__16u2_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__16u2_p7_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 6, 6,
- 8, 8, 9, 9, 9, 9,10,10,11,10, 4, 6, 6, 8, 8, 9,
- 9, 9, 9,10,10,11,11, 7, 8, 8,10, 9,10,10,10,10,
- 11,11,12,12, 7, 8, 8,10,10,10,10,10,10,11,11,12,
- 12, 8, 9, 9,10,10,11,11,11,11,12,12,13,13, 8, 9,
- 9,10,10,11,11,11,11,12,12,13,13, 8, 9, 9,11,10,
- 11,11,12,12,13,13,14,13, 8, 9, 9,10,10,11,11,12,
- 12,13,13,13,13, 9,10,10,11,11,12,12,13,13,13,13,
- 14,14, 9,10,10,11,11,12,12,13,13,13,13,14,14,10,
- 11,11,12,12,13,13,14,13,14,14,15,14,10,11,11,12,
- 12,13,13,14,13,14,14,15,14,
-};
-
-static const static_codebook _16u2_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__16u2_p7_0,
- 1, -523206656, 1618345984, 4, 0,
- (long *)_vq_quantlist__16u2_p7_0,
- 0
-};
-
-static const long _vq_quantlist__16u2_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__16u2_p7_1[] = {
- 2, 5, 5, 7, 7, 7, 7, 7, 7, 8, 8, 5, 6, 6, 7, 7,
- 7, 7, 8, 8, 8, 8, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8,
- 8, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7,
- 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
- 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _16u2_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__16u2_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__16u2_p7_1,
- 0
-};
-
-static const long _vq_quantlist__16u2_p8_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__16u2_p8_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 7, 7, 9, 8,10, 9,11,11, 4,
- 7, 6, 9, 8, 9, 9, 9, 9,10, 9,11, 9,12, 9, 4, 6,
- 7, 8, 8, 9, 9, 9, 9,10,10,10,11,11,12, 7, 9, 8,
- 10,10,11,11,10,10,11,11,12,12,13,12, 7, 8, 8,10,
- 10,10,11,10,10,11,11,11,12,12,13, 8, 9, 9,11,11,
- 11,11,11,11,12,12,13,13,13,13, 8, 9, 9,11,11,11,
- 11,11,11,12,12,13,13,13,14, 8, 9, 9,10,10,11,11,
- 12,11,13,13,14,13,14,14, 8, 9, 9,10,10,11,11,12,
- 12,12,12,13,13,14,14, 9,10,10,11,11,12,12,13,12,
- 13,13,14,14,15,15, 9,10,10,11,11,12,12,12,13,13,
- 13,14,14,14,15,10,11,11,12,12,13,13,14,13,14,14,
- 15,14,15,15,10,11,11,12,12,13,12,13,14,14,14,14,
- 14,15,15,11,12,12,13,13,13,13,14,14,15,14,15,15,
- 16,16,11,12,12,13,13,13,13,14,14,14,15,15,15,16,
- 16,
-};
-
-static const static_codebook _16u2_p8_0 = {
- 2, 225,
- (char *)_vq_lengthlist__16u2_p8_0,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__16u2_p8_0,
- 0
-};
-
-static const long _vq_quantlist__16u2_p8_1[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__16u2_p8_1[] = {
- 3, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10,10,10, 5, 6, 6, 7, 7, 8,
- 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7,
- 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,
- 10,10,10,10, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,
- 9,10, 9,10,10,10, 9,10, 9, 8, 8, 8, 9, 8, 9, 9,
- 9, 9,10, 9,10,10,10,10,10,10,10,10,10,10, 8, 8,
- 8, 8, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,
- 10,10,10, 8, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,
- 10,10,10,10,10,10,10,10, 8, 9, 9, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
- 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
- 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10, 9, 9, 9,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10, 9, 9,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10, 9,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10, 9,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10, 9,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _16u2_p8_1 = {
- 2, 441,
- (char *)_vq_lengthlist__16u2_p8_1,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__16u2_p8_1,
- 0
-};
-
-static const long _vq_quantlist__16u2_p9_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__16u2_p9_0[] = {
- 1, 5, 3, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5,
- 7, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 7,
- 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _16u2_p9_0 = {
- 2, 225,
- (char *)_vq_lengthlist__16u2_p9_0,
- 1, -510036736, 1631393792, 4, 0,
- (long *)_vq_quantlist__16u2_p9_0,
- 0
-};
-
-static const long _vq_quantlist__16u2_p9_1[] = {
- 9,
- 8,
- 10,
- 7,
- 11,
- 6,
- 12,
- 5,
- 13,
- 4,
- 14,
- 3,
- 15,
- 2,
- 16,
- 1,
- 17,
- 0,
- 18,
-};
-
-static const char _vq_lengthlist__16u2_p9_1[] = {
- 1, 4, 4, 7, 7, 7, 7, 7, 6, 9, 7,10, 8,12,12,13,
- 13,14,14, 4, 7, 7, 9, 9, 9, 8, 9, 8,10, 9,11, 9,
- 14, 9,14,10,13,11, 4, 7, 7, 9, 9, 9, 9, 8, 9,10,
- 10,11,11,12,13,12,13,14,15, 7, 9, 9,10,11,10,10,
- 10,10,11,12,13,13,13,14,17,14,15,16, 7, 9, 9,10,
- 10,10,10,10,10,11,12,13,13,14,14,15,15,18,18, 8,
- 9, 9,11,10,11,11,11,12,13,12,14,14,16,15,15,17,
- 18,15, 8, 9, 9,10,10,11,11,11,11,13,13,14,14,15,
- 15,15,16,16,18, 7, 9, 8,10,10,11,11,12,12,14,14,
- 15,15,16,16,15,17,16,18, 8, 9, 9,10,10,11,12,12,
- 12,13,13,16,15,17,16,17,18,17,18, 9,10,10,12,11,
- 13,13,14,13,14,14,15,17,16,18,17,18,17,18, 9,10,
- 10,12,11,12,13,13,14,15,16,14,15,16,18,18,18,18,
- 17,11,11,11,13,13,14,14,16,15,15,15,16,15,15,18,
- 18,18,17,16,11,11,12,13,13,15,14,15,16,16,16,17,
- 16,15,18,17,18,16,18,12,13,13,15,15,15,16,18,16,
- 17,16,17,16,17,17,17,18,18,17,13,13,13,15,13,16,
- 15,17,16,16,16,18,18,18,18,16,17,17,18,13,15,14,
- 15,15,18,17,18,18,18,16,18,17,18,17,18,16,17,17,
- 14,14,14,15,16,17,16,18,18,18,17,18,17,18,18,18,
- 16,16,16,14,17,16,17,15,16,18,18,17,18,17,18,17,
- 18,18,18,17,18,17,15,16,15,18,15,18,17,16,18,18,
- 18,18,18,18,17,18,16,18,17,
-};
-
-static const static_codebook _16u2_p9_1 = {
- 2, 361,
- (char *)_vq_lengthlist__16u2_p9_1,
- 1, -518287360, 1622704128, 5, 0,
- (long *)_vq_quantlist__16u2_p9_1,
- 0
-};
-
-static const long _vq_quantlist__16u2_p9_2[] = {
- 24,
- 23,
- 25,
- 22,
- 26,
- 21,
- 27,
- 20,
- 28,
- 19,
- 29,
- 18,
- 30,
- 17,
- 31,
- 16,
- 32,
- 15,
- 33,
- 14,
- 34,
- 13,
- 35,
- 12,
- 36,
- 11,
- 37,
- 10,
- 38,
- 9,
- 39,
- 8,
- 40,
- 7,
- 41,
- 6,
- 42,
- 5,
- 43,
- 4,
- 44,
- 3,
- 45,
- 2,
- 46,
- 1,
- 47,
- 0,
- 48,
-};
-
-static const char _vq_lengthlist__16u2_p9_2[] = {
- 2, 3, 4, 4, 4, 5, 5, 6, 5, 6, 6, 6, 6, 6, 6, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 7, 8, 8, 8, 8, 8,
- 8,
-};
-
-static const static_codebook _16u2_p9_2 = {
- 1, 49,
- (char *)_vq_lengthlist__16u2_p9_2,
- 1, -526909440, 1611661312, 6, 0,
- (long *)_vq_quantlist__16u2_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__16u2__short[] = {
- 8,11,13,13,15,16,19,19,19,19,11, 8, 8, 9, 9,11,
- 13,15,19,20,14, 8, 7, 7, 8, 9,12,13,15,20,15, 9,
- 6, 5, 5, 7,10,12,14,18,14, 9, 7, 5, 3, 4, 7,10,
- 12,16,13,10, 8, 6, 3, 3, 5, 8,11,14,11,10, 9, 7,
- 5, 4, 4, 6,11,14,10,10,10, 8, 6, 5, 5, 6,10,14,
- 10,10,10, 9, 8, 7, 7, 7,10,14,11,12,12,12,11,10,
- 10,10,12,16,
-};
-
-static const static_codebook _huff_book__16u2__short = {
- 2, 100,
- (char *)_huff_lengthlist__16u2__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__8u0__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8u0__p1_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
- 10,10, 5, 8, 8, 7,10,10, 8,10,10, 4, 9, 8, 8,11,
- 11, 8,11,11, 7,11,11,10,11,13,10,13,13, 7,11,11,
- 10,13,12,10,13,13, 5, 9, 8, 8,11,11, 8,11,11, 7,
- 11,11, 9,13,13,10,12,13, 7,11,11,10,13,13,10,13,
- 11,
-};
-
-static const static_codebook _8u0__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__8u0__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__8u0__p1_0,
- 0
-};
-
-static const long _vq_quantlist__8u0__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8u0__p2_0[] = {
- 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 6, 7, 8, 6,
- 7, 8, 5, 7, 7, 6, 8, 8, 7, 9, 7, 5, 7, 7, 7, 9,
- 9, 7, 8, 8, 6, 9, 8, 7, 7,10, 8,10,10, 6, 8, 8,
- 8,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 9, 6,
- 8, 8, 8,10,10, 8, 8,10, 6, 8, 9, 8,10,10, 7,10,
- 8,
-};
-
-static const static_codebook _8u0__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__8u0__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__8u0__p2_0,
- 0
-};
-
-static const long _vq_quantlist__8u0__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__8u0__p3_0[] = {
- 1, 5, 5, 7, 7, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8,
- 10, 9,11,11, 8, 9, 9,11,11, 6, 8, 8,10,10, 8,10,
- 10,11,11, 8,10,10,11,11,10,11,11,12,12,10,11,11,
- 12,13, 6, 8, 8,10,10, 8,10,10,11,11, 8,10,10,11,
- 11, 9,10,11,12,12,10,11,11,12,12, 8,11,11,14,13,
- 10,12,11,15,13,10,12,11,14,14,12,13,12,16,14,12,
- 14,12,16,15, 8,11,11,13,14,10,11,12,13,15,10,11,
- 12,13,15,11,12,13,14,15,12,12,14,14,16, 5, 8, 8,
- 11,11, 9,11,11,12,12, 8,10,11,12,12,11,12,12,15,
- 14,11,12,12,14,14, 7,11,10,13,12,10,11,12,13,14,
- 10,12,12,14,13,12,13,13,14,15,12,13,13,15,15, 7,
- 10,11,12,13,10,12,11,14,13,10,12,13,13,15,12,13,
- 12,14,14,11,13,13,15,16, 9,12,12,15,14,11,13,13,
- 15,16,11,13,13,16,16,13,14,15,15,15,12,14,15,17,
- 16, 9,12,12,14,15,11,13,13,15,16,11,13,13,16,18,
- 13,14,14,17,16,13,15,15,17,18, 5, 8, 9,11,11, 8,
- 11,11,12,12, 8,10,11,12,12,11,12,12,14,14,11,12,
- 12,14,15, 7,11,10,12,13,10,12,12,14,13,10,11,12,
- 13,14,11,13,13,15,14,12,13,13,14,15, 7,10,11,13,
- 13,10,12,12,13,14,10,12,12,13,13,11,13,13,16,16,
- 12,13,13,15,14, 9,12,12,16,15,10,13,13,15,15,11,
- 13,13,17,15,12,15,15,18,17,13,14,14,15,16, 9,12,
- 12,15,15,11,13,13,15,16,11,13,13,15,15,12,15,15,
- 16,16,13,15,14,17,15, 7,11,11,15,15,10,13,13,16,
- 15,10,13,13,15,16,14,15,15,17,19,13,15,14,15,18,
- 9,12,12,16,16,11,13,14,17,16,11,13,13,17,16,15,
- 15,16,17,19,13,15,16, 0,18, 9,12,12,16,15,11,14,
- 13,17,17,11,13,14,16,16,15,16,16,19,18,13,15,15,
- 17,19,11,14,14,19,16,12,14,15, 0,18,12,16,15,18,
- 17,15,15,18,16,19,14,15,17,19,19,11,14,14,18,19,
- 13,15,14,19,19,12,16,15,18,17,15,17,15, 0,16,14,
- 17,16,19, 0, 7,11,11,14,14,10,12,12,15,15,10,13,
- 13,16,15,13,15,15,17, 0,14,15,15,16,19, 9,12,12,
- 16,16,11,14,14,16,16,11,13,13,16,16,14,17,16,19,
- 0,14,18,17,17,19, 9,12,12,15,16,11,13,13,15,17,
- 12,14,13,19,16,13,15,15,17,19,15,17,16,17,19,11,
- 14,14,19,16,12,15,15,19,17,13,14,15,17,19,14,16,
- 17,19,19,16,15,16,17,19,11,15,14,16,16,12,15,15,
- 19, 0,12,14,15,19,19,14,16,16, 0,18,15,19,14,18,
- 16,
-};
-
-static const static_codebook _8u0__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__8u0__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__8u0__p3_0,
- 0
-};
-
-static const long _vq_quantlist__8u0__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__8u0__p4_0[] = {
- 3, 5, 5, 8, 8, 5, 6, 7, 9, 9, 6, 7, 6, 9, 9, 9,
- 9, 9,10,11, 9, 9, 9,11,10, 6, 7, 7,10,10, 7, 7,
- 8,10,10, 7, 8, 8,10,10,10,10,10,10,11, 9,10,10,
- 11,12, 6, 7, 7,10,10, 7, 8, 8,10,10, 7, 8, 7,10,
- 10, 9,10,10,12,11,10,10,10,11,10, 9,10,10,12,11,
- 10,10,10,13,11, 9,10,10,12,12,11,11,12,12,13,11,
- 11,11,12,13, 9,10,10,12,12,10,10,11,12,12,10,10,
- 11,12,12,11,11,11,13,13,11,12,12,13,13, 5, 7, 7,
- 10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,11,12,
- 12,10,11,10,12,12, 7, 8, 8,11,11, 7, 8, 9,10,11,
- 8, 9, 9,11,11,11,10,11,10,12,10,11,11,12,13, 7,
- 8, 8,10,11, 8, 9, 8,12,10, 8, 9, 9,11,12,10,11,
- 10,13,11,10,11,11,13,12, 9,11,10,13,12,10,10,11,
- 12,12,10,11,11,13,13,12,10,13,11,14,11,12,12,15,
- 13, 9,11,11,13,13,10,11,11,13,12,10,11,11,12,14,
- 12,13,11,14,12,12,12,12,14,14, 5, 7, 7,10,10, 7,
- 8, 8,10,10, 7, 8, 8,11,10,10,11,11,12,12,10,11,
- 10,12,12, 7, 8, 8,10,11, 8, 9, 9,12,11, 8, 8, 9,
- 10,11,10,11,11,12,13,11,10,11,11,13, 6, 8, 8,10,
- 11, 8, 9, 9,11,11, 7, 9, 7,11,10,10,11,11,12,12,
- 10,11,10,13,10, 9,11,10,13,12,10,12,11,13,13,10,
- 10,11,12,13,11,12,13,15,14,11,11,13,12,13, 9,10,
- 11,12,13,10,11,11,12,13,10,11,10,13,12,12,13,13,
- 13,14,12,12,11,14,11, 8,10,10,12,13,10,11,11,13,
- 13,10,11,10,13,13,12,13,14,15,14,12,12,12,14,13,
- 9,10,10,13,12,10,10,12,13,13,10,11,11,15,12,12,
- 12,13,15,14,12,13,13,15,13, 9,10,11,12,13,10,12,
- 10,13,12,10,11,11,12,13,12,14,12,15,13,12,12,12,
- 15,14,11,12,11,14,13,11,11,12,14,14,12,13,13,14,
- 13,13,11,15,11,15,14,14,14,16,15,11,12,12,13,14,
- 11,13,11,14,14,12,12,13,14,15,12,14,12,15,12,13,
- 15,14,16,15, 8,10,10,12,12,10,10,10,12,13,10,11,
- 11,13,13,12,12,12,13,14,13,13,13,15,15, 9,10,10,
- 12,12,10,11,11,13,12,10,10,11,13,13,12,12,12,14,
- 14,12,12,13,15,14, 9,10,10,13,12,10,10,12,12,13,
- 10,11,10,13,13,12,13,13,14,14,12,13,12,14,13,11,
- 12,12,14,13,12,13,12,14,14,10,12,12,14,14,14,14,
- 14,16,14,13,12,14,12,15,10,12,12,14,15,12,13,13,
- 14,16,11,12,11,15,14,13,14,14,14,15,13,14,11,14,
- 12,
-};
-
-static const static_codebook _8u0__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__8u0__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__8u0__p4_0,
- 0
-};
-
-static const long _vq_quantlist__8u0__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__8u0__p5_0[] = {
- 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 7, 8, 8,
- 10,10, 4, 6, 6, 8, 8, 8, 8,10,10, 6, 8, 8, 9, 9,
- 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 7, 8, 8,
- 9, 9,10,10,12,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
- 10,10,11,11,11,12,12,12, 9,10,10,11,11,12,12,12,
- 12,
-};
-
-static const static_codebook _8u0__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__8u0__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__8u0__p5_0,
- 0
-};
-
-static const long _vq_quantlist__8u0__p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__8u0__p6_0[] = {
- 1, 4, 4, 7, 7, 9, 9,11,11,12,12,16,16, 3, 6, 6,
- 9, 9,11,11,12,12,13,14,18,16, 3, 6, 7, 9, 9,11,
- 11,13,12,14,14,17,16, 7, 9, 9,11,11,12,12,14,14,
- 14,14,17,16, 7, 9, 9,11,11,13,12,13,13,14,14,17,
- 0, 9,11,11,12,13,14,14,14,13,15,14,17,17, 9,11,
- 11,12,12,14,14,13,14,14,15, 0, 0,11,12,12,15,14,
- 15,14,15,14,15,16,17, 0,11,12,13,13,13,14,14,15,
- 14,15,15, 0, 0,12,14,14,15,15,14,16,15,15,17,16,
- 0,18,13,14,14,15,14,15,14,15,16,17,16, 0, 0,17,
- 17,18, 0,16,18,16, 0, 0, 0,17, 0, 0,16, 0, 0,16,
- 16, 0,15, 0,17, 0, 0, 0, 0,
-};
-
-static const static_codebook _8u0__p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__8u0__p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__8u0__p6_0,
- 0
-};
-
-static const long _vq_quantlist__8u0__p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__8u0__p6_1[] = {
- 1, 4, 4, 6, 6, 4, 6, 5, 7, 7, 4, 5, 6, 7, 7, 6,
- 7, 7, 7, 7, 6, 7, 7, 7, 7,
-};
-
-static const static_codebook _8u0__p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__8u0__p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__8u0__p6_1,
- 0
-};
-
-static const long _vq_quantlist__8u0__p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8u0__p7_0[] = {
- 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _8u0__p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__8u0__p7_0,
- 1, -518803456, 1628680192, 2, 0,
- (long *)_vq_quantlist__8u0__p7_0,
- 0
-};
-
-static const long _vq_quantlist__8u0__p7_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__8u0__p7_1[] = {
- 1, 5, 5, 5, 5,10,10,11,11,11,11,11,11,11,11, 5,
- 7, 6, 8, 8, 9,10,11,11,11,11,11,11,11,11, 6, 6,
- 7, 9, 7,11,10,11,11,11,11,11,11,11,11, 5, 6, 6,
- 11, 8,11,11,11,11,11,11,11,11,11,11, 5, 6, 6, 9,
- 10,11,10,11,11,11,11,11,11,11,11, 7,10,10,11,11,
- 11,11,11,11,11,11,11,11,11,11, 7,11, 8,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _8u0__p7_1 = {
- 2, 225,
- (char *)_vq_lengthlist__8u0__p7_1,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__8u0__p7_1,
- 0
-};
-
-static const long _vq_quantlist__8u0__p7_2[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__8u0__p7_2[] = {
- 1, 6, 5, 7, 7, 9, 9, 9, 9,10,12,12,10,11,11,10,
- 11,11,11,10,11, 6, 8, 8, 9, 9,10,10, 9,10,11,11,
- 10,11,11,11,11,10,11,11,11,11, 6, 7, 8, 9, 9, 9,
- 10,11,10,11,12,11,10,11,11,11,11,11,11,12,10, 8,
- 9, 9,10, 9,10,10, 9,10,10,10,10,10, 9,10,10,10,
- 10, 9,10,10, 9, 9, 9, 9,10,10, 9, 9,10,10,11,10,
- 9,12,10,11,10, 9,10,10,10, 8, 9, 9,10, 9,10, 9,
- 9,10,10, 9,10, 9,11,10,10,10,10,10, 9,10, 8, 8,
- 9, 9,10, 9,11, 9, 8, 9, 9,10,11,10,10,10,11,12,
- 9, 9,11, 8, 9, 8,11,10,11,10,10, 9,11,10,10,10,
- 10,10,10,10,11,11,11,11, 8, 9, 9, 9,10,10,10,11,
- 11,12,11,12,11,10,10,10,12,11,11,11,10, 8,10, 9,
- 11,10,10,11,12,10,11,12,11,11,12,11,12,12,10,11,
- 11,10, 9, 9,10,11,12,10,10,10,11,10,11,11,10,12,
- 12,10,11,10,11,12,10, 9,10,10,11,10,11,11,11,11,
- 11,12,11,11,11, 9,11,10,11,10,11,10, 9, 9,10,11,
- 11,11,10,10,11,12,12,11,12,11,11,11,12,12,12,12,
- 11, 9,11,11,12,10,11,11,11,11,11,11,12,11,11,12,
- 11,11,11,10,11,11, 9,11,10,11,11,11,10,10,10,11,
- 11,11,12,10,11,10,11,11,11,11,12, 9,11,10,11,11,
- 10,10,11,11, 9,11,11,12,10,10,10,10,10,11,11,10,
- 9,10,11,11,12,11,10,10,12,11,11,12,11,12,11,11,
- 10,10,11,11,10,12,11,10,11,10,11,10,10,10,11,11,
- 10,10,11,11,11,11,10,10,10,12,11,11,11,11,10, 9,
- 10,11,11,11,12,11,11,11,12,10,11,11,11, 9,10,11,
- 11,11,11,11,11,10,10,11,11,12,11,10,11,12,11,10,
- 10,11, 9,10,11,11,11,11,11,10,11,11,10,12,11,11,
- 11,12,11,11,11,10,10,11,11,
-};
-
-static const static_codebook _8u0__p7_2 = {
- 2, 441,
- (char *)_vq_lengthlist__8u0__p7_2,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__8u0__p7_2,
- 0
-};
-
-static const char _huff_lengthlist__8u0__single[] = {
- 4, 7,11, 9,12, 8, 7,10, 6, 4, 5, 5, 7, 5, 6,16,
- 9, 5, 5, 6, 7, 7, 9,16, 7, 4, 6, 5, 7, 5, 7,17,
- 10, 7, 7, 8, 7, 7, 8,18, 7, 5, 6, 4, 5, 4, 5,15,
- 7, 6, 7, 5, 6, 4, 5,15,12,13,18,12,17,11, 9,17,
-};
-
-static const static_codebook _huff_book__8u0__single = {
- 2, 64,
- (char *)_huff_lengthlist__8u0__single,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__8u1__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8u1__p1_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 7, 9,10, 7,
- 9, 9, 5, 8, 8, 7,10, 9, 7, 9, 9, 5, 8, 8, 8,10,
- 10, 8,10,10, 7,10,10, 9,10,12,10,12,12, 7,10,10,
- 9,12,11,10,12,12, 5, 8, 8, 8,10,10, 8,10,10, 7,
- 10,10,10,12,12, 9,11,12, 7,10,10,10,12,12, 9,12,
- 10,
-};
-
-static const static_codebook _8u1__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__8u1__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__8u1__p1_0,
- 0
-};
-
-static const long _vq_quantlist__8u1__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8u1__p2_0[] = {
- 3, 4, 5, 5, 6, 6, 5, 6, 6, 5, 7, 6, 6, 7, 8, 6,
- 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 7, 5, 6, 6, 7, 8,
- 8, 6, 7, 7, 6, 8, 7, 7, 7, 9, 8, 9, 9, 6, 7, 8,
- 7, 9, 7, 8, 9, 9, 5, 6, 6, 6, 7, 7, 7, 8, 8, 6,
- 8, 7, 8, 9, 9, 7, 7, 9, 6, 7, 8, 8, 9, 9, 7, 9,
- 7,
-};
-
-static const static_codebook _8u1__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__8u1__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__8u1__p2_0,
- 0
-};
-
-static const long _vq_quantlist__8u1__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__8u1__p3_0[] = {
- 1, 5, 5, 7, 7, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8,
- 10, 9,11,11, 9, 9, 9,11,11, 6, 8, 8,10,10, 8,10,
- 10,11,11, 8, 9,10,11,11,10,11,11,12,12,10,11,11,
- 12,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10, 9,11,
- 11,10,11,11,12,12,10,11,11,12,12, 9,11,11,14,13,
- 10,12,11,14,14,10,12,11,14,13,12,13,13,15,14,12,
- 13,13,15,14, 8,11,11,13,14,10,11,12,13,15,10,11,
- 12,14,14,12,13,13,14,15,12,13,13,14,15, 5, 8, 8,
- 11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14,
- 13,11,12,12,13,14, 8,10,10,12,12, 9,11,12,13,14,
- 10,12,12,13,13,12,12,13,14,14,11,13,13,15,15, 7,
- 10,10,12,12, 9,12,11,14,12,10,11,12,13,14,12,13,
- 12,14,14,12,13,13,15,16,10,12,12,15,14,11,12,13,
- 15,15,11,13,13,15,16,14,14,15,15,16,13,14,15,17,
- 15, 9,12,12,14,15,11,13,12,15,15,11,13,13,15,15,
- 13,14,13,15,14,13,14,14,17, 0, 5, 8, 8,11,11, 8,
- 10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12,
- 12,14,14, 7,10,10,12,12,10,12,12,13,13, 9,11,12,
- 12,13,11,12,13,15,15,11,12,13,14,15, 8,10,10,12,
- 12,10,12,11,13,13,10,12,11,13,13,11,13,13,15,14,
- 12,13,12,15,13, 9,12,12,14,14,11,13,13,16,15,11,
- 12,13,16,15,13,14,15,16,16,13,13,15,15,16,10,12,
- 12,15,14,11,13,13,14,16,11,13,13,15,16,13,15,15,
- 16,17,13,15,14,16,15, 8,11,11,14,15,10,12,12,15,
- 15,10,12,12,15,16,14,15,15,16,17,13,14,14,16,16,
- 9,12,12,15,15,11,13,14,15,17,11,13,13,15,16,14,
- 15,16,19,17,13,15,15, 0,17, 9,12,12,15,15,11,14,
- 13,16,15,11,13,13,15,16,15,15,15,18,17,13,15,15,
- 17,17,11,15,14,18,16,12,14,15,17,17,12,15,15,18,
- 18,15,15,16,15,19,14,16,16, 0, 0,11,14,14,16,17,
- 12,15,14,18,17,12,15,15,18,18,15,17,15,18,16,14,
- 16,16,18,18, 7,11,11,14,14,10,12,12,15,15,10,12,
- 13,15,15,13,14,15,16,16,14,15,15,18,18, 9,12,12,
- 15,15,11,13,13,16,15,11,12,13,16,16,14,15,15,17,
- 16,15,16,16,17,17, 9,12,12,15,15,11,13,13,15,17,
- 11,14,13,16,15,13,15,15,17,17,15,15,15,18,17,11,
- 14,14,17,15,12,14,15,17,18,13,13,15,17,17,14,16,
- 16,19,18,16,15,17,17, 0,11,14,14,17,17,12,15,15,
- 18, 0,12,15,14,18,16,14,17,17,19, 0,16,18,15, 0,
- 16,
-};
-
-static const static_codebook _8u1__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__8u1__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__8u1__p3_0,
- 0
-};
-
-static const long _vq_quantlist__8u1__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__8u1__p4_0[] = {
- 4, 5, 5, 9, 9, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 9,
- 9, 9,11,11, 9, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 7,
- 8, 9,10, 7, 7, 8, 9,10, 9, 9,10,10,11, 9, 9,10,
- 10,12, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 7,10,
- 9, 9,10, 9,12,11,10,10, 9,12,10, 9,10,10,12,11,
- 9,10,10,12,11, 9,10,10,12,12,11,11,12,12,13,11,
- 11,12,12,13, 9, 9,10,12,11, 9,10,10,12,12,10,10,
- 10,12,12,11,12,11,13,12,11,12,11,13,12, 6, 7, 7,
- 9, 9, 7, 8, 8,10,10, 7, 8, 7,10, 9,10,10,10,12,
- 12,10,10,10,12,11, 7, 8, 7,10,10, 7, 7, 9,10,11,
- 8, 9, 9,11,10,10,10,11,10,12,10,10,11,12,12, 7,
- 8, 8,10,10, 7, 9, 8,11,10, 8, 8, 9,11,11,10,11,
- 10,12,11,10,11,11,12,12, 9,10,10,12,12, 9,10,10,
- 12,12,10,11,11,13,12,11,10,12,10,14,12,12,12,13,
- 14, 9,10,10,12,12, 9,11,10,12,12,10,11,11,12,12,
- 11,12,11,14,12,12,12,12,14,14, 5, 7, 7, 9, 9, 7,
- 7, 7, 9,10, 7, 8, 8,10,10,10,10,10,11,11,10,10,
- 10,12,12, 7, 8, 8,10,10, 8, 9, 8,11,10, 7, 8, 9,
- 10,11,10,10,10,11,12,10,10,11,11,13, 6, 7, 8,10,
- 10, 8, 9, 9,10,10, 7, 9, 7,11,10,10,11,10,12,12,
- 10,11,10,12,10, 9,10,10,12,12,10,11,11,13,12, 9,
- 10,10,12,12,12,12,12,14,13,11,11,12,11,14, 9,10,
- 10,11,12,10,11,11,12,13, 9,10,10,12,12,12,12,12,
- 14,13,11,12,10,14,11, 9, 9,10,11,12, 9,10,10,12,
- 12, 9,10,10,12,12,12,12,12,14,14,11,12,12,13,12,
- 9,10, 9,12,12, 9,10,11,12,13,10,11,10,13,11,12,
- 12,13,13,14,12,12,12,13,13, 9,10,10,12,12,10,11,
- 10,13,12,10,10,11,12,13,12,13,12,14,13,12,12,12,
- 13,14,11,12,11,14,13,10,10,11,13,13,12,12,12,14,
- 13,12,10,14,10,15,13,14,14,14,14,11,11,12,13,14,
- 10,12,11,13,13,12,12,12,13,15,12,13,11,15,12,13,
- 13,14,14,14, 9,10, 9,12,12, 9,10,10,12,12,10,10,
- 10,12,12,11,11,12,12,13,12,12,12,14,14, 9,10,10,
- 12,12,10,11,10,13,12,10,10,11,12,13,12,12,12,14,
- 13,12,12,13,13,14, 9,10,10,12,13,10,10,11,11,12,
- 9,11,10,13,12,12,12,12,13,14,12,13,12,14,13,11,
- 12,11,13,13,12,13,12,14,13,10,11,12,13,13,13,13,
- 13,14,15,12,11,14,12,14,11,11,12,12,13,12,12,12,
- 13,14,10,12,10,14,13,13,13,13,14,15,12,14,11,15,
- 10,
-};
-
-static const static_codebook _8u1__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__8u1__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__8u1__p4_0,
- 0
-};
-
-static const long _vq_quantlist__8u1__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__8u1__p5_0[] = {
- 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 5, 8, 7, 8, 8,
- 10,10, 4, 6, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9,
- 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 8, 8, 8,
- 9, 9,10,10,12,11, 8, 8, 8, 9, 9,10,10,11,11, 9,
- 10,10,11,11,11,11,13,12, 9,10,10,11,11,12,12,12,
- 13,
-};
-
-static const static_codebook _8u1__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__8u1__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__8u1__p5_0,
- 0
-};
-
-static const long _vq_quantlist__8u1__p6_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__8u1__p6_0[] = {
- 3, 4, 4, 6, 6, 7, 7, 9, 9, 4, 4, 5, 6, 6, 7, 7,
- 9, 9, 4, 4, 4, 6, 6, 7, 7, 9, 9, 6, 6, 6, 7, 7,
- 8, 8, 9, 9, 6, 6, 6, 7, 7, 8, 8, 9, 9, 7, 7, 7,
- 8, 8, 8, 9,10,10, 7, 7, 7, 8, 8, 9, 8,10,10, 9,
- 9, 9, 9, 9,10,10,10,10, 9, 9, 9, 9, 9,10,10,10,
- 10,
-};
-
-static const static_codebook _8u1__p6_0 = {
- 2, 81,
- (char *)_vq_lengthlist__8u1__p6_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__8u1__p6_0,
- 0
-};
-
-static const long _vq_quantlist__8u1__p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__8u1__p7_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 9, 8,10,10, 8,
- 10,10, 5, 9, 9, 7,10,10, 8,10,10, 4,10,10, 9,12,
- 12, 9,11,11, 7,12,11,10,11,13,10,13,13, 7,12,12,
- 10,13,12,10,13,13, 4,10,10, 9,12,12, 9,12,12, 7,
- 12,12,10,13,13,10,12,13, 7,11,12,10,13,13,10,13,
- 11,
-};
-
-static const static_codebook _8u1__p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__8u1__p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__8u1__p7_0,
- 0
-};
-
-static const long _vq_quantlist__8u1__p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__8u1__p7_1[] = {
- 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 7,
- 8, 8, 9, 9, 9, 9, 4, 5, 5, 7, 7, 8, 8, 9, 9, 9,
- 9, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8,
- 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 9, 9,
- 9, 9, 9, 9,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10,
- 10,10,10, 8, 9, 9, 9, 9, 9, 9,10,10,10,10, 8, 9,
- 9, 9, 9, 9, 9,10,10,10,10,
-};
-
-static const static_codebook _8u1__p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__8u1__p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__8u1__p7_1,
- 0
-};
-
-static const long _vq_quantlist__8u1__p8_0[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__8u1__p8_0[] = {
- 1, 4, 4, 6, 6, 8, 8,10,10,11,11, 4, 6, 6, 7, 7,
- 9, 9,11,11,13,12, 4, 6, 6, 7, 7, 9, 9,11,11,12,
- 12, 6, 7, 7, 9, 9,11,11,12,12,13,13, 6, 7, 7, 9,
- 9,11,11,12,12,13,13, 8, 9, 9,11,11,12,12,13,13,
- 14,14, 8, 9, 9,11,11,12,12,13,13,14,14, 9,11,11,
- 12,12,13,13,14,14,15,15, 9,11,11,12,12,13,13,14,
- 14,15,14,11,12,12,13,13,14,14,15,15,16,16,11,12,
- 12,13,13,14,14,15,15,15,15,
-};
-
-static const static_codebook _8u1__p8_0 = {
- 2, 121,
- (char *)_vq_lengthlist__8u1__p8_0,
- 1, -524582912, 1618345984, 4, 0,
- (long *)_vq_quantlist__8u1__p8_0,
- 0
-};
-
-static const long _vq_quantlist__8u1__p8_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__8u1__p8_1[] = {
- 2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 5, 6, 6, 7, 7,
- 7, 7, 8, 8, 8, 8, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8,
- 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7,
- 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
- 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 9,
- 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8,
- 8, 8, 8, 8, 8, 9, 9, 9, 9,
-};
-
-static const static_codebook _8u1__p8_1 = {
- 2, 121,
- (char *)_vq_lengthlist__8u1__p8_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__8u1__p8_1,
- 0
-};
-
-static const long _vq_quantlist__8u1__p9_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__8u1__p9_0[] = {
- 1, 4, 4,11,11,11,11,11,11,11,11,11,11,11,11, 3,
- 11, 8,11,11,11,11,11,11,11,11,11,11,11,11, 3, 9,
- 9,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _8u1__p9_0 = {
- 2, 225,
- (char *)_vq_lengthlist__8u1__p9_0,
- 1, -514071552, 1627381760, 4, 0,
- (long *)_vq_quantlist__8u1__p9_0,
- 0
-};
-
-static const long _vq_quantlist__8u1__p9_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__8u1__p9_1[] = {
- 1, 4, 4, 7, 7, 9, 9, 7, 7, 8, 8,10,10,11,11, 4,
- 7, 7, 9, 9,10,10, 8, 8,10,10,10,11,10,11, 4, 7,
- 7, 9, 9,10,10, 8, 8,10, 9,11,11,11,11, 7, 9, 9,
- 12,12,11,12,10,10,11,10,12,11,11,11, 7, 9, 9,11,
- 11,13,12, 9, 9,11,10,11,11,12,11, 9,10,10,12,12,
- 14,14,10,10,11,12,12,11,11,11, 9,10,11,11,13,14,
- 13,10,11,11,11,12,11,12,12, 7, 8, 8,10, 9,11,10,
- 11,12,12,11,12,14,12,13, 7, 8, 8, 9,10,10,11,12,
- 12,12,11,12,12,12,13, 9, 9, 9,11,11,13,12,12,12,
- 12,11,12,12,13,12, 8,10,10,11,10,11,12,12,12,12,
- 12,12,14,12,12, 9,11,11,11,12,12,12,12,13,13,12,
- 12,13,13,12,10,11,11,12,11,12,12,12,11,12,13,12,
- 12,12,13,11,11,12,12,12,13,12,12,11,12,13,13,12,
- 12,13,12,11,12,12,13,13,12,13,12,13,13,13,13,14,
- 13,
-};
-
-static const static_codebook _8u1__p9_1 = {
- 2, 225,
- (char *)_vq_lengthlist__8u1__p9_1,
- 1, -522338304, 1620115456, 4, 0,
- (long *)_vq_quantlist__8u1__p9_1,
- 0
-};
-
-static const long _vq_quantlist__8u1__p9_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__8u1__p9_2[] = {
- 2, 5, 4, 6, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 5, 6, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
- 9,10,10, 9, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,10,10, 8, 8, 8, 9, 9, 9, 9,10,10,10, 9,
- 10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10,
- 10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,10,10,
- 10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,
- 10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,
- 10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,10,
- 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
- 9,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,10,
- 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, 9,
- 10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _8u1__p9_2 = {
- 2, 289,
- (char *)_vq_lengthlist__8u1__p9_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__8u1__p9_2,
- 0
-};
-
-static const char _huff_lengthlist__8u1__single[] = {
- 4, 7,13, 9,15, 9,16, 8,10,13, 7, 5, 8, 6, 9, 7,
- 10, 7,10,11,11, 6, 7, 8, 8, 9, 9, 9,12,16, 8, 5,
- 8, 6, 8, 6, 9, 7,10,12,11, 7, 7, 7, 6, 7, 7, 7,
- 11,15, 7, 5, 8, 6, 7, 5, 7, 6, 9,13,13, 9, 9, 8,
- 6, 6, 5, 5, 9,14, 8, 6, 8, 6, 6, 4, 5, 3, 5,13,
- 9, 9,11, 8,10, 7, 8, 4, 5,12,11,16,17,15,17,12,
- 13, 8, 8,15,
-};
-
-static const static_codebook _huff_book__8u1__single = {
- 2, 100,
- (char *)_huff_lengthlist__8u1__single,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u0__long[] = {
- 5, 8,13,10,17,11,11,15, 7, 2, 4, 5, 8, 7, 9,16,
- 13, 4, 3, 5, 6, 8,11,20,10, 4, 5, 5, 7, 6, 8,18,
- 15, 7, 6, 7, 8,10,14,20,10, 6, 7, 6, 9, 7, 8,17,
- 9, 8,10, 8,10, 5, 4,11,12,17,19,14,16,10, 7,12,
-};
-
-static const static_codebook _huff_book__44u0__long = {
- 2, 64,
- (char *)_huff_lengthlist__44u0__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44u0__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u0__p1_0[] = {
- 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
- 10,10, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
- 11, 8,11,11, 8,12,11,11,13,13,11,13,14, 7,11,11,
- 10,13,12,11,13,14, 4, 8, 8, 8,11,11, 8,11,12, 8,
- 11,11,11,13,13,10,12,13, 8,11,11,11,14,13,11,14,
- 13,
-};
-
-static const static_codebook _44u0__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u0__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u0__p1_0,
- 0
-};
-
-static const long _vq_quantlist__44u0__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u0__p2_0[] = {
- 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 8, 6,
- 8, 8, 5, 7, 7, 6, 8, 8, 7, 8, 8, 4, 7, 7, 7, 8,
- 8, 7, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
- 8,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 8, 6,
- 8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10,
- 9,
-};
-
-static const static_codebook _44u0__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u0__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u0__p2_0,
- 0
-};
-
-static const long _vq_quantlist__44u0__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u0__p3_0[] = {
- 1, 5, 5, 8, 8, 5, 8, 7, 9, 9, 5, 7, 8, 9, 9, 9,
- 10, 9,12,12, 9, 9,10,12,12, 6, 8, 8,11,10, 8,10,
- 10,11,11, 8, 9,10,11,11,10,11,11,14,13,10,11,11,
- 13,13, 5, 8, 8,10,10, 8,10,10,11,11, 8,10,10,11,
- 11,10,11,11,13,13,10,11,11,13,13, 9,11,11,15,14,
- 10,12,12,15,14,10,12,11,15,14,13,14,14,16,16,12,
- 14,13,17,15, 9,11,11,14,15,10,11,12,14,16,10,11,
- 12,14,16,12,13,14,16,16,13,13,15,15,18, 5, 8, 8,
- 11,11, 8,10,10,12,12, 8,10,10,12,13,11,12,12,14,
- 14,11,12,12,15,15, 8,10,10,13,13,10,12,12,13,13,
- 10,12,12,14,14,12,13,13,15,15,12,13,13,16,16, 7,
- 10,10,12,12,10,12,11,13,13,10,12,12,13,14,12,13,
- 12,15,14,12,13,13,16,16,10,12,12,17,16,12,13,13,
- 16,15,11,13,13,17,17,15,15,15,16,17,14,15,15,19,
- 19,10,12,12,15,16,11,13,12,15,18,11,13,13,16,16,
- 14,15,15,17,17,14,15,15,17,19, 5, 8, 8,11,11, 8,
- 10,10,12,12, 8,10,10,12,12,11,12,12,16,15,11,12,
- 12,14,15, 7,10,10,13,13,10,12,12,14,13,10,11,12,
- 13,13,12,13,13,16,16,12,12,13,15,15, 8,10,10,13,
- 13,10,12,12,14,14,10,12,12,13,13,12,13,13,16,16,
- 12,13,13,15,15,10,12,12,16,15,11,13,13,17,16,11,
- 12,13,16,15,13,15,15,19,17,14,15,14,17,16,10,12,
- 12,16,16,11,13,13,16,17,12,13,13,15,17,14,15,15,
- 17,19,14,15,15,17,17, 8,11,11,16,16,10,13,12,17,
- 17,10,12,13,16,16,15,17,16,20,19,14,15,17,18,19,
- 9,12,12,16,17,11,13,14,17,18,11,13,13,19,18,16,
- 17,18,19,19,15,16,16,19,19, 9,12,12,16,17,11,14,
- 13,18,17,11,13,13,17,17,16,17,16,20,19,14,16,16,
- 18,18,12,15,15,19,17,14,15,16, 0,20,13,15,16,20,
- 17,18,16,20, 0, 0,15,16,19,20, 0,12,15,14,18,19,
- 13,16,15,20,19,13,16,15,20,18,17,18,17, 0,20,16,
- 17,16, 0, 0, 8,11,11,16,15,10,12,12,17,17,10,13,
- 13,17,16,14,16,15,18,20,15,16,16,19,19, 9,12,12,
- 16,16,11,13,13,17,16,11,13,14,17,18,15,15,16,20,
- 20,16,16,17,19,19, 9,13,12,16,17,11,14,13,17,17,
- 11,14,14,18,17,14,16,15,18,19,16,17,18,18,19,12,
- 14,15,19,18,13,15,16,18, 0,13,14,15, 0, 0,16,16,
- 17,20, 0,17,17,20,20, 0,12,15,15,19,20,13,15,15,
- 0, 0,14,16,15, 0, 0,15,18,16, 0, 0,17,18,16, 0,
- 19,
-};
-
-static const static_codebook _44u0__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u0__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u0__p3_0,
- 0
-};
-
-static const long _vq_quantlist__44u0__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u0__p4_0[] = {
- 4, 5, 5, 9, 9, 5, 6, 6, 9, 9, 5, 6, 6, 9, 9, 9,
- 10, 9,12,12, 9, 9,10,12,12, 5, 7, 7,10,10, 7, 7,
- 8,10,10, 6, 7, 8,10,10,10,10,10,11,13,10, 9,10,
- 12,13, 5, 7, 7,10,10, 6, 8, 7,10,10, 7, 8, 7,10,
- 10, 9,10,10,12,12,10,10,10,13,11, 9,10,10,13,13,
- 10,11,10,13,13,10,10,10,13,13,12,12,13,14,14,12,
- 12,13,14,14, 9,10,10,13,13,10,10,10,13,13,10,10,
- 10,13,13,12,13,12,15,14,12,13,12,15,15, 5, 7, 6,
- 10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,13,
- 13,10,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,10,11,
- 8, 9, 9,11,11,11,10,11,11,14,11,11,11,13,13, 6,
- 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
- 10,14,11,10,11,11,13,13,10,11,11,14,13,10,10,11,
- 14,13,10,11,11,14,14,12,11,13,12,16,13,14,14,15,
- 15,10,10,11,13,14,10,11,10,14,13,10,11,11,14,14,
- 12,13,12,15,13,13,13,14,15,16, 5, 7, 7,10,10, 7,
- 8, 8,10,10, 7, 8, 8,10,10,10,10,10,13,13,10,10,
- 11,12,13, 6, 8, 8,11,10, 8, 9, 9,11,11, 7, 8, 9,
- 10,11,10,11,11,13,13,10,10,11,11,13, 6, 8, 8,10,
- 11, 8, 9, 9,11,11, 8, 9, 8,12,10,10,11,11,13,13,
- 10,11,10,14,11,10,10,10,14,13,10,11,11,14,13,10,
- 10,11,13,13,12,14,14,16,16,12,12,13,13,15,10,11,
- 11,13,14,10,11,11,14,15,10,11,10,13,13,13,14,13,
- 16,16,12,13,11,15,12, 9,10,10,13,13,10,11,11,14,
- 13,10,10,11,13,14,13,14,13,16,16,13,13,13,15,16,
- 9,10,10,13,13,10,10,11,13,14,10,11,11,15,13,13,
- 13,14,14,18,13,13,14,16,15, 9,10,10,13,14,10,11,
- 10,14,13,10,11,11,13,14,13,14,13,16,15,13,13,14,
- 15,16,12,13,12,16,14,11,11,13,15,15,13,14,13,16,
- 15,15,12,16,12,17,14,15,15,17,17,12,13,13,14,16,
- 11,13,11,16,15,12,13,14,15,16,14,15,13, 0,14,14,
- 16,16, 0, 0, 9,10,10,13,13,10,11,10,14,14,10,11,
- 11,13,13,12,13,13,14,16,13,14,14,16,16, 9,10,10,
- 14,14,11,11,11,14,13,10,10,11,14,14,13,13,13,16,
- 16,13,13,14,14,17, 9,10,10,13,14,10,11,11,13,15,
- 10,11,10,14,14,13,13,13,14,17,13,14,13,17,14,12,
- 13,13,16,14,13,14,13,16,15,12,12,13,15,16,15,15,
- 16,18,16,15,13,15,14, 0,12,12,13,14,16,13,13,14,
- 15,16,11,12,11,16,14,15,16,16,17,17,14,15,12,17,
- 12,
-};
-
-static const static_codebook _44u0__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u0__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u0__p4_0,
- 0
-};
-
-static const long _vq_quantlist__44u0__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u0__p5_0[] = {
- 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8,
- 9, 9, 4, 6, 6, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 9,
- 9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,10, 7, 8, 8,
- 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
- 9, 9,10,10,11,11,12,12, 9, 9, 9,10,11,11,11,12,
- 12,
-};
-
-static const static_codebook _44u0__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u0__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u0__p5_0,
- 0
-};
-
-static const long _vq_quantlist__44u0__p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u0__p6_0[] = {
- 1, 4, 4, 6, 6, 8, 8,10, 9,11,10,14,13, 4, 6, 5,
- 8, 8, 9, 9,11,10,11,11,14,14, 4, 5, 6, 8, 8, 9,
- 9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11,
- 12,12,16,15, 7, 8, 8, 9, 9,10,10,11,11,12,12,15,
- 15, 9,10,10,10,10,11,11,12,12,12,12,15,15, 9,10,
- 9,10,11,11,11,12,12,12,13,15,15,10,10,11,11,11,
- 12,12,13,12,13,13,16,15,10,11,11,11,11,12,12,13,
- 12,13,13,16,17,11,11,12,12,12,13,13,13,14,14,15,
- 17,17,11,11,12,12,12,13,13,13,14,14,14,16,18,14,
- 15,15,15,15,16,16,16,16,17,18, 0, 0,14,15,15,15,
- 15,17,16,17,18,17,17,18, 0,
-};
-
-static const static_codebook _44u0__p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u0__p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44u0__p6_0,
- 0
-};
-
-static const long _vq_quantlist__44u0__p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u0__p6_1[] = {
- 2, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5,
- 6, 6, 6, 6, 5, 6, 6, 6, 6,
-};
-
-static const static_codebook _44u0__p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44u0__p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u0__p6_1,
- 0
-};
-
-static const long _vq_quantlist__44u0__p7_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u0__p7_0[] = {
- 1, 4, 4,11,11, 9,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11, 9,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _44u0__p7_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u0__p7_0,
- 1, -518709248, 1626677248, 3, 0,
- (long *)_vq_quantlist__44u0__p7_0,
- 0
-};
-
-static const long _vq_quantlist__44u0__p7_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u0__p7_1[] = {
- 1, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 9, 9, 5, 7, 7,
- 8, 7, 7, 7, 9, 8,10, 9,10,11, 5, 7, 7, 8, 8, 7,
- 7, 8, 9,10,10,11,11, 6, 8, 8, 9, 9, 9, 9,11,10,
- 12,12,15,12, 6, 8, 8, 9, 9, 9, 9,11,11,12,11,14,
- 12, 7, 8, 8,10,10,12,12,13,13,13,15,13,13, 7, 8,
- 8,10,10,11,11,13,12,14,15,15,15, 9,10,10,11,12,
- 13,13,14,15,14,15,14,15, 8,10,10,12,12,14,14,15,
- 14,14,15,15,14,10,12,12,14,14,15,14,15,15,15,14,
- 15,15,10,12,12,13,14,15,14,15,15,14,15,15,15,12,
- 15,13,15,14,15,15,15,15,15,15,15,15,13,13,15,15,
- 15,15,15,15,15,15,15,15,15,
-};
-
-static const static_codebook _44u0__p7_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44u0__p7_1,
- 1, -523010048, 1618608128, 4, 0,
- (long *)_vq_quantlist__44u0__p7_1,
- 0
-};
-
-static const long _vq_quantlist__44u0__p7_2[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u0__p7_2[] = {
- 2, 5, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 5, 5, 6,
- 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 5, 6, 5, 7, 7, 8,
- 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8, 8, 8, 8, 9, 8,
- 9, 9, 9, 9, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
- 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 7, 8,
- 8, 9, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9,10, 9,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9,
- 9, 9, 9,10, 9, 9,10,10, 9,
-};
-
-static const static_codebook _44u0__p7_2 = {
- 2, 169,
- (char *)_vq_lengthlist__44u0__p7_2,
- 1, -531103744, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u0__p7_2,
- 0
-};
-
-static const char _huff_lengthlist__44u0__short[] = {
- 12,13,14,13,17,12,15,17, 5, 5, 6,10,10,11,15,16,
- 4, 3, 3, 7, 5, 7,10,16, 7, 7, 7,10, 9,11,12,16,
- 6, 5, 5, 9, 5, 6,10,16, 8, 7, 7, 9, 6, 7, 9,16,
- 11, 7, 3, 6, 4, 5, 8,16,12, 9, 4, 8, 5, 7, 9,16,
-};
-
-static const static_codebook _huff_book__44u0__short = {
- 2, 64,
- (char *)_huff_lengthlist__44u0__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u1__long[] = {
- 5, 8,13,10,17,11,11,15, 7, 2, 4, 5, 8, 7, 9,16,
- 13, 4, 3, 5, 6, 8,11,20,10, 4, 5, 5, 7, 6, 8,18,
- 15, 7, 6, 7, 8,10,14,20,10, 6, 7, 6, 9, 7, 8,17,
- 9, 8,10, 8,10, 5, 4,11,12,17,19,14,16,10, 7,12,
-};
-
-static const static_codebook _huff_book__44u1__long = {
- 2, 64,
- (char *)_huff_lengthlist__44u1__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44u1__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u1__p1_0[] = {
- 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
- 10,10, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
- 11, 8,11,11, 8,12,11,11,13,13,11,13,14, 7,11,11,
- 10,13,12,11,13,14, 4, 8, 8, 8,11,11, 8,11,12, 8,
- 11,11,11,13,13,10,12,13, 8,11,11,11,14,13,11,14,
- 13,
-};
-
-static const static_codebook _44u1__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u1__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u1__p1_0,
- 0
-};
-
-static const long _vq_quantlist__44u1__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u1__p2_0[] = {
- 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 8, 6,
- 8, 8, 5, 7, 7, 6, 8, 8, 7, 8, 8, 4, 7, 7, 7, 8,
- 8, 7, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
- 8,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 8, 6,
- 8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10,
- 9,
-};
-
-static const static_codebook _44u1__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u1__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u1__p2_0,
- 0
-};
-
-static const long _vq_quantlist__44u1__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u1__p3_0[] = {
- 1, 5, 5, 8, 8, 5, 8, 7, 9, 9, 5, 7, 8, 9, 9, 9,
- 10, 9,12,12, 9, 9,10,12,12, 6, 8, 8,11,10, 8,10,
- 10,11,11, 8, 9,10,11,11,10,11,11,14,13,10,11,11,
- 13,13, 5, 8, 8,10,10, 8,10,10,11,11, 8,10,10,11,
- 11,10,11,11,13,13,10,11,11,13,13, 9,11,11,15,14,
- 10,12,12,15,14,10,12,11,15,14,13,14,14,16,16,12,
- 14,13,17,15, 9,11,11,14,15,10,11,12,14,16,10,11,
- 12,14,16,12,13,14,16,16,13,13,15,15,18, 5, 8, 8,
- 11,11, 8,10,10,12,12, 8,10,10,12,13,11,12,12,14,
- 14,11,12,12,15,15, 8,10,10,13,13,10,12,12,13,13,
- 10,12,12,14,14,12,13,13,15,15,12,13,13,16,16, 7,
- 10,10,12,12,10,12,11,13,13,10,12,12,13,14,12,13,
- 12,15,14,12,13,13,16,16,10,12,12,17,16,12,13,13,
- 16,15,11,13,13,17,17,15,15,15,16,17,14,15,15,19,
- 19,10,12,12,15,16,11,13,12,15,18,11,13,13,16,16,
- 14,15,15,17,17,14,15,15,17,19, 5, 8, 8,11,11, 8,
- 10,10,12,12, 8,10,10,12,12,11,12,12,16,15,11,12,
- 12,14,15, 7,10,10,13,13,10,12,12,14,13,10,11,12,
- 13,13,12,13,13,16,16,12,12,13,15,15, 8,10,10,13,
- 13,10,12,12,14,14,10,12,12,13,13,12,13,13,16,16,
- 12,13,13,15,15,10,12,12,16,15,11,13,13,17,16,11,
- 12,13,16,15,13,15,15,19,17,14,15,14,17,16,10,12,
- 12,16,16,11,13,13,16,17,12,13,13,15,17,14,15,15,
- 17,19,14,15,15,17,17, 8,11,11,16,16,10,13,12,17,
- 17,10,12,13,16,16,15,17,16,20,19,14,15,17,18,19,
- 9,12,12,16,17,11,13,14,17,18,11,13,13,19,18,16,
- 17,18,19,19,15,16,16,19,19, 9,12,12,16,17,11,14,
- 13,18,17,11,13,13,17,17,16,17,16,20,19,14,16,16,
- 18,18,12,15,15,19,17,14,15,16, 0,20,13,15,16,20,
- 17,18,16,20, 0, 0,15,16,19,20, 0,12,15,14,18,19,
- 13,16,15,20,19,13,16,15,20,18,17,18,17, 0,20,16,
- 17,16, 0, 0, 8,11,11,16,15,10,12,12,17,17,10,13,
- 13,17,16,14,16,15,18,20,15,16,16,19,19, 9,12,12,
- 16,16,11,13,13,17,16,11,13,14,17,18,15,15,16,20,
- 20,16,16,17,19,19, 9,13,12,16,17,11,14,13,17,17,
- 11,14,14,18,17,14,16,15,18,19,16,17,18,18,19,12,
- 14,15,19,18,13,15,16,18, 0,13,14,15, 0, 0,16,16,
- 17,20, 0,17,17,20,20, 0,12,15,15,19,20,13,15,15,
- 0, 0,14,16,15, 0, 0,15,18,16, 0, 0,17,18,16, 0,
- 19,
-};
-
-static const static_codebook _44u1__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u1__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u1__p3_0,
- 0
-};
-
-static const long _vq_quantlist__44u1__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u1__p4_0[] = {
- 4, 5, 5, 9, 9, 5, 6, 6, 9, 9, 5, 6, 6, 9, 9, 9,
- 10, 9,12,12, 9, 9,10,12,12, 5, 7, 7,10,10, 7, 7,
- 8,10,10, 6, 7, 8,10,10,10,10,10,11,13,10, 9,10,
- 12,13, 5, 7, 7,10,10, 6, 8, 7,10,10, 7, 8, 7,10,
- 10, 9,10,10,12,12,10,10,10,13,11, 9,10,10,13,13,
- 10,11,10,13,13,10,10,10,13,13,12,12,13,14,14,12,
- 12,13,14,14, 9,10,10,13,13,10,10,10,13,13,10,10,
- 10,13,13,12,13,12,15,14,12,13,12,15,15, 5, 7, 6,
- 10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,13,
- 13,10,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,10,11,
- 8, 9, 9,11,11,11,10,11,11,14,11,11,11,13,13, 6,
- 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
- 10,14,11,10,11,11,13,13,10,11,11,14,13,10,10,11,
- 14,13,10,11,11,14,14,12,11,13,12,16,13,14,14,15,
- 15,10,10,11,13,14,10,11,10,14,13,10,11,11,14,14,
- 12,13,12,15,13,13,13,14,15,16, 5, 7, 7,10,10, 7,
- 8, 8,10,10, 7, 8, 8,10,10,10,10,10,13,13,10,10,
- 11,12,13, 6, 8, 8,11,10, 8, 9, 9,11,11, 7, 8, 9,
- 10,11,10,11,11,13,13,10,10,11,11,13, 6, 8, 8,10,
- 11, 8, 9, 9,11,11, 8, 9, 8,12,10,10,11,11,13,13,
- 10,11,10,14,11,10,10,10,14,13,10,11,11,14,13,10,
- 10,11,13,13,12,14,14,16,16,12,12,13,13,15,10,11,
- 11,13,14,10,11,11,14,15,10,11,10,13,13,13,14,13,
- 16,16,12,13,11,15,12, 9,10,10,13,13,10,11,11,14,
- 13,10,10,11,13,14,13,14,13,16,16,13,13,13,15,16,
- 9,10,10,13,13,10,10,11,13,14,10,11,11,15,13,13,
- 13,14,14,18,13,13,14,16,15, 9,10,10,13,14,10,11,
- 10,14,13,10,11,11,13,14,13,14,13,16,15,13,13,14,
- 15,16,12,13,12,16,14,11,11,13,15,15,13,14,13,16,
- 15,15,12,16,12,17,14,15,15,17,17,12,13,13,14,16,
- 11,13,11,16,15,12,13,14,15,16,14,15,13, 0,14,14,
- 16,16, 0, 0, 9,10,10,13,13,10,11,10,14,14,10,11,
- 11,13,13,12,13,13,14,16,13,14,14,16,16, 9,10,10,
- 14,14,11,11,11,14,13,10,10,11,14,14,13,13,13,16,
- 16,13,13,14,14,17, 9,10,10,13,14,10,11,11,13,15,
- 10,11,10,14,14,13,13,13,14,17,13,14,13,17,14,12,
- 13,13,16,14,13,14,13,16,15,12,12,13,15,16,15,15,
- 16,18,16,15,13,15,14, 0,12,12,13,14,16,13,13,14,
- 15,16,11,12,11,16,14,15,16,16,17,17,14,15,12,17,
- 12,
-};
-
-static const static_codebook _44u1__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u1__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u1__p4_0,
- 0
-};
-
-static const long _vq_quantlist__44u1__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u1__p5_0[] = {
- 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8,
- 9, 9, 4, 6, 6, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 9,
- 9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,10, 7, 8, 8,
- 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
- 9, 9,10,10,11,11,12,12, 9, 9, 9,10,11,11,11,12,
- 12,
-};
-
-static const static_codebook _44u1__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u1__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u1__p5_0,
- 0
-};
-
-static const long _vq_quantlist__44u1__p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u1__p6_0[] = {
- 1, 4, 4, 6, 6, 8, 8,10, 9,11,10,14,13, 4, 6, 5,
- 8, 8, 9, 9,11,10,11,11,14,14, 4, 5, 6, 8, 8, 9,
- 9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11,
- 12,12,16,15, 7, 8, 8, 9, 9,10,10,11,11,12,12,15,
- 15, 9,10,10,10,10,11,11,12,12,12,12,15,15, 9,10,
- 9,10,11,11,11,12,12,12,13,15,15,10,10,11,11,11,
- 12,12,13,12,13,13,16,15,10,11,11,11,11,12,12,13,
- 12,13,13,16,17,11,11,12,12,12,13,13,13,14,14,15,
- 17,17,11,11,12,12,12,13,13,13,14,14,14,16,18,14,
- 15,15,15,15,16,16,16,16,17,18, 0, 0,14,15,15,15,
- 15,17,16,17,18,17,17,18, 0,
-};
-
-static const static_codebook _44u1__p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u1__p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44u1__p6_0,
- 0
-};
-
-static const long _vq_quantlist__44u1__p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u1__p6_1[] = {
- 2, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5,
- 6, 6, 6, 6, 5, 6, 6, 6, 6,
-};
-
-static const static_codebook _44u1__p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44u1__p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u1__p6_1,
- 0
-};
-
-static const long _vq_quantlist__44u1__p7_0[] = {
- 3,
- 2,
- 4,
- 1,
- 5,
- 0,
- 6,
-};
-
-static const char _vq_lengthlist__44u1__p7_0[] = {
- 1, 3, 2, 9, 9, 7, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8,
-};
-
-static const static_codebook _44u1__p7_0 = {
- 2, 49,
- (char *)_vq_lengthlist__44u1__p7_0,
- 1, -518017024, 1626677248, 3, 0,
- (long *)_vq_quantlist__44u1__p7_0,
- 0
-};
-
-static const long _vq_quantlist__44u1__p7_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u1__p7_1[] = {
- 1, 4, 4, 6, 6, 6, 6, 7, 7, 8, 8, 9, 9, 5, 7, 7,
- 8, 7, 7, 7, 9, 8,10, 9,10,11, 5, 7, 7, 8, 8, 7,
- 7, 8, 9,10,10,11,11, 6, 8, 8, 9, 9, 9, 9,11,10,
- 12,12,15,12, 6, 8, 8, 9, 9, 9, 9,11,11,12,11,14,
- 12, 7, 8, 8,10,10,12,12,13,13,13,15,13,13, 7, 8,
- 8,10,10,11,11,13,12,14,15,15,15, 9,10,10,11,12,
- 13,13,14,15,14,15,14,15, 8,10,10,12,12,14,14,15,
- 14,14,15,15,14,10,12,12,14,14,15,14,15,15,15,14,
- 15,15,10,12,12,13,14,15,14,15,15,14,15,15,15,12,
- 15,13,15,14,15,15,15,15,15,15,15,15,13,13,15,15,
- 15,15,15,15,15,15,15,15,15,
-};
-
-static const static_codebook _44u1__p7_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44u1__p7_1,
- 1, -523010048, 1618608128, 4, 0,
- (long *)_vq_quantlist__44u1__p7_1,
- 0
-};
-
-static const long _vq_quantlist__44u1__p7_2[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u1__p7_2[] = {
- 2, 5, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 5, 5, 6,
- 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 5, 6, 5, 7, 7, 8,
- 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8, 8, 8, 8, 9, 8,
- 9, 9, 9, 9, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
- 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 7, 8,
- 8, 9, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 9, 8, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9,10, 9,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9, 9, 9, 9, 9,
- 9, 9, 9,10, 9, 9,10,10, 9,
-};
-
-static const static_codebook _44u1__p7_2 = {
- 2, 169,
- (char *)_vq_lengthlist__44u1__p7_2,
- 1, -531103744, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u1__p7_2,
- 0
-};
-
-static const char _huff_lengthlist__44u1__short[] = {
- 12,13,14,13,17,12,15,17, 5, 5, 6,10,10,11,15,16,
- 4, 3, 3, 7, 5, 7,10,16, 7, 7, 7,10, 9,11,12,16,
- 6, 5, 5, 9, 5, 6,10,16, 8, 7, 7, 9, 6, 7, 9,16,
- 11, 7, 3, 6, 4, 5, 8,16,12, 9, 4, 8, 5, 7, 9,16,
-};
-
-static const static_codebook _huff_book__44u1__short = {
- 2, 64,
- (char *)_huff_lengthlist__44u1__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u2__long[] = {
- 5, 9,14,12,15,13,10,13, 7, 4, 5, 6, 8, 7, 8,12,
- 13, 4, 3, 5, 5, 6, 9,15,12, 6, 5, 6, 6, 6, 7,14,
- 14, 7, 4, 6, 4, 6, 8,15,12, 6, 6, 5, 5, 5, 6,14,
- 9, 7, 8, 6, 7, 5, 4,10,10,13,14,14,15,10, 6, 8,
-};
-
-static const static_codebook _huff_book__44u2__long = {
- 2, 64,
- (char *)_huff_lengthlist__44u2__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44u2__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u2__p1_0[] = {
- 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
- 10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
- 11, 8,11,11, 8,11,11,11,13,14,11,13,13, 7,11,11,
- 10,13,12,11,14,14, 4, 8, 8, 8,11,11, 8,11,11, 8,
- 11,11,11,14,13,10,12,13, 8,11,11,11,13,13,11,13,
- 13,
-};
-
-static const static_codebook _44u2__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u2__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u2__p1_0,
- 0
-};
-
-static const long _vq_quantlist__44u2__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u2__p2_0[] = {
- 2, 5, 5, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6,
- 8, 8, 5, 6, 6, 6, 8, 7, 7, 8, 8, 5, 6, 6, 7, 8,
- 8, 6, 8, 8, 6, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
- 7,10, 8, 8,10,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6,
- 8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10,
- 9,
-};
-
-static const static_codebook _44u2__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u2__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u2__p2_0,
- 0
-};
-
-static const long _vq_quantlist__44u2__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u2__p3_0[] = {
- 2, 4, 4, 7, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8,
- 9, 9,12,11, 8, 9, 9,11,12, 5, 7, 7,10,10, 7, 9,
- 9,11,11, 7, 9, 9,10,11,10,11,11,13,13, 9,10,11,
- 12,13, 5, 7, 7,10,10, 7, 9, 9,11,10, 7, 9, 9,11,
- 11, 9,11,10,13,13,10,11,11,13,13, 8,10,10,14,13,
- 10,11,11,15,14, 9,11,11,15,14,13,14,13,16,14,12,
- 13,13,15,16, 8,10,10,13,14, 9,11,11,14,15,10,11,
- 11,14,15,12,13,13,15,15,12,13,14,15,16, 5, 7, 7,
- 10,10, 7, 9, 9,11,11, 7, 9, 9,11,12,10,11,11,14,
- 13,10,11,11,14,14, 7, 9, 9,12,12, 9,11,11,13,13,
- 9,11,11,13,13,12,13,12,14,14,11,12,13,15,15, 7,
- 9, 9,12,12, 8,11,10,13,12, 9,11,11,13,13,11,13,
- 12,15,13,11,13,13,15,16, 9,12,11,15,15,11,12,12,
- 16,15,11,12,13,16,16,13,14,15,16,15,13,15,15,17,
- 17, 9,11,11,14,15,10,12,12,15,15,11,13,12,15,16,
- 13,15,14,16,16,13,15,15,17,19, 5, 7, 7,10,10, 7,
- 9, 9,12,11, 7, 9, 9,11,11,10,11,11,14,14,10,11,
- 11,13,14, 7, 9, 9,12,12, 9,11,11,13,13, 9,10,11,
- 12,13,11,13,12,16,15,11,12,12,14,15, 7, 9, 9,12,
- 12, 9,11,11,13,13, 9,11,11,13,12,11,13,12,15,16,
- 12,13,13,15,14, 9,11,11,15,14,11,13,12,16,15,10,
- 11,12,15,15,13,14,14,18,17,13,14,14,15,17,10,11,
- 11,14,15,11,13,12,15,17,11,13,12,15,16,13,15,14,
- 18,17,14,15,15,16,18, 7,10,10,14,14,10,12,12,15,
- 15,10,12,12,15,15,14,15,15,18,17,13,15,15,16,16,
- 9,11,11,16,15,11,13,13,16,18,11,13,13,16,16,15,
- 16,16, 0, 0,14,15,16,18,17, 9,11,11,15,15,10,13,
- 12,17,16,11,12,13,16,17,14,15,16,19,19,14,15,15,
- 0,20,12,14,14, 0, 0,13,14,16,19,18,13,15,16,20,
- 17,16,18, 0, 0, 0,15,16,17,18,19,11,14,14, 0,19,
- 12,15,14,17,17,13,15,15, 0, 0,16,17,15,20,19,15,
- 17,16,19, 0, 8,10,10,14,15,10,12,11,15,15,10,11,
- 12,16,15,13,14,14,19,17,14,15,15, 0, 0, 9,11,11,
- 16,15,11,13,13,17,16,10,12,13,16,17,14,15,15,18,
- 18,14,15,16,20,19, 9,12,12, 0,15,11,13,13,16,17,
- 11,13,13,19,17,14,16,16,18,17,15,16,16,17,19,11,
- 14,14,18,18,13,14,15, 0, 0,12,14,15,19,18,15,16,
- 19, 0,19,15,16,19,19,17,12,14,14,16,19,13,15,15,
- 0,17,13,15,14,18,18,15,16,15, 0,18,16,17,17, 0,
- 0,
-};
-
-static const static_codebook _44u2__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u2__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u2__p3_0,
- 0
-};
-
-static const long _vq_quantlist__44u2__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u2__p4_0[] = {
- 4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 9,
- 9, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
- 8,10,10, 7, 7, 8,10,10,10,10,10,11,12, 9,10,10,
- 11,12, 5, 7, 7, 9, 9, 6, 8, 7,10,10, 7, 8, 8,10,
- 10, 9,10,10,12,11, 9,10,10,12,11, 9,10,10,12,12,
- 10,10,10,13,12, 9,10,10,12,13,12,12,12,14,14,11,
- 12,12,13,14, 9,10,10,12,12, 9,10,10,12,13,10,10,
- 10,12,13,11,12,12,14,13,12,12,12,14,13, 5, 7, 7,
- 10, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,
- 12,10,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,11,11,
- 8, 9, 9,11,11,10,11,11,12,13,10,11,11,13,13, 6,
- 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
- 10,13,11,10,11,11,13,13, 9,10,10,13,13,10,11,11,
- 13,13,10,11,11,14,13,12,11,13,12,15,12,13,13,15,
- 15, 9,10,10,12,13,10,11,10,13,13,10,11,11,13,13,
- 12,13,11,15,13,12,13,13,15,15, 5, 7, 7, 9,10, 7,
- 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,12,10,10,
- 11,12,12, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 8, 9,
- 10,11,10,11,11,13,13,10,10,11,11,13, 7, 8, 8,10,
- 11, 8, 9, 9,11,11, 8, 9, 8,11,11,10,11,11,13,13,
- 10,11,11,13,12, 9,10,10,13,12,10,11,11,14,13,10,
- 10,11,13,13,12,13,13,15,15,12,11,13,12,14, 9,10,
- 10,12,13,10,11,11,13,14,10,11,11,13,13,12,13,13,
- 15,15,12,13,12,15,12, 8, 9, 9,12,12, 9,11,10,13,
- 13, 9,10,10,13,13,12,13,13,15,15,12,12,12,14,14,
- 9,10,10,13,13,10,11,11,13,14,10,11,11,14,12,13,
- 13,14,14,16,12,13,13,15,14, 9,10,10,13,13,10,11,
- 10,14,13,10,11,11,13,14,12,14,13,16,14,13,13,13,
- 14,15,11,13,12,15,14,11,12,13,14,15,12,13,13,16,
- 15,14,12,15,12,16,14,15,15,17,16,11,12,12,14,15,
- 11,13,11,15,14,12,13,13,15,16,13,15,12,17,13,14,
- 15,15,16,16, 8, 9, 9,12,12, 9,10,10,13,13, 9,10,
- 10,13,13,12,13,12,14,14,12,13,13,15,15, 9,10,10,
- 13,13,10,11,11,14,13,10,10,11,13,14,12,13,13,15,
- 14,12,12,14,14,16, 9,10,10,13,13,10,11,11,13,14,
- 10,11,11,14,13,13,13,13,15,15,13,14,13,16,14,11,
- 12,12,14,14,12,13,13,16,15,11,12,13,14,15,14,15,
- 15,16,16,14,13,15,13,17,11,12,12,14,15,12,13,13,
- 15,16,11,13,12,15,15,14,15,14,16,16,14,15,12,17,
- 13,
-};
-
-static const static_codebook _44u2__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u2__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u2__p4_0,
- 0
-};
-
-static const long _vq_quantlist__44u2__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u2__p5_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 9, 9, 4, 6, 5, 8, 8, 8, 8,
- 10,10, 4, 5, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9,
- 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 8, 8, 8,
- 9, 9,10,11,12,12, 8, 8, 8, 9, 9,10,10,12,12,10,
- 10,10,11,11,12,12,13,13,10,10,10,11,11,12,12,13,
- 13,
-};
-
-static const static_codebook _44u2__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u2__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u2__p5_0,
- 0
-};
-
-static const long _vq_quantlist__44u2__p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u2__p6_0[] = {
- 1, 4, 4, 6, 6, 8, 8,10,10,11,11,14,13, 4, 6, 5,
- 8, 8, 9, 9,11,10,12,11,15,14, 4, 5, 6, 8, 8, 9,
- 9,11,11,11,11,14,14, 6, 8, 8,10, 9,11,11,11,11,
- 12,12,15,15, 6, 8, 8, 9, 9,11,11,11,12,12,12,15,
- 15, 8,10,10,11,11,11,11,12,12,13,13,15,16, 8,10,
- 10,11,11,11,11,12,12,13,13,16,16,10,11,11,12,12,
- 12,12,13,13,13,13,17,16,10,11,11,12,12,12,12,13,
- 13,13,14,16,17,11,12,12,13,13,13,13,14,14,15,14,
- 18,17,11,12,12,13,13,13,13,14,14,14,15,19,18,14,
- 15,15,15,15,16,16,18,19,18,18, 0, 0,14,15,15,16,
- 15,17,17,16,18,17,18, 0, 0,
-};
-
-static const static_codebook _44u2__p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u2__p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44u2__p6_0,
- 0
-};
-
-static const long _vq_quantlist__44u2__p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u2__p6_1[] = {
- 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
- 6, 5, 6, 6, 5, 5, 6, 6, 6,
-};
-
-static const static_codebook _44u2__p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44u2__p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u2__p6_1,
- 0
-};
-
-static const long _vq_quantlist__44u2__p7_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u2__p7_0[] = {
- 1, 3, 2,12,12,12,12,12,12, 4,12,12,12,12,12,12,
- 12,12, 5,12,12,12,12,12,12,12,12,12,12,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,
-};
-
-static const static_codebook _44u2__p7_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u2__p7_0,
- 1, -516612096, 1626677248, 4, 0,
- (long *)_vq_quantlist__44u2__p7_0,
- 0
-};
-
-static const long _vq_quantlist__44u2__p7_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u2__p7_1[] = {
- 1, 4, 4, 7, 6, 7, 6, 8, 7, 9, 7, 9, 8, 4, 7, 6,
- 8, 8, 9, 8,10, 9,10,10,11,11, 4, 7, 7, 8, 8, 8,
- 8, 9,10,11,11,11,11, 6, 8, 8,10,10,10,10,11,11,
- 12,12,12,12, 7, 8, 8,10,10,10,10,11,11,12,12,13,
- 13, 7, 9, 9,11,10,12,12,13,13,14,13,14,14, 7, 9,
- 9,10,11,11,12,13,13,13,13,16,14, 9,10,10,12,12,
- 13,13,14,14,15,16,15,16, 9,10,10,12,12,12,13,14,
- 14,14,15,16,15,10,12,12,13,13,15,13,16,16,15,17,
- 17,17,10,11,11,12,14,14,14,15,15,17,17,15,17,11,
- 12,12,14,14,14,15,15,15,17,16,17,17,10,12,12,13,
- 14,14,14,17,15,17,17,17,17,
-};
-
-static const static_codebook _44u2__p7_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44u2__p7_1,
- 1, -523010048, 1618608128, 4, 0,
- (long *)_vq_quantlist__44u2__p7_1,
- 0
-};
-
-static const long _vq_quantlist__44u2__p7_2[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u2__p7_2[] = {
- 2, 5, 5, 6, 6, 7, 7, 8, 7, 8, 8, 8, 8, 5, 6, 6,
- 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 5, 6, 6, 7, 7, 8,
- 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7, 8, 8, 8, 8, 8,
- 9, 9, 9, 9, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
- 9, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 7, 8,
- 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _44u2__p7_2 = {
- 2, 169,
- (char *)_vq_lengthlist__44u2__p7_2,
- 1, -531103744, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u2__p7_2,
- 0
-};
-
-static const char _huff_lengthlist__44u2__short[] = {
- 13,15,17,17,15,15,12,17,11, 9, 7,10,10, 9,12,17,
- 10, 6, 3, 6, 5, 7,10,17,15,10, 6, 9, 8, 9,11,17,
- 15, 8, 4, 7, 3, 5, 9,16,16,10, 5, 8, 4, 5, 8,16,
- 13,11, 5, 8, 3, 3, 5,14,13,12, 7,10, 5, 5, 7,14,
-};
-
-static const static_codebook _huff_book__44u2__short = {
- 2, 64,
- (char *)_huff_lengthlist__44u2__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u3__long[] = {
- 6, 9,13,12,14,11,10,13, 8, 4, 5, 7, 8, 7, 8,12,
- 11, 4, 3, 5, 5, 7, 9,14,11, 6, 5, 6, 6, 6, 7,13,
- 13, 7, 5, 6, 4, 5, 7,14,11, 7, 6, 6, 5, 5, 6,13,
- 9, 7, 8, 6, 7, 5, 3, 9, 9,12,13,12,14,10, 6, 7,
-};
-
-static const static_codebook _huff_book__44u3__long = {
- 2, 64,
- (char *)_huff_lengthlist__44u3__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44u3__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u3__p1_0[] = {
- 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,10,11, 8,
- 10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
- 11, 8,11,11, 8,11,11,11,13,14,11,14,14, 8,11,11,
- 10,14,12,11,14,14, 4, 8, 8, 8,11,11, 8,11,11, 7,
- 11,11,11,14,14,10,12,14, 8,11,11,11,14,14,11,14,
- 13,
-};
-
-static const static_codebook _44u3__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u3__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u3__p1_0,
- 0
-};
-
-static const long _vq_quantlist__44u3__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u3__p2_0[] = {
- 2, 5, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6,
- 8, 8, 5, 6, 6, 6, 8, 8, 7, 8, 8, 5, 7, 6, 7, 8,
- 8, 6, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
- 8,10, 8, 8,10,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6,
- 8, 8, 8,10,10, 8, 8,10, 7, 8, 8, 8,10,10, 8,10,
- 9,
-};
-
-static const static_codebook _44u3__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u3__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u3__p2_0,
- 0
-};
-
-static const long _vq_quantlist__44u3__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u3__p3_0[] = {
- 2, 4, 4, 7, 7, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8,
- 9, 9,12,12, 8, 9, 9,11,12, 5, 7, 7,10,10, 7, 9,
- 9,11,11, 7, 9, 9,10,11,10,11,11,13,13, 9,10,11,
- 13,13, 5, 7, 7,10,10, 7, 9, 9,11,10, 7, 9, 9,11,
- 11, 9,11,10,13,13,10,11,11,14,13, 8,10,10,14,13,
- 10,11,11,15,14, 9,11,11,14,14,13,14,13,16,16,12,
- 13,13,15,15, 8,10,10,13,14, 9,11,11,14,14,10,11,
- 11,14,15,12,13,13,15,15,13,14,14,15,16, 5, 7, 7,
- 10,10, 7, 9, 9,11,11, 7, 9, 9,11,12,10,11,11,14,
- 14,10,11,11,14,14, 7, 9, 9,12,12, 9,11,11,13,13,
- 9,11,11,13,13,12,12,13,15,15,11,12,13,15,16, 7,
- 9, 9,11,11, 8,11,10,13,12, 9,11,11,13,13,11,13,
- 12,15,13,11,13,13,15,16, 9,12,11,15,14,11,12,13,
- 16,15,11,13,13,15,16,14,14,15,17,16,13,15,16, 0,
- 17, 9,11,11,15,15,10,13,12,15,15,11,13,13,15,16,
- 13,15,13,16,15,14,16,15, 0,19, 5, 7, 7,10,10, 7,
- 9, 9,11,11, 7, 9, 9,11,11,10,12,11,14,14,10,11,
- 12,14,14, 7, 9, 9,12,12, 9,11,11,14,13, 9,10,11,
- 12,13,11,13,13,16,16,11,12,13,13,16, 7, 9, 9,12,
- 12, 9,11,11,13,13, 9,11,11,13,13,11,13,13,15,15,
- 12,13,12,15,14, 9,11,11,15,14,11,13,12,16,16,10,
- 12,12,15,15,13,15,15,17,19,13,14,15,16,17,10,12,
- 12,15,15,11,13,13,16,16,11,13,13,15,16,13,15,15,
- 0, 0,14,15,15,16,16, 8,10,10,14,14,10,12,12,15,
- 15,10,12,11,15,16,14,15,15,19,20,13,14,14,18,16,
- 9,11,11,15,15,11,13,13,17,16,11,13,13,16,16,15,
- 17,17,20,20,14,15,16,17,20, 9,11,11,15,15,10,13,
- 12,16,15,11,13,13,15,17,14,16,15,18, 0,14,16,15,
- 18,20,12,14,14, 0, 0,14,14,16, 0, 0,13,16,15, 0,
- 0,17,17,18, 0, 0,16,17,19,19, 0,12,14,14,18, 0,
- 12,16,14, 0,17,13,15,15,18, 0,16,18,17, 0,17,16,
- 18,17, 0, 0, 7,10,10,14,14,10,12,11,15,15,10,12,
- 12,16,15,13,15,15,18, 0,14,15,15,17, 0, 9,11,11,
- 15,15,11,13,13,16,16,11,12,13,16,16,14,15,16,17,
- 17,14,16,16,16,18, 9,11,12,16,16,11,13,13,17,17,
- 11,14,13,20,17,15,16,16,19, 0,15,16,17, 0,19,11,
- 13,14,17,16,14,15,15,20,18,13,14,15,17,19,16,18,
- 18, 0,20,16,16,19,17, 0,12,15,14,17, 0,14,15,15,
- 18,19,13,16,15,19,20,15,18,18, 0,20,17, 0,16, 0,
- 0,
-};
-
-static const static_codebook _44u3__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u3__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u3__p3_0,
- 0
-};
-
-static const long _vq_quantlist__44u3__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u3__p4_0[] = {
- 4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 9,
- 9, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
- 8,10,10, 7, 7, 8,10,10, 9,10,10,11,12, 9,10,10,
- 11,12, 5, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 8,10,
- 10, 9,10, 9,12,11, 9,10,10,12,11, 9,10, 9,12,12,
- 9,10,10,13,12, 9,10,10,12,13,12,12,12,14,14,11,
- 12,12,13,14, 9, 9,10,12,12, 9,10,10,12,12, 9,10,
- 10,12,13,11,12,11,14,13,12,12,12,14,13, 5, 7, 7,
- 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,
- 12, 9,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,11,11,
- 8, 9, 9,11,11,11,11,11,12,13,10,11,11,13,13, 6,
- 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
- 10,13,11,10,11,11,13,13, 9,11,10,13,12,10,11,11,
- 13,13,10,11,11,13,13,12,12,13,12,15,12,13,13,15,
- 15, 9,10,10,12,13,10,11,10,13,12,10,11,11,13,14,
- 12,13,11,15,13,12,13,13,15,15, 5, 7, 7, 9, 9, 7,
- 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12,10,10,
- 11,12,12, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 8, 9,
- 10,11,10,11,11,13,13,10,10,11,11,13, 7, 8, 8,10,
- 10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,11,13,13,
- 11,11,11,13,12, 9,10,10,13,12,10,11,11,14,13,10,
- 10,11,12,13,12,13,13,15,15,12,11,13,13,14, 9,10,
- 11,12,13,10,11,11,13,13,10,11,11,13,13,12,13,13,
- 15,15,12,13,12,15,12, 8, 9, 9,12,12, 9,11,10,13,
- 13, 9,10,10,13,13,12,13,13,15,14,12,12,12,14,13,
- 9,10,10,13,12,10,11,11,13,13,10,11,11,14,12,13,
- 13,14,14,16,12,13,13,15,15, 9,10,10,13,13,10,11,
- 10,14,13,10,11,11,13,14,12,14,13,15,14,13,13,13,
- 15,15,11,13,12,15,14,11,12,13,14,15,12,13,13,16,
- 14,14,12,15,12,16,14,15,15,17,15,11,12,12,14,14,
- 11,13,11,15,14,12,13,13,15,15,13,15,12,17,13,14,
- 15,15,16,16, 8, 9, 9,12,12, 9,10,10,12,13, 9,10,
- 10,13,13,12,12,12,14,14,12,13,13,15,15, 9,10,10,
- 13,12,10,11,11,14,13,10,10,11,13,14,12,13,13,15,
- 15,12,12,13,14,16, 9,10,10,13,13,10,11,11,13,14,
- 10,11,11,14,13,12,13,13,14,15,13,14,13,16,14,11,
- 12,12,14,14,12,13,13,15,14,11,12,13,14,15,14,15,
- 15,16,16,13,13,15,13,16,11,12,12,14,15,12,13,13,
- 14,15,11,13,12,15,14,14,15,15,16,16,14,15,12,16,
- 13,
-};
-
-static const static_codebook _44u3__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u3__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u3__p4_0,
- 0
-};
-
-static const long _vq_quantlist__44u3__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u3__p5_0[] = {
- 2, 3, 3, 6, 6, 7, 7, 9, 9, 4, 5, 5, 7, 7, 8, 8,
- 10,10, 4, 5, 5, 7, 7, 8, 8,10,10, 6, 7, 7, 8, 8,
- 9, 9,11,10, 6, 7, 7, 8, 8, 9, 9,10,10, 7, 8, 8,
- 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
- 10,10,11,10,11,11,12,12, 9,10,10,10,10,11,11,12,
- 12,
-};
-
-static const static_codebook _44u3__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u3__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u3__p5_0,
- 0
-};
-
-static const long _vq_quantlist__44u3__p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u3__p6_0[] = {
- 1, 4, 4, 6, 6, 8, 8, 9, 9,10,11,13,14, 4, 6, 5,
- 8, 8, 9, 9,10,10,11,11,14,14, 4, 6, 6, 8, 8, 9,
- 9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11,
- 12,12,15,15, 6, 8, 8, 9, 9,10,11,11,11,12,12,15,
- 15, 8, 9, 9,11,10,11,11,12,12,13,13,15,16, 8, 9,
- 9,10,11,11,11,12,12,13,13,16,16,10,10,11,11,11,
- 12,12,13,13,13,14,17,16, 9,10,11,12,11,12,12,13,
- 13,13,13,16,18,11,12,11,12,12,13,13,13,14,15,14,
- 17,17,11,11,12,12,12,13,13,13,14,14,15,18,17,14,
- 15,15,15,15,16,16,17,17,19,18, 0,20,14,15,14,15,
- 15,16,16,16,17,18,16,20,18,
-};
-
-static const static_codebook _44u3__p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u3__p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44u3__p6_0,
- 0
-};
-
-static const long _vq_quantlist__44u3__p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u3__p6_1[] = {
- 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
- 6, 5, 6, 6, 5, 5, 6, 6, 6,
-};
-
-static const static_codebook _44u3__p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44u3__p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u3__p6_1,
- 0
-};
-
-static const long _vq_quantlist__44u3__p7_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u3__p7_0[] = {
- 1, 3, 3,10,10,10,10,10,10, 4,10,10,10,10,10,10,
- 10,10, 4,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9,
-};
-
-static const static_codebook _44u3__p7_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u3__p7_0,
- 1, -515907584, 1627381760, 4, 0,
- (long *)_vq_quantlist__44u3__p7_0,
- 0
-};
-
-static const long _vq_quantlist__44u3__p7_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44u3__p7_1[] = {
- 1, 4, 4, 6, 6, 7, 6, 8, 7, 9, 8,10, 9,11,11, 4,
- 7, 7, 8, 7, 9, 9,10,10,11,11,11,11,12,12, 4, 7,
- 7, 7, 7, 9, 9,10,10,11,11,12,12,12,11, 6, 8, 8,
- 9, 9,10,10,11,11,12,12,13,12,13,13, 6, 8, 8, 9,
- 9,10,11,11,11,12,12,13,14,13,13, 8, 9, 9,11,11,
- 12,12,12,13,14,13,14,14,14,15, 8, 9, 9,11,11,11,
- 12,13,14,13,14,15,17,14,15, 9,10,10,12,12,13,13,
- 13,14,15,15,15,16,16,16, 9,11,11,12,12,13,13,14,
- 14,14,15,16,16,16,16,10,12,12,13,13,14,14,15,15,
- 15,16,17,17,17,17,10,12,11,13,13,15,14,15,14,16,
- 17,16,16,16,16,11,13,12,14,14,14,14,15,16,17,16,
- 17,17,17,17,11,13,12,14,14,14,15,17,16,17,17,17,
- 17,17,17,12,13,13,15,16,15,16,17,17,16,16,17,17,
- 17,17,12,13,13,15,15,15,16,17,17,17,16,17,16,17,
- 17,
-};
-
-static const static_codebook _44u3__p7_1 = {
- 2, 225,
- (char *)_vq_lengthlist__44u3__p7_1,
- 1, -522338304, 1620115456, 4, 0,
- (long *)_vq_quantlist__44u3__p7_1,
- 0
-};
-
-static const long _vq_quantlist__44u3__p7_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44u3__p7_2[] = {
- 2, 5, 5, 7, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 10,10, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9,
- 9,10, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 10,10,10,10, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,
- 9,10,10,10,10, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10, 7, 8, 8, 9, 8, 9, 9, 9, 9,10,
- 9,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 9,10,10,10,10,10,10,10, 8, 9, 8, 9, 9, 9, 9,10,
- 9,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,
- 9,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,
- 9,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,10, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,11, 9,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,11, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 9,10,10,10,10,10,10,10,10,10,10,10,11,11,11,10,
- 11,
-};
-
-static const static_codebook _44u3__p7_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44u3__p7_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44u3__p7_2,
- 0
-};
-
-static const char _huff_lengthlist__44u3__short[] = {
- 14,14,14,15,13,15,12,16,10, 8, 7, 9, 9, 8,12,16,
- 10, 5, 4, 6, 5, 6, 9,16,14, 8, 6, 8, 7, 8,10,16,
- 14, 7, 4, 6, 3, 5, 8,16,15, 9, 5, 7, 4, 4, 7,16,
- 13,10, 6, 7, 4, 3, 4,13,13,12, 7, 9, 5, 5, 6,12,
-};
-
-static const static_codebook _huff_book__44u3__short = {
- 2, 64,
- (char *)_huff_lengthlist__44u3__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u4__long[] = {
- 3, 8,12,12,13,12,11,13, 5, 4, 6, 7, 8, 8, 9,13,
- 9, 5, 4, 5, 5, 7, 9,13, 9, 6, 5, 6, 6, 7, 8,12,
- 12, 7, 5, 6, 4, 5, 8,13,11, 7, 6, 6, 5, 5, 6,12,
- 10, 8, 8, 7, 7, 5, 3, 8,10,12,13,12,12, 9, 6, 7,
-};
-
-static const static_codebook _huff_book__44u4__long = {
- 2, 64,
- (char *)_huff_lengthlist__44u4__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44u4__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u4__p1_0[] = {
- 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,10,11, 8,
- 10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
- 11, 8,11,11, 8,11,11,11,13,14,11,15,14, 8,11,11,
- 10,13,12,11,14,14, 4, 8, 8, 8,11,11, 8,11,11, 7,
- 11,11,11,15,14,10,12,14, 8,11,11,11,14,14,11,14,
- 13,
-};
-
-static const static_codebook _44u4__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u4__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u4__p1_0,
- 0
-};
-
-static const long _vq_quantlist__44u4__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u4__p2_0[] = {
- 2, 5, 5, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6,
- 8, 8, 5, 6, 6, 6, 8, 8, 7, 8, 8, 5, 7, 6, 6, 8,
- 8, 6, 8, 8, 6, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
- 8,10, 8, 8,10,10, 5, 6, 6, 6, 8, 8, 6, 8, 8, 6,
- 8, 8, 8,10,10, 8, 8,10, 6, 8, 8, 8,10,10, 8,10,
- 9,
-};
-
-static const static_codebook _44u4__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u4__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u4__p2_0,
- 0
-};
-
-static const long _vq_quantlist__44u4__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u4__p3_0[] = {
- 2, 4, 4, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8,
- 10, 9,12,12, 8, 9,10,12,12, 5, 7, 7,10,10, 7, 9,
- 9,11,11, 7, 9, 9,11,11,10,12,11,14,14, 9,10,11,
- 13,14, 5, 7, 7,10,10, 7, 9, 9,11,11, 7, 9, 9,11,
- 11, 9,11,10,14,13,10,11,11,14,14, 8,10,10,14,13,
- 10,12,12,15,14, 9,11,11,15,14,13,14,14,17,17,12,
- 14,14,16,16, 8,10,10,14,14, 9,11,11,14,15,10,12,
- 12,14,15,12,14,13,16,16,13,14,15,15,18, 4, 7, 7,
- 10,10, 7, 9, 9,12,11, 7, 9, 9,11,12,10,12,11,15,
- 14,10,11,12,14,15, 7, 9, 9,12,12, 9,11,12,13,13,
- 9,11,12,13,13,12,13,13,15,16,11,13,13,15,16, 7,
- 9, 9,12,12, 9,11,10,13,12, 9,11,12,13,14,11,13,
- 12,16,14,12,13,13,15,16,10,12,12,16,15,11,13,13,
- 17,16,11,13,13,17,16,14,15,15,17,17,14,16,16,18,
- 20, 9,11,11,15,16,11,13,12,16,16,11,13,13,16,17,
- 14,15,14,18,16,14,16,16,17,20, 5, 7, 7,10,10, 7,
- 9, 9,12,11, 7, 9,10,11,12,10,12,11,15,15,10,12,
- 12,14,14, 7, 9, 9,12,12, 9,12,11,14,13, 9,10,11,
- 12,13,12,13,14,16,16,11,12,13,14,16, 7, 9, 9,12,
- 12, 9,12,11,13,13, 9,12,11,13,13,11,13,13,16,16,
- 12,13,13,16,15, 9,11,11,16,14,11,13,13,16,16,11,
- 12,13,16,16,14,16,16,17,17,13,14,15,16,17,10,12,
- 12,15,15,11,13,13,16,17,11,13,13,16,16,14,16,15,
- 19,19,14,15,15,17,18, 8,10,10,14,14,10,12,12,15,
- 15,10,12,12,16,16,14,16,15,20,19,13,15,15,17,16,
- 9,12,12,16,16,11,13,13,16,18,11,14,13,16,17,16,
- 17,16,20, 0,15,16,18,18,20, 9,11,11,15,15,11,14,
- 12,17,16,11,13,13,17,17,15,17,15,20,20,14,16,16,
- 17, 0,13,15,14,18,16,14,15,16, 0,18,14,16,16, 0,
- 0,18,16, 0, 0,20,16,18,18, 0, 0,12,14,14,17,18,
- 13,15,14,20,18,14,16,15,19,19,16,20,16, 0,18,16,
- 19,17,19, 0, 8,10,10,14,14,10,12,12,16,15,10,12,
- 12,16,16,13,15,15,18,17,14,16,16,19, 0, 9,11,11,
- 16,15,11,14,13,18,17,11,12,13,17,18,14,17,16,18,
- 18,15,16,17,18,18, 9,12,12,16,16,11,13,13,16,18,
- 11,14,13,17,17,15,16,16,18,20,16,17,17,20,20,12,
- 14,14,18,17,14,16,16, 0,19,13,14,15,18, 0,16, 0,
- 0, 0, 0,16,16, 0,19,20,13,15,14, 0, 0,14,16,16,
- 18,19,14,16,15, 0,20,16,20,18, 0,20,17,20,17, 0,
- 0,
-};
-
-static const static_codebook _44u4__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u4__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u4__p3_0,
- 0
-};
-
-static const long _vq_quantlist__44u4__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u4__p4_0[] = {
- 4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 9,
- 9, 9,11,11, 8, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
- 8,10,10, 7, 7, 8,10,10, 9,10,10,11,12, 9,10,10,
- 11,12, 5, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 8,10,
- 10, 9,10,10,12,11, 9,10,10,12,11, 9,10, 9,12,12,
- 9,10,10,13,12, 9,10,10,12,12,12,12,12,14,14,11,
- 12,12,13,14, 9, 9,10,12,12, 9,10,10,13,13, 9,10,
- 10,12,13,11,12,12,14,13,11,12,12,14,14, 5, 7, 7,
- 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,
- 12, 9,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,11,11,
- 8, 9, 9,11,11,11,11,11,12,13,10,11,11,13,13, 6,
- 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
- 10,13,11,10,11,11,13,13, 9,11,10,13,12,10,11,11,
- 13,14,10,11,11,14,13,12,12,13,12,15,12,13,13,15,
- 15, 9,10,10,12,13,10,11,10,13,12,10,11,11,13,14,
- 12,13,11,15,13,13,13,13,15,15, 5, 7, 7, 9, 9, 7,
- 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12,10,10,
- 11,12,13, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 8, 9,
- 10,11,10,11,11,13,13,10,10,11,11,13, 7, 8, 8,10,
- 11, 8, 9, 9,11,11, 8, 9, 8,11,11,10,11,11,13,13,
- 11,12,11,13,12, 9,10,10,13,12,10,11,11,14,13,10,
- 10,11,12,13,12,13,13,15,15,12,11,13,13,14, 9,10,
- 11,12,13,10,11,11,13,14,10,11,11,13,13,12,13,13,
- 15,15,12,13,12,15,12, 8, 9, 9,12,12, 9,11,10,13,
- 13, 9,10,10,13,13,12,13,13,15,15,12,12,12,14,14,
- 9,10,10,13,13,10,11,11,13,14,10,11,11,14,13,13,
- 13,14,14,16,13,13,13,15,15, 9,10,10,13,13,10,11,
- 10,14,13,10,11,11,13,14,12,14,13,16,14,12,13,13,
- 14,15,11,12,12,15,14,11,12,13,14,15,12,13,13,16,
- 15,14,12,15,12,16,14,15,15,16,16,11,12,12,14,14,
- 11,13,12,15,14,12,13,13,15,16,13,15,13,17,13,14,
- 15,15,16,17, 8, 9, 9,12,12, 9,10,10,12,13, 9,10,
- 10,13,13,12,12,12,14,14,12,13,13,15,15, 9,10,10,
- 13,12,10,11,11,14,13,10,10,11,13,14,13,13,13,15,
- 15,12,13,14,14,16, 9,10,10,13,13,10,11,11,13,14,
- 10,11,11,14,14,13,13,13,15,15,13,14,13,16,14,11,
- 12,12,15,14,12,13,13,16,15,11,12,13,14,15,14,15,
- 15,17,16,13,13,15,13,16,11,12,13,14,15,13,13,13,
- 15,16,11,13,12,15,14,14,15,15,16,16,14,15,12,17,
- 13,
-};
-
-static const static_codebook _44u4__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u4__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u4__p4_0,
- 0
-};
-
-static const long _vq_quantlist__44u4__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u4__p5_0[] = {
- 2, 3, 3, 6, 6, 7, 7, 9, 9, 4, 5, 5, 7, 7, 8, 8,
- 10, 9, 4, 5, 5, 7, 7, 8, 8,10,10, 6, 7, 7, 8, 8,
- 9, 9,11,10, 6, 7, 7, 8, 8, 9, 9,10,11, 7, 8, 8,
- 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
- 10,10,11,10,11,11,12,12, 9,10,10,10,11,11,11,12,
- 12,
-};
-
-static const static_codebook _44u4__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u4__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u4__p5_0,
- 0
-};
-
-static const long _vq_quantlist__44u4__p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u4__p6_0[] = {
- 1, 4, 4, 6, 6, 8, 8, 9, 9,11,10,13,13, 4, 6, 5,
- 8, 8, 9, 9,10,10,11,11,14,14, 4, 6, 6, 8, 8, 9,
- 9,10,10,11,11,14,14, 6, 8, 8, 9, 9,10,10,11,11,
- 12,12,15,15, 6, 8, 8, 9, 9,10,11,11,11,12,12,15,
- 15, 8, 9, 9,11,10,11,11,12,12,13,13,16,16, 8, 9,
- 9,10,10,11,11,12,12,13,13,16,16,10,10,10,12,11,
- 12,12,13,13,14,14,16,16,10,10,10,11,12,12,12,13,
- 13,13,14,16,17,11,12,11,12,12,13,13,14,14,15,14,
- 18,17,11,11,12,12,12,13,13,14,14,14,15,19,18,14,
- 15,14,15,15,17,16,17,17,17,17,21, 0,14,15,15,16,
- 16,16,16,17,17,18,17,20,21,
-};
-
-static const static_codebook _44u4__p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u4__p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44u4__p6_0,
- 0
-};
-
-static const long _vq_quantlist__44u4__p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u4__p6_1[] = {
- 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
- 6, 5, 6, 6, 5, 5, 6, 6, 6,
-};
-
-static const static_codebook _44u4__p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44u4__p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u4__p6_1,
- 0
-};
-
-static const long _vq_quantlist__44u4__p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u4__p7_0[] = {
- 1, 3, 3,12,12,12,12,12,12,12,12,12,12, 3,12,11,
- 12,12,12,12,12,12,12,12,12,12, 4,11,10,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,
-};
-
-static const static_codebook _44u4__p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u4__p7_0,
- 1, -514332672, 1627381760, 4, 0,
- (long *)_vq_quantlist__44u4__p7_0,
- 0
-};
-
-static const long _vq_quantlist__44u4__p7_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44u4__p7_1[] = {
- 1, 4, 4, 6, 6, 7, 7, 9, 8,10, 8,10, 9,11,11, 4,
- 7, 6, 8, 7, 9, 9,10,10,11,10,11,10,12,10, 4, 6,
- 7, 8, 8, 9, 9,10,10,11,11,11,11,12,12, 6, 8, 8,
- 10, 9,11,10,12,11,12,12,12,12,13,13, 6, 8, 8,10,
- 10,10,11,11,11,12,12,13,12,13,13, 8, 9, 9,11,11,
- 12,11,12,12,13,13,13,13,13,13, 8, 9, 9,11,11,11,
- 12,12,12,13,13,13,13,13,13, 9,10,10,12,11,13,13,
- 13,13,14,13,13,14,14,14, 9,10,11,11,12,12,13,13,
- 13,13,13,14,15,14,14,10,11,11,12,12,13,13,14,14,
- 14,14,14,15,16,16,10,11,11,12,13,13,13,13,15,14,
- 14,15,16,15,16,10,12,12,13,13,14,14,14,15,15,15,
- 15,15,15,16,11,12,12,13,13,14,14,14,15,15,15,16,
- 15,17,16,11,12,12,13,13,13,15,15,14,16,16,16,16,
- 16,17,11,12,12,13,13,14,14,15,14,15,15,17,17,16,
- 16,
-};
-
-static const static_codebook _44u4__p7_1 = {
- 2, 225,
- (char *)_vq_lengthlist__44u4__p7_1,
- 1, -522338304, 1620115456, 4, 0,
- (long *)_vq_quantlist__44u4__p7_1,
- 0
-};
-
-static const long _vq_quantlist__44u4__p7_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44u4__p7_2[] = {
- 2, 5, 5, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 10,10,10,10, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,
- 9,10, 9,10,10, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9,10,10,10,10,10,10, 8, 9, 8, 9, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,10,
- 10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,
- 10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,10,
- 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,11,10,10,10, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9,
- 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
- 10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 9,10, 9,10,10,10,10,10,10,10,10,10,10,11,10,10,
- 10,
-};
-
-static const static_codebook _44u4__p7_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44u4__p7_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44u4__p7_2,
- 0
-};
-
-static const char _huff_lengthlist__44u4__short[] = {
- 14,17,15,17,16,14,13,16,10, 7, 7,10,13,10,15,16,
- 9, 4, 4, 6, 5, 7, 9,16,12, 8, 7, 8, 8, 8,11,16,
- 14, 7, 4, 6, 3, 5, 8,15,13, 8, 5, 7, 4, 5, 7,16,
- 12, 9, 6, 8, 3, 3, 5,16,14,13, 7,10, 5, 5, 7,15,
-};
-
-static const static_codebook _huff_book__44u4__short = {
- 2, 64,
- (char *)_huff_lengthlist__44u4__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u5__long[] = {
- 3, 8,13,12,14,12,16,11,13,14, 5, 4, 5, 6, 7, 8,
- 10, 9,12,15,10, 5, 5, 5, 6, 8, 9, 9,13,15,10, 5,
- 5, 6, 6, 7, 8, 8,11,13,12, 7, 5, 6, 4, 6, 7, 7,
- 11,14,11, 7, 7, 6, 6, 6, 7, 6,10,14,14, 9, 8, 8,
- 6, 7, 7, 7,11,16,11, 8, 8, 7, 6, 6, 7, 4, 7,12,
- 10,10,12,10,10, 9,10, 5, 6, 9,10,12,15,13,14,14,
- 14, 8, 7, 8,
-};
-
-static const static_codebook _huff_book__44u5__long = {
- 2, 100,
- (char *)_huff_lengthlist__44u5__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44u5__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u5__p1_0[] = {
- 1, 4, 4, 5, 8, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
- 9,10, 5, 8, 8, 7,10, 9, 8,10,10, 5, 8, 8, 8,10,
- 10, 8,10,10, 8,10,10,10,12,13,10,13,13, 7,10,10,
- 10,13,11,10,13,13, 4, 8, 8, 8,11,10, 8,10,10, 7,
- 10,10,10,13,13,10,11,13, 8,10,11,10,13,13,10,13,
- 12,
-};
-
-static const static_codebook _44u5__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u5__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u5__p1_0,
- 0
-};
-
-static const long _vq_quantlist__44u5__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u5__p2_0[] = {
- 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6,
- 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8,
- 8, 6, 8, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 8, 7,
- 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 8, 8, 6,
- 8, 7, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
- 9,
-};
-
-static const static_codebook _44u5__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u5__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u5__p2_0,
- 0
-};
-
-static const long _vq_quantlist__44u5__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u5__p3_0[] = {
- 2, 4, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
- 10, 9,13,12, 8, 9,10,12,12, 5, 7, 7,10,10, 7, 9,
- 9,11,11, 6, 8, 9,11,11,10,11,11,14,14, 9,10,11,
- 13,14, 5, 7, 7, 9,10, 7, 9, 8,11,11, 7, 9, 9,11,
- 11, 9,11,10,14,13,10,11,11,14,14, 8,10,10,13,13,
- 10,11,11,15,14, 9,11,11,14,14,13,14,14,17,16,12,
- 13,13,15,16, 8,10,10,13,13, 9,11,11,14,15,10,11,
- 11,14,15,12,14,13,16,16,13,15,14,15,17, 5, 7, 7,
- 10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,11,11,14,
- 14,10,11,12,14,14, 7, 9, 9,12,11, 9,11,11,13,13,
- 9,11,11,13,13,12,13,13,15,16,11,12,13,15,16, 6,
- 9, 9,11,11, 8,11,10,13,12, 9,11,11,13,14,11,13,
- 12,16,14,11,13,13,16,17,10,12,11,15,15,11,13,13,
- 16,16,11,13,13,17,16,14,15,15,17,17,14,16,16,17,
- 18, 9,11,11,14,15,10,12,12,15,15,11,13,13,16,17,
- 13,15,13,17,15,14,15,16,18, 0, 5, 7, 7,10,10, 7,
- 9, 9,11,11, 7, 9, 9,11,11,10,11,11,14,14,10,11,
- 12,14,15, 6, 9, 9,12,11, 9,11,11,13,13, 8,10,11,
- 12,13,11,13,13,16,15,11,12,13,14,15, 7, 9, 9,11,
- 12, 9,11,11,13,13, 9,11,11,13,13,11,13,13,15,16,
- 11,13,13,15,14, 9,11,11,15,14,11,13,13,17,15,10,
- 12,12,15,15,14,16,16,17,17,13,13,15,15,17,10,11,
- 12,15,15,11,13,13,16,16,11,13,13,15,15,14,15,15,
- 18,18,14,15,15,17,17, 8,10,10,13,13,10,12,11,15,
- 15,10,11,12,15,15,14,15,15,18,18,13,14,14,18,18,
- 9,11,11,15,16,11,13,13,17,17,11,13,13,16,16,15,
- 15,16,17, 0,14,15,17, 0, 0, 9,11,11,15,15,10,13,
- 12,18,16,11,13,13,15,16,14,16,15,20,20,14,15,16,
- 17, 0,13,14,14,20,16,14,15,16,19,18,14,15,15,19,
- 0,18,16, 0,20,20,16,18,18, 0, 0,12,14,14,18,18,
- 13,15,14,18,16,14,15,16,18,20,16,19,16, 0,17,17,
- 18,18,19, 0, 8,10,10,14,14,10,11,11,14,15,10,11,
- 12,15,15,13,15,14,19,17,13,15,15,17, 0, 9,11,11,
- 16,15,11,13,13,16,16,10,12,13,15,17,14,16,16,18,
- 18,14,15,15,18, 0, 9,11,11,15,15,11,13,13,16,17,
- 11,13,13,18,17,14,18,16,18,18,15,17,17,18, 0,12,
- 14,14,18,18,14,15,15,20, 0,13,14,15,17, 0,16,18,
- 17, 0, 0,16,16, 0,17,20,12,14,14,18,18,14,16,15,
- 0,18,14,16,15,18, 0,16,19,17, 0, 0,17,18,16, 0,
- 0,
-};
-
-static const static_codebook _44u5__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u5__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u5__p3_0,
- 0
-};
-
-static const long _vq_quantlist__44u5__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u5__p4_0[] = {
- 4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8,
- 9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
- 8,10,10, 6, 7, 8, 9,10, 9,10,10,11,12, 9, 9,10,
- 11,12, 6, 7, 7, 9, 9, 6, 8, 7,10, 9, 7, 8, 8,10,
- 10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,12,11,
- 9,10,10,12,12, 9,10,10,12,12,11,12,12,13,14,11,
- 11,12,13,14, 8, 9, 9,11,12, 9,10,10,12,12, 9,10,
- 10,12,12,11,12,11,14,13,11,12,12,13,13, 5, 7, 7,
- 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,
- 12, 9,10,10,12,12, 7, 8, 8,10,10, 8, 8, 9,10,11,
- 8, 9, 9,11,11,10,10,11,11,13,10,11,11,12,13, 6,
- 7, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
- 10,13,11,10,11,11,12,12, 9,10,10,12,12,10,10,11,
- 12,13,10,11,11,13,13,12,11,13,12,15,12,13,13,14,
- 15, 9,10,10,12,12, 9,11,10,13,12,10,11,11,13,13,
- 11,13,11,14,12,12,13,13,14,15, 5, 7, 7, 9, 9, 7,
- 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12, 9,10,
- 10,12,12, 6, 8, 7,10,10, 8, 9, 9,11,11, 7, 8, 9,
- 10,11,10,11,11,12,12,10,10,11,11,13, 7, 8, 8,10,
- 10, 8, 9, 9,11,11, 8, 9, 8,11,10,10,11,11,13,12,
- 10,11,10,13,11, 9,10,10,12,12,10,11,11,13,12, 9,
- 10,10,12,13,12,13,13,14,15,11,11,13,12,14, 9,10,
- 10,12,12,10,11,11,13,13,10,11,10,13,12,12,13,13,
- 14,14,12,13,11,14,12, 8, 9, 9,12,12, 9,10,10,12,
- 12, 9,10,10,12,12,12,12,12,14,14,11,12,12,14,13,
- 9,10,10,12,12,10,11,11,13,13,10,11,11,13,12,12,
- 12,13,14,15,12,13,13,15,14, 9,10,10,12,12,10,11,
- 10,13,12,10,11,11,12,13,12,13,12,15,13,12,13,13,
- 14,15,11,12,12,14,13,11,12,12,14,15,12,13,13,15,
- 14,13,12,14,12,16,13,14,14,15,15,11,11,12,14,14,
- 11,12,11,14,13,12,13,13,14,15,13,14,12,16,12,14,
- 14,15,16,16, 8, 9, 9,11,12, 9,10,10,12,12, 9,10,
- 10,12,13,11,12,12,13,13,12,12,13,14,14, 9,10,10,
- 12,12,10,11,10,13,12,10,10,11,12,13,12,13,13,15,
- 14,12,12,13,13,15, 9,10,10,12,13,10,11,11,12,13,
- 10,11,11,13,13,12,13,13,14,15,12,13,12,15,14,11,
- 12,11,14,13,12,13,13,15,14,11,11,12,13,14,14,15,
- 14,16,15,13,12,14,13,16,11,12,12,13,14,12,13,13,
- 14,15,11,12,11,14,14,14,14,14,15,16,13,15,12,16,
- 12,
-};
-
-static const static_codebook _44u5__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u5__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u5__p4_0,
- 0
-};
-
-static const long _vq_quantlist__44u5__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u5__p5_0[] = {
- 2, 3, 3, 6, 6, 8, 8,10,10, 4, 5, 5, 8, 7, 8, 8,
- 11,10, 3, 5, 5, 7, 8, 8, 8,10,11, 6, 8, 7,10, 9,
- 10,10,11,11, 6, 7, 8, 9, 9, 9,10,11,12, 8, 8, 8,
- 10,10,11,11,13,12, 8, 8, 9, 9,10,11,11,12,13,10,
- 11,10,12,11,13,12,14,14,10,10,11,11,12,12,13,14,
- 14,
-};
-
-static const static_codebook _44u5__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u5__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u5__p5_0,
- 0
-};
-
-static const long _vq_quantlist__44u5__p6_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u5__p6_0[] = {
- 3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7,
- 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
- 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8,10,10, 7, 7, 7,
- 8, 8, 9, 9,11,10, 7, 7, 7, 8, 8, 9, 9,10,11, 9,
- 9, 9,10,10,11,10,11,11, 9, 9, 9,10,10,11,10,11,
- 11,
-};
-
-static const static_codebook _44u5__p6_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u5__p6_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u5__p6_0,
- 0
-};
-
-static const long _vq_quantlist__44u5__p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u5__p7_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 9, 8,11,10, 7,
- 11,10, 5, 9, 9, 7,10,10, 8,10,11, 4, 9, 9, 9,12,
- 12, 9,12,12, 8,12,12,11,12,12,10,12,13, 7,12,12,
- 11,12,12,10,12,13, 4, 9, 9, 9,12,12, 9,12,12, 7,
- 12,11,10,13,13,11,12,12, 7,12,12,10,13,13,11,12,
- 12,
-};
-
-static const static_codebook _44u5__p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u5__p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44u5__p7_0,
- 0
-};
-
-static const long _vq_quantlist__44u5__p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u5__p7_1[] = {
- 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 7,
- 8, 8, 9, 8, 8, 9, 4, 5, 5, 7, 7, 8, 8, 9, 9, 8,
- 9, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 6, 7, 7, 8,
- 8, 9, 9, 9, 9, 9, 9, 7, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9,
- 9, 9, 9, 9,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10,
- 10,10,10, 8, 9, 9, 9, 9, 9, 9,10,10,10,10, 8, 9,
- 9, 9, 9, 9, 9,10,10,10,10,
-};
-
-static const static_codebook _44u5__p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44u5__p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u5__p7_1,
- 0
-};
-
-static const long _vq_quantlist__44u5__p8_0[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u5__p8_0[] = {
- 1, 4, 4, 6, 6, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7,
- 9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9, 9,10,10,11,
- 11, 6, 8, 7, 9, 9,10,10,11,11,13,12, 6, 8, 8, 9,
- 9,10,10,11,11,12,13, 8, 9, 9,10,10,12,12,13,12,
- 14,13, 8, 9, 9,10,10,12,12,13,13,14,14, 9,11,11,
- 12,12,13,13,14,14,15,14, 9,11,11,12,12,13,13,14,
- 14,15,14,11,12,12,13,13,14,14,15,14,15,14,11,11,
- 12,13,13,14,14,14,14,15,15,
-};
-
-static const static_codebook _44u5__p8_0 = {
- 2, 121,
- (char *)_vq_lengthlist__44u5__p8_0,
- 1, -524582912, 1618345984, 4, 0,
- (long *)_vq_quantlist__44u5__p8_0,
- 0
-};
-
-static const long _vq_quantlist__44u5__p8_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u5__p8_1[] = {
- 3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 5, 7, 6,
- 7, 7, 8, 8, 8, 8, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8,
- 8, 6, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8, 6, 6, 7, 7,
- 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
- 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u5__p8_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44u5__p8_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u5__p8_1,
- 0
-};
-
-static const long _vq_quantlist__44u5__p9_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u5__p9_0[] = {
- 1, 3, 2,12,10,13,13,13,13,13,13,13,13, 4, 9, 9,
- 13,13,13,13,13,13,13,13,13,13, 5,10, 9,13,13,13,
- 13,13,13,13,13,13,13,12,13,13,13,13,13,13,13,13,
- 13,13,13,13,11,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,12,12,12,
- 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
- 12,12,12,12,12,12,12,12,12,
-};
-
-static const static_codebook _44u5__p9_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u5__p9_0,
- 1, -514332672, 1627381760, 4, 0,
- (long *)_vq_quantlist__44u5__p9_0,
- 0
-};
-
-static const long _vq_quantlist__44u5__p9_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44u5__p9_1[] = {
- 1, 4, 4, 7, 7, 8, 8, 8, 7, 8, 7, 9, 8, 9, 9, 4,
- 7, 6, 9, 8,10,10, 9, 8, 9, 9, 9, 9, 9, 8, 5, 6,
- 6, 8, 9,10,10, 9, 9, 9,10,10,10,10,11, 7, 8, 8,
- 10,10,11,11,10,10,11,11,11,12,11,11, 7, 8, 8,10,
- 10,11,11,10,10,11,11,12,11,11,11, 8, 9, 9,11,11,
- 12,12,11,11,12,11,12,12,12,12, 8, 9,10,11,11,12,
- 12,11,11,12,12,12,12,12,12, 8, 9, 9,10,10,12,11,
- 12,12,12,12,12,12,12,13, 8, 9, 9,11,11,11,11,12,
- 12,12,12,13,12,13,13, 9,10,10,11,11,12,12,12,13,
- 12,13,13,13,14,13, 9,10,10,11,11,12,12,12,13,13,
- 12,13,13,14,13, 9,11,10,12,11,13,12,12,13,13,13,
- 13,13,13,14, 9,10,10,12,12,12,12,12,13,13,13,13,
- 13,14,14,10,11,11,12,12,12,13,13,13,14,14,13,14,
- 14,14,10,11,11,12,12,12,12,13,12,13,14,13,14,14,
- 14,
-};
-
-static const static_codebook _44u5__p9_1 = {
- 2, 225,
- (char *)_vq_lengthlist__44u5__p9_1,
- 1, -522338304, 1620115456, 4, 0,
- (long *)_vq_quantlist__44u5__p9_1,
- 0
-};
-
-static const long _vq_quantlist__44u5__p9_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44u5__p9_2[] = {
- 2, 5, 5, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 5, 6, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 5, 6, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 7, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 7, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
- 9,10, 9,10,10,10, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9,
- 9, 9,10, 9,10, 9,10, 8, 9, 9, 9, 9, 9, 9, 9, 9,
- 9,10, 9,10,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10,
- 9,10, 9,10,10,10,10,10,10, 9, 9, 9, 9, 9,10, 9,
- 10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,
- 9,10, 9,10, 9,10,10,10,10,10,10, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
- 9, 9,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
- 9,10,10, 9,10,10,10,10,10,10,10,10,10,10, 9, 9,
- 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, 9,
- 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
- 9, 9, 9,10, 9,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _44u5__p9_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44u5__p9_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44u5__p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44u5__short[] = {
- 4,10,17,13,17,13,17,17,17,17, 3, 6, 8, 9,11, 9,
- 15,12,16,17, 6, 5, 5, 7, 7, 8,10,11,17,17, 7, 8,
- 7, 9, 9,10,13,13,17,17, 8, 6, 5, 7, 4, 7, 5, 8,
- 14,17, 9, 9, 8, 9, 7, 9, 8,10,16,17,12,10, 7, 8,
- 4, 7, 4, 7,16,17,12,11, 9,10, 6, 9, 5, 7,14,17,
- 14,13,10,15, 4, 8, 3, 5,14,17,17,14,11,15, 6,10,
- 6, 8,15,17,
-};
-
-static const static_codebook _huff_book__44u5__short = {
- 2, 100,
- (char *)_huff_lengthlist__44u5__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u6__long[] = {
- 3, 9,14,13,14,13,16,12,13,14, 5, 4, 6, 6, 8, 9,
- 11,10,12,15,10, 5, 5, 6, 6, 8,10,10,13,16,10, 6,
- 6, 6, 6, 8, 9, 9,12,14,13, 7, 6, 6, 4, 6, 6, 7,
- 11,14,10, 7, 7, 7, 6, 6, 6, 7,10,13,15,10, 9, 8,
- 5, 6, 5, 6,10,14,10, 9, 8, 8, 6, 6, 5, 4, 6,11,
- 11,11,12,11,10, 9, 9, 5, 5, 9,10,12,15,13,13,13,
- 13, 8, 7, 7,
-};
-
-static const static_codebook _huff_book__44u6__long = {
- 2, 100,
- (char *)_huff_lengthlist__44u6__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44u6__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u6__p1_0[] = {
- 1, 4, 4, 4, 8, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
- 9,10, 5, 8, 8, 7,10, 9, 8,10,10, 5, 8, 8, 8,10,
- 10, 8,10,10, 8,10,10,10,12,13,10,13,13, 7,10,10,
- 10,13,11,10,13,13, 5, 8, 8, 8,11,10, 8,10,10, 7,
- 10,10,10,13,13,10,11,13, 8,10,11,10,13,13,10,13,
- 12,
-};
-
-static const static_codebook _44u6__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u6__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u6__p1_0,
- 0
-};
-
-static const long _vq_quantlist__44u6__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u6__p2_0[] = {
- 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6,
- 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8,
- 8, 6, 8, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 7, 7,
- 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 8, 8, 6,
- 8, 8, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
- 9,
-};
-
-static const static_codebook _44u6__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u6__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u6__p2_0,
- 0
-};
-
-static const long _vq_quantlist__44u6__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u6__p3_0[] = {
- 2, 5, 4, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
- 9, 9,13,12, 8, 9,10,12,13, 5, 7, 7,10, 9, 7, 9,
- 9,11,11, 7, 8, 9,11,11,10,11,11,14,14, 9,10,11,
- 13,14, 5, 7, 7, 9,10, 6, 9, 8,11,11, 7, 9, 9,11,
- 11, 9,11,10,14,13,10,11,11,14,13, 8,10,10,13,13,
- 10,11,11,15,15, 9,11,11,14,14,13,14,14,17,16,12,
- 13,14,16,16, 8,10,10,13,14, 9,11,11,14,15,10,11,
- 12,14,15,12,14,13,16,15,13,14,14,15,17, 5, 7, 7,
- 10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,12,11,14,
- 14,10,11,11,14,14, 7, 9, 9,12,11, 9,11,11,13,13,
- 9,11,11,13,13,11,13,13,14,15,11,12,13,15,16, 6,
- 9, 9,11,12, 8,11,10,13,12, 9,11,11,13,14,11,13,
- 12,16,14,11,13,13,15,16,10,12,11,14,15,11,13,13,
- 15,17,11,13,13,17,16,15,15,16,17,16,14,15,16,18,
- 0, 9,11,11,14,15,10,12,12,16,15,11,13,13,16,16,
- 13,15,14,18,15,14,16,16, 0, 0, 5, 7, 7,10,10, 7,
- 9, 9,11,11, 7, 9, 9,11,11,10,11,11,14,14,10,11,
- 12,14,14, 6, 9, 9,11,11, 9,11,11,13,13, 8,10,11,
- 12,13,11,13,13,16,15,11,12,13,14,16, 7, 9, 9,11,
- 12, 9,11,11,13,13, 9,11,11,13,13,11,13,13,16,15,
- 11,13,12,15,15, 9,11,11,15,14,11,13,13,17,16,10,
- 12,13,15,16,14,16,16, 0,18,14,14,15,15,17,10,11,
- 12,15,15,11,13,13,16,16,11,13,13,16,16,14,16,16,
- 19,17,14,15,15,17,17, 8,10,10,14,14,10,12,11,15,
- 15,10,11,12,16,15,14,15,15,18,20,13,14,16,17,18,
- 9,11,11,15,16,11,13,13,17,17,11,13,13,17,16,15,
- 16,16, 0, 0,15,16,16, 0, 0, 9,11,11,15,15,10,13,
- 12,17,15,11,13,13,17,16,15,17,15,20,19,15,16,16,
- 19, 0,13,15,14, 0,17,14,15,16, 0,20,15,16,16, 0,
- 19,17,18, 0, 0, 0,16,17,18, 0, 0,12,14,14,19,18,
- 13,15,14, 0,17,14,15,16,19,19,16,18,16, 0,19,19,
- 20,17,20, 0, 8,10,10,13,14,10,11,11,15,15,10,12,
- 12,15,16,14,15,14,19,16,14,15,15, 0,18, 9,11,11,
- 16,15,11,13,13, 0,16,11,12,13,16,17,14,16,17, 0,
- 19,15,16,16,18, 0, 9,11,11,15,16,11,13,13,16,16,
- 11,14,13,18,17,15,16,16,18,20,15,17,19, 0, 0,12,
- 14,14,17,17,14,16,15, 0, 0,13,14,15,19, 0,16,18,
- 20, 0, 0,16,16,18,18, 0,12,14,14,17,20,14,16,16,
- 19, 0,14,16,14, 0,20,16,20,17, 0, 0,17, 0,15, 0,
- 19,
-};
-
-static const static_codebook _44u6__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u6__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u6__p3_0,
- 0
-};
-
-static const long _vq_quantlist__44u6__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u6__p4_0[] = {
- 4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8,
- 9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
- 8,10,10, 7, 7, 8, 9,10, 9,10,10,11,11, 9, 9,10,
- 11,12, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 8,10,
- 10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,11,11,
- 9,10,10,12,12, 9,10,10,12,12,11,12,12,14,13,11,
- 11,12,13,13, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
- 10,12,12,11,12,11,13,12,11,12,12,13,13, 5, 7, 7,
- 9, 9, 7, 8, 7,10,10, 7, 7, 8,10,10, 9,10,10,12,
- 11, 9,10,10,11,12, 7, 8, 8,10,10, 8, 8, 9,11,11,
- 8, 9, 9,11,11,10,10,11,12,13,10,10,11,12,12, 6,
- 7, 7,10,10, 7, 9, 8,11,10, 8, 8, 9,10,11,10,11,
- 10,13,11,10,11,11,12,12, 9,10,10,12,12,10,10,11,
- 13,13,10,11,11,12,13,12,12,12,13,14,12,12,13,14,
- 14, 9,10,10,12,12, 9,10,10,13,12,10,11,11,13,13,
- 11,12,11,14,12,12,13,13,14,14, 6, 7, 7, 9, 9, 7,
- 8, 7,10,10, 7, 8, 8,10,10, 9,10,10,12,11, 9,10,
- 10,11,12, 6, 7, 7,10,10, 8, 9, 8,11,10, 7, 8, 9,
- 10,11,10,11,11,12,12,10,10,11,11,13, 7, 8, 8,10,
- 10, 8, 9, 9,11,11, 8, 9, 8,11,11,10,11,10,13,12,
- 10,11,11,13,12, 9,10,10,12,12,10,11,11,13,12, 9,
- 10,10,12,13,12,13,12,14,14,11,11,12,12,14, 9,10,
- 10,12,12,10,11,11,13,13,10,11,10,13,12,12,12,12,
- 14,14,12,13,12,14,13, 8, 9, 9,11,11, 9,10,10,12,
- 12, 9,10,10,12,12,11,12,12,14,13,11,12,12,13,14,
- 9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12,
- 12,13,14,15,12,12,13,14,14, 9,10,10,12,12, 9,11,
- 10,13,12,10,10,11,12,13,12,13,12,14,13,12,12,13,
- 14,15,11,12,12,14,13,11,12,12,14,14,12,13,13,14,
- 14,13,13,14,14,16,13,14,14,15,15,11,12,11,13,13,
- 11,12,11,14,13,12,12,13,14,15,12,14,12,15,12,13,
- 14,15,15,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
- 10,12,12,11,12,12,14,13,11,12,12,13,13, 9,10,10,
- 12,12,10,11,10,13,12, 9,10,11,12,13,12,13,12,14,
- 14,12,12,13,13,14, 9,10,10,12,12,10,11,11,13,13,
- 10,11,11,13,13,12,13,12,14,14,12,13,13,14,14,11,
- 11,11,13,13,12,13,12,14,14,11,11,12,13,14,14,14,
- 14,16,15,12,12,14,12,15,11,12,12,13,14,12,13,13,
- 14,15,11,12,12,14,14,13,14,14,16,16,13,14,13,16,
- 13,
-};
-
-static const static_codebook _44u6__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u6__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u6__p4_0,
- 0
-};
-
-static const long _vq_quantlist__44u6__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u6__p5_0[] = {
- 2, 3, 3, 6, 6, 8, 8,10,10, 4, 5, 5, 8, 7, 8, 8,
- 11,11, 3, 5, 5, 7, 8, 8, 8,11,11, 6, 8, 7, 9, 9,
- 10, 9,12,11, 6, 7, 8, 9, 9, 9,10,11,12, 8, 8, 8,
- 10, 9,12,11,13,13, 8, 8, 9, 9,10,11,12,13,13,10,
- 11,11,12,12,13,13,14,14,10,10,11,11,12,13,13,14,
- 14,
-};
-
-static const static_codebook _44u6__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u6__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u6__p5_0,
- 0
-};
-
-static const long _vq_quantlist__44u6__p6_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u6__p6_0[] = {
- 3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7,
- 9, 9, 4, 4, 5, 6, 6, 7, 8, 9, 9, 5, 6, 6, 7, 7,
- 8, 8,10,10, 5, 6, 6, 7, 7, 8, 8,10,10, 7, 8, 7,
- 8, 8,10, 9,11,11, 7, 7, 8, 8, 8, 9,10,10,11, 9,
- 9, 9,10,10,11,11,12,11, 9, 9, 9,10,10,11,11,11,
- 12,
-};
-
-static const static_codebook _44u6__p6_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u6__p6_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u6__p6_0,
- 0
-};
-
-static const long _vq_quantlist__44u6__p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u6__p7_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 7,10,10, 8,
- 10,10, 5, 8, 9, 7,10,10, 7,10, 9, 4, 8, 8, 9,11,
- 11, 8,11,11, 7,11,11,10,10,13,10,13,13, 7,11,11,
- 10,13,12,10,13,13, 5, 9, 8, 8,11,11, 9,11,11, 7,
- 11,11,10,13,13,10,12,13, 7,11,11,10,13,13, 9,13,
- 10,
-};
-
-static const static_codebook _44u6__p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u6__p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44u6__p7_0,
- 0
-};
-
-static const long _vq_quantlist__44u6__p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u6__p7_1[] = {
- 3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 6,
- 8, 8, 8, 8, 8, 8, 4, 5, 5, 6, 7, 8, 8, 8, 8, 8,
- 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7,
- 7, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 9, 9,
- 9, 9, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8,
- 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8,
- 8, 8, 8, 9, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _44u6__p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44u6__p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u6__p7_1,
- 0
-};
-
-static const long _vq_quantlist__44u6__p8_0[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u6__p8_0[] = {
- 1, 4, 4, 6, 6, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7,
- 9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9, 9,10,10,11,
- 11, 6, 8, 8, 9, 9,10,10,11,11,12,12, 6, 8, 8, 9,
- 9,10,10,11,11,12,12, 8, 9, 9,10,10,11,11,12,12,
- 13,13, 8, 9, 9,10,10,11,11,12,12,13,13,10,10,10,
- 11,11,13,13,13,13,15,14, 9,10,10,12,11,12,13,13,
- 13,14,15,11,12,12,13,13,13,13,15,14,15,15,11,11,
- 12,13,13,14,14,14,15,15,15,
-};
-
-static const static_codebook _44u6__p8_0 = {
- 2, 121,
- (char *)_vq_lengthlist__44u6__p8_0,
- 1, -524582912, 1618345984, 4, 0,
- (long *)_vq_quantlist__44u6__p8_0,
- 0
-};
-
-static const long _vq_quantlist__44u6__p8_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u6__p8_1[] = {
- 3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 5, 7, 7,
- 7, 7, 8, 7, 8, 8, 5, 5, 6, 6, 7, 7, 7, 7, 7, 8,
- 8, 6, 7, 7, 7, 7, 8, 7, 8, 8, 8, 8, 6, 6, 7, 7,
- 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
- 8, 8, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7,
- 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u6__p8_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44u6__p8_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u6__p8_1,
- 0
-};
-
-static const long _vq_quantlist__44u6__p9_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44u6__p9_0[] = {
- 1, 3, 2, 9, 8,15,15,15,15,15,15,15,15,15,15, 4,
- 8, 9,13,14,14,14,14,14,14,14,14,14,14,14, 5, 8,
- 9,14,14,14,14,14,14,14,14,14,14,14,14,11,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,11,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
- 14,
-};
-
-static const static_codebook _44u6__p9_0 = {
- 2, 225,
- (char *)_vq_lengthlist__44u6__p9_0,
- 1, -514071552, 1627381760, 4, 0,
- (long *)_vq_quantlist__44u6__p9_0,
- 0
-};
-
-static const long _vq_quantlist__44u6__p9_1[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44u6__p9_1[] = {
- 1, 4, 4, 7, 7, 8, 9, 8, 8, 9, 8, 9, 8, 9, 9, 4,
- 7, 6, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 4, 7,
- 6, 9, 9,10,10, 9, 9,10,10,10,10,11,11, 7, 9, 8,
- 10,10,11,11,10,10,11,11,11,11,11,11, 7, 8, 9,10,
- 10,11,11,10,10,11,11,11,11,11,12, 8,10,10,11,11,
- 12,12,11,11,12,12,12,12,13,12, 8,10,10,11,11,12,
- 11,11,11,11,12,12,12,12,13, 8, 9, 9,11,10,11,11,
- 12,12,12,12,13,12,13,12, 8, 9, 9,11,11,11,11,12,
- 12,12,12,12,13,13,13, 9,10,10,11,12,12,12,12,12,
- 13,13,13,13,13,13, 9,10,10,11,11,12,12,12,12,13,
- 13,13,13,14,13,10,10,10,12,11,12,12,13,13,13,13,
- 13,13,13,13,10,10,11,11,11,12,12,13,13,13,13,13,
- 13,13,13,10,11,11,12,12,13,12,12,13,13,13,13,13,
- 13,14,10,11,11,12,12,13,12,13,13,13,14,13,13,14,
- 13,
-};
-
-static const static_codebook _44u6__p9_1 = {
- 2, 225,
- (char *)_vq_lengthlist__44u6__p9_1,
- 1, -522338304, 1620115456, 4, 0,
- (long *)_vq_quantlist__44u6__p9_1,
- 0
-};
-
-static const long _vq_quantlist__44u6__p9_2[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44u6__p9_2[] = {
- 3, 5, 5, 7, 7, 8, 8, 8, 8, 8, 8, 9, 8, 8, 9, 9,
- 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,
- 9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9,
- 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10, 9, 9,10, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9,10, 9,10,10,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10,10, 9, 9,
- 10,
-};
-
-static const static_codebook _44u6__p9_2 = {
- 2, 289,
- (char *)_vq_lengthlist__44u6__p9_2,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44u6__p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44u6__short[] = {
- 4,11,16,13,17,13,17,16,17,17, 4, 7, 9, 9,13,10,
- 16,12,16,17, 7, 6, 5, 7, 8, 9,12,12,16,17, 6, 9,
- 7, 9,10,10,15,15,17,17, 6, 7, 5, 7, 5, 7, 7,10,
- 16,17, 7, 9, 8, 9, 8,10,11,11,15,17, 7, 7, 7, 8,
- 5, 8, 8, 9,15,17, 8, 7, 9, 9, 7, 8, 7, 2, 7,15,
- 14,13,13,15, 5,10, 4, 3, 6,17,17,15,13,17, 7,11,
- 7, 6, 9,16,
-};
-
-static const static_codebook _huff_book__44u6__short = {
- 2, 100,
- (char *)_huff_lengthlist__44u6__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u7__long[] = {
- 3, 9,14,13,15,14,16,13,13,14, 5, 5, 7, 7, 8, 9,
- 11,10,12,15,10, 6, 5, 6, 6, 9,10,10,13,16,10, 6,
- 6, 6, 6, 8, 9, 9,12,15,14, 7, 6, 6, 5, 6, 6, 8,
- 12,15,10, 8, 7, 7, 6, 7, 7, 7,11,13,14,10, 9, 8,
- 5, 6, 4, 5, 9,12,10, 9, 9, 8, 6, 6, 5, 3, 6,11,
- 12,11,12,12,10, 9, 8, 5, 5, 8,10,11,15,13,13,13,
- 12, 8, 6, 7,
-};
-
-static const static_codebook _huff_book__44u7__long = {
- 2, 100,
- (char *)_huff_lengthlist__44u7__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44u7__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u7__p1_0[] = {
- 1, 4, 4, 4, 7, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
- 10,10, 5, 8, 8, 7,10,10, 8,10,10, 5, 8, 8, 8,11,
- 10, 8,10,10, 8,10,10,10,12,13,10,13,13, 7,10,10,
- 10,13,12,10,13,13, 5, 8, 8, 8,11,10, 8,10,11, 7,
- 10,10,10,13,13,10,12,13, 8,11,11,10,13,13,10,13,
- 12,
-};
-
-static const static_codebook _44u7__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u7__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u7__p1_0,
- 0
-};
-
-static const long _vq_quantlist__44u7__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u7__p2_0[] = {
- 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6,
- 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8,
- 7, 6, 8, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 8, 7,
- 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 8, 8, 6,
- 8, 8, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
- 9,
-};
-
-static const static_codebook _44u7__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u7__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u7__p2_0,
- 0
-};
-
-static const long _vq_quantlist__44u7__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u7__p3_0[] = {
- 2, 5, 4, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
- 9, 9,13,12, 8, 9,10,12,13, 5, 7, 7,10, 9, 7, 9,
- 9,11,11, 6, 8, 9,11,11,10,11,11,14,14, 9,10,11,
- 13,14, 5, 7, 7, 9, 9, 7, 9, 8,11,11, 7, 9, 9,11,
- 11, 9,11,10,14,13,10,11,11,14,14, 8,10,10,14,13,
- 10,11,12,15,14, 9,11,11,15,14,13,14,14,16,16,12,
- 13,14,17,16, 8,10,10,13,13, 9,11,11,14,15,10,11,
- 12,14,15,12,14,13,16,16,13,14,15,15,17, 5, 7, 7,
- 10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,12,11,15,
- 14,10,11,12,14,14, 7, 9, 9,12,12, 9,11,11,13,13,
- 9,11,11,13,13,11,13,13,14,17,11,13,13,15,16, 6,
- 9, 9,11,11, 8,11,10,13,12, 9,11,11,13,13,11,13,
- 12,16,14,11,13,13,16,16,10,12,12,15,15,11,13,13,
- 16,16,11,13,13,16,15,14,16,17,17,19,14,16,16,18,
- 0, 9,11,11,14,15,10,13,12,16,15,11,13,13,16,16,
- 14,15,14, 0,16,14,16,16,18, 0, 5, 7, 7,10,10, 7,
- 9, 9,12,11, 7, 9, 9,11,12,10,11,11,15,14,10,11,
- 12,14,14, 6, 9, 9,11,11, 9,11,11,13,13, 8,10,11,
- 12,13,11,13,13,17,15,11,12,13,14,15, 7, 9, 9,11,
- 12, 9,11,11,13,13, 9,11,11,13,13,11,13,12,16,16,
- 11,13,13,15,14, 9,11,11,14,15,11,13,13,16,15,10,
- 12,13,16,16,15,16,16, 0, 0,14,13,15,16,18,10,11,
- 11,15,15,11,13,14,16,18,11,13,13,16,15,15,16,16,
- 19, 0,14,15,15,16,16, 8,10,10,13,13,10,12,11,16,
- 15,10,11,11,16,15,13,15,16,18, 0,13,14,15,17,17,
- 9,11,11,15,15,11,13,13,16,18,11,13,13,16,17,15,
- 16,16, 0, 0,15,18,16, 0,17, 9,11,11,15,15,11,13,
- 12,17,15,11,13,14,16,17,15,18,15, 0,17,15,16,16,
- 18,19,13,15,14, 0,18,14,16,16,19,18,14,16,15,19,
- 19,16,18,19, 0, 0,16,17, 0, 0, 0,12,14,14,17,17,
- 13,16,14, 0,18,14,16,15,18, 0,16,18,16,19,17,18,
- 19,17, 0, 0, 8,10,10,14,14, 9,12,11,15,15,10,11,
- 12,15,17,13,15,15,18,16,14,16,15,18,17, 9,11,11,
- 16,15,11,13,13, 0,16,11,12,13,16,15,15,16,16, 0,
- 17,15,15,16,18,17, 9,12,11,15,17,11,13,13,16,16,
- 11,14,13,16,16,15,15,16,18,19,16,18,16, 0, 0,12,
- 14,14, 0,16,14,16,16, 0,18,13,14,15,16, 0,17,16,
- 18, 0, 0,16,16,17,19, 0,13,14,14,17, 0,14,17,16,
- 0,19,14,15,15,18,19,17,16,18, 0, 0,15,19,16, 0,
- 0,
-};
-
-static const static_codebook _44u7__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u7__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u7__p3_0,
- 0
-};
-
-static const long _vq_quantlist__44u7__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u7__p4_0[] = {
- 4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8,
- 9, 9,11,11, 8, 9, 9,10,11, 6, 7, 7, 9, 9, 7, 8,
- 8,10,10, 6, 7, 8, 9,10, 9,10,10,12,12, 9, 9,10,
- 11,12, 6, 7, 7, 9, 9, 6, 8, 7,10, 9, 7, 8, 8,10,
- 10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,11,11,
- 9,10,10,12,12, 9,10,10,12,12,11,12,12,13,14,11,
- 11,12,13,13, 8, 9, 9,11,11, 9,10,10,12,11, 9,10,
- 10,12,12,11,12,11,13,13,11,12,12,13,13, 6, 7, 7,
- 9, 9, 7, 8, 7,10,10, 7, 7, 8,10,10, 9,10,10,12,
- 11, 9,10,10,12,12, 7, 8, 8,10,10, 8, 8, 9,11,11,
- 8, 9, 9,11,11,10,11,11,12,12,10,10,11,12,13, 6,
- 7, 7,10,10, 7, 9, 8,11,10, 8, 8, 9,10,11,10,11,
- 10,13,11,10,11,11,12,12, 9,10,10,12,12,10,10,11,
- 13,13,10,11,11,13,12,12,12,13,13,14,12,12,13,14,
- 14, 9,10,10,12,12, 9,10,10,12,12,10,11,11,13,13,
- 11,12,11,14,12,12,13,13,14,14, 6, 7, 7, 9, 9, 7,
- 8, 7,10,10, 7, 7, 8,10,10, 9,10,10,12,11, 9,10,
- 10,11,12, 6, 7, 7,10,10, 8, 9, 8,11,10, 7, 8, 9,
- 10,11,10,11,11,13,12,10,10,11,11,13, 7, 8, 8,10,
- 10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,10,13,12,
- 10,11,11,12,12, 9,10,10,12,12,10,11,11,13,12, 9,
- 10,10,12,13,12,13,12,14,14,11,11,12,12,14, 9,10,
- 10,12,12,10,11,11,13,13,10,11,11,13,13,12,13,12,
- 14,14,12,13,12,14,13, 8, 9, 9,11,11, 9,10,10,12,
- 12, 9,10,10,12,12,11,12,12,14,13,11,12,12,13,13,
- 9,10,10,12,12,10,11,11,13,13,10,11,11,13,12,12,
- 13,13,14,14,12,12,13,14,14, 9,10,10,12,12, 9,11,
- 10,13,12,10,10,11,12,13,11,13,12,14,13,12,12,13,
- 14,14,11,12,12,13,13,11,12,13,14,14,12,13,13,14,
- 14,13,13,14,14,16,13,14,14,16,16,11,11,11,13,13,
- 11,12,11,14,13,12,12,13,14,15,13,14,12,16,13,14,
- 14,14,15,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
- 10,12,12,11,12,12,14,13,11,12,12,13,14, 9,10,10,
- 12,12,10,11,10,13,12, 9,10,11,12,13,12,13,12,14,
- 14,12,12,13,13,14, 9,10,10,12,12,10,11,11,12,13,
- 10,11,11,13,13,12,13,12,14,14,12,13,13,14,14,11,
- 12,12,13,13,12,13,12,14,14,11,11,12,13,14,13,15,
- 14,16,15,13,12,14,13,16,11,12,12,13,13,12,13,13,
- 14,14,12,12,12,14,14,13,14,14,15,15,13,14,13,16,
- 14,
-};
-
-static const static_codebook _44u7__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u7__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u7__p4_0,
- 0
-};
-
-static const long _vq_quantlist__44u7__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u7__p5_0[] = {
- 2, 3, 3, 6, 6, 7, 8,10,10, 4, 5, 5, 8, 7, 8, 8,
- 11,11, 3, 5, 5, 7, 7, 8, 9,11,11, 6, 8, 7, 9, 9,
- 10,10,12,12, 6, 7, 8, 9,10,10,10,12,12, 8, 8, 8,
- 10,10,12,11,13,13, 8, 8, 9,10,10,11,11,13,13,10,
- 11,11,12,12,13,13,14,14,10,11,11,12,12,13,13,14,
- 14,
-};
-
-static const static_codebook _44u7__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u7__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u7__p5_0,
- 0
-};
-
-static const long _vq_quantlist__44u7__p6_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u7__p6_0[] = {
- 3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 8, 7,
- 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
- 8, 8,10,10, 5, 6, 6, 7, 7, 8, 8,10,10, 7, 8, 7,
- 8, 8,10, 9,11,11, 7, 7, 8, 8, 8, 9,10,11,11, 9,
- 9, 9,10,10,11,10,12,11, 9, 9, 9,10,10,11,11,11,
- 12,
-};
-
-static const static_codebook _44u7__p6_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u7__p6_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u7__p6_0,
- 0
-};
-
-static const long _vq_quantlist__44u7__p7_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u7__p7_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 8, 9, 9, 7,
- 10,10, 5, 8, 9, 7, 9,10, 8, 9, 9, 4, 9, 9, 9,11,
- 10, 8,10,10, 7,11,10,10,10,12,10,12,12, 7,10,10,
- 10,12,11,10,12,12, 5, 9, 9, 8,10,10, 9,11,11, 7,
- 11,10,10,12,12,10,11,12, 7,10,11,10,12,12,10,12,
- 10,
-};
-
-static const static_codebook _44u7__p7_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u7__p7_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44u7__p7_0,
- 0
-};
-
-static const long _vq_quantlist__44u7__p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u7__p7_1[] = {
- 3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 6, 6,
- 8, 7, 8, 8, 8, 8, 4, 5, 5, 6, 6, 7, 8, 8, 8, 8,
- 8, 6, 7, 6, 7, 7, 8, 8, 9, 9, 9, 9, 6, 6, 7, 7,
- 7, 8, 8, 9, 9, 9, 9, 7, 8, 7, 8, 8, 9, 9, 9, 9,
- 9, 9, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8,
- 9, 9, 9, 9,10, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9,10, 8, 8, 8, 9, 9, 9, 9,10, 9,10,10, 8, 8,
- 8, 9, 9, 9, 9, 9,10,10,10,
-};
-
-static const static_codebook _44u7__p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44u7__p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u7__p7_1,
- 0
-};
-
-static const long _vq_quantlist__44u7__p8_0[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u7__p8_0[] = {
- 1, 4, 4, 6, 6, 8, 8,10,10,11,11, 4, 6, 6, 7, 7,
- 9, 9,11,10,12,12, 5, 6, 5, 7, 7, 9, 9,10,11,12,
- 12, 6, 7, 7, 8, 8,10,10,11,11,13,13, 6, 7, 7, 8,
- 8,10,10,11,12,13,13, 8, 9, 9,10,10,11,11,12,12,
- 14,14, 8, 9, 9,10,10,11,11,12,12,14,14,10,10,10,
- 11,11,13,12,14,14,15,15,10,10,10,12,12,13,13,14,
- 14,15,15,11,12,12,13,13,14,14,15,14,16,15,11,12,
- 12,13,13,14,14,15,15,15,16,
-};
-
-static const static_codebook _44u7__p8_0 = {
- 2, 121,
- (char *)_vq_lengthlist__44u7__p8_0,
- 1, -524582912, 1618345984, 4, 0,
- (long *)_vq_quantlist__44u7__p8_0,
- 0
-};
-
-static const long _vq_quantlist__44u7__p8_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u7__p8_1[] = {
- 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7,
- 7, 7, 7, 7, 7, 7, 5, 6, 6, 6, 7, 7, 7, 7, 7, 7,
- 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 6, 7, 7, 7,
- 7, 7, 7, 7, 7, 8, 8, 7, 7, 7, 7, 7, 8, 7, 8, 8,
- 8, 8, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
- 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8,
- 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7,
- 7, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u7__p8_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44u7__p8_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u7__p8_1,
- 0
-};
-
-static const long _vq_quantlist__44u7__p9_0[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u7__p9_0[] = {
- 1, 3, 3,10,10,10,10,10,10,10,10, 4,10,10,10,10,
- 10,10,10,10,10,10, 4,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,
-};
-
-static const static_codebook _44u7__p9_0 = {
- 2, 121,
- (char *)_vq_lengthlist__44u7__p9_0,
- 1, -512171520, 1630791680, 4, 0,
- (long *)_vq_quantlist__44u7__p9_0,
- 0
-};
-
-static const long _vq_quantlist__44u7__p9_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u7__p9_1[] = {
- 1, 4, 4, 6, 5, 8, 6, 9, 8,10, 9,11,10, 4, 6, 6,
- 8, 8, 9, 9,11,10,11,11,11,11, 4, 6, 6, 8, 8,10,
- 9,11,11,11,11,11,12, 6, 8, 8,10,10,11,11,12,12,
- 13,12,13,13, 6, 8, 8,10,10,11,11,12,12,12,13,14,
- 13, 8,10,10,11,11,12,13,14,14,14,14,15,15, 8,10,
- 10,11,12,12,13,13,14,14,14,14,15, 9,11,11,13,13,
- 14,14,15,14,16,15,17,15, 9,11,11,12,13,14,14,15,
- 14,15,15,15,16,10,12,12,13,14,15,15,15,15,16,17,
- 16,17,10,13,12,13,14,14,16,16,16,16,15,16,17,11,
- 13,13,14,15,14,17,15,16,17,17,17,17,11,13,13,14,
- 15,15,15,15,17,17,16,17,16,
-};
-
-static const static_codebook _44u7__p9_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44u7__p9_1,
- 1, -518889472, 1622704128, 4, 0,
- (long *)_vq_quantlist__44u7__p9_1,
- 0
-};
-
-static const long _vq_quantlist__44u7__p9_2[] = {
- 24,
- 23,
- 25,
- 22,
- 26,
- 21,
- 27,
- 20,
- 28,
- 19,
- 29,
- 18,
- 30,
- 17,
- 31,
- 16,
- 32,
- 15,
- 33,
- 14,
- 34,
- 13,
- 35,
- 12,
- 36,
- 11,
- 37,
- 10,
- 38,
- 9,
- 39,
- 8,
- 40,
- 7,
- 41,
- 6,
- 42,
- 5,
- 43,
- 4,
- 44,
- 3,
- 45,
- 2,
- 46,
- 1,
- 47,
- 0,
- 48,
-};
-
-static const char _vq_lengthlist__44u7__p9_2[] = {
- 2, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
- 8,
-};
-
-static const static_codebook _44u7__p9_2 = {
- 1, 49,
- (char *)_vq_lengthlist__44u7__p9_2,
- 1, -526909440, 1611661312, 6, 0,
- (long *)_vq_quantlist__44u7__p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44u7__short[] = {
- 5,12,17,16,16,17,17,17,17,17, 4, 7,11,11,12, 9,
- 17,10,17,17, 7, 7, 8, 9, 7, 9,11,10,15,17, 7, 9,
- 10,11,10,12,14,12,16,17, 7, 8, 5, 7, 4, 7, 7, 8,
- 16,16, 6,10, 9,10, 7,10,11,11,16,17, 6, 8, 8, 9,
- 5, 7, 5, 8,16,17, 5, 5, 8, 7, 6, 7, 7, 6, 6,14,
- 12,10,12,11, 7,11, 4, 4, 2, 7,17,15,15,15, 8,15,
- 6, 8, 5, 9,
-};
-
-static const static_codebook _huff_book__44u7__short = {
- 2, 100,
- (char *)_huff_lengthlist__44u7__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u8__long[] = {
- 3, 9,13,14,14,15,14,14,15,15, 5, 4, 6, 8,10,12,
- 12,14,15,15, 9, 5, 4, 5, 8,10,11,13,16,16,10, 7,
- 4, 3, 5, 7, 9,11,13,13,10, 9, 7, 4, 4, 6, 8,10,
- 12,14,13,11, 9, 6, 5, 5, 6, 8,12,14,13,11,10, 8,
- 7, 6, 6, 7,10,14,13,11,12,10, 8, 7, 6, 6, 9,13,
- 12,11,14,12,11, 9, 8, 7, 9,11,11,12,14,13,14,11,
- 10, 8, 8, 9,
-};
-
-static const static_codebook _huff_book__44u8__long = {
- 2, 100,
- (char *)_huff_lengthlist__44u8__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u8__short[] = {
- 6,14,18,18,17,17,17,17,17,17, 4, 7, 9, 9,10,13,
- 15,17,17,17, 6, 7, 5, 6, 8,11,16,17,16,17, 5, 7,
- 5, 4, 6,10,14,17,17,17, 6, 6, 6, 5, 7,10,13,16,
- 17,17, 7, 6, 7, 7, 7, 8, 7,10,15,16,12, 9, 9, 6,
- 6, 5, 3, 5,11,15,14,14,13, 5, 5, 7, 3, 4, 8,15,
- 17,17,13, 7, 7,10, 6, 6,10,15,17,17,16,10,11,14,
- 10,10,15,17,
-};
-
-static const static_codebook _huff_book__44u8__short = {
- 2, 100,
- (char *)_huff_lengthlist__44u8__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44u8_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u8_p1_0[] = {
- 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 8, 9, 9, 7,
- 9, 9, 5, 7, 7, 7, 9, 9, 8, 9, 9, 5, 7, 7, 7, 9,
- 9, 7, 9, 9, 7, 9, 9, 9,10,11, 9,11,10, 7, 9, 9,
- 9,11,10, 9,10,11, 5, 7, 7, 7, 9, 9, 7, 9, 9, 7,
- 9, 9, 9,11,10, 9,10,10, 8, 9, 9, 9,11,11, 9,11,
- 10,
-};
-
-static const static_codebook _44u8_p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u8_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u8_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44u8_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u8_p2_0[] = {
- 4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
- 9, 9,11,11, 8, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
- 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12, 9,10,10,
- 11,12, 5, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 8,10,
- 10, 9,10, 9,12,11, 9,10,10,12,12, 8, 9, 9,12,11,
- 9,10,10,12,12, 9,10,10,12,12,11,12,12,14,14,11,
- 11,12,13,14, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
- 10,12,12,11,12,11,13,13,11,12,12,14,14, 5, 7, 7,
- 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,
- 12, 9,10,10,11,12, 7, 8, 8,10,10, 8, 9, 9,11,11,
- 8, 9, 9,11,11,10,11,11,12,13,10,11,11,12,13, 6,
- 8, 8,10,10, 8, 9, 8,11,10, 8, 9, 9,11,11,10,11,
- 10,13,12,10,11,11,13,13, 9,10,10,12,12,10,11,11,
- 13,13,10,11,11,13,13,12,12,13,13,14,12,13,13,14,
- 14, 9,10,10,12,12,10,11,10,13,12,10,11,11,13,13,
- 11,13,12,14,13,12,13,13,14,14, 5, 7, 7, 9, 9, 7,
- 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,12, 9,10,
- 10,12,12, 7, 8, 8,10,10, 8, 9, 9,11,11, 8, 8, 9,
- 10,11,10,11,11,13,13,10,10,11,12,13, 7, 8, 8,10,
- 10, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,11,13,13,
- 10,11,11,13,12, 9,10,10,12,12,10,11,11,13,13,10,
- 10,11,12,13,12,13,13,14,14,12,12,13,13,14, 9,10,
- 10,12,12,10,11,11,13,13,10,11,11,13,13,12,13,13,
- 15,14,12,13,13,14,13, 8, 9, 9,11,11, 9,10,10,12,
- 12, 9,10,10,12,12,12,12,12,14,13,11,12,12,14,14,
- 9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12,
- 13,13,14,15,12,13,13,14,15, 9,10,10,12,12,10,11,
- 10,13,12,10,11,11,13,13,12,13,12,15,14,12,13,13,
- 14,15,11,12,12,14,14,12,13,13,14,14,12,13,13,15,
- 14,14,14,14,14,16,14,14,15,16,16,11,12,12,14,14,
- 11,12,12,14,14,12,13,13,14,15,13,14,13,16,14,14,
- 14,14,16,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
- 10,12,12,11,12,12,14,13,11,12,12,14,14, 9,10,10,
- 12,12,10,11,11,13,13,10,10,11,12,13,12,13,13,15,
- 14,12,12,13,13,14, 9,10,10,12,12,10,11,11,13,13,
- 10,11,11,13,13,12,13,13,14,14,12,13,13,15,14,11,
- 12,12,14,13,12,13,13,15,14,11,12,12,13,14,14,15,
- 14,16,15,13,13,14,13,16,11,12,12,14,14,12,13,13,
- 14,15,12,13,12,15,14,14,14,14,16,15,14,15,13,16,
- 14,
-};
-
-static const static_codebook _44u8_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u8_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u8_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44u8_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u8_p3_0[] = {
- 3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7,
- 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
- 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8,10,10, 7, 7, 7,
- 8, 8, 9, 9,11,10, 7, 7, 7, 8, 8, 9, 9,10,11, 9,
- 9, 9,10,10,11,10,12,11, 9, 9, 9, 9,10,11,11,11,
- 12,
-};
-
-static const static_codebook _44u8_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u8_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u8_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44u8_p4_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44u8_p4_0[] = {
- 4, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,11,11,11,
- 11, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,
- 12,12, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
- 11,12,12, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
- 11,11,12,12, 6, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,
- 10,11,11,12,12, 7, 7, 7, 8, 8, 9, 8,10, 9,10, 9,
- 11,10,12,11,13,12, 7, 7, 7, 8, 8, 8, 9, 9,10, 9,
- 10,10,11,11,12,12,13, 8, 8, 8, 9, 9, 9, 9,10,10,
- 11,10,11,11,12,12,13,13, 8, 8, 8, 9, 9, 9,10,10,
- 10,10,11,11,11,12,12,12,13, 8, 9, 9, 9, 9,10, 9,
- 11,10,11,11,12,11,13,12,13,13, 8, 9, 9, 9, 9, 9,
- 10,10,11,11,11,11,12,12,13,13,13,10,10,10,10,10,
- 11,10,11,11,12,11,13,12,13,13,14,13,10,10,10,10,
- 10,10,11,11,11,11,12,12,13,13,13,13,14,11,11,11,
- 11,11,12,11,12,12,13,12,13,13,14,13,14,14,11,11,
- 11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,11,
- 12,12,12,12,13,12,13,12,13,13,14,13,14,14,14,14,
- 11,12,12,12,12,12,12,13,13,13,13,13,14,14,14,14,
- 14,
-};
-
-static const static_codebook _44u8_p4_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44u8_p4_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44u8_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44u8_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u8_p5_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 8, 9, 9, 7,
- 9, 9, 5, 8, 8, 7, 9, 9, 8, 9, 9, 5, 8, 8, 8,10,
- 10, 8,10,10, 7,10,10, 9,10,12, 9,12,11, 7,10,10,
- 9,11,10, 9,11,12, 5, 8, 8, 8,10,10, 8,10,10, 7,
- 10,10, 9,11,11, 9,10,11, 7,10,10, 9,11,11,10,12,
- 10,
-};
-
-static const static_codebook _44u8_p5_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u8_p5_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44u8_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44u8_p5_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u8_p5_1[] = {
- 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 5, 5, 5, 6, 6,
- 7, 7, 8, 8, 8, 8, 5, 5, 5, 6, 6, 7, 7, 7, 8, 8,
- 8, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 6, 7,
- 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8,
- 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 8, 7,
- 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 8, 8,
- 8, 8, 8, 8, 8, 8, 8, 9, 9,
-};
-
-static const static_codebook _44u8_p5_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44u8_p5_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u8_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44u8_p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u8_p6_0[] = {
- 2, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 4, 6, 5,
- 7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7, 8,
- 8, 8, 8, 9, 9,10,10, 6, 7, 7, 7, 8, 8, 8, 8, 9,
- 9,10,10,10, 6, 7, 7, 8, 8, 8, 8, 9, 8,10, 9,11,
- 10, 7, 8, 8, 8, 8, 8, 9, 9, 9,10,10,11,11, 7, 8,
- 8, 8, 8, 9, 8, 9, 9,10,10,11,11, 8, 8, 8, 9, 9,
- 9, 9, 9,10,10,10,11,11, 8, 8, 8, 9, 9, 9, 9,10,
- 9,10,10,11,11, 9, 9, 9, 9,10,10,10,10,10,10,11,
- 11,12, 9, 9, 9,10, 9,10,10,10,10,11,10,12,11,10,
- 10,10,10,10,11,11,11,11,11,12,12,12,10,10,10,10,
- 11,11,11,11,11,12,11,12,12,
-};
-
-static const static_codebook _44u8_p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u8_p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44u8_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44u8_p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u8_p6_1[] = {
- 3, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44u8_p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44u8_p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u8_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44u8_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u8_p7_0[] = {
- 1, 4, 5, 6, 6, 7, 7, 8, 8,10,10,11,11, 5, 6, 6,
- 7, 7, 8, 8, 9, 9,11,10,12,11, 5, 6, 6, 7, 7, 8,
- 8, 9, 9,10,11,11,12, 6, 7, 7, 8, 8, 9, 9,10,10,
- 11,11,12,12, 6, 7, 7, 8, 8, 9, 9,10,10,11,12,13,
- 12, 7, 8, 8, 9, 9,10,10,11,11,12,12,13,13, 8, 8,
- 8, 9, 9,10,10,11,11,12,12,13,13, 9, 9, 9,10,10,
- 11,11,12,12,13,13,14,14, 9, 9, 9,10,10,11,11,12,
- 12,13,13,14,14,10,11,11,12,11,13,12,13,13,14,14,
- 15,15,10,11,11,11,12,12,13,13,14,14,14,15,15,11,
- 12,12,13,13,14,13,15,14,15,15,16,15,11,11,12,13,
- 13,13,14,14,14,15,15,15,16,
-};
-
-static const static_codebook _44u8_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u8_p7_0,
- 1, -523206656, 1618345984, 4, 0,
- (long *)_vq_quantlist__44u8_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44u8_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u8_p7_1[] = {
- 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7,
- 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7,
- 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 6, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 8, 8,
- 8, 8, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 7, 7, 7,
- 8, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8,
- 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7,
- 7, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u8_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44u8_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u8_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44u8_p8_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44u8_p8_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 8, 7, 9, 8,10, 9,11,10, 4,
- 6, 6, 8, 8,10, 9, 9, 9,10,10,11,10,12,10, 4, 6,
- 6, 8, 8,10,10, 9, 9,10,10,11,11,11,12, 7, 8, 8,
- 10,10,11,11,11,10,12,11,12,12,13,11, 7, 8, 8,10,
- 10,11,11,10,10,11,11,12,12,13,13, 8,10,10,11,11,
- 12,11,12,11,13,12,13,12,14,13, 8,10, 9,11,11,12,
- 12,12,12,12,12,13,13,14,13, 8, 9, 9,11,10,12,11,
- 13,12,13,13,14,13,14,13, 8, 9, 9,10,11,12,12,12,
- 12,13,13,14,15,14,14, 9,10,10,12,11,13,12,13,13,
- 14,13,14,14,14,14, 9,10,10,12,12,12,12,13,13,14,
- 14,14,15,14,14,10,11,11,13,12,13,12,14,14,14,14,
- 14,14,15,15,10,11,11,12,12,13,13,14,14,14,15,15,
- 14,16,15,11,12,12,13,12,14,14,14,13,15,14,15,15,
- 15,17,11,12,12,13,13,14,14,14,15,15,14,15,15,14,
- 17,
-};
-
-static const static_codebook _44u8_p8_0 = {
- 2, 225,
- (char *)_vq_lengthlist__44u8_p8_0,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__44u8_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44u8_p8_1[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__44u8_p8_1[] = {
- 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 6, 6, 7, 7, 8,
- 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7,
- 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10, 8, 8,
- 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,
- 10, 9,10, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,
- 10,10,10,10,10,10,10,10, 8, 9, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10,10,10, 9,10,10, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10,10,
- 10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,
- 10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9,10, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,
- 10, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,
- 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10, 9, 9, 9,10, 9,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,
- 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
- 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10, 9, 9, 9,10, 9,10, 9,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44u8_p8_1 = {
- 2, 441,
- (char *)_vq_lengthlist__44u8_p8_1,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__44u8_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44u8_p9_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u8_p9_0[] = {
- 1, 3, 3, 9, 9, 9, 9, 9, 9, 4, 9, 9, 9, 9, 9, 9,
- 9, 9, 5, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
- 8,
-};
-
-static const static_codebook _44u8_p9_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u8_p9_0,
- 1, -511895552, 1631393792, 4, 0,
- (long *)_vq_quantlist__44u8_p9_0,
- 0
-};
-
-static const long _vq_quantlist__44u8_p9_1[] = {
- 9,
- 8,
- 10,
- 7,
- 11,
- 6,
- 12,
- 5,
- 13,
- 4,
- 14,
- 3,
- 15,
- 2,
- 16,
- 1,
- 17,
- 0,
- 18,
-};
-
-static const char _vq_lengthlist__44u8_p9_1[] = {
- 1, 4, 4, 7, 7, 8, 7, 8, 6, 9, 7,10, 8,11,10,11,
- 11,11,11, 4, 7, 6, 9, 9,10, 9, 9, 9,10,10,11,10,
- 11,10,11,11,13,11, 4, 7, 7, 9, 9, 9, 9, 9, 9,10,
- 10,11,10,11,11,11,12,11,12, 7, 9, 8,11,11,11,11,
- 10,10,11,11,12,12,12,12,12,12,14,13, 7, 8, 9,10,
- 11,11,11,10,10,11,11,11,11,12,12,14,12,13,14, 8,
- 9, 9,11,11,11,11,11,11,12,12,14,12,15,14,14,14,
- 15,14, 8, 9, 9,11,11,11,11,12,11,12,12,13,13,13,
- 13,13,13,14,14, 8, 9, 9,11,10,12,11,12,12,13,13,
- 13,13,15,14,14,14,16,16, 8, 9, 9,10,11,11,12,12,
- 12,13,13,13,14,14,14,15,16,15,15, 9,10,10,11,12,
- 12,13,13,13,14,14,16,14,14,16,16,16,16,15, 9,10,
- 10,11,11,12,13,13,14,15,14,16,14,15,16,16,16,16,
- 15,10,11,11,12,13,13,14,15,15,15,15,15,16,15,16,
- 15,16,15,15,10,11,11,13,13,14,13,13,15,14,15,15,
- 16,15,15,15,16,15,16,10,12,12,14,14,14,14,14,16,
- 16,15,15,15,16,16,16,16,16,16,11,12,12,14,14,14,
- 14,15,15,16,15,16,15,16,15,16,16,16,16,12,12,13,
- 14,14,15,16,16,16,16,16,16,15,16,16,16,16,16,16,
- 12,13,13,14,14,14,14,15,16,15,16,16,16,16,16,16,
- 16,16,16,12,13,14,14,14,16,15,16,15,16,16,16,16,
- 16,16,16,16,16,16,12,14,13,14,15,15,15,16,15,16,
- 16,15,16,16,16,16,16,16,16,
-};
-
-static const static_codebook _44u8_p9_1 = {
- 2, 361,
- (char *)_vq_lengthlist__44u8_p9_1,
- 1, -518287360, 1622704128, 5, 0,
- (long *)_vq_quantlist__44u8_p9_1,
- 0
-};
-
-static const long _vq_quantlist__44u8_p9_2[] = {
- 24,
- 23,
- 25,
- 22,
- 26,
- 21,
- 27,
- 20,
- 28,
- 19,
- 29,
- 18,
- 30,
- 17,
- 31,
- 16,
- 32,
- 15,
- 33,
- 14,
- 34,
- 13,
- 35,
- 12,
- 36,
- 11,
- 37,
- 10,
- 38,
- 9,
- 39,
- 8,
- 40,
- 7,
- 41,
- 6,
- 42,
- 5,
- 43,
- 4,
- 44,
- 3,
- 45,
- 2,
- 46,
- 1,
- 47,
- 0,
- 48,
-};
-
-static const char _vq_lengthlist__44u8_p9_2[] = {
- 2, 3, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _44u8_p9_2 = {
- 1, 49,
- (char *)_vq_lengthlist__44u8_p9_2,
- 1, -526909440, 1611661312, 6, 0,
- (long *)_vq_quantlist__44u8_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44u9__long[] = {
- 3, 9,13,13,14,15,14,14,15,15, 5, 5, 9,10,12,12,
- 13,14,16,15,10, 6, 6, 6, 8,11,12,13,16,15,11, 7,
- 5, 3, 5, 8,10,12,15,15,10,10, 7, 4, 3, 5, 8,10,
- 12,12,12,12, 9, 7, 5, 4, 6, 8,10,13,13,12,11, 9,
- 7, 5, 5, 6, 9,12,14,12,12,10, 8, 6, 6, 6, 7,11,
- 13,12,14,13,10, 8, 7, 7, 7,10,11,11,12,13,12,11,
- 10, 8, 8, 9,
-};
-
-static const static_codebook _huff_book__44u9__long = {
- 2, 100,
- (char *)_huff_lengthlist__44u9__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const char _huff_lengthlist__44u9__short[] = {
- 9,16,18,18,17,17,17,17,17,17, 5, 8,11,12,11,12,
- 17,17,16,16, 6, 6, 8, 8, 9,10,14,15,16,16, 6, 7,
- 7, 4, 6, 9,13,16,16,16, 6, 6, 7, 4, 5, 8,11,15,
- 17,16, 7, 6, 7, 6, 6, 8, 9,10,14,16,11, 8, 8, 7,
- 6, 6, 3, 4,10,15,14,12,12,10, 5, 6, 3, 3, 8,13,
- 15,17,15,11, 6, 8, 6, 6, 9,14,17,15,15,12, 8,10,
- 9, 9,12,15,
-};
-
-static const static_codebook _huff_book__44u9__short = {
- 2, 100,
- (char *)_huff_lengthlist__44u9__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44u9_p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u9_p1_0[] = {
- 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 9, 9, 7,
- 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 9, 5, 7, 7, 7, 9,
- 9, 7, 9, 9, 8, 9, 9, 9,10,11, 9,11,11, 7, 9, 9,
- 9,11,10, 9,11,11, 5, 7, 7, 7, 9, 9, 8, 9,10, 7,
- 9, 9, 9,11,11, 9,10,11, 7, 9,10, 9,11,11, 9,11,
- 10,
-};
-
-static const static_codebook _44u9_p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u9_p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44u9_p1_0,
- 0
-};
-
-static const long _vq_quantlist__44u9_p2_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u9_p2_0[] = {
- 3, 5, 5, 8, 8, 5, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8,
- 9, 9,11,10, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
- 8,10,10, 7, 8, 8, 9,10, 9,10,10,11,11, 9, 9,10,
- 11,11, 6, 7, 7, 9, 9, 7, 8, 8,10, 9, 7, 8, 8,10,
- 10, 9,10, 9,11,11, 9,10,10,11,11, 8, 9, 9,11,11,
- 9,10,10,12,11, 9,10,10,11,12,11,11,11,13,13,11,
- 11,11,12,13, 8, 9, 9,11,11, 9,10,10,11,11, 9,10,
- 10,12,11,11,12,11,13,12,11,11,12,13,13, 6, 7, 7,
- 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,
- 11, 9,10,10,11,12, 7, 8, 8,10,10, 8, 9, 9,11,11,
- 8, 9, 9,10,10,10,11,11,12,12,10,10,11,12,12, 7,
- 8, 8,10,10, 8, 9, 8,10,10, 8, 9, 9,10,10,10,11,
- 10,12,11,10,10,11,12,12, 9,10,10,11,12,10,11,11,
- 12,12,10,11,10,12,12,12,12,12,13,13,11,12,12,13,
- 13, 9,10,10,11,11, 9,10,10,12,12,10,11,11,12,13,
- 11,12,11,13,12,12,12,12,13,14, 6, 7, 7, 9, 9, 7,
- 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,11,11, 9,10,
- 10,11,12, 7, 8, 8,10,10, 8, 9, 9,11,10, 8, 8, 9,
- 10,10,10,11,10,12,12,10,10,11,11,12, 7, 8, 8,10,
- 10, 8, 9, 9,10,10, 8, 9, 9,10,10,10,11,10,12,12,
- 10,11,10,12,12, 9,10,10,12,11,10,11,11,12,12, 9,
- 10,10,12,12,12,12,12,13,13,11,11,12,12,14, 9,10,
- 10,11,12,10,11,11,12,12,10,11,11,12,12,11,12,12,
- 14,14,12,12,12,13,13, 8, 9, 9,11,11, 9,10,10,12,
- 11, 9,10,10,12,12,11,12,11,13,13,11,11,12,13,13,
- 9,10,10,12,12,10,11,11,12,12,10,11,11,12,12,12,
- 12,12,14,14,12,12,12,13,13, 9,10,10,12,11,10,11,
- 10,12,12,10,11,11,12,12,11,12,12,14,13,12,12,12,
- 13,14,11,12,11,13,13,11,12,12,13,13,12,12,12,14,
- 14,13,13,13,13,15,13,13,14,15,15,11,11,11,13,13,
- 11,12,11,13,13,11,12,12,13,13,12,13,12,15,13,13,
- 13,14,14,15, 8, 9, 9,11,11, 9,10,10,11,12, 9,10,
- 10,11,12,11,12,11,13,13,11,12,12,13,13, 9,10,10,
- 11,12,10,11,10,12,12,10,10,11,12,13,12,12,12,14,
- 13,11,12,12,13,14, 9,10,10,12,12,10,11,11,12,12,
- 10,11,11,12,12,12,12,12,14,13,12,12,12,14,13,11,
- 11,11,13,13,11,12,12,14,13,11,11,12,13,13,13,13,
- 13,15,14,12,12,13,13,15,11,12,12,13,13,12,12,12,
- 13,14,11,12,12,13,13,13,13,14,14,15,13,13,13,14,
- 14,
-};
-
-static const static_codebook _44u9_p2_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44u9_p2_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u9_p2_0,
- 0
-};
-
-static const long _vq_quantlist__44u9_p3_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44u9_p3_0[] = {
- 3, 4, 4, 5, 5, 7, 7, 8, 8, 4, 5, 5, 6, 6, 7, 7,
- 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
- 8, 8, 9, 9, 5, 6, 6, 7, 7, 8, 8, 9, 9, 7, 7, 7,
- 8, 8, 9, 9,10,10, 7, 7, 7, 8, 8, 9, 9,10,10, 8,
- 9, 9,10, 9,10,10,11,11, 8, 9, 9, 9,10,10,10,11,
- 11,
-};
-
-static const static_codebook _44u9_p3_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44u9_p3_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u9_p3_0,
- 0
-};
-
-static const long _vq_quantlist__44u9_p4_0[] = {
- 8,
- 7,
- 9,
- 6,
- 10,
- 5,
- 11,
- 4,
- 12,
- 3,
- 13,
- 2,
- 14,
- 1,
- 15,
- 0,
- 16,
-};
-
-static const char _vq_lengthlist__44u9_p4_0[] = {
- 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
- 11, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,
- 11,11, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,
- 10,11,11, 6, 6, 6, 7, 6, 7, 7, 8, 8, 9, 9,10,10,
- 11,11,12,11, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9,10,
- 10,11,11,11,12, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,
- 10,10,11,11,12,12, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9,
- 9,10,10,11,11,12,12, 8, 8, 8, 8, 8, 9, 8,10, 9,
- 10,10,11,10,12,11,13,12, 8, 8, 8, 8, 8, 9, 9, 9,
- 10,10,10,10,11,11,12,12,12, 8, 8, 8, 9, 9, 9, 9,
- 10,10,11,10,12,11,12,12,13,12, 8, 8, 8, 9, 9, 9,
- 9,10,10,10,11,11,11,12,12,12,13, 9, 9, 9,10,10,
- 10,10,11,10,11,11,12,11,13,12,13,13, 9, 9,10,10,
- 10,10,10,10,11,11,11,11,12,12,13,13,13,10,11,10,
- 11,11,11,11,12,11,12,12,13,12,13,13,14,13,10,10,
- 10,11,11,11,11,11,12,12,12,12,13,13,13,13,14,11,
- 11,11,12,11,12,12,12,12,13,13,13,13,14,13,14,14,
- 11,11,11,11,12,12,12,12,12,12,13,13,13,13,14,14,
- 14,
-};
-
-static const static_codebook _44u9_p4_0 = {
- 2, 289,
- (char *)_vq_lengthlist__44u9_p4_0,
- 1, -529530880, 1611661312, 5, 0,
- (long *)_vq_quantlist__44u9_p4_0,
- 0
-};
-
-static const long _vq_quantlist__44u9_p5_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44u9_p5_0[] = {
- 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 8, 9, 9, 7,
- 9, 9, 5, 8, 8, 7, 9, 9, 8, 9, 9, 5, 8, 8, 8,10,
- 10, 8,10,10, 7,10,10, 9,10,12, 9,11,11, 7,10,10,
- 9,11,10, 9,11,12, 5, 8, 8, 8,10,10, 8,10,10, 7,
- 10,10, 9,12,11, 9,10,11, 7,10,10, 9,11,11,10,12,
- 10,
-};
-
-static const static_codebook _44u9_p5_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44u9_p5_0,
- 1, -529137664, 1618345984, 2, 0,
- (long *)_vq_quantlist__44u9_p5_0,
- 0
-};
-
-static const long _vq_quantlist__44u9_p5_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u9_p5_1[] = {
- 5, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 6, 6,
- 7, 7, 7, 7, 8, 7, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7,
- 7, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 6, 6, 6, 7,
- 7, 7, 7, 7, 7, 8, 8, 7, 7, 7, 7, 7, 8, 7, 8, 8,
- 8, 8, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
- 8, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 8, 8, 8, 8,
- 8, 8, 8, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8,
- 8, 8, 8, 8, 8, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u9_p5_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44u9_p5_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u9_p5_1,
- 0
-};
-
-static const long _vq_quantlist__44u9_p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u9_p6_0[] = {
- 2, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 4, 6, 5,
- 7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 5, 6, 7, 7, 8,
- 8, 8, 8, 9, 9,10,10, 6, 7, 7, 8, 8, 8, 8, 9, 9,
- 10,10,10,10, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,10,
- 10, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,11, 7, 8,
- 8, 8, 8, 9, 9, 9, 9,10,10,11,11, 8, 8, 8, 9, 9,
- 9, 9, 9,10,10,10,11,11, 8, 8, 8, 9, 9, 9, 9,10,
- 9,10,10,11,11, 9, 9, 9,10,10,10,10,10,11,11,11,
- 11,12, 9, 9, 9,10,10,10,10,10,10,11,10,12,11,10,
- 10,10,10,10,11,11,11,11,11,12,12,12,10,10,10,10,
- 10,11,11,11,11,12,11,12,12,
-};
-
-static const static_codebook _44u9_p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u9_p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44u9_p6_0,
- 0
-};
-
-static const long _vq_quantlist__44u9_p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44u9_p6_1[] = {
- 4, 4, 4, 5, 5, 4, 5, 4, 5, 5, 4, 4, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5,
-};
-
-static const static_codebook _44u9_p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44u9_p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44u9_p6_1,
- 0
-};
-
-static const long _vq_quantlist__44u9_p7_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44u9_p7_0[] = {
- 1, 4, 5, 6, 6, 7, 7, 8, 9,10,10,11,11, 5, 6, 6,
- 7, 7, 8, 8, 9, 9,10,10,11,11, 5, 6, 6, 7, 7, 8,
- 8, 9, 9,10,10,11,11, 6, 7, 7, 8, 8, 9, 9,10,10,
- 11,11,12,12, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
- 12, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13, 8, 8,
- 8, 9, 9,10,10,11,11,12,12,13,13, 9, 9, 9,10,10,
- 11,11,12,12,13,13,13,13, 9, 9, 9,10,10,11,11,12,
- 12,13,13,14,14,10,10,10,11,11,12,12,13,13,14,13,
- 15,14,10,10,10,11,11,12,12,13,13,14,14,14,14,11,
- 11,12,12,12,13,13,14,14,14,14,15,15,11,11,12,12,
- 12,13,13,14,14,14,15,15,15,
-};
-
-static const static_codebook _44u9_p7_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44u9_p7_0,
- 1, -523206656, 1618345984, 4, 0,
- (long *)_vq_quantlist__44u9_p7_0,
- 0
-};
-
-static const long _vq_quantlist__44u9_p7_1[] = {
- 5,
- 4,
- 6,
- 3,
- 7,
- 2,
- 8,
- 1,
- 9,
- 0,
- 10,
-};
-
-static const char _vq_lengthlist__44u9_p7_1[] = {
- 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 7, 7,
- 7, 7, 7, 7, 7, 7, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 8, 8, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 8, 7, 7,
- 7, 7, 7, 7, 7, 8, 8, 8, 8,
-};
-
-static const static_codebook _44u9_p7_1 = {
- 2, 121,
- (char *)_vq_lengthlist__44u9_p7_1,
- 1, -531365888, 1611661312, 4, 0,
- (long *)_vq_quantlist__44u9_p7_1,
- 0
-};
-
-static const long _vq_quantlist__44u9_p8_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44u9_p8_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9,10, 9,11,10, 4,
- 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,10,12,10, 4, 6,
- 6, 8, 8, 9,10, 9, 9,10,10,11,11,12,12, 7, 8, 8,
- 10,10,11,11,10,10,11,11,12,12,13,12, 7, 8, 8,10,
- 10,11,11,10,10,11,11,12,12,12,13, 8,10, 9,11,11,
- 12,12,11,11,12,12,13,13,14,13, 8, 9, 9,11,11,12,
- 12,11,12,12,12,13,13,14,13, 8, 9, 9,10,10,12,11,
- 13,12,13,13,14,13,15,14, 8, 9, 9,10,10,11,12,12,
- 12,13,13,13,14,14,14, 9,10,10,12,11,13,12,13,13,
- 14,13,14,14,14,15, 9,10,10,11,12,12,12,13,13,14,
- 14,14,15,15,15,10,11,11,12,12,13,13,14,14,14,14,
- 15,14,16,15,10,11,11,12,12,13,13,13,14,14,14,14,
- 14,15,16,11,12,12,13,13,14,13,14,14,15,14,15,16,
- 16,16,11,12,12,13,13,14,13,14,14,15,15,15,16,15,
- 15,
-};
-
-static const static_codebook _44u9_p8_0 = {
- 2, 225,
- (char *)_vq_lengthlist__44u9_p8_0,
- 1, -520986624, 1620377600, 4, 0,
- (long *)_vq_quantlist__44u9_p8_0,
- 0
-};
-
-static const long _vq_quantlist__44u9_p8_1[] = {
- 10,
- 9,
- 11,
- 8,
- 12,
- 7,
- 13,
- 6,
- 14,
- 5,
- 15,
- 4,
- 16,
- 3,
- 17,
- 2,
- 18,
- 1,
- 19,
- 0,
- 20,
-};
-
-static const char _vq_lengthlist__44u9_p8_1[] = {
- 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 6, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 6, 6, 7, 7, 8,
- 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7,
- 7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10, 8, 8,
- 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 10, 9,10, 9,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9,10,10, 9,10,10,10,10,10, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10,10,
- 10,10, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
- 10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
- 10, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10,10,
- 10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
- 10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 9, 9, 9, 9,10, 9, 9,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10, 9, 9, 9,10, 9,10, 9,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10, 9, 9, 9,10, 9,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
- 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10, 9, 9, 9,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,
-};
-
-static const static_codebook _44u9_p8_1 = {
- 2, 441,
- (char *)_vq_lengthlist__44u9_p8_1,
- 1, -529268736, 1611661312, 5, 0,
- (long *)_vq_quantlist__44u9_p8_1,
- 0
-};
-
-static const long _vq_quantlist__44u9_p9_0[] = {
- 7,
- 6,
- 8,
- 5,
- 9,
- 4,
- 10,
- 3,
- 11,
- 2,
- 12,
- 1,
- 13,
- 0,
- 14,
-};
-
-static const char _vq_lengthlist__44u9_p9_0[] = {
- 1, 3, 3,11,11,11,11,11,11,11,11,11,11,11,11, 4,
- 10,11,11,11,11,11,11,11,11,11,11,11,11,11, 4,10,
- 10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _44u9_p9_0 = {
- 2, 225,
- (char *)_vq_lengthlist__44u9_p9_0,
- 1, -510036736, 1631393792, 4, 0,
- (long *)_vq_quantlist__44u9_p9_0,
- 0
-};
-
-static const long _vq_quantlist__44u9_p9_1[] = {
- 9,
- 8,
- 10,
- 7,
- 11,
- 6,
- 12,
- 5,
- 13,
- 4,
- 14,
- 3,
- 15,
- 2,
- 16,
- 1,
- 17,
- 0,
- 18,
-};
-
-static const char _vq_lengthlist__44u9_p9_1[] = {
- 1, 4, 4, 7, 7, 8, 7, 8, 7, 9, 8,10, 9,10,10,11,
- 11,12,12, 4, 7, 6, 9, 9,10, 9, 9, 8,10,10,11,10,
- 12,10,13,12,13,12, 4, 6, 6, 9, 9, 9, 9, 9, 9,10,
- 10,11,11,11,12,12,12,12,12, 7, 9, 8,11,10,10,10,
- 11,10,11,11,12,12,13,12,13,13,13,13, 7, 8, 9,10,
- 10,11,11,10,10,11,11,11,12,13,13,13,13,14,14, 8,
- 9, 9,11,11,12,11,12,12,13,12,12,13,13,14,15,14,
- 14,14, 8, 9, 9,10,11,11,11,12,12,13,12,13,13,14,
- 14,14,15,14,16, 8, 9, 9,11,10,12,12,12,12,15,13,
- 13,13,17,14,15,15,15,14, 8, 9, 9,10,11,11,12,13,
- 12,13,13,13,14,15,14,14,14,16,15, 9,11,10,12,12,
- 13,13,13,13,14,14,16,15,14,14,14,15,15,17, 9,10,
- 10,11,11,13,13,13,14,14,13,15,14,15,14,15,16,15,
- 16,10,11,11,12,12,13,14,15,14,15,14,14,15,17,16,
- 15,15,17,17,10,12,11,13,12,14,14,13,14,15,15,15,
- 15,16,17,17,15,17,16,11,12,12,14,13,15,14,15,16,
- 17,15,17,15,17,15,15,16,17,15,11,11,12,14,14,14,
- 14,14,15,15,16,15,17,17,17,16,17,16,15,12,12,13,
- 14,14,14,15,14,15,15,16,16,17,16,17,15,17,17,16,
- 12,14,12,14,14,15,15,15,14,14,16,16,16,15,16,16,
- 15,17,15,12,13,13,14,15,14,15,17,15,17,16,17,17,
- 17,16,17,16,17,17,12,13,13,14,16,15,15,15,16,15,
- 17,17,15,17,15,17,16,16,17,
-};
-
-static const static_codebook _44u9_p9_1 = {
- 2, 361,
- (char *)_vq_lengthlist__44u9_p9_1,
- 1, -518287360, 1622704128, 5, 0,
- (long *)_vq_quantlist__44u9_p9_1,
- 0
-};
-
-static const long _vq_quantlist__44u9_p9_2[] = {
- 24,
- 23,
- 25,
- 22,
- 26,
- 21,
- 27,
- 20,
- 28,
- 19,
- 29,
- 18,
- 30,
- 17,
- 31,
- 16,
- 32,
- 15,
- 33,
- 14,
- 34,
- 13,
- 35,
- 12,
- 36,
- 11,
- 37,
- 10,
- 38,
- 9,
- 39,
- 8,
- 40,
- 7,
- 41,
- 6,
- 42,
- 5,
- 43,
- 4,
- 44,
- 3,
- 45,
- 2,
- 46,
- 1,
- 47,
- 0,
- 48,
-};
-
-static const char _vq_lengthlist__44u9_p9_2[] = {
- 2, 4, 4, 5, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 7, 6, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7,
-};
-
-static const static_codebook _44u9_p9_2 = {
- 1, 49,
- (char *)_vq_lengthlist__44u9_p9_2,
- 1, -526909440, 1611661312, 6, 0,
- (long *)_vq_quantlist__44u9_p9_2,
- 0
-};
-
-static const char _huff_lengthlist__44un1__long[] = {
- 5, 6,12, 9,14, 9, 9,19, 6, 1, 5, 5, 8, 7, 9,19,
- 12, 4, 4, 7, 7, 9,11,18, 9, 5, 6, 6, 8, 7, 8,17,
- 14, 8, 7, 8, 8,10,12,18, 9, 6, 8, 6, 8, 6, 8,18,
- 9, 8,11, 8,11, 7, 5,15,16,18,18,18,17,15,11,18,
-};
-
-static const static_codebook _huff_book__44un1__long = {
- 2, 64,
- (char *)_huff_lengthlist__44un1__long,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
-static const long _vq_quantlist__44un1__p1_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44un1__p1_0[] = {
- 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,10,11, 8,
- 10,11, 5, 8, 8, 8,11,10, 8,11,10, 4, 9, 9, 8,11,
- 11, 8,11,11, 8,12,11,10,12,14,11,13,13, 7,11,11,
- 10,13,11,11,13,14, 4, 8, 9, 8,11,11, 8,11,12, 7,
- 11,11,11,14,13,10,11,13, 8,11,12,11,13,13,10,14,
- 12,
-};
-
-static const static_codebook _44un1__p1_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44un1__p1_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44un1__p1_0,
- 0
-};
-
-static const long _vq_quantlist__44un1__p2_0[] = {
- 1,
- 0,
- 2,
-};
-
-static const char _vq_lengthlist__44un1__p2_0[] = {
- 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 8, 6,
- 7, 9, 5, 7, 7, 6, 8, 7, 7, 9, 8, 4, 7, 7, 7, 9,
- 8, 7, 8, 8, 7, 9, 8, 8, 8,10, 9,10,10, 6, 8, 8,
- 7,10, 8, 9,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 9, 6,
- 8, 8, 9,10,10, 7, 8,10, 6, 8, 9, 9,10,10, 8,10,
- 8,
-};
-
-static const static_codebook _44un1__p2_0 = {
- 4, 81,
- (char *)_vq_lengthlist__44un1__p2_0,
- 1, -535822336, 1611661312, 2, 0,
- (long *)_vq_quantlist__44un1__p2_0,
- 0
-};
-
-static const long _vq_quantlist__44un1__p3_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44un1__p3_0[] = {
- 1, 5, 5, 8, 8, 5, 8, 7, 9, 9, 5, 7, 8, 9, 9, 9,
- 10, 9,12,12, 9, 9,10,11,12, 6, 8, 8,10,10, 8,10,
- 10,11,11, 8, 9,10,11,11,10,11,11,13,13,10,11,11,
- 12,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10,10,11,
- 11,10,11,11,13,12,10,11,11,13,12, 9,11,11,15,13,
- 10,12,11,15,13,10,11,11,15,14,12,14,13,16,15,12,
- 13,13,17,16, 9,11,11,13,15,10,11,12,14,15,10,11,
- 12,14,15,12,13,13,15,16,12,13,13,16,16, 5, 8, 8,
- 11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14,
- 14,11,12,12,14,14, 8,11,10,13,12,10,11,12,12,13,
- 10,12,12,13,13,12,12,13,13,15,11,12,13,15,14, 7,
- 10,10,12,12, 9,12,11,13,12,10,12,12,13,14,12,13,
- 12,15,13,11,13,12,14,15,10,12,12,16,14,11,12,12,
- 16,15,11,13,12,17,16,13,13,15,15,17,13,15,15,20,
- 17,10,12,12,14,16,11,12,12,15,15,11,13,13,15,18,
- 13,14,13,15,15,13,15,14,16,16, 5, 8, 8,11,11, 8,
- 10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12,
- 12,14,15, 7,10,10,13,12,10,12,12,14,13, 9,10,12,
- 12,13,11,13,13,15,15,11,12,13,13,15, 8,10,10,12,
- 13,10,12,12,13,13,10,12,11,13,13,11,13,12,15,15,
- 12,13,12,15,13,10,12,12,16,14,11,12,12,16,15,10,
- 12,12,16,14,14,15,14,18,16,13,13,14,15,16,10,12,
- 12,14,16,11,13,13,16,16,11,13,12,14,16,13,15,15,
- 18,18,13,15,13,16,14, 8,11,11,16,16,10,13,13,17,
- 16,10,12,12,16,15,14,16,15,20,17,13,14,14,17,17,
- 9,12,12,16,16,11,13,14,16,17,11,13,13,16,16,15,
- 15,19,18, 0,14,15,15,18,18, 9,12,12,17,16,11,13,
- 12,17,16,11,12,13,15,17,15,16,15, 0,19,14,15,14,
- 19,18,12,14,14, 0,16,13,14,14,19,18,13,15,16,17,
- 16,15,15,17,18, 0,14,16,16,19, 0,12,14,14,16,18,
- 13,15,13,17,18,13,15,14,17,18,15,18,14,18,18,16,
- 17,16, 0,17, 8,11,11,15,15,10,12,12,16,16,10,13,
- 13,16,16,13,15,14,17,17,14,15,17,17,18, 9,12,12,
- 16,15,11,13,13,16,16,11,12,13,17,17,14,14,15,17,
- 17,14,15,16, 0,18, 9,12,12,16,17,11,13,13,16,17,
- 11,14,13,18,17,14,16,14,17,17,15,17,17,18,18,12,
- 14,14, 0,16,13,15,15,19, 0,12,13,15, 0, 0,14,17,
- 16,19, 0,16,15,18,18, 0,12,14,14,17, 0,13,14,14,
- 17, 0,13,15,14, 0,18,15,16,16, 0,18,15,18,15, 0,
- 17,
-};
-
-static const static_codebook _44un1__p3_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44un1__p3_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44un1__p3_0,
- 0
-};
-
-static const long _vq_quantlist__44un1__p4_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44un1__p4_0[] = {
- 3, 5, 5, 9, 9, 5, 6, 6,10, 9, 5, 6, 6, 9,10,10,
- 10,10,12,11, 9,10,10,12,12, 5, 7, 7,10,10, 7, 7,
- 8,10,11, 7, 7, 8,10,11,10,10,11,11,13,10,10,11,
- 11,13, 6, 7, 7,10,10, 7, 8, 7,11,10, 7, 8, 7,10,
- 10,10,11, 9,13,11,10,11,10,13,11,10,10,10,14,13,
- 10,11,11,14,13,10,10,11,13,14,12,12,13,15,15,12,
- 12,13,13,14,10,10,10,12,13,10,11,10,13,13,10,11,
- 11,13,13,12,13,12,14,13,12,13,13,14,13, 5, 7, 7,
- 10,10, 7, 8, 8,11,10, 7, 8, 8,10,10,11,11,11,13,
- 13,10,11,11,12,12, 7, 8, 8,11,11, 7, 8, 9,10,12,
- 8, 9, 9,11,11,11,10,12,11,14,11,11,12,13,13, 6,
- 8, 8,10,11, 7, 9, 7,12,10, 8, 9,10,11,12,10,12,
- 10,14,11,11,12,11,13,13,10,11,11,14,14,10,10,11,
- 13,14,11,12,12,15,13,12,11,14,12,16,12,13,14,15,
- 16,10,10,11,13,14,10,11,10,14,12,11,12,12,13,14,
- 12,13,11,15,12,14,14,14,15,15, 5, 7, 7,10,10, 7,
- 8, 8,10,10, 7, 8, 8,10,11,10,11,10,12,12,10,11,
- 11,12,13, 6, 8, 8,11,11, 8, 9, 9,12,11, 7, 7, 9,
- 10,12,11,11,11,12,13,11,10,12,11,15, 7, 8, 8,11,
- 11, 8, 9, 9,11,11, 7, 9, 8,12,10,11,12,11,13,12,
- 11,12,10,15,11,10,11,10,14,12,11,12,11,14,13,10,
- 10,11,13,14,13,13,13,17,15,12,11,14,12,15,10,10,
- 11,13,14,11,12,12,14,14,10,11,10,14,13,13,14,13,
- 16,17,12,14,11,16,12, 9,10,10,14,13,10,11,10,14,
- 14,10,11,11,13,13,13,14,14,16,15,12,13,13,14,14,
- 9,11,10,14,13,10,10,12,13,14,11,12,11,14,13,13,
- 14,14,14,15,13,14,14,15,15, 9,10,11,13,14,10,11,
- 10,15,13,11,11,12,12,15,13,14,12,15,14,13,13,14,
- 14,15,12,13,12,16,14,11,11,12,15,14,13,15,13,16,
- 14,13,12,15,12,17,15,16,15,16,16,12,12,13,13,15,
- 11,13,11,15,14,13,13,14,15,17,13,14,12, 0,13,14,
- 15,14,15, 0, 9,10,10,13,13,10,11,11,13,13,10,11,
- 11,13,13,12,13,12,14,14,13,14,14,15,17, 9,10,10,
- 13,13,11,12,11,15,12,10,10,11,13,16,13,14,13,15,
- 14,13,13,14,15,16,10,10,11,13,14,11,11,12,13,14,
- 10,12,11,14,14,13,13,13,14,15,13,15,13,16,15,12,
- 13,12,15,13,12,15,13,15,15,11,11,13,14,15,15,15,
- 15,15,17,13,12,14,13,17,12,12,14,14,15,13,13,14,
- 14,16,11,13,11,16,15,14,16,16,17, 0,14,13,11,16,
- 12,
-};
-
-static const static_codebook _44un1__p4_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44un1__p4_0,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44un1__p4_0,
- 0
-};
-
-static const long _vq_quantlist__44un1__p5_0[] = {
- 4,
- 3,
- 5,
- 2,
- 6,
- 1,
- 7,
- 0,
- 8,
-};
-
-static const char _vq_lengthlist__44un1__p5_0[] = {
- 1, 4, 4, 7, 7, 8, 8, 9, 9, 4, 6, 5, 8, 7, 8, 8,
- 10, 9, 4, 6, 6, 8, 8, 8, 8,10,10, 7, 8, 7, 9, 9,
- 9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,11, 8, 8, 8,
- 9, 9,10,10,11,11, 8, 8, 8, 9, 9,10,10,11,11, 9,
- 10,10,11,10,11,11,12,12, 9,10,10,10,11,11,11,12,
- 12,
-};
-
-static const static_codebook _44un1__p5_0 = {
- 2, 81,
- (char *)_vq_lengthlist__44un1__p5_0,
- 1, -531628032, 1611661312, 4, 0,
- (long *)_vq_quantlist__44un1__p5_0,
- 0
-};
-
-static const long _vq_quantlist__44un1__p6_0[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44un1__p6_0[] = {
- 1, 4, 4, 6, 6, 8, 8,10,10,11,11,15,15, 4, 5, 5,
- 8, 8, 9, 9,11,11,12,12,16,16, 4, 5, 6, 8, 8, 9,
- 9,11,11,12,12,14,14, 7, 8, 8, 9, 9,10,10,11,12,
- 13,13,16,17, 7, 8, 8, 9, 9,10,10,12,12,12,13,15,
- 15, 9,10,10,10,10,11,11,12,12,13,13,15,16, 9, 9,
- 9,10,10,11,11,13,12,13,13,17,17,10,11,11,11,12,
- 12,12,13,13,14,15, 0,18,10,11,11,12,12,12,13,14,
- 13,14,14,17,16,11,12,12,13,13,14,14,14,14,15,16,
- 17,16,11,12,12,13,13,14,14,14,14,15,15,17,17,14,
- 15,15,16,16,16,17,17,16, 0,17, 0,18,14,15,15,16,
- 16, 0,15,18,18, 0,16, 0, 0,
-};
-
-static const static_codebook _44un1__p6_0 = {
- 2, 169,
- (char *)_vq_lengthlist__44un1__p6_0,
- 1, -526516224, 1616117760, 4, 0,
- (long *)_vq_quantlist__44un1__p6_0,
- 0
-};
-
-static const long _vq_quantlist__44un1__p6_1[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44un1__p6_1[] = {
- 2, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 6, 5, 5,
- 6, 5, 6, 6, 5, 6, 6, 6, 6,
-};
-
-static const static_codebook _44un1__p6_1 = {
- 2, 25,
- (char *)_vq_lengthlist__44un1__p6_1,
- 1, -533725184, 1611661312, 3, 0,
- (long *)_vq_quantlist__44un1__p6_1,
- 0
-};
-
-static const long _vq_quantlist__44un1__p7_0[] = {
- 2,
- 1,
- 3,
- 0,
- 4,
-};
-
-static const char _vq_lengthlist__44un1__p7_0[] = {
- 1, 5, 3,11,11,11,11,11,11,11, 8,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11, 8,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11, 7,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
- 10,
-};
-
-static const static_codebook _44un1__p7_0 = {
- 4, 625,
- (char *)_vq_lengthlist__44un1__p7_0,
- 1, -518709248, 1626677248, 3, 0,
- (long *)_vq_quantlist__44un1__p7_0,
- 0
-};
-
-static const long _vq_quantlist__44un1__p7_1[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44un1__p7_1[] = {
- 1, 4, 4, 6, 6, 6, 6, 9, 8, 9, 8, 8, 8, 5, 7, 7,
- 7, 7, 8, 8, 8,10, 8,10, 8, 9, 5, 7, 7, 8, 7, 7,
- 8,10,10,11,10,12,11, 7, 8, 8, 9, 9, 9,10,11,11,
- 11,11,11,11, 7, 8, 8, 8, 9, 9, 9,10,10,10,11,11,
- 12, 7, 8, 8, 9, 9,10,11,11,12,11,12,11,11, 7, 8,
- 8, 9, 9,10,10,11,11,11,12,12,11, 8,10,10,10,10,
- 11,11,14,11,12,12,12,13, 9,10,10,10,10,12,11,14,
- 11,14,11,12,13,10,11,11,11,11,13,11,14,14,13,13,
- 13,14,11,11,11,12,11,12,12,12,13,14,14,13,14,12,
- 11,12,12,12,12,13,13,13,14,13,14,14,11,12,12,14,
- 12,13,13,12,13,13,14,14,14,
-};
-
-static const static_codebook _44un1__p7_1 = {
- 2, 169,
- (char *)_vq_lengthlist__44un1__p7_1,
- 1, -523010048, 1618608128, 4, 0,
- (long *)_vq_quantlist__44un1__p7_1,
- 0
-};
-
-static const long _vq_quantlist__44un1__p7_2[] = {
- 6,
- 5,
- 7,
- 4,
- 8,
- 3,
- 9,
- 2,
- 10,
- 1,
- 11,
- 0,
- 12,
-};
-
-static const char _vq_lengthlist__44un1__p7_2[] = {
- 3, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9, 9, 8, 4, 5, 5,
- 6, 6, 8, 8, 9, 8, 9, 9, 9, 9, 4, 5, 5, 7, 6, 8,
- 8, 8, 8, 9, 8, 9, 8, 6, 7, 7, 7, 8, 8, 8, 9, 9,
- 9, 9, 9, 9, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9,
- 9, 7, 8, 8, 8, 8, 9, 8, 9, 9,10, 9, 9,10, 7, 8,
- 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10, 8, 9, 9, 9, 9,
- 9, 9, 9, 9,10,10, 9,10, 8, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9,10,10, 9, 9, 9,10, 9, 9,10, 9, 9,10,10,
- 10,10, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10, 9,
- 9, 9,10, 9, 9,10,10, 9,10,10,10,10, 9, 9, 9,10,
- 9, 9, 9,10,10,10,10,10,10,
-};
-
-static const static_codebook _44un1__p7_2 = {
- 2, 169,
- (char *)_vq_lengthlist__44un1__p7_2,
- 1, -531103744, 1611661312, 4, 0,
- (long *)_vq_quantlist__44un1__p7_2,
- 0
-};
-
-static const char _huff_lengthlist__44un1__short[] = {
- 12,12,14,12,14,14,14,14,12, 6, 6, 8, 9, 9,11,14,
- 12, 4, 2, 6, 6, 7,11,14,13, 6, 5, 7, 8, 9,11,14,
- 13, 8, 5, 8, 6, 8,12,14,12, 7, 7, 8, 8, 8,10,14,
- 12, 6, 3, 4, 4, 4, 7,14,11, 7, 4, 6, 6, 6, 8,14,
-};
-
-static const static_codebook _huff_book__44un1__short = {
- 2, 64,
- (char *)_huff_lengthlist__44un1__short,
- 0, 0, 0, 0, 0,
- NULL,
- 0
-};
-
diff --git a/drivers/vorbis/codebook.c b/drivers/vorbis/codebook.c
deleted file mode 100644
index 72f8a17a35..0000000000
--- a/drivers/vorbis/codebook.c
+++ /dev/null
@@ -1,490 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: basic codebook pack/unpack/code/decode operations
- last mod: $Id: codebook.c 19457 2015-03-03 00:15:29Z giles $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codebook.h"
-#include "scales.h"
-#include "misc.h"
-#include "os.h"
-
-/* packs the given codebook into the bitstream **************************/
-
-int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *opb){
- long i,j;
- int ordered=0;
-
- /* first the basic parameters */
- oggpack_write(opb,0x564342,24);
- oggpack_write(opb,c->dim,16);
- oggpack_write(opb,c->entries,24);
-
- /* pack the codewords. There are two packings; length ordered and
- length random. Decide between the two now. */
-
- for(i=1;i<c->entries;i++)
- if(c->lengthlist[i-1]==0 || c->lengthlist[i]<c->lengthlist[i-1])break;
- if(i==c->entries)ordered=1;
-
- if(ordered){
- /* length ordered. We only need to say how many codewords of
- each length. The actual codewords are generated
- deterministically */
-
- long count=0;
- oggpack_write(opb,1,1); /* ordered */
- oggpack_write(opb,c->lengthlist[0]-1,5); /* 1 to 32 */
-
- for(i=1;i<c->entries;i++){
- char this=c->lengthlist[i];
- char last=c->lengthlist[i-1];
- if(this>last){
- for(j=last;j<this;j++){
- oggpack_write(opb,i-count,ov_ilog(c->entries-count));
- count=i;
- }
- }
- }
- oggpack_write(opb,i-count,ov_ilog(c->entries-count));
-
- }else{
- /* length random. Again, we don't code the codeword itself, just
- the length. This time, though, we have to encode each length */
- oggpack_write(opb,0,1); /* unordered */
-
- /* algortihmic mapping has use for 'unused entries', which we tag
- here. The algorithmic mapping happens as usual, but the unused
- entry has no codeword. */
- for(i=0;i<c->entries;i++)
- if(c->lengthlist[i]==0)break;
-
- if(i==c->entries){
- oggpack_write(opb,0,1); /* no unused entries */
- for(i=0;i<c->entries;i++)
- oggpack_write(opb,c->lengthlist[i]-1,5);
- }else{
- oggpack_write(opb,1,1); /* we have unused entries; thus we tag */
- for(i=0;i<c->entries;i++){
- if(c->lengthlist[i]==0){
- oggpack_write(opb,0,1);
- }else{
- oggpack_write(opb,1,1);
- oggpack_write(opb,c->lengthlist[i]-1,5);
- }
- }
- }
- }
-
- /* is the entry number the desired return value, or do we have a
- mapping? If we have a mapping, what type? */
- oggpack_write(opb,c->maptype,4);
- switch(c->maptype){
- case 0:
- /* no mapping */
- break;
- case 1:case 2:
- /* implicitly populated value mapping */
- /* explicitly populated value mapping */
-
- if(!c->quantlist){
- /* no quantlist? error */
- return(-1);
- }
-
- /* values that define the dequantization */
- oggpack_write(opb,c->q_min,32);
- oggpack_write(opb,c->q_delta,32);
- oggpack_write(opb,c->q_quant-1,4);
- oggpack_write(opb,c->q_sequencep,1);
-
- {
- int quantvals;
- switch(c->maptype){
- case 1:
- /* a single column of (c->entries/c->dim) quantized values for
- building a full value list algorithmically (square lattice) */
- quantvals=_book_maptype1_quantvals(c);
- break;
- case 2:
- /* every value (c->entries*c->dim total) specified explicitly */
- quantvals=c->entries*c->dim;
- break;
- default: /* NOT_REACHABLE */
- quantvals=-1;
- }
-
- /* quantized values */
- for(i=0;i<quantvals;i++)
- oggpack_write(opb,labs(c->quantlist[i]),c->q_quant);
-
- }
- break;
- default:
- /* error case; we don't have any other map types now */
- return(-1);
- }
-
- return(0);
-}
-
-/* unpacks a codebook from the packet buffer into the codebook struct,
- readies the codebook auxiliary structures for decode *************/
-static_codebook *vorbis_staticbook_unpack(oggpack_buffer *opb){
- long i,j;
- static_codebook *s=_ogg_calloc(1,sizeof(*s));
- s->allocedp=1;
-
- /* make sure alignment is correct */
- if(oggpack_read(opb,24)!=0x564342)goto _eofout;
-
- /* first the basic parameters */
- s->dim=oggpack_read(opb,16);
- s->entries=oggpack_read(opb,24);
- if(s->entries==-1)goto _eofout;
-
- if(ov_ilog(s->dim)+ov_ilog(s->entries)>24)goto _eofout;
-
- /* codeword ordering.... length ordered or unordered? */
- switch((int)oggpack_read(opb,1)){
- case 0:{
- long unused;
- /* allocated but unused entries? */
- unused=oggpack_read(opb,1);
- if((s->entries*(unused?1:5)+7)>>3>opb->storage-oggpack_bytes(opb))
- goto _eofout;
- /* unordered */
- s->lengthlist=_ogg_malloc(sizeof(*s->lengthlist)*s->entries);
-
- /* allocated but unused entries? */
- if(unused){
- /* yes, unused entries */
-
- for(i=0;i<s->entries;i++){
- if(oggpack_read(opb,1)){
- long num=oggpack_read(opb,5);
- if(num==-1)goto _eofout;
- s->lengthlist[i]=num+1;
- }else
- s->lengthlist[i]=0;
- }
- }else{
- /* all entries used; no tagging */
- for(i=0;i<s->entries;i++){
- long num=oggpack_read(opb,5);
- if(num==-1)goto _eofout;
- s->lengthlist[i]=num+1;
- }
- }
-
- break;
- }
- case 1:
- /* ordered */
- {
- long length=oggpack_read(opb,5)+1;
- if(length==0)goto _eofout;
- s->lengthlist=_ogg_malloc(sizeof(*s->lengthlist)*s->entries);
-
- for(i=0;i<s->entries;){
- long num=oggpack_read(opb,ov_ilog(s->entries-i));
- if(num==-1)goto _eofout;
- if(length>32 || num>s->entries-i ||
- (num>0 && (num-1)>>(length-1)>1)){
- goto _errout;
- }
- if(length>32)goto _errout;
- for(j=0;j<num;j++,i++)
- s->lengthlist[i]=length;
- length++;
- }
- }
- break;
- default:
- /* EOF */
- goto _eofout;
- }
-
- /* Do we have a mapping to unpack? */
- switch((s->maptype=oggpack_read(opb,4))){
- case 0:
- /* no mapping */
- break;
- case 1: case 2:
- /* implicitly populated value mapping */
- /* explicitly populated value mapping */
-
- s->q_min=oggpack_read(opb,32);
- s->q_delta=oggpack_read(opb,32);
- s->q_quant=oggpack_read(opb,4)+1;
- s->q_sequencep=oggpack_read(opb,1);
- if(s->q_sequencep==-1)goto _eofout;
-
- {
- int quantvals=0;
- switch(s->maptype){
- case 1:
- quantvals=(s->dim==0?0:_book_maptype1_quantvals(s));
- break;
- case 2:
- quantvals=s->entries*s->dim;
- break;
- }
-
- /* quantized values */
- if(((quantvals*s->q_quant+7)>>3)>opb->storage-oggpack_bytes(opb))
- goto _eofout;
- s->quantlist=_ogg_malloc(sizeof(*s->quantlist)*quantvals);
- for(i=0;i<quantvals;i++)
- s->quantlist[i]=oggpack_read(opb,s->q_quant);
-
- if(quantvals&&s->quantlist[quantvals-1]==-1)goto _eofout;
- }
- break;
- default:
- goto _errout;
- }
-
- /* all set */
- return(s);
-
- _errout:
- _eofout:
- vorbis_staticbook_destroy(s);
- return(NULL);
-}
-
-/* returns the number of bits ************************************************/
-int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b){
- if(a<0 || a>=book->c->entries)return(0);
- oggpack_write(b,book->codelist[a],book->c->lengthlist[a]);
- return(book->c->lengthlist[a]);
-}
-
-/* the 'eliminate the decode tree' optimization actually requires the
- codewords to be MSb first, not LSb. This is an annoying inelegancy
- (and one of the first places where carefully thought out design
- turned out to be wrong; Vorbis II and future Ogg codecs should go
- to an MSb bitpacker), but not actually the huge hit it appears to
- be. The first-stage decode table catches most words so that
- bitreverse is not in the main execution path. */
-
-static ogg_uint32_t bitreverse(ogg_uint32_t x){
- x= ((x>>16)&0x0000ffff) | ((x<<16)&0xffff0000);
- x= ((x>> 8)&0x00ff00ff) | ((x<< 8)&0xff00ff00);
- x= ((x>> 4)&0x0f0f0f0f) | ((x<< 4)&0xf0f0f0f0);
- x= ((x>> 2)&0x33333333) | ((x<< 2)&0xcccccccc);
- return((x>> 1)&0x55555555) | ((x<< 1)&0xaaaaaaaa);
-}
-
-STIN long decode_packed_entry_number(codebook *book, oggpack_buffer *b){
- int read=book->dec_maxlength;
- long lo,hi;
- long lok = oggpack_look(b,book->dec_firsttablen);
-
- if (lok >= 0) {
- long entry = book->dec_firsttable[lok];
- if(entry&0x80000000UL){
- lo=(entry>>15)&0x7fff;
- hi=book->used_entries-(entry&0x7fff);
- }else{
- oggpack_adv(b, book->dec_codelengths[entry-1]);
- return(entry-1);
- }
- }else{
- lo=0;
- hi=book->used_entries;
- }
-
- /* Single entry codebooks use a firsttablen of 1 and a
- dec_maxlength of 1. If a single-entry codebook gets here (due to
- failure to read one bit above), the next look attempt will also
- fail and we'll correctly kick out instead of trying to walk the
- underformed tree */
-
- lok = oggpack_look(b, read);
-
- while(lok<0 && read>1)
- lok = oggpack_look(b, --read);
- if(lok<0)return -1;
-
- /* bisect search for the codeword in the ordered list */
- {
- ogg_uint32_t testword=bitreverse((ogg_uint32_t)lok);
-
- while(hi-lo>1){
- long p=(hi-lo)>>1;
- long test=book->codelist[lo+p]>testword;
- lo+=p&(test-1);
- hi-=p&(-test);
- }
-
- if(book->dec_codelengths[lo]<=read){
- oggpack_adv(b, book->dec_codelengths[lo]);
- return(lo);
- }
- }
-
- oggpack_adv(b, read);
-
- return(-1);
-}
-
-/* Decode side is specced and easier, because we don't need to find
- matches using different criteria; we simply read and map. There are
- two things we need to do 'depending':
-
- We may need to support interleave. We don't really, but it's
- convenient to do it here rather than rebuild the vector later.
-
- Cascades may be additive or multiplicitive; this is not inherent in
- the codebook, but set in the code using the codebook. Like
- interleaving, it's easiest to do it here.
- addmul==0 -> declarative (set the value)
- addmul==1 -> additive
- addmul==2 -> multiplicitive */
-
-/* returns the [original, not compacted] entry number or -1 on eof *********/
-long vorbis_book_decode(codebook *book, oggpack_buffer *b){
- if(book->used_entries>0){
- long packed_entry=decode_packed_entry_number(book,b);
- if(packed_entry>=0)
- return(book->dec_index[packed_entry]);
- }
-
- /* if there's no dec_index, the codebook unpacking isn't collapsed */
- return(-1);
-}
-
-/* returns 0 on OK or -1 on eof *************************************/
-/* decode vector / dim granularity gaurding is done in the upper layer */
-long vorbis_book_decodevs_add(codebook *book,float *a,oggpack_buffer *b,int n){
- if(book->used_entries>0){
- int step=n/book->dim;
- long *entry = alloca(sizeof(*entry)*step);
- float **t = alloca(sizeof(*t)*step);
- int i,j,o;
-
- for (i = 0; i < step; i++) {
- entry[i]=decode_packed_entry_number(book,b);
- if(entry[i]==-1)return(-1);
- t[i] = book->valuelist+entry[i]*book->dim;
- }
- for(i=0,o=0;i<book->dim;i++,o+=step)
- for (j=0;j<step;j++)
- a[o+j]+=t[j][i];
- }
- return(0);
-}
-
-/* decode vector / dim granularity gaurding is done in the upper layer */
-long vorbis_book_decodev_add(codebook *book,float *a,oggpack_buffer *b,int n){
- if(book->used_entries>0){
- int i,j,entry;
- float *t;
-
- if(book->dim>8){
- for(i=0;i<n;){
- entry = decode_packed_entry_number(book,b);
- if(entry==-1)return(-1);
- t = book->valuelist+entry*book->dim;
- for (j=0;j<book->dim;)
- a[i++]+=t[j++];
- }
- }else{
- for(i=0;i<n;){
- entry = decode_packed_entry_number(book,b);
- if(entry==-1)return(-1);
- t = book->valuelist+entry*book->dim;
- j=0;
- switch((int)book->dim){
- case 8:
- a[i++]+=t[j++];
- case 7:
- a[i++]+=t[j++];
- case 6:
- a[i++]+=t[j++];
- case 5:
- a[i++]+=t[j++];
- case 4:
- a[i++]+=t[j++];
- case 3:
- a[i++]+=t[j++];
- case 2:
- a[i++]+=t[j++];
- case 1:
- a[i++]+=t[j++];
- case 0:
- break;
- }
- }
- }
- }
- return(0);
-}
-
-/* unlike the others, we guard against n not being an integer number
- of <dim> internally rather than in the upper layer (called only by
- floor0) */
-long vorbis_book_decodev_set(codebook *book,float *a,oggpack_buffer *b,int n){
- if(book->used_entries>0){
- int i,j,entry;
- float *t;
-
- for(i=0;i<n;){
- entry = decode_packed_entry_number(book,b);
- if(entry==-1)return(-1);
- t = book->valuelist+entry*book->dim;
- for (j=0;i<n && j<book->dim;){
- a[i++]=t[j++];
- }
- }
- }else{
- int i;
-
- for(i=0;i<n;){
- a[i++]=0.f;
- }
- }
- return(0);
-}
-
-long vorbis_book_decodevv_add(codebook *book,float **a,long offset,int ch,
- oggpack_buffer *b,int n){
-
- long i,j,entry;
- int chptr=0;
- if(book->used_entries>0){
- for(i=offset/ch;i<(offset+n)/ch;){
- entry = decode_packed_entry_number(book,b);
- if(entry==-1)return(-1);
- {
- const float *t = book->valuelist+entry*book->dim;
- for (j=0;j<book->dim;j++){
- a[chptr++][i]+=t[j];
- if(chptr==ch){
- chptr=0;
- i++;
- }
- }
- }
- }
- }
- return(0);
-}
diff --git a/drivers/vorbis/codebook.h b/drivers/vorbis/codebook.h
deleted file mode 100644
index 537d6c12d3..0000000000
--- a/drivers/vorbis/codebook.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: basic shared codebook operations
- last mod: $Id: codebook.h 19457 2015-03-03 00:15:29Z giles $
-
- ********************************************************************/
-
-#ifndef _V_CODEBOOK_H_
-#define _V_CODEBOOK_H_
-
-#include <ogg/ogg.h>
-
-/* This structure encapsulates huffman and VQ style encoding books; it
- doesn't do anything specific to either.
-
- valuelist/quantlist are nonNULL (and q_* significant) only if
- there's entry->value mapping to be done.
-
- If encode-side mapping must be done (and thus the entry needs to be
- hunted), the auxiliary encode pointer will point to a decision
- tree. This is true of both VQ and huffman, but is mostly useful
- with VQ.
-
-*/
-
-typedef struct static_codebook{
- long dim; /* codebook dimensions (elements per vector) */
- long entries; /* codebook entries */
- char *lengthlist; /* codeword lengths in bits */
-
- /* mapping ***************************************************************/
- int maptype; /* 0=none
- 1=implicitly populated values from map column
- 2=listed arbitrary values */
-
- /* The below does a linear, single monotonic sequence mapping. */
- long q_min; /* packed 32 bit float; quant value 0 maps to minval */
- long q_delta; /* packed 32 bit float; val 1 - val 0 == delta */
- int q_quant; /* bits: 0 < quant <= 16 */
- int q_sequencep; /* bitflag */
-
- long *quantlist; /* map == 1: (int)(entries^(1/dim)) element column map
- map == 2: list of dim*entries quantized entry vals
- */
- int allocedp;
-} static_codebook;
-
-typedef struct codebook{
- long dim; /* codebook dimensions (elements per vector) */
- long entries; /* codebook entries */
- long used_entries; /* populated codebook entries */
- const static_codebook *c;
-
- /* for encode, the below are entry-ordered, fully populated */
- /* for decode, the below are ordered by bitreversed codeword and only
- used entries are populated */
- float *valuelist; /* list of dim*entries actual entry values */
- ogg_uint32_t *codelist; /* list of bitstream codewords for each entry */
-
- int *dec_index; /* only used if sparseness collapsed */
- char *dec_codelengths;
- ogg_uint32_t *dec_firsttable;
- int dec_firsttablen;
- int dec_maxlength;
-
- /* The current encoder uses only centered, integer-only lattice books. */
- int quantvals;
- int minval;
- int delta;
-} codebook;
-
-extern void vorbis_staticbook_destroy(static_codebook *b);
-extern int vorbis_book_init_encode(codebook *dest,const static_codebook *source);
-extern int vorbis_book_init_decode(codebook *dest,const static_codebook *source);
-extern void vorbis_book_clear(codebook *b);
-
-extern float *_book_unquantize(const static_codebook *b,int n,int *map);
-extern float *_book_logdist(const static_codebook *b,float *vals);
-extern float _float32_unpack(long val);
-extern long _float32_pack(float val);
-extern int _best(codebook *book, float *a, int step);
-extern long _book_maptype1_quantvals(const static_codebook *b);
-
-extern int vorbis_book_besterror(codebook *book,float *a,int step,int addmul);
-extern long vorbis_book_codeword(codebook *book,int entry);
-extern long vorbis_book_codelen(codebook *book,int entry);
-
-
-
-extern int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *b);
-extern static_codebook *vorbis_staticbook_unpack(oggpack_buffer *b);
-
-extern int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b);
-
-extern long vorbis_book_decode(codebook *book, oggpack_buffer *b);
-extern long vorbis_book_decodevs_add(codebook *book, float *a,
- oggpack_buffer *b,int n);
-extern long vorbis_book_decodev_set(codebook *book, float *a,
- oggpack_buffer *b,int n);
-extern long vorbis_book_decodev_add(codebook *book, float *a,
- oggpack_buffer *b,int n);
-extern long vorbis_book_decodevv_add(codebook *book, float **a,
- long off,int ch,
- oggpack_buffer *b,int n);
-
-
-
-#endif
diff --git a/drivers/vorbis/codec.h b/drivers/vorbis/codec.h
deleted file mode 100644
index 999aa33510..0000000000
--- a/drivers/vorbis/codec.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/********************************************************************
- * *
- * 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 Xiph.Org Foundation http://www.xiph.org/ *
-
- ********************************************************************
-
- function: libvorbis codec headers
- last mod: $Id: codec.h 17021 2010-03-24 09:29:41Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _vorbis_codec_h_
-#define _vorbis_codec_h_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#include <ogg/ogg.h>
-
-typedef struct vorbis_info{
- int version;
- int channels;
- long rate;
-
- /* The below bitrate declarations are *hints*.
- Combinations of the three values carry the following implications:
-
- all three set to the same value:
- implies a fixed rate bitstream
- only nominal set:
- implies a VBR stream that averages the nominal bitrate. No hard
- upper/lower limit
- upper and or lower set:
- implies a VBR bitstream that obeys the bitrate limits. nominal
- may also be set to give a nominal rate.
- none set:
- the coder does not care to speculate.
- */
-
- long bitrate_upper;
- long bitrate_nominal;
- long bitrate_lower;
- long bitrate_window;
-
- void *codec_setup;
-} vorbis_info;
-
-/* vorbis_dsp_state buffers the current vorbis audio
- analysis/synthesis state. The DSP state belongs to a specific
- logical bitstream ****************************************************/
-typedef struct vorbis_dsp_state{
- int analysisp;
- vorbis_info *vi;
-
- float **pcm;
- float **pcmret;
- int pcm_storage;
- int pcm_current;
- int pcm_returned;
-
- int preextrapolate;
- int eofflag;
-
- long lW;
- long W;
- long nW;
- long centerW;
-
- ogg_int64_t granulepos;
- ogg_int64_t sequence;
-
- ogg_int64_t glue_bits;
- ogg_int64_t time_bits;
- ogg_int64_t floor_bits;
- ogg_int64_t res_bits;
-
- void *backend_state;
-} vorbis_dsp_state;
-
-typedef struct vorbis_block{
- /* necessary stream state for linking to the framing abstraction */
- float **pcm; /* this is a pointer into local storage */
- oggpack_buffer opb;
-
- long lW;
- long W;
- long nW;
- int pcmend;
- int mode;
-
- int eofflag;
- ogg_int64_t granulepos;
- ogg_int64_t sequence;
- vorbis_dsp_state *vd; /* For read-only access of configuration */
-
- /* local storage to avoid remallocing; it's up to the mapping to
- structure it */
- void *localstore;
- long localtop;
- long localalloc;
- long totaluse;
- struct alloc_chain *reap;
-
- /* bitmetrics for the frame */
- long glue_bits;
- long time_bits;
- long floor_bits;
- long res_bits;
-
- void *internal;
-
-} vorbis_block;
-
-/* vorbis_block is a single block of data to be processed as part of
-the analysis/synthesis stream; it belongs to a specific logical
-bitstream, but is independent from other vorbis_blocks belonging to
-that logical bitstream. *************************************************/
-
-struct alloc_chain{
- void *ptr;
- struct alloc_chain *next;
-};
-
-/* vorbis_info contains all the setup information specific to the
- specific compression/decompression mode in progress (eg,
- psychoacoustic settings, channel setup, options, codebook
- etc). vorbis_info and substructures are in backends.h.
-*********************************************************************/
-
-/* the comments are not part of vorbis_info so that vorbis_info can be
- static storage */
-typedef struct vorbis_comment{
- /* unlimited user comment fields. libvorbis writes 'libvorbis'
- whatever vendor is set to in encode */
- char **user_comments;
- int *comment_lengths;
- int comments;
- char *vendor;
-
-} vorbis_comment;
-
-
-/* libvorbis encodes in two abstraction layers; first we perform DSP
- and produce a packet (see docs/analysis.txt). The packet is then
- coded into a framed OggSquish bitstream by the second layer (see
- docs/framing.txt). Decode is the reverse process; we sync/frame
- the bitstream and extract individual packets, then decode the
- packet back into PCM audio.
-
- The extra framing/packetizing is used in streaming formats, such as
- files. Over the net (such as with UDP), the framing and
- packetization aren't necessary as they're provided by the transport
- and the streaming layer is not used */
-
-/* Vorbis PRIMITIVES: general ***************************************/
-
-extern void vorbis_info_init(vorbis_info *vi);
-extern void vorbis_info_clear(vorbis_info *vi);
-extern int vorbis_info_blocksize(vorbis_info *vi,int zo);
-extern void vorbis_comment_init(vorbis_comment *vc);
-extern void vorbis_comment_add(vorbis_comment *vc, const char *comment);
-extern void vorbis_comment_add_tag(vorbis_comment *vc,
- const char *tag, const char *contents);
-extern char *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count);
-extern int vorbis_comment_query_count(vorbis_comment *vc, const char *tag);
-extern void vorbis_comment_clear(vorbis_comment *vc);
-
-extern int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
-extern int vorbis_block_clear(vorbis_block *vb);
-extern void vorbis_dsp_clear(vorbis_dsp_state *v);
-extern double vorbis_granule_time(vorbis_dsp_state *v,
- ogg_int64_t granulepos);
-
-extern const char *vorbis_version_string(void);
-
-/* Vorbis PRIMITIVES: analysis/DSP layer ****************************/
-
-extern int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi);
-extern int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op);
-extern int vorbis_analysis_headerout(vorbis_dsp_state *v,
- vorbis_comment *vc,
- ogg_packet *op,
- ogg_packet *op_comm,
- ogg_packet *op_code);
-extern float **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals);
-extern int vorbis_analysis_wrote(vorbis_dsp_state *v,int vals);
-extern int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb);
-extern int vorbis_analysis(vorbis_block *vb,ogg_packet *op);
-
-extern int vorbis_bitrate_addblock(vorbis_block *vb);
-extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,
- ogg_packet *op);
-
-/* Vorbis PRIMITIVES: synthesis layer *******************************/
-extern int vorbis_synthesis_idheader(ogg_packet *op);
-extern int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,
- ogg_packet *op);
-
-extern int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi);
-extern int vorbis_synthesis_restart(vorbis_dsp_state *v);
-extern int vorbis_synthesis(vorbis_block *vb,ogg_packet *op);
-extern int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op);
-extern int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb);
-extern int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm);
-extern int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm);
-extern int vorbis_synthesis_read(vorbis_dsp_state *v,int samples);
-extern long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
-
-extern int vorbis_synthesis_halfrate(vorbis_info *v,int flag);
-extern int vorbis_synthesis_halfrate_p(vorbis_info *v);
-
-/* Vorbis ERRORS and return codes ***********************************/
-
-#define OV_FALSE -1
-#define OV_EOF -2
-#define OV_HOLE -3
-
-#define OV_EREAD -128
-#define OV_EFAULT -129
-#define OV_EIMPL -130
-#define OV_EINVAL -131
-#define OV_ENOTVORBIS -132
-#define OV_EBADHEADER -133
-#define OV_EVERSION -134
-#define OV_ENOTAUDIO -135
-#define OV_EBADPACKET -136
-#define OV_EBADLINK -137
-#define OV_ENOSEEK -138
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
-
diff --git a/drivers/vorbis/codec_internal.h b/drivers/vorbis/codec_internal.h
deleted file mode 100644
index de1bccaedf..0000000000
--- a/drivers/vorbis/codec_internal.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: libvorbis codec headers
- last mod: $Id: codec_internal.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_CODECI_H_
-#define _V_CODECI_H_
-
-#include "envelope.h"
-#include "codebook.h"
-
-#define BLOCKTYPE_IMPULSE 0
-#define BLOCKTYPE_PADDING 1
-#define BLOCKTYPE_TRANSITION 0
-#define BLOCKTYPE_LONG 1
-
-#define PACKETBLOBS 15
-
-typedef struct vorbis_block_internal{
- float **pcmdelay; /* this is a pointer into local storage */
- float ampmax;
- int blocktype;
-
- oggpack_buffer *packetblob[PACKETBLOBS]; /* initialized, must be freed;
- blob [PACKETBLOBS/2] points to
- the oggpack_buffer in the
- main vorbis_block */
-} vorbis_block_internal;
-
-typedef void vorbis_look_floor;
-typedef void vorbis_look_residue;
-typedef void vorbis_look_transform;
-
-/* mode ************************************************************/
-typedef struct {
- int blockflag;
- int windowtype;
- int transformtype;
- int mapping;
-} vorbis_info_mode;
-
-typedef void vorbis_info_floor;
-typedef void vorbis_info_residue;
-typedef void vorbis_info_mapping;
-
-#include "psy.h"
-#include "bitrate.h"
-
-typedef struct private_state {
- /* local lookup storage */
- envelope_lookup *ve; /* envelope lookup */
- int window[2];
- vorbis_look_transform **transform[2]; /* block, type */
- drft_lookup fft_look[2];
-
- int modebits;
- vorbis_look_floor **flr;
- vorbis_look_residue **residue;
- vorbis_look_psy *psy;
- vorbis_look_psy_global *psy_g_look;
-
- /* local storage, only used on the encoding side. This way the
- application does not need to worry about freeing some packets'
- memory and not others'; packet storage is always tracked.
- Cleared next call to a _dsp_ function */
- unsigned char *header;
- unsigned char *header1;
- unsigned char *header2;
-
- bitrate_manager_state bms;
-
- ogg_int64_t sample_count;
-} private_state;
-
-/* codec_setup_info contains all the setup information specific to the
- specific compression/decompression mode in progress (eg,
- psychoacoustic settings, channel setup, options, codebook
- etc).
-*********************************************************************/
-
-#include "highlevel.h"
-typedef struct codec_setup_info {
-
- /* Vorbis supports only short and long blocks, but allows the
- encoder to choose the sizes */
-
- long blocksizes[2];
-
- /* modes are the primary means of supporting on-the-fly different
- blocksizes, different channel mappings (LR or M/A),
- different residue backends, etc. Each mode consists of a
- blocksize flag and a mapping (along with the mapping setup */
-
- int modes;
- int maps;
- int floors;
- int residues;
- int books;
- int psys; /* encode only */
-
- vorbis_info_mode *mode_param[64];
- int map_type[64];
- vorbis_info_mapping *map_param[64];
- int floor_type[64];
- vorbis_info_floor *floor_param[64];
- int residue_type[64];
- vorbis_info_residue *residue_param[64];
- static_codebook *book_param[256];
- codebook *fullbooks;
-
- vorbis_info_psy *psy_param[4]; /* encode only */
- vorbis_info_psy_global psy_g_param;
-
- bitrate_manager_info bi;
- highlevel_encode_setup hi; /* used only by vorbisenc.c. It's a
- highly redundant structure, but
- improves clarity of program flow. */
- int halfrate_flag; /* painless downsample for decode */
-} codec_setup_info;
-
-extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi);
-extern void _vp_global_free(vorbis_look_psy_global *look);
-
-
-
-typedef struct {
- int sorted_index[VIF_POSIT+2];
- int forward_index[VIF_POSIT+2];
- int reverse_index[VIF_POSIT+2];
-
- int hineighbor[VIF_POSIT];
- int loneighbor[VIF_POSIT];
- int posts;
-
- int n;
- int quant_q;
- vorbis_info_floor1 *vi;
-
- long phrasebits;
- long postbits;
- long frames;
-} vorbis_look_floor1;
-
-
-
-extern int *floor1_fit(vorbis_block *vb,vorbis_look_floor1 *look,
- const float *logmdct, /* in */
- const float *logmask);
-extern int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look,
- int *A,int *B,
- int del);
-extern int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
- vorbis_look_floor1 *look,
- int *post,int *ilogmask);
-#endif
diff --git a/drivers/vorbis/envelope.c b/drivers/vorbis/envelope.c
deleted file mode 100644
index 010c66e2d6..0000000000
--- a/drivers/vorbis/envelope.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: PCM data envelope analysis
- last mod: $Id: envelope.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-
-#include "os.h"
-#include "scales.h"
-#include "envelope.h"
-#include "mdct.h"
-#include "misc.h"
-
-void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi){
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy_global *gi=&ci->psy_g_param;
- int ch=vi->channels;
- int i,j;
- int n=e->winlength=128;
- e->searchstep=64; /* not random */
-
- e->minenergy=gi->preecho_minenergy;
- e->ch=ch;
- e->storage=128;
- e->cursor=ci->blocksizes[1]/2;
- e->mdct_win=_ogg_calloc(n,sizeof(*e->mdct_win));
- mdct_init(&e->mdct,n);
-
- for(i=0;i<n;i++){
- e->mdct_win[i]=sin(i/(n-1.)*M_PI);
- e->mdct_win[i]*=e->mdct_win[i];
- }
-
- /* magic follows */
- e->band[0].begin=2; e->band[0].end=4;
- e->band[1].begin=4; e->band[1].end=5;
- e->band[2].begin=6; e->band[2].end=6;
- e->band[3].begin=9; e->band[3].end=8;
- e->band[4].begin=13; e->band[4].end=8;
- e->band[5].begin=17; e->band[5].end=8;
- e->band[6].begin=22; e->band[6].end=8;
-
- for(j=0;j<VE_BANDS;j++){
- n=e->band[j].end;
- e->band[j].window=_ogg_malloc(n*sizeof(*e->band[0].window));
- for(i=0;i<n;i++){
- e->band[j].window[i]=sin((i+.5)/n*M_PI);
- e->band[j].total+=e->band[j].window[i];
- }
- e->band[j].total=1./e->band[j].total;
- }
-
- e->filter=_ogg_calloc(VE_BANDS*ch,sizeof(*e->filter));
- e->mark=_ogg_calloc(e->storage,sizeof(*e->mark));
-
-}
-
-void _ve_envelope_clear(envelope_lookup *e){
- int i;
- mdct_clear(&e->mdct);
- for(i=0;i<VE_BANDS;i++)
- _ogg_free(e->band[i].window);
- _ogg_free(e->mdct_win);
- _ogg_free(e->filter);
- _ogg_free(e->mark);
- memset(e,0,sizeof(*e));
-}
-
-/* fairly straight threshhold-by-band based until we find something
- that works better and isn't patented. */
-
-static int _ve_amp(envelope_lookup *ve,
- vorbis_info_psy_global *gi,
- float *data,
- envelope_band *bands,
- envelope_filter_state *filters){
- long n=ve->winlength;
- int ret=0;
- long i,j;
- float decay;
-
- /* we want to have a 'minimum bar' for energy, else we're just
- basing blocks on quantization noise that outweighs the signal
- itself (for low power signals) */
-
- float minV=ve->minenergy;
- float *vec=alloca(n*sizeof(*vec));
-
- /* stretch is used to gradually lengthen the number of windows
- considered prevoius-to-potential-trigger */
- int stretch=max(VE_MINSTRETCH,ve->stretch/2);
- float penalty=gi->stretch_penalty-(ve->stretch/2-VE_MINSTRETCH);
- if(penalty<0.f)penalty=0.f;
- if(penalty>gi->stretch_penalty)penalty=gi->stretch_penalty;
-
- /*_analysis_output_always("lpcm",seq2,data,n,0,0,
- totalshift+pos*ve->searchstep);*/
-
- /* window and transform */
- for(i=0;i<n;i++)
- vec[i]=data[i]*ve->mdct_win[i];
- mdct_forward(&ve->mdct,vec,vec);
-
- /*_analysis_output_always("mdct",seq2,vec,n/2,0,1,0); */
-
- /* near-DC spreading function; this has nothing to do with
- psychoacoustics, just sidelobe leakage and window size */
- {
- float temp=vec[0]*vec[0]+.7*vec[1]*vec[1]+.2*vec[2]*vec[2];
- int ptr=filters->nearptr;
-
- /* the accumulation is regularly refreshed from scratch to avoid
- floating point creep */
- if(ptr==0){
- decay=filters->nearDC_acc=filters->nearDC_partialacc+temp;
- filters->nearDC_partialacc=temp;
- }else{
- decay=filters->nearDC_acc+=temp;
- filters->nearDC_partialacc+=temp;
- }
- filters->nearDC_acc-=filters->nearDC[ptr];
- filters->nearDC[ptr]=temp;
-
- decay*=(1./(VE_NEARDC+1));
- filters->nearptr++;
- if(filters->nearptr>=VE_NEARDC)filters->nearptr=0;
- decay=todB(&decay)*.5-15.f;
- }
-
- /* perform spreading and limiting, also smooth the spectrum. yes,
- the MDCT results in all real coefficients, but it still *behaves*
- like real/imaginary pairs */
- for(i=0;i<n/2;i+=2){
- float val=vec[i]*vec[i]+vec[i+1]*vec[i+1];
- val=todB(&val)*.5f;
- if(val<decay)val=decay;
- if(val<minV)val=minV;
- vec[i>>1]=val;
- decay-=8.;
- }
-
- /*_analysis_output_always("spread",seq2++,vec,n/4,0,0,0);*/
-
- /* perform preecho/postecho triggering by band */
- for(j=0;j<VE_BANDS;j++){
- float acc=0.;
- float valmax,valmin;
-
- /* accumulate amplitude */
- for(i=0;i<bands[j].end;i++)
- acc+=vec[i+bands[j].begin]*bands[j].window[i];
-
- acc*=bands[j].total;
-
- /* convert amplitude to delta */
- {
- int p,this=filters[j].ampptr;
- float postmax,postmin,premax=-99999.f,premin=99999.f;
-
- p=this;
- p--;
- if(p<0)p+=VE_AMP;
- postmax=max(acc,filters[j].ampbuf[p]);
- postmin=min(acc,filters[j].ampbuf[p]);
-
- for(i=0;i<stretch;i++){
- p--;
- if(p<0)p+=VE_AMP;
- premax=max(premax,filters[j].ampbuf[p]);
- premin=min(premin,filters[j].ampbuf[p]);
- }
-
- valmin=postmin-premin;
- valmax=postmax-premax;
-
- /*filters[j].markers[pos]=valmax;*/
- filters[j].ampbuf[this]=acc;
- filters[j].ampptr++;
- if(filters[j].ampptr>=VE_AMP)filters[j].ampptr=0;
- }
-
- /* look at min/max, decide trigger */
- if(valmax>gi->preecho_thresh[j]+penalty){
- ret|=1;
- ret|=4;
- }
- if(valmin<gi->postecho_thresh[j]-penalty)ret|=2;
- }
-
- return(ret);
-}
-
-#if 0
-static int seq=0;
-static ogg_int64_t totalshift=-1024;
-#endif
-
-long _ve_envelope_search(vorbis_dsp_state *v){
- vorbis_info *vi=v->vi;
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy_global *gi=&ci->psy_g_param;
- envelope_lookup *ve=((private_state *)(v->backend_state))->ve;
- long i,j;
-
- int first=ve->current/ve->searchstep;
- int last=v->pcm_current/ve->searchstep-VE_WIN;
- if(first<0)first=0;
-
- /* make sure we have enough storage to match the PCM */
- if(last+VE_WIN+VE_POST>ve->storage){
- ve->storage=last+VE_WIN+VE_POST; /* be sure */
- ve->mark=_ogg_realloc(ve->mark,ve->storage*sizeof(*ve->mark));
- }
-
- for(j=first;j<last;j++){
- int ret=0;
-
- ve->stretch++;
- if(ve->stretch>VE_MAXSTRETCH*2)
- ve->stretch=VE_MAXSTRETCH*2;
-
- for(i=0;i<ve->ch;i++){
- float *pcm=v->pcm[i]+ve->searchstep*(j);
- ret|=_ve_amp(ve,gi,pcm,ve->band,ve->filter+i*VE_BANDS);
- }
-
- ve->mark[j+VE_POST]=0;
- if(ret&1){
- ve->mark[j]=1;
- ve->mark[j+1]=1;
- }
-
- if(ret&2){
- ve->mark[j]=1;
- if(j>0)ve->mark[j-1]=1;
- }
-
- if(ret&4)ve->stretch=-1;
- }
-
- ve->current=last*ve->searchstep;
-
- {
- long centerW=v->centerW;
- long testW=
- centerW+
- ci->blocksizes[v->W]/4+
- ci->blocksizes[1]/2+
- ci->blocksizes[0]/4;
-
- j=ve->cursor;
-
- while(j<ve->current-(ve->searchstep)){/* account for postecho
- working back one window */
- if(j>=testW)return(1);
-
- ve->cursor=j;
-
- if(ve->mark[j/ve->searchstep]){
- if(j>centerW){
-
-#if 0
- if(j>ve->curmark){
- float *marker=alloca(v->pcm_current*sizeof(*marker));
- int l,m;
- memset(marker,0,sizeof(*marker)*v->pcm_current);
- fprintf(stderr,"mark! seq=%d, cursor:%fs time:%fs\n",
- seq,
- (totalshift+ve->cursor)/44100.,
- (totalshift+j)/44100.);
- _analysis_output_always("pcmL",seq,v->pcm[0],v->pcm_current,0,0,totalshift);
- _analysis_output_always("pcmR",seq,v->pcm[1],v->pcm_current,0,0,totalshift);
-
- _analysis_output_always("markL",seq,v->pcm[0],j,0,0,totalshift);
- _analysis_output_always("markR",seq,v->pcm[1],j,0,0,totalshift);
-
- for(m=0;m<VE_BANDS;m++){
- char buf[80];
- sprintf(buf,"delL%d",m);
- for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->filter[m].markers[l]*.1;
- _analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift);
- }
-
- for(m=0;m<VE_BANDS;m++){
- char buf[80];
- sprintf(buf,"delR%d",m);
- for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->filter[m+VE_BANDS].markers[l]*.1;
- _analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift);
- }
-
- for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->mark[l]*.4;
- _analysis_output_always("mark",seq,marker,v->pcm_current,0,0,totalshift);
-
-
- seq++;
-
- }
-#endif
-
- ve->curmark=j;
- if(j>=testW)return(1);
- return(0);
- }
- }
- j+=ve->searchstep;
- }
- }
-
- return(-1);
-}
-
-int _ve_envelope_mark(vorbis_dsp_state *v){
- envelope_lookup *ve=((private_state *)(v->backend_state))->ve;
- vorbis_info *vi=v->vi;
- codec_setup_info *ci=vi->codec_setup;
- long centerW=v->centerW;
- long beginW=centerW-ci->blocksizes[v->W]/4;
- long endW=centerW+ci->blocksizes[v->W]/4;
- if(v->W){
- beginW-=ci->blocksizes[v->lW]/4;
- endW+=ci->blocksizes[v->nW]/4;
- }else{
- beginW-=ci->blocksizes[0]/4;
- endW+=ci->blocksizes[0]/4;
- }
-
- if(ve->curmark>=beginW && ve->curmark<endW)return(1);
- {
- long first=beginW/ve->searchstep;
- long last=endW/ve->searchstep;
- long i;
- for(i=first;i<last;i++)
- if(ve->mark[i])return(1);
- }
- return(0);
-}
-
-void _ve_envelope_shift(envelope_lookup *e,long shift){
- int smallsize=e->current/e->searchstep+VE_POST; /* adjust for placing marks
- ahead of ve->current */
- int smallshift=shift/e->searchstep;
-
- memmove(e->mark,e->mark+smallshift,(smallsize-smallshift)*sizeof(*e->mark));
-
-#if 0
- for(i=0;i<VE_BANDS*e->ch;i++)
- memmove(e->filter[i].markers,
- e->filter[i].markers+smallshift,
- (1024-smallshift)*sizeof(*(*e->filter).markers));
- totalshift+=shift;
-#endif
-
- e->current-=shift;
- if(e->curmark>=0)
- e->curmark-=shift;
- e->cursor-=shift;
-}
diff --git a/drivers/vorbis/envelope.h b/drivers/vorbis/envelope.h
deleted file mode 100644
index fd15fb32a7..0000000000
--- a/drivers/vorbis/envelope.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: PCM data envelope analysis and manipulation
- last mod: $Id: envelope.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_ENVELOPE_
-#define _V_ENVELOPE_
-
-#include "mdct.h"
-
-#define VE_PRE 16
-#define VE_WIN 4
-#define VE_POST 2
-#define VE_AMP (VE_PRE+VE_POST-1)
-
-#define VE_BANDS 7
-#define VE_NEARDC 15
-
-#define VE_MINSTRETCH 2 /* a bit less than short block */
-#define VE_MAXSTRETCH 12 /* one-third full block */
-
-typedef struct {
- float ampbuf[VE_AMP];
- int ampptr;
-
- float nearDC[VE_NEARDC];
- float nearDC_acc;
- float nearDC_partialacc;
- int nearptr;
-
-} envelope_filter_state;
-
-typedef struct {
- int begin;
- int end;
- float *window;
- float total;
-} envelope_band;
-
-typedef struct {
- int ch;
- int winlength;
- int searchstep;
- float minenergy;
-
- mdct_lookup mdct;
- float *mdct_win;
-
- envelope_band band[VE_BANDS];
- envelope_filter_state *filter;
- int stretch;
-
- int *mark;
-
- long storage;
- long current;
- long curmark;
- long cursor;
-} envelope_lookup;
-
-extern void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi);
-extern void _ve_envelope_clear(envelope_lookup *e);
-extern long _ve_envelope_search(vorbis_dsp_state *v);
-extern void _ve_envelope_shift(envelope_lookup *e,long shift);
-extern int _ve_envelope_mark(vorbis_dsp_state *v);
-
-
-#endif
diff --git a/drivers/vorbis/floor0.c b/drivers/vorbis/floor0.c
deleted file mode 100644
index 213cce4ec8..0000000000
--- a/drivers/vorbis/floor0.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: floor backend 0 implementation
- last mod: $Id: floor0.c 19457 2015-03-03 00:15:29Z giles $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "lpc.h"
-#include "lsp.h"
-#include "codebook.h"
-#include "scales.h"
-#include "misc.h"
-#include "os.h"
-
-#include "misc.h"
-#include <stdio.h>
-
-typedef struct {
- int ln;
- int m;
- int **linearmap;
- int n[2];
-
- vorbis_info_floor0 *vi;
-
- long bits;
- long frames;
-} vorbis_look_floor0;
-
-
-/***********************************************/
-
-static void floor0_free_info(vorbis_info_floor *i){
- vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
- if(info){
- memset(info,0,sizeof(*info));
- _ogg_free(info);
- }
-}
-
-static void floor0_free_look(vorbis_look_floor *i){
- vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
- if(look){
-
- if(look->linearmap){
-
- if(look->linearmap[0])_ogg_free(look->linearmap[0]);
- if(look->linearmap[1])_ogg_free(look->linearmap[1]);
-
- _ogg_free(look->linearmap);
- }
- memset(look,0,sizeof(*look));
- _ogg_free(look);
- }
-}
-
-static vorbis_info_floor *floor0_unpack (vorbis_info *vi,oggpack_buffer *opb){
- codec_setup_info *ci=vi->codec_setup;
- int j;
-
- vorbis_info_floor0 *info=_ogg_malloc(sizeof(*info));
- info->order=oggpack_read(opb,8);
- info->rate=oggpack_read(opb,16);
- info->barkmap=oggpack_read(opb,16);
- info->ampbits=oggpack_read(opb,6);
- info->ampdB=oggpack_read(opb,8);
- info->numbooks=oggpack_read(opb,4)+1;
-
- if(info->order<1)goto err_out;
- if(info->rate<1)goto err_out;
- if(info->barkmap<1)goto err_out;
- if(info->numbooks<1)goto err_out;
-
- for(j=0;j<info->numbooks;j++){
- info->books[j]=oggpack_read(opb,8);
- if(info->books[j]<0 || info->books[j]>=ci->books)goto err_out;
- if(ci->book_param[info->books[j]]->maptype==0)goto err_out;
- if(ci->book_param[info->books[j]]->dim<1)goto err_out;
- }
- return(info);
-
- err_out:
- floor0_free_info(info);
- return(NULL);
-}
-
-/* initialize Bark scale and normalization lookups. We could do this
- with static tables, but Vorbis allows a number of possible
- combinations, so it's best to do it computationally.
-
- The below is authoritative in terms of defining scale mapping.
- Note that the scale depends on the sampling rate as well as the
- linear block and mapping sizes */
-
-static void floor0_map_lazy_init(vorbis_block *vb,
- vorbis_info_floor *infoX,
- vorbis_look_floor0 *look){
- if(!look->linearmap[vb->W]){
- vorbis_dsp_state *vd=vb->vd;
- vorbis_info *vi=vd->vi;
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_floor0 *info=(vorbis_info_floor0 *)infoX;
- int W=vb->W;
- int n=ci->blocksizes[W]/2,j;
-
- /* we choose a scaling constant so that:
- floor(bark(rate/2-1)*C)=mapped-1
- floor(bark(rate/2)*C)=mapped */
- float scale=look->ln/toBARK(info->rate/2.f);
-
- /* the mapping from a linear scale to a smaller bark scale is
- straightforward. We do *not* make sure that the linear mapping
- does not skip bark-scale bins; the decoder simply skips them and
- the encoder may do what it wishes in filling them. They're
- necessary in some mapping combinations to keep the scale spacing
- accurate */
- look->linearmap[W]=_ogg_malloc((n+1)*sizeof(**look->linearmap));
- for(j=0;j<n;j++){
- int val=floor( toBARK((info->rate/2.f)/n*j)
- *scale); /* bark numbers represent band edges */
- if(val>=look->ln)val=look->ln-1; /* guard against the approximation */
- look->linearmap[W][j]=val;
- }
- look->linearmap[W][j]=-1;
- look->n[W]=n;
- }
-}
-
-static vorbis_look_floor *floor0_look(vorbis_dsp_state *vd,
- vorbis_info_floor *i){
- vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
- vorbis_look_floor0 *look=_ogg_calloc(1,sizeof(*look));
-
- (void)vd;
-
- look->m=info->order;
- look->ln=info->barkmap;
- look->vi=info;
-
- look->linearmap=_ogg_calloc(2,sizeof(*look->linearmap));
-
- return look;
-}
-
-static void *floor0_inverse1(vorbis_block *vb,vorbis_look_floor *i){
- vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
- vorbis_info_floor0 *info=look->vi;
- int j,k;
-
- int ampraw=oggpack_read(&vb->opb,info->ampbits);
- if(ampraw>0){ /* also handles the -1 out of data case */
- long maxval=(1<<info->ampbits)-1;
- float amp=(float)ampraw/maxval*info->ampdB;
- int booknum=oggpack_read(&vb->opb,ov_ilog(info->numbooks));
-
- if(booknum!=-1 && booknum<info->numbooks){ /* be paranoid */
- codec_setup_info *ci=vb->vd->vi->codec_setup;
- codebook *b=ci->fullbooks+info->books[booknum];
- float last=0.f;
-
- /* the additional b->dim is a guard against any possible stack
- smash; b->dim is provably more than we can overflow the
- vector */
- float *lsp=_vorbis_block_alloc(vb,sizeof(*lsp)*(look->m+b->dim+1));
-
- if(vorbis_book_decodev_set(b,lsp,&vb->opb,look->m)==-1)goto eop;
- for(j=0;j<look->m;){
- for(k=0;j<look->m && k<b->dim;k++,j++)lsp[j]+=last;
- last=lsp[j-1];
- }
-
- lsp[look->m]=amp;
- return(lsp);
- }
- }
- eop:
- return(NULL);
-}
-
-static int floor0_inverse2(vorbis_block *vb,vorbis_look_floor *i,
- void *memo,float *out){
- vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
- vorbis_info_floor0 *info=look->vi;
-
- floor0_map_lazy_init(vb,info,look);
-
- if(memo){
- float *lsp=(float *)memo;
- float amp=lsp[look->m];
-
- /* take the coefficients back to a spectral envelope curve */
- vorbis_lsp_to_curve(out,
- look->linearmap[vb->W],
- look->n[vb->W],
- look->ln,
- lsp,look->m,amp,(float)info->ampdB);
- return(1);
- }
- memset(out,0,sizeof(*out)*look->n[vb->W]);
- return(0);
-}
-
-/* export hooks */
-const vorbis_func_floor floor0_exportbundle={
- NULL,&floor0_unpack,&floor0_look,&floor0_free_info,
- &floor0_free_look,&floor0_inverse1,&floor0_inverse2
-};
diff --git a/drivers/vorbis/floor1.c b/drivers/vorbis/floor1.c
deleted file mode 100644
index d8bd4645c1..0000000000
--- a/drivers/vorbis/floor1.c
+++ /dev/null
@@ -1,1087 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: floor backend 1 implementation
- last mod: $Id: floor1.c 19457 2015-03-03 00:15:29Z giles $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "codebook.h"
-#include "misc.h"
-#include "scales.h"
-
-#include <stdio.h>
-
-#define floor1_rangedB 140 /* floor 1 fixed at -140dB to 0dB range */
-
-typedef struct lsfit_acc{
- int x0;
- int x1;
-
- int xa;
- int ya;
- int x2a;
- int y2a;
- int xya;
- int an;
-
- int xb;
- int yb;
- int x2b;
- int y2b;
- int xyb;
- int bn;
-} lsfit_acc;
-
-/***********************************************/
-
-static void floor1_free_info(vorbis_info_floor *i){
- vorbis_info_floor1 *info=(vorbis_info_floor1 *)i;
- if(info){
- memset(info,0,sizeof(*info));
- _ogg_free(info);
- }
-}
-
-static void floor1_free_look(vorbis_look_floor *i){
- vorbis_look_floor1 *look=(vorbis_look_floor1 *)i;
- if(look){
- /*fprintf(stderr,"floor 1 bit usage %f:%f (%f total)\n",
- (float)look->phrasebits/look->frames,
- (float)look->postbits/look->frames,
- (float)(look->postbits+look->phrasebits)/look->frames);*/
-
- memset(look,0,sizeof(*look));
- _ogg_free(look);
- }
-}
-
-static void floor1_pack (vorbis_info_floor *i,oggpack_buffer *opb){
- vorbis_info_floor1 *info=(vorbis_info_floor1 *)i;
- int j,k;
- int count=0;
- int rangebits;
- int maxposit=info->postlist[1];
- int maxclass=-1;
-
- /* save out partitions */
- oggpack_write(opb,info->partitions,5); /* only 0 to 31 legal */
- for(j=0;j<info->partitions;j++){
- oggpack_write(opb,info->partitionclass[j],4); /* only 0 to 15 legal */
- if(maxclass<info->partitionclass[j])maxclass=info->partitionclass[j];
- }
-
- /* save out partition classes */
- for(j=0;j<maxclass+1;j++){
- oggpack_write(opb,info->class_dim[j]-1,3); /* 1 to 8 */
- oggpack_write(opb,info->class_subs[j],2); /* 0 to 3 */
- if(info->class_subs[j])oggpack_write(opb,info->class_book[j],8);
- for(k=0;k<(1<<info->class_subs[j]);k++)
- oggpack_write(opb,info->class_subbook[j][k]+1,8);
- }
-
- /* save out the post list */
- oggpack_write(opb,info->mult-1,2); /* only 1,2,3,4 legal now */
- /* maxposit cannot legally be less than 1; this is encode-side, we
- can assume our setup is OK */
- oggpack_write(opb,ov_ilog(maxposit-1),4);
- rangebits=ov_ilog(maxposit-1);
-
- for(j=0,k=0;j<info->partitions;j++){
- count+=info->class_dim[info->partitionclass[j]];
- for(;k<count;k++)
- oggpack_write(opb,info->postlist[k+2],rangebits);
- }
-}
-
-static int icomp(const void *a,const void *b){
- return(**(int **)a-**(int **)b);
-}
-
-static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){
- codec_setup_info *ci=vi->codec_setup;
- int j,k,count=0,maxclass=-1,rangebits;
-
- vorbis_info_floor1 *info=_ogg_calloc(1,sizeof(*info));
- /* read partitions */
- info->partitions=oggpack_read(opb,5); /* only 0 to 31 legal */
- for(j=0;j<info->partitions;j++){
- info->partitionclass[j]=oggpack_read(opb,4); /* only 0 to 15 legal */
- if(info->partitionclass[j]<0)goto err_out;
- if(maxclass<info->partitionclass[j])maxclass=info->partitionclass[j];
- }
-
- /* read partition classes */
- for(j=0;j<maxclass+1;j++){
- info->class_dim[j]=oggpack_read(opb,3)+1; /* 1 to 8 */
- info->class_subs[j]=oggpack_read(opb,2); /* 0,1,2,3 bits */
- if(info->class_subs[j]<0)
- goto err_out;
- if(info->class_subs[j])info->class_book[j]=oggpack_read(opb,8);
- if(info->class_book[j]<0 || info->class_book[j]>=ci->books)
- goto err_out;
- for(k=0;k<(1<<info->class_subs[j]);k++){
- info->class_subbook[j][k]=oggpack_read(opb,8)-1;
- if(info->class_subbook[j][k]<-1 || info->class_subbook[j][k]>=ci->books)
- goto err_out;
- }
- }
-
- /* read the post list */
- info->mult=oggpack_read(opb,2)+1; /* only 1,2,3,4 legal now */
- rangebits=oggpack_read(opb,4);
- if(rangebits<0)goto err_out;
-
- for(j=0,k=0;j<info->partitions;j++){
- count+=info->class_dim[info->partitionclass[j]];
- if(count>VIF_POSIT) goto err_out;
- for(;k<count;k++){
- int t=info->postlist[k+2]=oggpack_read(opb,rangebits);
- if(t<0 || t>=(1<<rangebits))
- goto err_out;
- }
- }
- info->postlist[0]=0;
- info->postlist[1]=1<<rangebits;
-
- /* don't allow repeated values in post list as they'd result in
- zero-length segments */
- {
- int *sortpointer[VIF_POSIT+2];
- for(j=0;j<count+2;j++)sortpointer[j]=info->postlist+j;
- qsort(sortpointer,count+2,sizeof(*sortpointer),icomp);
-
- for(j=1;j<count+2;j++)
- if(*sortpointer[j-1]==*sortpointer[j])goto err_out;
- }
-
- return(info);
-
- err_out:
- floor1_free_info(info);
- return(NULL);
-}
-
-static vorbis_look_floor *floor1_look(vorbis_dsp_state *vd,
- vorbis_info_floor *in){
-
- int *sortpointer[VIF_POSIT+2];
- vorbis_info_floor1 *info=(vorbis_info_floor1 *)in;
- vorbis_look_floor1 *look=_ogg_calloc(1,sizeof(*look));
- int i,j,n=0;
-
- (void)vd;
-
- look->vi=info;
- look->n=info->postlist[1];
-
- /* we drop each position value in-between already decoded values,
- and use linear interpolation to predict each new value past the
- edges. The positions are read in the order of the position
- list... we precompute the bounding positions in the lookup. Of
- course, the neighbors can change (if a position is declined), but
- this is an initial mapping */
-
- for(i=0;i<info->partitions;i++)n+=info->class_dim[info->partitionclass[i]];
- n+=2;
- look->posts=n;
-
- /* also store a sorted position index */
- for(i=0;i<n;i++)sortpointer[i]=info->postlist+i;
- qsort(sortpointer,n,sizeof(*sortpointer),icomp);
-
- /* points from sort order back to range number */
- for(i=0;i<n;i++)look->forward_index[i]=sortpointer[i]-info->postlist;
- /* points from range order to sorted position */
- for(i=0;i<n;i++)look->reverse_index[look->forward_index[i]]=i;
- /* we actually need the post values too */
- for(i=0;i<n;i++)look->sorted_index[i]=info->postlist[look->forward_index[i]];
-
- /* quantize values to multiplier spec */
- switch(info->mult){
- case 1: /* 1024 -> 256 */
- look->quant_q=256;
- break;
- case 2: /* 1024 -> 128 */
- look->quant_q=128;
- break;
- case 3: /* 1024 -> 86 */
- look->quant_q=86;
- break;
- case 4: /* 1024 -> 64 */
- look->quant_q=64;
- break;
- }
-
- /* discover our neighbors for decode where we don't use fit flags
- (that would push the neighbors outward) */
- for(i=0;i<n-2;i++){
- int lo=0;
- int hi=1;
- int lx=0;
- int hx=look->n;
- int currentx=info->postlist[i+2];
- for(j=0;j<i+2;j++){
- int x=info->postlist[j];
- if(x>lx && x<currentx){
- lo=j;
- lx=x;
- }
- if(x<hx && x>currentx){
- hi=j;
- hx=x;
- }
- }
- look->loneighbor[i]=lo;
- look->hineighbor[i]=hi;
- }
-
- return(look);
-}
-
-static int render_point(int x0,int x1,int y0,int y1,int x){
- y0&=0x7fff; /* mask off flag */
- y1&=0x7fff;
-
- {
- int dy=y1-y0;
- int adx=x1-x0;
- int ady=abs(dy);
- int err=ady*(x-x0);
-
- int off=err/adx;
- if(dy<0)return(y0-off);
- return(y0+off);
- }
-}
-
-static int vorbis_dBquant(const float *x){
- int i= *x*7.3142857f+1023.5f;
- if(i>1023)return(1023);
- if(i<0)return(0);
- return i;
-}
-
-static const float FLOOR1_fromdB_LOOKUP[256]={
- 1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F,
- 1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F,
- 1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F,
- 2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F,
- 2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F,
- 3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F,
- 4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F,
- 6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F,
- 7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F,
- 1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F,
- 1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F,
- 1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F,
- 2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F,
- 2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F,
- 3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F,
- 4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F,
- 5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F,
- 7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F,
- 9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F,
- 1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F,
- 1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F,
- 2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F,
- 2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F,
- 3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F,
- 4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F,
- 5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F,
- 7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F,
- 9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F,
- 0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F,
- 0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F,
- 0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F,
- 0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F,
- 0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F,
- 0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F,
- 0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F,
- 0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F,
- 0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F,
- 0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F,
- 0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F,
- 0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F,
- 0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F,
- 0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F,
- 0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F,
- 0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F,
- 0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F,
- 0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F,
- 0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F,
- 0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F,
- 0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F,
- 0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F,
- 0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F,
- 0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F,
- 0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F,
- 0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F,
- 0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F,
- 0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F,
- 0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F,
- 0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F,
- 0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F,
- 0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F,
- 0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F,
- 0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F,
- 0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F,
- 0.82788260F, 0.88168307F, 0.9389798F, 1.F,
-};
-
-static void render_line(int n, int x0,int x1,int y0,int y1,float *d){
- int dy=y1-y0;
- int adx=x1-x0;
- int ady=abs(dy);
- int base=dy/adx;
- int sy=(dy<0?base-1:base+1);
- int x=x0;
- int y=y0;
- int err=0;
-
- ady-=abs(base*adx);
-
- if(n>x1)n=x1;
-
- if(x<n)
- d[x]*=FLOOR1_fromdB_LOOKUP[y];
-
- while(++x<n){
- err=err+ady;
- if(err>=adx){
- err-=adx;
- y+=sy;
- }else{
- y+=base;
- }
- d[x]*=FLOOR1_fromdB_LOOKUP[y];
- }
-}
-
-static void render_line0(int n, int x0,int x1,int y0,int y1,int *d){
- int dy=y1-y0;
- int adx=x1-x0;
- int ady=abs(dy);
- int base=dy/adx;
- int sy=(dy<0?base-1:base+1);
- int x=x0;
- int y=y0;
- int err=0;
-
- ady-=abs(base*adx);
-
- if(n>x1)n=x1;
-
- if(x<n)
- d[x]=y;
-
- while(++x<n){
- err=err+ady;
- if(err>=adx){
- err-=adx;
- y+=sy;
- }else{
- y+=base;
- }
- d[x]=y;
- }
-}
-
-/* the floor has already been filtered to only include relevant sections */
-static int accumulate_fit(const float *flr,const float *mdct,
- int x0, int x1,lsfit_acc *a,
- int n,vorbis_info_floor1 *info){
- long i;
-
- int xa=0,ya=0,x2a=0,y2a=0,xya=0,na=0, xb=0,yb=0,x2b=0,y2b=0,xyb=0,nb=0;
-
- memset(a,0,sizeof(*a));
- a->x0=x0;
- a->x1=x1;
- if(x1>=n)x1=n-1;
-
- for(i=x0;i<=x1;i++){
- int quantized=vorbis_dBquant(flr+i);
- if(quantized){
- if(mdct[i]+info->twofitatten>=flr[i]){
- xa += i;
- ya += quantized;
- x2a += i*i;
- y2a += quantized*quantized;
- xya += i*quantized;
- na++;
- }else{
- xb += i;
- yb += quantized;
- x2b += i*i;
- y2b += quantized*quantized;
- xyb += i*quantized;
- nb++;
- }
- }
- }
-
- a->xa=xa;
- a->ya=ya;
- a->x2a=x2a;
- a->y2a=y2a;
- a->xya=xya;
- a->an=na;
-
- a->xb=xb;
- a->yb=yb;
- a->x2b=x2b;
- a->y2b=y2b;
- a->xyb=xyb;
- a->bn=nb;
-
- return(na);
-}
-
-static int fit_line(lsfit_acc *a,int fits,int *y0,int *y1,
- vorbis_info_floor1 *info){
- double xb=0,yb=0,x2b=0,y2b=0,xyb=0,bn=0;
- int i;
- int x0=a[0].x0;
- int x1=a[fits-1].x1;
-
- for(i=0;i<fits;i++){
- double weight = (a[i].bn+a[i].an)*info->twofitweight/(a[i].an+1)+1.;
-
- xb+=a[i].xb + a[i].xa * weight;
- yb+=a[i].yb + a[i].ya * weight;
- x2b+=a[i].x2b + a[i].x2a * weight;
- y2b+=a[i].y2b + a[i].y2a * weight;
- xyb+=a[i].xyb + a[i].xya * weight;
- bn+=a[i].bn + a[i].an * weight;
- }
-
- if(*y0>=0){
- xb+= x0;
- yb+= *y0;
- x2b+= x0 * x0;
- y2b+= *y0 * *y0;
- xyb+= *y0 * x0;
- bn++;
- }
-
- if(*y1>=0){
- xb+= x1;
- yb+= *y1;
- x2b+= x1 * x1;
- y2b+= *y1 * *y1;
- xyb+= *y1 * x1;
- bn++;
- }
-
- {
- double denom=(bn*x2b-xb*xb);
-
- if(denom>0.){
- double a=(yb*x2b-xyb*xb)/denom;
- double b=(bn*xyb-xb*yb)/denom;
- *y0=rint(a+b*x0);
- *y1=rint(a+b*x1);
-
- /* limit to our range! */
- if(*y0>1023)*y0=1023;
- if(*y1>1023)*y1=1023;
- if(*y0<0)*y0=0;
- if(*y1<0)*y1=0;
-
- return 0;
- }else{
- *y0=0;
- *y1=0;
- return 1;
- }
- }
-}
-
-static int inspect_error(int x0,int x1,int y0,int y1,const float *mask,
- const float *mdct,
- vorbis_info_floor1 *info){
- int dy=y1-y0;
- int adx=x1-x0;
- int ady=abs(dy);
- int base=dy/adx;
- int sy=(dy<0?base-1:base+1);
- int x=x0;
- int y=y0;
- int err=0;
- int val=vorbis_dBquant(mask+x);
- int mse=0;
- int n=0;
-
- ady-=abs(base*adx);
-
- mse=(y-val);
- mse*=mse;
- n++;
- if(mdct[x]+info->twofitatten>=mask[x]){
- if(y+info->maxover<val)return(1);
- if(y-info->maxunder>val)return(1);
- }
-
- while(++x<x1){
- err=err+ady;
- if(err>=adx){
- err-=adx;
- y+=sy;
- }else{
- y+=base;
- }
-
- val=vorbis_dBquant(mask+x);
- mse+=((y-val)*(y-val));
- n++;
- if(mdct[x]+info->twofitatten>=mask[x]){
- if(val){
- if(y+info->maxover<val)return(1);
- if(y-info->maxunder>val)return(1);
- }
- }
- }
-
- if(info->maxover*info->maxover/n>info->maxerr)return(0);
- if(info->maxunder*info->maxunder/n>info->maxerr)return(0);
- if(mse/n>info->maxerr)return(1);
- return(0);
-}
-
-static int post_Y(int *A,int *B,int pos){
- if(A[pos]<0)
- return B[pos];
- if(B[pos]<0)
- return A[pos];
-
- return (A[pos]+B[pos])>>1;
-}
-
-int *floor1_fit(vorbis_block *vb,vorbis_look_floor1 *look,
- const float *logmdct, /* in */
- const float *logmask){
- long i,j;
- vorbis_info_floor1 *info=look->vi;
- long n=look->n;
- long posts=look->posts;
- long nonzero=0;
- lsfit_acc fits[VIF_POSIT+1];
- int fit_valueA[VIF_POSIT+2]; /* index by range list position */
- int fit_valueB[VIF_POSIT+2]; /* index by range list position */
-
- int loneighbor[VIF_POSIT+2]; /* sorted index of range list position (+2) */
- int hineighbor[VIF_POSIT+2];
- int *output=NULL;
- int memo[VIF_POSIT+2];
-
- for(i=0;i<posts;i++)fit_valueA[i]=-200; /* mark all unused */
- for(i=0;i<posts;i++)fit_valueB[i]=-200; /* mark all unused */
- for(i=0;i<posts;i++)loneighbor[i]=0; /* 0 for the implicit 0 post */
- for(i=0;i<posts;i++)hineighbor[i]=1; /* 1 for the implicit post at n */
- for(i=0;i<posts;i++)memo[i]=-1; /* no neighbor yet */
-
- /* quantize the relevant floor points and collect them into line fit
- structures (one per minimal division) at the same time */
- if(posts==0){
- nonzero+=accumulate_fit(logmask,logmdct,0,n,fits,n,info);
- }else{
- for(i=0;i<posts-1;i++)
- nonzero+=accumulate_fit(logmask,logmdct,look->sorted_index[i],
- look->sorted_index[i+1],fits+i,
- n,info);
- }
-
- if(nonzero){
- /* start by fitting the implicit base case.... */
- int y0=-200;
- int y1=-200;
- fit_line(fits,posts-1,&y0,&y1,info);
-
- fit_valueA[0]=y0;
- fit_valueB[0]=y0;
- fit_valueB[1]=y1;
- fit_valueA[1]=y1;
-
- /* Non degenerate case */
- /* start progressive splitting. This is a greedy, non-optimal
- algorithm, but simple and close enough to the best
- answer. */
- for(i=2;i<posts;i++){
- int sortpos=look->reverse_index[i];
- int ln=loneighbor[sortpos];
- int hn=hineighbor[sortpos];
-
- /* eliminate repeat searches of a particular range with a memo */
- if(memo[ln]!=hn){
- /* haven't performed this error search yet */
- int lsortpos=look->reverse_index[ln];
- int hsortpos=look->reverse_index[hn];
- memo[ln]=hn;
-
- {
- /* A note: we want to bound/minimize *local*, not global, error */
- int lx=info->postlist[ln];
- int hx=info->postlist[hn];
- int ly=post_Y(fit_valueA,fit_valueB,ln);
- int hy=post_Y(fit_valueA,fit_valueB,hn);
-
- if(ly==-1 || hy==-1){
- exit(1);
- }
-
- if(inspect_error(lx,hx,ly,hy,logmask,logmdct,info)){
- /* outside error bounds/begin search area. Split it. */
- int ly0=-200;
- int ly1=-200;
- int hy0=-200;
- int hy1=-200;
- int ret0=fit_line(fits+lsortpos,sortpos-lsortpos,&ly0,&ly1,info);
- int ret1=fit_line(fits+sortpos,hsortpos-sortpos,&hy0,&hy1,info);
-
- if(ret0){
- ly0=ly;
- ly1=hy0;
- }
- if(ret1){
- hy0=ly1;
- hy1=hy;
- }
-
- if(ret0 && ret1){
- fit_valueA[i]=-200;
- fit_valueB[i]=-200;
- }else{
- /* store new edge values */
- fit_valueB[ln]=ly0;
- if(ln==0)fit_valueA[ln]=ly0;
- fit_valueA[i]=ly1;
- fit_valueB[i]=hy0;
- fit_valueA[hn]=hy1;
- if(hn==1)fit_valueB[hn]=hy1;
-
- if(ly1>=0 || hy0>=0){
- /* store new neighbor values */
- for(j=sortpos-1;j>=0;j--)
- if(hineighbor[j]==hn)
- hineighbor[j]=i;
- else
- break;
- for(j=sortpos+1;j<posts;j++)
- if(loneighbor[j]==ln)
- loneighbor[j]=i;
- else
- break;
- }
- }
- }else{
- fit_valueA[i]=-200;
- fit_valueB[i]=-200;
- }
- }
- }
- }
-
- output=_vorbis_block_alloc(vb,sizeof(*output)*posts);
-
- output[0]=post_Y(fit_valueA,fit_valueB,0);
- output[1]=post_Y(fit_valueA,fit_valueB,1);
-
- /* fill in posts marked as not using a fit; we will zero
- back out to 'unused' when encoding them so long as curve
- interpolation doesn't force them into use */
- for(i=2;i<posts;i++){
- int ln=look->loneighbor[i-2];
- int hn=look->hineighbor[i-2];
- int x0=info->postlist[ln];
- int x1=info->postlist[hn];
- int y0=output[ln];
- int y1=output[hn];
-
- int predicted=render_point(x0,x1,y0,y1,info->postlist[i]);
- int vx=post_Y(fit_valueA,fit_valueB,i);
-
- if(vx>=0 && predicted!=vx){
- output[i]=vx;
- }else{
- output[i]= predicted|0x8000;
- }
- }
- }
-
- return(output);
-
-}
-
-int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look,
- int *A,int *B,
- int del){
-
- long i;
- long posts=look->posts;
- int *output=NULL;
-
- if(A && B){
- output=_vorbis_block_alloc(vb,sizeof(*output)*posts);
-
- /* overly simpleminded--- look again post 1.2 */
- for(i=0;i<posts;i++){
- output[i]=((65536-del)*(A[i]&0x7fff)+del*(B[i]&0x7fff)+32768)>>16;
- if(A[i]&0x8000 && B[i]&0x8000)output[i]|=0x8000;
- }
- }
-
- return(output);
-}
-
-
-int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
- vorbis_look_floor1 *look,
- int *post,int *ilogmask){
-
- long i,j;
- vorbis_info_floor1 *info=look->vi;
- long posts=look->posts;
- codec_setup_info *ci=vb->vd->vi->codec_setup;
- int out[VIF_POSIT+2];
- static_codebook **sbooks=ci->book_param;
- codebook *books=ci->fullbooks;
-
- /* quantize values to multiplier spec */
- if(post){
- for(i=0;i<posts;i++){
- int val=post[i]&0x7fff;
- switch(info->mult){
- case 1: /* 1024 -> 256 */
- val>>=2;
- break;
- case 2: /* 1024 -> 128 */
- val>>=3;
- break;
- case 3: /* 1024 -> 86 */
- val/=12;
- break;
- case 4: /* 1024 -> 64 */
- val>>=4;
- break;
- }
- post[i]=val | (post[i]&0x8000);
- }
-
- out[0]=post[0];
- out[1]=post[1];
-
- /* find prediction values for each post and subtract them */
- for(i=2;i<posts;i++){
- int ln=look->loneighbor[i-2];
- int hn=look->hineighbor[i-2];
- int x0=info->postlist[ln];
- int x1=info->postlist[hn];
- int y0=post[ln];
- int y1=post[hn];
-
- int predicted=render_point(x0,x1,y0,y1,info->postlist[i]);
-
- if((post[i]&0x8000) || (predicted==post[i])){
- post[i]=predicted|0x8000; /* in case there was roundoff jitter
- in interpolation */
- out[i]=0;
- }else{
- int headroom=(look->quant_q-predicted<predicted?
- look->quant_q-predicted:predicted);
-
- int val=post[i]-predicted;
-
- /* at this point the 'deviation' value is in the range +/- max
- range, but the real, unique range can always be mapped to
- only [0-maxrange). So we want to wrap the deviation into
- this limited range, but do it in the way that least screws
- an essentially gaussian probability distribution. */
-
- if(val<0)
- if(val<-headroom)
- val=headroom-val-1;
- else
- val=-1-(val<<1);
- else
- if(val>=headroom)
- val= val+headroom;
- else
- val<<=1;
-
- out[i]=val;
- post[ln]&=0x7fff;
- post[hn]&=0x7fff;
- }
- }
-
- /* we have everything we need. pack it out */
- /* mark nontrivial floor */
- oggpack_write(opb,1,1);
-
- /* beginning/end post */
- look->frames++;
- look->postbits+=ov_ilog(look->quant_q-1)*2;
- oggpack_write(opb,out[0],ov_ilog(look->quant_q-1));
- oggpack_write(opb,out[1],ov_ilog(look->quant_q-1));
-
-
- /* partition by partition */
- for(i=0,j=2;i<info->partitions;i++){
- int class=info->partitionclass[i];
- int cdim=info->class_dim[class];
- int csubbits=info->class_subs[class];
- int csub=1<<csubbits;
- int bookas[8]={0,0,0,0,0,0,0,0};
- int cval=0;
- int cshift=0;
- int k,l;
-
- /* generate the partition's first stage cascade value */
- if(csubbits){
- int maxval[8]={0,0,0,0,0,0,0,0}; /* gcc's static analysis
- issues a warning without
- initialization */
- for(k=0;k<csub;k++){
- int booknum=info->class_subbook[class][k];
- if(booknum<0){
- maxval[k]=1;
- }else{
- maxval[k]=sbooks[info->class_subbook[class][k]]->entries;
- }
- }
- for(k=0;k<cdim;k++){
- for(l=0;l<csub;l++){
- int val=out[j+k];
- if(val<maxval[l]){
- bookas[k]=l;
- break;
- }
- }
- cval|= bookas[k]<<cshift;
- cshift+=csubbits;
- }
- /* write it */
- look->phrasebits+=
- vorbis_book_encode(books+info->class_book[class],cval,opb);
-
-#ifdef TRAIN_FLOOR1
- {
- FILE *of;
- char buffer[80];
- sprintf(buffer,"line_%dx%ld_class%d.vqd",
- vb->pcmend/2,posts-2,class);
- of=fopen(buffer,"a");
- fprintf(of,"%d\n",cval);
- fclose(of);
- }
-#endif
- }
-
- /* write post values */
- for(k=0;k<cdim;k++){
- int book=info->class_subbook[class][bookas[k]];
- if(book>=0){
- /* hack to allow training with 'bad' books */
- if(out[j+k]<(books+book)->entries)
- look->postbits+=vorbis_book_encode(books+book,
- out[j+k],opb);
- /*else
- fprintf(stderr,"+!");*/
-
-#ifdef TRAIN_FLOOR1
- {
- FILE *of;
- char buffer[80];
- sprintf(buffer,"line_%dx%ld_%dsub%d.vqd",
- vb->pcmend/2,posts-2,class,bookas[k]);
- of=fopen(buffer,"a");
- fprintf(of,"%d\n",out[j+k]);
- fclose(of);
- }
-#endif
- }
- }
- j+=cdim;
- }
-
- {
- /* generate quantized floor equivalent to what we'd unpack in decode */
- /* render the lines */
- int hx=0;
- int lx=0;
- int ly=post[0]*info->mult;
- int n=ci->blocksizes[vb->W]/2;
-
- for(j=1;j<look->posts;j++){
- int current=look->forward_index[j];
- int hy=post[current]&0x7fff;
- if(hy==post[current]){
-
- hy*=info->mult;
- hx=info->postlist[current];
-
- render_line0(n,lx,hx,ly,hy,ilogmask);
-
- lx=hx;
- ly=hy;
- }
- }
- for(j=hx;j<vb->pcmend/2;j++)ilogmask[j]=ly; /* be certain */
- return(1);
- }
- }else{
- oggpack_write(opb,0,1);
- memset(ilogmask,0,vb->pcmend/2*sizeof(*ilogmask));
- return(0);
- }
-}
-
-static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){
- vorbis_look_floor1 *look=(vorbis_look_floor1 *)in;
- vorbis_info_floor1 *info=look->vi;
- codec_setup_info *ci=vb->vd->vi->codec_setup;
-
- int i,j,k;
- codebook *books=ci->fullbooks;
-
- /* unpack wrapped/predicted values from stream */
- if(oggpack_read(&vb->opb,1)==1){
- int *fit_value=_vorbis_block_alloc(vb,(look->posts)*sizeof(*fit_value));
-
- fit_value[0]=oggpack_read(&vb->opb,ov_ilog(look->quant_q-1));
- fit_value[1]=oggpack_read(&vb->opb,ov_ilog(look->quant_q-1));
-
- /* partition by partition */
- for(i=0,j=2;i<info->partitions;i++){
- int class=info->partitionclass[i];
- int cdim=info->class_dim[class];
- int csubbits=info->class_subs[class];
- int csub=1<<csubbits;
- int cval=0;
-
- /* decode the partition's first stage cascade value */
- if(csubbits){
- cval=vorbis_book_decode(books+info->class_book[class],&vb->opb);
-
- if(cval==-1)goto eop;
- }
-
- for(k=0;k<cdim;k++){
- int book=info->class_subbook[class][cval&(csub-1)];
- cval>>=csubbits;
- if(book>=0){
- if((fit_value[j+k]=vorbis_book_decode(books+book,&vb->opb))==-1)
- goto eop;
- }else{
- fit_value[j+k]=0;
- }
- }
- j+=cdim;
- }
-
- /* unwrap positive values and reconsitute via linear interpolation */
- for(i=2;i<look->posts;i++){
- int predicted=render_point(info->postlist[look->loneighbor[i-2]],
- info->postlist[look->hineighbor[i-2]],
- fit_value[look->loneighbor[i-2]],
- fit_value[look->hineighbor[i-2]],
- info->postlist[i]);
- int hiroom=look->quant_q-predicted;
- int loroom=predicted;
- int room=(hiroom<loroom?hiroom:loroom)<<1;
- int val=fit_value[i];
-
- if(val){
- if(val>=room){
- if(hiroom>loroom){
- val = val-loroom;
- }else{
- val = -1-(val-hiroom);
- }
- }else{
- if(val&1){
- val= -((val+1)>>1);
- }else{
- val>>=1;
- }
- }
-
- fit_value[i]=(val+predicted)&0x7fff;
- fit_value[look->loneighbor[i-2]]&=0x7fff;
- fit_value[look->hineighbor[i-2]]&=0x7fff;
-
- }else{
- fit_value[i]=predicted|0x8000;
- }
-
- }
-
- return(fit_value);
- }
- eop:
- return(NULL);
-}
-
-static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *memo,
- float *out){
- vorbis_look_floor1 *look=(vorbis_look_floor1 *)in;
- vorbis_info_floor1 *info=look->vi;
-
- codec_setup_info *ci=vb->vd->vi->codec_setup;
- int n=ci->blocksizes[vb->W]/2;
- int j;
-
- if(memo){
- /* render the lines */
- int *fit_value=(int *)memo;
- int hx=0;
- int lx=0;
- int ly=fit_value[0]*info->mult;
- /* guard lookup against out-of-range values */
- ly=(ly<0?0:ly>255?255:ly);
-
- for(j=1;j<look->posts;j++){
- int current=look->forward_index[j];
- int hy=fit_value[current]&0x7fff;
- if(hy==fit_value[current]){
-
- hx=info->postlist[current];
- hy*=info->mult;
- /* guard lookup against out-of-range values */
- hy=(hy<0?0:hy>255?255:hy);
-
- render_line(n,lx,hx,ly,hy,out);
-
- lx=hx;
- ly=hy;
- }
- }
- for(j=hx;j<n;j++)out[j]*=FLOOR1_fromdB_LOOKUP[ly]; /* be certain */
- return(1);
- }
- memset(out,0,sizeof(*out)*n);
- return(0);
-}
-
-/* export hooks */
-const vorbis_func_floor floor1_exportbundle={
- &floor1_pack,&floor1_unpack,&floor1_look,&floor1_free_info,
- &floor1_free_look,&floor1_inverse1,&floor1_inverse2
-};
diff --git a/drivers/vorbis/highlevel.h b/drivers/vorbis/highlevel.h
deleted file mode 100644
index e38f370fd6..0000000000
--- a/drivers/vorbis/highlevel.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: highlevel encoder setup struct separated out for vorbisenc clarity
- last mod: $Id: highlevel.h 17195 2010-05-05 21:49:51Z giles $
-
- ********************************************************************/
-
-typedef struct highlevel_byblocktype {
- double tone_mask_setting;
- double tone_peaklimit_setting;
- double noise_bias_setting;
- double noise_compand_setting;
-} highlevel_byblocktype;
-
-typedef struct highlevel_encode_setup {
- int set_in_stone;
- const void *setup;
- double base_setting;
-
- double impulse_noisetune;
-
- /* bitrate management below all settable */
- float req;
- int managed;
- long bitrate_min;
- long bitrate_av;
- double bitrate_av_damp;
- long bitrate_max;
- long bitrate_reservoir;
- double bitrate_reservoir_bias;
-
- int impulse_block_p;
- int noise_normalize_p;
- int coupling_p;
-
- double stereo_point_setting;
- double lowpass_kHz;
- int lowpass_altered;
-
- double ath_floating_dB;
- double ath_absolute_dB;
-
- double amplitude_track_dBpersec;
- double trigger_setting;
-
- highlevel_byblocktype block[4]; /* padding, impulse, transition, long */
-
-} highlevel_encode_setup;
diff --git a/drivers/vorbis/info.c b/drivers/vorbis/info.c
deleted file mode 100644
index 8a2a001f99..0000000000
--- a/drivers/vorbis/info.c
+++ /dev/null
@@ -1,673 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: maintain the info structure, info <-> header packets
- last mod: $Id: info.c 19441 2015-01-21 01:17:41Z xiphmont $
-
- ********************************************************************/
-
-/* general handling of the header and the vorbis_info structure (and
- substructures) */
-
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "codebook.h"
-#include "registry.h"
-#include "window.h"
-#include "psy.h"
-#include "misc.h"
-#include "os.h"
-
-#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.5"
-#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20150105 (⛄⛄⛄⛄)"
-
-/* helpers */
-static void _v_writestring(oggpack_buffer *o,const char *s, int bytes){
-
- while(bytes--){
- oggpack_write(o,*s++,8);
- }
-}
-
-static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){
- while(bytes--){
- *buf++=oggpack_read(o,8);
- }
-}
-
-void vorbis_comment_init(vorbis_comment *vc){
- memset(vc,0,sizeof(*vc));
-}
-
-void vorbis_comment_add(vorbis_comment *vc,const char *comment){
- vc->user_comments=_ogg_realloc(vc->user_comments,
- (vc->comments+2)*sizeof(*vc->user_comments));
- vc->comment_lengths=_ogg_realloc(vc->comment_lengths,
- (vc->comments+2)*sizeof(*vc->comment_lengths));
- vc->comment_lengths[vc->comments]=strlen(comment);
- vc->user_comments[vc->comments]=_ogg_malloc(vc->comment_lengths[vc->comments]+1);
- strcpy(vc->user_comments[vc->comments], comment);
- vc->comments++;
- vc->user_comments[vc->comments]=NULL;
-}
-
-void vorbis_comment_add_tag(vorbis_comment *vc, const char *tag, const char *contents){
- char *comment=alloca(strlen(tag)+strlen(contents)+2); /* +2 for = and \0 */
- strcpy(comment, tag);
- strcat(comment, "=");
- strcat(comment, contents);
- vorbis_comment_add(vc, comment);
-}
-
-/* This is more or less the same as strncasecmp - but that doesn't exist
- * everywhere, and this is a fairly trivial function, so we include it */
-static int tagcompare(const char *s1, const char *s2, int n){
- int c=0;
- while(c < n){
- if(toupper(s1[c]) != toupper(s2[c]))
- return !0;
- c++;
- }
- return 0;
-}
-
-char *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count){
- long i;
- int found = 0;
- int taglen = strlen(tag)+1; /* +1 for the = we append */
- char *fulltag = alloca(taglen+ 1);
-
- strcpy(fulltag, tag);
- strcat(fulltag, "=");
-
- for(i=0;i<vc->comments;i++){
- if(!tagcompare(vc->user_comments[i], fulltag, taglen)){
- if(count == found)
- /* We return a pointer to the data, not a copy */
- return vc->user_comments[i] + taglen;
- else
- found++;
- }
- }
- return NULL; /* didn't find anything */
-}
-
-int vorbis_comment_query_count(vorbis_comment *vc, const char *tag){
- int i,count=0;
- int taglen = strlen(tag)+1; /* +1 for the = we append */
- char *fulltag = alloca(taglen+1);
- strcpy(fulltag,tag);
- strcat(fulltag, "=");
-
- for(i=0;i<vc->comments;i++){
- if(!tagcompare(vc->user_comments[i], fulltag, taglen))
- count++;
- }
-
- return count;
-}
-
-void vorbis_comment_clear(vorbis_comment *vc){
- if(vc){
- long i;
- if(vc->user_comments){
- for(i=0;i<vc->comments;i++)
- if(vc->user_comments[i])_ogg_free(vc->user_comments[i]);
- _ogg_free(vc->user_comments);
- }
- if(vc->comment_lengths)_ogg_free(vc->comment_lengths);
- if(vc->vendor)_ogg_free(vc->vendor);
- memset(vc,0,sizeof(*vc));
- }
-}
-
-/* blocksize 0 is guaranteed to be short, 1 is guaranteed to be long.
- They may be equal, but short will never ge greater than long */
-int vorbis_info_blocksize(vorbis_info *vi,int zo){
- codec_setup_info *ci = vi->codec_setup;
- return ci ? ci->blocksizes[zo] : -1;
-}
-
-/* used by synthesis, which has a full, alloced vi */
-void vorbis_info_init(vorbis_info *vi){
- memset(vi,0,sizeof(*vi));
- vi->codec_setup=_ogg_calloc(1,sizeof(codec_setup_info));
-}
-
-void vorbis_info_clear(vorbis_info *vi){
- codec_setup_info *ci=vi->codec_setup;
- int i;
-
- if(ci){
-
- for(i=0;i<ci->modes;i++)
- if(ci->mode_param[i])_ogg_free(ci->mode_param[i]);
-
- for(i=0;i<ci->maps;i++) /* unpack does the range checking */
- if(ci->map_param[i]) /* this may be cleaning up an aborted
- unpack, in which case the below type
- cannot be trusted */
- _mapping_P[ci->map_type[i]]->free_info(ci->map_param[i]);
-
- for(i=0;i<ci->floors;i++) /* unpack does the range checking */
- if(ci->floor_param[i]) /* this may be cleaning up an aborted
- unpack, in which case the below type
- cannot be trusted */
- _floor_P[ci->floor_type[i]]->free_info(ci->floor_param[i]);
-
- for(i=0;i<ci->residues;i++) /* unpack does the range checking */
- if(ci->residue_param[i]) /* this may be cleaning up an aborted
- unpack, in which case the below type
- cannot be trusted */
- _residue_P[ci->residue_type[i]]->free_info(ci->residue_param[i]);
-
- for(i=0;i<ci->books;i++){
- if(ci->book_param[i]){
- /* knows if the book was not alloced */
- vorbis_staticbook_destroy(ci->book_param[i]);
- }
- if(ci->fullbooks)
- vorbis_book_clear(ci->fullbooks+i);
- }
- if(ci->fullbooks)
- _ogg_free(ci->fullbooks);
-
- for(i=0;i<ci->psys;i++)
- _vi_psy_free(ci->psy_param[i]);
-
- _ogg_free(ci);
- }
-
- memset(vi,0,sizeof(*vi));
-}
-
-/* Header packing/unpacking ********************************************/
-
-static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
- codec_setup_info *ci=vi->codec_setup;
- if(!ci)return(OV_EFAULT);
-
- vi->version=oggpack_read(opb,32);
- if(vi->version!=0)return(OV_EVERSION);
-
- vi->channels=oggpack_read(opb,8);
- vi->rate=oggpack_read(opb,32);
-
- vi->bitrate_upper=oggpack_read(opb,32);
- vi->bitrate_nominal=oggpack_read(opb,32);
- vi->bitrate_lower=oggpack_read(opb,32);
-
- ci->blocksizes[0]=1<<oggpack_read(opb,4);
- ci->blocksizes[1]=1<<oggpack_read(opb,4);
-
- if(vi->rate<1)goto err_out;
- if(vi->channels<1)goto err_out;
- if(ci->blocksizes[0]<64)goto err_out;
- if(ci->blocksizes[1]<ci->blocksizes[0])goto err_out;
- if(ci->blocksizes[1]>8192)goto err_out;
-
- if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
-
- return(0);
- err_out:
- vorbis_info_clear(vi);
- return(OV_EBADHEADER);
-}
-
-static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
- int i;
- int vendorlen=oggpack_read(opb,32);
- if(vendorlen<0)goto err_out;
- if(vendorlen>opb->storage-8)goto err_out;
- vc->vendor=_ogg_calloc(vendorlen+1,1);
- _v_readstring(opb,vc->vendor,vendorlen);
- i=oggpack_read(opb,32);
- if(i<0)goto err_out;
- if(i>((opb->storage-oggpack_bytes(opb))>>2))goto err_out;
- vc->comments=i;
- vc->user_comments=_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments));
- vc->comment_lengths=_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths));
-
- for(i=0;i<vc->comments;i++){
- int len=oggpack_read(opb,32);
- if(len<0)goto err_out;
- if(len>opb->storage-oggpack_bytes(opb))goto err_out;
- vc->comment_lengths[i]=len;
- vc->user_comments[i]=_ogg_calloc(len+1,1);
- _v_readstring(opb,vc->user_comments[i],len);
- }
- if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
-
- return(0);
- err_out:
- vorbis_comment_clear(vc);
- return(OV_EBADHEADER);
-}
-
-/* all of the real encoding details are here. The modes, books,
- everything */
-static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){
- codec_setup_info *ci=vi->codec_setup;
- int i;
-
- /* codebooks */
- ci->books=oggpack_read(opb,8)+1;
- if(ci->books<=0)goto err_out;
- for(i=0;i<ci->books;i++){
- ci->book_param[i]=vorbis_staticbook_unpack(opb);
- if(!ci->book_param[i])goto err_out;
- }
-
- /* time backend settings; hooks are unused */
- {
- int times=oggpack_read(opb,6)+1;
- if(times<=0)goto err_out;
- for(i=0;i<times;i++){
- int test=oggpack_read(opb,16);
- if(test<0 || test>=VI_TIMEB)goto err_out;
- }
- }
-
- /* floor backend settings */
- ci->floors=oggpack_read(opb,6)+1;
- if(ci->floors<=0)goto err_out;
- for(i=0;i<ci->floors;i++){
- ci->floor_type[i]=oggpack_read(opb,16);
- if(ci->floor_type[i]<0 || ci->floor_type[i]>=VI_FLOORB)goto err_out;
- ci->floor_param[i]=_floor_P[ci->floor_type[i]]->unpack(vi,opb);
- if(!ci->floor_param[i])goto err_out;
- }
-
- /* residue backend settings */
- ci->residues=oggpack_read(opb,6)+1;
- if(ci->residues<=0)goto err_out;
- for(i=0;i<ci->residues;i++){
- ci->residue_type[i]=oggpack_read(opb,16);
- if(ci->residue_type[i]<0 || ci->residue_type[i]>=VI_RESB)goto err_out;
- ci->residue_param[i]=_residue_P[ci->residue_type[i]]->unpack(vi,opb);
- if(!ci->residue_param[i])goto err_out;
- }
-
- /* map backend settings */
- ci->maps=oggpack_read(opb,6)+1;
- if(ci->maps<=0)goto err_out;
- for(i=0;i<ci->maps;i++){
- ci->map_type[i]=oggpack_read(opb,16);
- if(ci->map_type[i]<0 || ci->map_type[i]>=VI_MAPB)goto err_out;
- ci->map_param[i]=_mapping_P[ci->map_type[i]]->unpack(vi,opb);
- if(!ci->map_param[i])goto err_out;
- }
-
- /* mode settings */
- ci->modes=oggpack_read(opb,6)+1;
- if(ci->modes<=0)goto err_out;
- for(i=0;i<ci->modes;i++){
- ci->mode_param[i]=_ogg_calloc(1,sizeof(*ci->mode_param[i]));
- ci->mode_param[i]->blockflag=oggpack_read(opb,1);
- ci->mode_param[i]->windowtype=oggpack_read(opb,16);
- ci->mode_param[i]->transformtype=oggpack_read(opb,16);
- ci->mode_param[i]->mapping=oggpack_read(opb,8);
-
- if(ci->mode_param[i]->windowtype>=VI_WINDOWB)goto err_out;
- if(ci->mode_param[i]->transformtype>=VI_WINDOWB)goto err_out;
- if(ci->mode_param[i]->mapping>=ci->maps)goto err_out;
- if(ci->mode_param[i]->mapping<0)goto err_out;
- }
-
- if(oggpack_read(opb,1)!=1)goto err_out; /* top level EOP check */
-
- return(0);
- err_out:
- vorbis_info_clear(vi);
- return(OV_EBADHEADER);
-}
-
-/* Is this packet a vorbis ID header? */
-int vorbis_synthesis_idheader(ogg_packet *op){
- oggpack_buffer opb;
- char buffer[6];
-
- if(op){
- oggpack_readinit(&opb,op->packet,op->bytes);
-
- if(!op->b_o_s)
- return(0); /* Not the initial packet */
-
- if(oggpack_read(&opb,8) != 1)
- return 0; /* not an ID header */
-
- memset(buffer,0,6);
- _v_readstring(&opb,buffer,6);
- if(memcmp(buffer,"vorbis",6))
- return 0; /* not vorbis */
-
- return 1;
- }
-
- return 0;
-}
-
-/* The Vorbis header is in three packets; the initial small packet in
- the first page that identifies basic parameters, a second packet
- with bitstream comments and a third packet that holds the
- codebook. */
-
-int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op){
- oggpack_buffer opb;
-
- if(op){
- oggpack_readinit(&opb,op->packet,op->bytes);
-
- /* Which of the three types of header is this? */
- /* Also verify header-ness, vorbis */
- {
- char buffer[6];
- int packtype=oggpack_read(&opb,8);
- memset(buffer,0,6);
- _v_readstring(&opb,buffer,6);
- if(memcmp(buffer,"vorbis",6)){
- /* not a vorbis header */
- return(OV_ENOTVORBIS);
- }
- switch(packtype){
- case 0x01: /* least significant *bit* is read first */
- if(!op->b_o_s){
- /* Not the initial packet */
- return(OV_EBADHEADER);
- }
- if(vi->rate!=0){
- /* previously initialized info header */
- return(OV_EBADHEADER);
- }
-
- return(_vorbis_unpack_info(vi,&opb));
-
- case 0x03: /* least significant *bit* is read first */
- if(vi->rate==0){
- /* um... we didn't get the initial header */
- return(OV_EBADHEADER);
- }
- if(vc->vendor!=NULL){
- /* previously initialized comment header */
- return(OV_EBADHEADER);
- }
-
- return(_vorbis_unpack_comment(vc,&opb));
-
- case 0x05: /* least significant *bit* is read first */
- if(vi->rate==0 || vc->vendor==NULL){
- /* um... we didn;t get the initial header or comments yet */
- return(OV_EBADHEADER);
- }
- if(vi->codec_setup==NULL){
- /* improperly initialized vorbis_info */
- return(OV_EFAULT);
- }
- if(((codec_setup_info *)vi->codec_setup)->books>0){
- /* previously initialized setup header */
- return(OV_EBADHEADER);
- }
-
- return(_vorbis_unpack_books(vi,&opb));
-
- default:
- /* Not a valid vorbis header type */
- return(OV_EBADHEADER);
- break;
- }
- }
- }
- return(OV_EBADHEADER);
-}
-
-/* pack side **********************************************************/
-
-static int _vorbis_pack_info(oggpack_buffer *opb,vorbis_info *vi){
- codec_setup_info *ci=vi->codec_setup;
- if(!ci||
- ci->blocksizes[0]<64||
- ci->blocksizes[1]<ci->blocksizes[0]){
- return(OV_EFAULT);
- }
-
- /* preamble */
- oggpack_write(opb,0x01,8);
- _v_writestring(opb,"vorbis", 6);
-
- /* basic information about the stream */
- oggpack_write(opb,0x00,32);
- oggpack_write(opb,vi->channels,8);
- oggpack_write(opb,vi->rate,32);
-
- oggpack_write(opb,vi->bitrate_upper,32);
- oggpack_write(opb,vi->bitrate_nominal,32);
- oggpack_write(opb,vi->bitrate_lower,32);
-
- oggpack_write(opb,ov_ilog(ci->blocksizes[0]-1),4);
- oggpack_write(opb,ov_ilog(ci->blocksizes[1]-1),4);
- oggpack_write(opb,1,1);
-
- return(0);
-}
-
-static int _vorbis_pack_comment(oggpack_buffer *opb,vorbis_comment *vc){
- int bytes = strlen(ENCODE_VENDOR_STRING);
-
- /* preamble */
- oggpack_write(opb,0x03,8);
- _v_writestring(opb,"vorbis", 6);
-
- /* vendor */
- oggpack_write(opb,bytes,32);
- _v_writestring(opb,ENCODE_VENDOR_STRING, bytes);
-
- /* comments */
-
- oggpack_write(opb,vc->comments,32);
- if(vc->comments){
- int i;
- for(i=0;i<vc->comments;i++){
- if(vc->user_comments[i]){
- oggpack_write(opb,vc->comment_lengths[i],32);
- _v_writestring(opb,vc->user_comments[i], vc->comment_lengths[i]);
- }else{
- oggpack_write(opb,0,32);
- }
- }
- }
- oggpack_write(opb,1,1);
-
- return(0);
-}
-
-static int _vorbis_pack_books(oggpack_buffer *opb,vorbis_info *vi){
- codec_setup_info *ci=vi->codec_setup;
- int i;
- if(!ci)return(OV_EFAULT);
-
- oggpack_write(opb,0x05,8);
- _v_writestring(opb,"vorbis", 6);
-
- /* books */
- oggpack_write(opb,ci->books-1,8);
- for(i=0;i<ci->books;i++)
- if(vorbis_staticbook_pack(ci->book_param[i],opb))goto err_out;
-
- /* times; hook placeholders */
- oggpack_write(opb,0,6);
- oggpack_write(opb,0,16);
-
- /* floors */
- oggpack_write(opb,ci->floors-1,6);
- for(i=0;i<ci->floors;i++){
- oggpack_write(opb,ci->floor_type[i],16);
- if(_floor_P[ci->floor_type[i]]->pack)
- _floor_P[ci->floor_type[i]]->pack(ci->floor_param[i],opb);
- else
- goto err_out;
- }
-
- /* residues */
- oggpack_write(opb,ci->residues-1,6);
- for(i=0;i<ci->residues;i++){
- oggpack_write(opb,ci->residue_type[i],16);
- _residue_P[ci->residue_type[i]]->pack(ci->residue_param[i],opb);
- }
-
- /* maps */
- oggpack_write(opb,ci->maps-1,6);
- for(i=0;i<ci->maps;i++){
- oggpack_write(opb,ci->map_type[i],16);
- _mapping_P[ci->map_type[i]]->pack(vi,ci->map_param[i],opb);
- }
-
- /* modes */
- oggpack_write(opb,ci->modes-1,6);
- for(i=0;i<ci->modes;i++){
- oggpack_write(opb,ci->mode_param[i]->blockflag,1);
- oggpack_write(opb,ci->mode_param[i]->windowtype,16);
- oggpack_write(opb,ci->mode_param[i]->transformtype,16);
- oggpack_write(opb,ci->mode_param[i]->mapping,8);
- }
- oggpack_write(opb,1,1);
-
- return(0);
-err_out:
- return(-1);
-}
-
-int vorbis_commentheader_out(vorbis_comment *vc,
- ogg_packet *op){
-
- oggpack_buffer opb;
-
- oggpack_writeinit(&opb);
- if(_vorbis_pack_comment(&opb,vc)){
- oggpack_writeclear(&opb);
- return OV_EIMPL;
- }
-
- op->packet = _ogg_malloc(oggpack_bytes(&opb));
- memcpy(op->packet, opb.buffer, oggpack_bytes(&opb));
-
- op->bytes=oggpack_bytes(&opb);
- op->b_o_s=0;
- op->e_o_s=0;
- op->granulepos=0;
- op->packetno=1;
-
- oggpack_writeclear(&opb);
- return 0;
-}
-
-int vorbis_analysis_headerout(vorbis_dsp_state *v,
- vorbis_comment *vc,
- ogg_packet *op,
- ogg_packet *op_comm,
- ogg_packet *op_code){
- int ret=OV_EIMPL;
- vorbis_info *vi=v->vi;
- oggpack_buffer opb;
- private_state *b=v->backend_state;
-
- if(!b||vi->channels<=0){
- ret=OV_EFAULT;
- goto err_out;
- }
-
- /* first header packet **********************************************/
-
- oggpack_writeinit(&opb);
- if(_vorbis_pack_info(&opb,vi))goto err_out;
-
- /* build the packet */
- if(b->header)_ogg_free(b->header);
- b->header=_ogg_malloc(oggpack_bytes(&opb));
- memcpy(b->header,opb.buffer,oggpack_bytes(&opb));
- op->packet=b->header;
- op->bytes=oggpack_bytes(&opb);
- op->b_o_s=1;
- op->e_o_s=0;
- op->granulepos=0;
- op->packetno=0;
-
- /* second header packet (comments) **********************************/
-
- oggpack_reset(&opb);
- if(_vorbis_pack_comment(&opb,vc))goto err_out;
-
- if(b->header1)_ogg_free(b->header1);
- b->header1=_ogg_malloc(oggpack_bytes(&opb));
- memcpy(b->header1,opb.buffer,oggpack_bytes(&opb));
- op_comm->packet=b->header1;
- op_comm->bytes=oggpack_bytes(&opb);
- op_comm->b_o_s=0;
- op_comm->e_o_s=0;
- op_comm->granulepos=0;
- op_comm->packetno=1;
-
- /* third header packet (modes/codebooks) ****************************/
-
- oggpack_reset(&opb);
- if(_vorbis_pack_books(&opb,vi))goto err_out;
-
- if(b->header2)_ogg_free(b->header2);
- b->header2=_ogg_malloc(oggpack_bytes(&opb));
- memcpy(b->header2,opb.buffer,oggpack_bytes(&opb));
- op_code->packet=b->header2;
- op_code->bytes=oggpack_bytes(&opb);
- op_code->b_o_s=0;
- op_code->e_o_s=0;
- op_code->granulepos=0;
- op_code->packetno=2;
-
- oggpack_writeclear(&opb);
- return(0);
- err_out:
- memset(op,0,sizeof(*op));
- memset(op_comm,0,sizeof(*op_comm));
- memset(op_code,0,sizeof(*op_code));
-
- if(b){
- oggpack_writeclear(&opb);
- if(b->header)_ogg_free(b->header);
- if(b->header1)_ogg_free(b->header1);
- if(b->header2)_ogg_free(b->header2);
- b->header=NULL;
- b->header1=NULL;
- b->header2=NULL;
- }
- return(ret);
-}
-
-double vorbis_granule_time(vorbis_dsp_state *v,ogg_int64_t granulepos){
- if(granulepos == -1) return -1;
-
- /* We're not guaranteed a 64 bit unsigned type everywhere, so we
- have to put the unsigned granpo in a signed type. */
- if(granulepos>=0){
- return((double)granulepos/v->vi->rate);
- }else{
- ogg_int64_t granuleoff=0xffffffff;
- granuleoff<<=31;
- granuleoff|=0x7ffffffff;
- return(((double)granulepos+2+granuleoff+granuleoff)/v->vi->rate);
- }
-}
-
-const char *vorbis_version_string(void){
- return GENERAL_VENDOR_STRING;
-}
diff --git a/drivers/vorbis/lookup.c b/drivers/vorbis/lookup.c
deleted file mode 100644
index 3321ed3dbc..0000000000
--- a/drivers/vorbis/lookup.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: lookup based functions
- last mod: $Id: lookup.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#include <math.h>
-#include "lookup.h"
-#include "lookup_data.h"
-#include "os.h"
-#include "misc.h"
-
-#ifdef FLOAT_LOOKUP
-
-/* interpolated lookup based cos function, domain 0 to PI only */
-float vorbis_coslook(float a){
- double d=a*(.31830989*(float)COS_LOOKUP_SZ);
- int i=vorbis_ftoi(d-.5);
-
- return COS_LOOKUP[i]+ (d-i)*(COS_LOOKUP[i+1]-COS_LOOKUP[i]);
-}
-
-/* interpolated 1./sqrt(p) where .5 <= p < 1. */
-float vorbis_invsqlook(float a){
- double d=a*(2.f*(float)INVSQ_LOOKUP_SZ)-(float)INVSQ_LOOKUP_SZ;
- int i=vorbis_ftoi(d-.5f);
- return INVSQ_LOOKUP[i]+ (d-i)*(INVSQ_LOOKUP[i+1]-INVSQ_LOOKUP[i]);
-}
-
-/* interpolated 1./sqrt(p) where .5 <= p < 1. */
-float vorbis_invsq2explook(int a){
- return INVSQ2EXP_LOOKUP[a-INVSQ2EXP_LOOKUP_MIN];
-}
-
-#include <stdio.h>
-/* interpolated lookup based fromdB function, domain -140dB to 0dB only */
-float vorbis_fromdBlook(float a){
- int i=vorbis_ftoi(a*((float)(-(1<<FROMdB2_SHIFT)))-.5f);
- return (i<0)?1.f:
- ((i>=(FROMdB_LOOKUP_SZ<<FROMdB_SHIFT))?0.f:
- FROMdB_LOOKUP[i>>FROMdB_SHIFT]*FROMdB2_LOOKUP[i&FROMdB2_MASK]);
-}
-
-#endif
-
-#ifdef INT_LOOKUP
-/* interpolated 1./sqrt(p) where .5 <= a < 1. (.100000... to .111111...) in
- 16.16 format
-
- returns in m.8 format */
-long vorbis_invsqlook_i(long a,long e){
- long i=(a&0x7fff)>>(INVSQ_LOOKUP_I_SHIFT-1);
- long d=(a&INVSQ_LOOKUP_I_MASK)<<(16-INVSQ_LOOKUP_I_SHIFT); /* 0.16 */
- long val=INVSQ_LOOKUP_I[i]- /* 1.16 */
- (((INVSQ_LOOKUP_I[i]-INVSQ_LOOKUP_I[i+1])* /* 0.16 */
- d)>>16); /* result 1.16 */
-
- e+=32;
- if(e&1)val=(val*5792)>>13; /* multiply val by 1/sqrt(2) */
- e=(e>>1)-8;
-
- return(val>>e);
-}
-
-/* interpolated lookup based fromdB function, domain -140dB to 0dB only */
-/* a is in n.12 format */
-float vorbis_fromdBlook_i(long a){
- int i=(-a)>>(12-FROMdB2_SHIFT);
- return (i<0)?1.f:
- ((i>=(FROMdB_LOOKUP_SZ<<FROMdB_SHIFT))?0.f:
- FROMdB_LOOKUP[i>>FROMdB_SHIFT]*FROMdB2_LOOKUP[i&FROMdB2_MASK]);
-}
-
-/* interpolated lookup based cos function, domain 0 to PI only */
-/* a is in 0.16 format, where 0==0, 2^^16-1==PI, return 0.14 */
-long vorbis_coslook_i(long a){
- int i=a>>COS_LOOKUP_I_SHIFT;
- int d=a&COS_LOOKUP_I_MASK;
- return COS_LOOKUP_I[i]- ((d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>>
- COS_LOOKUP_I_SHIFT);
-}
-
-#endif
diff --git a/drivers/vorbis/lookup.h b/drivers/vorbis/lookup.h
deleted file mode 100644
index f8b5b82730..0000000000
--- a/drivers/vorbis/lookup.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: lookup based functions
- last mod: $Id: lookup.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_LOOKUP_H_
-
-#ifdef FLOAT_LOOKUP
-extern float vorbis_coslook(float a);
-extern float vorbis_invsqlook(float a);
-extern float vorbis_invsq2explook(int a);
-extern float vorbis_fromdBlook(float a);
-#endif
-#ifdef INT_LOOKUP
-extern long vorbis_invsqlook_i(long a,long e);
-extern long vorbis_coslook_i(long a);
-extern float vorbis_fromdBlook_i(long a);
-#endif
-
-#endif
diff --git a/drivers/vorbis/lookup_data.h b/drivers/vorbis/lookup_data.h
deleted file mode 100644
index 2424a1b386..0000000000
--- a/drivers/vorbis/lookup_data.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: lookup data; generated by lookups.pl; edit there
- last mod: $Id: lookup_data.h 16037 2009-05-26 21:10:58Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_LOOKUP_DATA_H_
-
-#ifdef FLOAT_LOOKUP
-#define COS_LOOKUP_SZ 128
-static const float COS_LOOKUP[COS_LOOKUP_SZ+1]={
- +1.0000000000000f,+0.9996988186962f,+0.9987954562052f,+0.9972904566787f,
- +0.9951847266722f,+0.9924795345987f,+0.9891765099648f,+0.9852776423889f,
- +0.9807852804032f,+0.9757021300385f,+0.9700312531945f,+0.9637760657954f,
- +0.9569403357322f,+0.9495281805930f,+0.9415440651830f,+0.9329927988347f,
- +0.9238795325113f,+0.9142097557035f,+0.9039892931234f,+0.8932243011955f,
- +0.8819212643484f,+0.8700869911087f,+0.8577286100003f,+0.8448535652497f,
- +0.8314696123025f,+0.8175848131516f,+0.8032075314806f,+0.7883464276266f,
- +0.7730104533627f,+0.7572088465065f,+0.7409511253550f,+0.7242470829515f,
- +0.7071067811865f,+0.6895405447371f,+0.6715589548470f,+0.6531728429538f,
- +0.6343932841636f,+0.6152315905806f,+0.5956993044924f,+0.5758081914178f,
- +0.5555702330196f,+0.5349976198871f,+0.5141027441932f,+0.4928981922298f,
- +0.4713967368260f,+0.4496113296546f,+0.4275550934303f,+0.4052413140050f,
- +0.3826834323651f,+0.3598950365350f,+0.3368898533922f,+0.3136817403989f,
- +0.2902846772545f,+0.2667127574749f,+0.2429801799033f,+0.2191012401569f,
- +0.1950903220161f,+0.1709618887603f,+0.1467304744554f,+0.1224106751992f,
- +0.0980171403296f,+0.0735645635997f,+0.0490676743274f,+0.0245412285229f,
- +0.0000000000000f,-0.0245412285229f,-0.0490676743274f,-0.0735645635997f,
- -0.0980171403296f,-0.1224106751992f,-0.1467304744554f,-0.1709618887603f,
- -0.1950903220161f,-0.2191012401569f,-0.2429801799033f,-0.2667127574749f,
- -0.2902846772545f,-0.3136817403989f,-0.3368898533922f,-0.3598950365350f,
- -0.3826834323651f,-0.4052413140050f,-0.4275550934303f,-0.4496113296546f,
- -0.4713967368260f,-0.4928981922298f,-0.5141027441932f,-0.5349976198871f,
- -0.5555702330196f,-0.5758081914178f,-0.5956993044924f,-0.6152315905806f,
- -0.6343932841636f,-0.6531728429538f,-0.6715589548470f,-0.6895405447371f,
- -0.7071067811865f,-0.7242470829515f,-0.7409511253550f,-0.7572088465065f,
- -0.7730104533627f,-0.7883464276266f,-0.8032075314806f,-0.8175848131516f,
- -0.8314696123025f,-0.8448535652497f,-0.8577286100003f,-0.8700869911087f,
- -0.8819212643484f,-0.8932243011955f,-0.9039892931234f,-0.9142097557035f,
- -0.9238795325113f,-0.9329927988347f,-0.9415440651830f,-0.9495281805930f,
- -0.9569403357322f,-0.9637760657954f,-0.9700312531945f,-0.9757021300385f,
- -0.9807852804032f,-0.9852776423889f,-0.9891765099648f,-0.9924795345987f,
- -0.9951847266722f,-0.9972904566787f,-0.9987954562052f,-0.9996988186962f,
- -1.0000000000000f,
-};
-
-#define INVSQ_LOOKUP_SZ 32
-static const float INVSQ_LOOKUP[INVSQ_LOOKUP_SZ+1]={
- 1.414213562373f,1.392621247646f,1.371988681140f,1.352246807566f,
- 1.333333333333f,1.315191898443f,1.297771369046f,1.281025230441f,
- 1.264911064067f,1.249390095109f,1.234426799697f,1.219988562661f,
- 1.206045378311f,1.192569588000f,1.179535649239f,1.166919931983f,
- 1.154700538379f,1.142857142857f,1.131370849898f,1.120224067222f,
- 1.109400392450f,1.098884511590f,1.088662107904f,1.078719779941f,
- 1.069044967650f,1.059625885652f,1.050451462878f,1.041511287847f,
- 1.032795558989f,1.024295039463f,1.016001016002f,1.007905261358f,
- 1.000000000000f,
-};
-
-#define INVSQ2EXP_LOOKUP_MIN (-32)
-#define INVSQ2EXP_LOOKUP_MAX 32
-static const float INVSQ2EXP_LOOKUP[INVSQ2EXP_LOOKUP_MAX-\
- INVSQ2EXP_LOOKUP_MIN+1]={
- 65536.f, 46340.95001f, 32768.f, 23170.47501f,
- 16384.f, 11585.2375f, 8192.f, 5792.618751f,
- 4096.f, 2896.309376f, 2048.f, 1448.154688f,
- 1024.f, 724.0773439f, 512.f, 362.038672f,
- 256.f, 181.019336f, 128.f, 90.50966799f,
- 64.f, 45.254834f, 32.f, 22.627417f,
- 16.f, 11.3137085f, 8.f, 5.656854249f,
- 4.f, 2.828427125f, 2.f, 1.414213562f,
- 1.f, 0.7071067812f, 0.5f, 0.3535533906f,
- 0.25f, 0.1767766953f, 0.125f, 0.08838834765f,
- 0.0625f, 0.04419417382f, 0.03125f, 0.02209708691f,
- 0.015625f, 0.01104854346f, 0.0078125f, 0.005524271728f,
- 0.00390625f, 0.002762135864f, 0.001953125f, 0.001381067932f,
- 0.0009765625f, 0.000690533966f, 0.00048828125f, 0.000345266983f,
- 0.000244140625f,0.0001726334915f,0.0001220703125f,8.631674575e-05f,
- 6.103515625e-05f,4.315837288e-05f,3.051757812e-05f,2.157918644e-05f,
- 1.525878906e-05f,
-};
-
-#endif
-
-#define FROMdB_LOOKUP_SZ 35
-#define FROMdB2_LOOKUP_SZ 32
-#define FROMdB_SHIFT 5
-#define FROMdB2_SHIFT 3
-#define FROMdB2_MASK 31
-
-#ifdef FLOAT_LOOKUP
-static const float FROMdB_LOOKUP[FROMdB_LOOKUP_SZ]={
- 1.f, 0.6309573445f, 0.3981071706f, 0.2511886432f,
- 0.1584893192f, 0.1f, 0.06309573445f, 0.03981071706f,
- 0.02511886432f, 0.01584893192f, 0.01f, 0.006309573445f,
- 0.003981071706f, 0.002511886432f, 0.001584893192f, 0.001f,
- 0.0006309573445f,0.0003981071706f,0.0002511886432f,0.0001584893192f,
- 0.0001f,6.309573445e-05f,3.981071706e-05f,2.511886432e-05f,
- 1.584893192e-05f, 1e-05f,6.309573445e-06f,3.981071706e-06f,
- 2.511886432e-06f,1.584893192e-06f, 1e-06f,6.309573445e-07f,
- 3.981071706e-07f,2.511886432e-07f,1.584893192e-07f,
-};
-
-static const float FROMdB2_LOOKUP[FROMdB2_LOOKUP_SZ]={
- 0.9928302478f, 0.9786445908f, 0.9646616199f, 0.9508784391f,
- 0.9372921937f, 0.92390007f, 0.9106992942f, 0.8976871324f,
- 0.8848608897f, 0.8722179097f, 0.8597555737f, 0.8474713009f,
- 0.835362547f, 0.8234268041f, 0.8116616003f, 0.8000644989f,
- 0.7886330981f, 0.7773650302f, 0.7662579617f, 0.755309592f,
- 0.7445176537f, 0.7338799116f, 0.7233941627f, 0.7130582353f,
- 0.7028699885f, 0.6928273125f, 0.6829281272f, 0.6731703824f,
- 0.6635520573f, 0.6540711597f, 0.6447257262f, 0.6355138211f,
-};
-#endif
-
-#ifdef INT_LOOKUP
-
-#define INVSQ_LOOKUP_I_SHIFT 10
-#define INVSQ_LOOKUP_I_MASK 1023
-static const long INVSQ_LOOKUP_I[64+1]={
- 92682l, 91966l, 91267l, 90583l,
- 89915l, 89261l, 88621l, 87995l,
- 87381l, 86781l, 86192l, 85616l,
- 85051l, 84497l, 83953l, 83420l,
- 82897l, 82384l, 81880l, 81385l,
- 80899l, 80422l, 79953l, 79492l,
- 79039l, 78594l, 78156l, 77726l,
- 77302l, 76885l, 76475l, 76072l,
- 75674l, 75283l, 74898l, 74519l,
- 74146l, 73778l, 73415l, 73058l,
- 72706l, 72359l, 72016l, 71679l,
- 71347l, 71019l, 70695l, 70376l,
- 70061l, 69750l, 69444l, 69141l,
- 68842l, 68548l, 68256l, 67969l,
- 67685l, 67405l, 67128l, 66855l,
- 66585l, 66318l, 66054l, 65794l,
- 65536l,
-};
-
-#define COS_LOOKUP_I_SHIFT 9
-#define COS_LOOKUP_I_MASK 511
-#define COS_LOOKUP_I_SZ 128
-static const long COS_LOOKUP_I[COS_LOOKUP_I_SZ+1]={
- 16384l, 16379l, 16364l, 16340l,
- 16305l, 16261l, 16207l, 16143l,
- 16069l, 15986l, 15893l, 15791l,
- 15679l, 15557l, 15426l, 15286l,
- 15137l, 14978l, 14811l, 14635l,
- 14449l, 14256l, 14053l, 13842l,
- 13623l, 13395l, 13160l, 12916l,
- 12665l, 12406l, 12140l, 11866l,
- 11585l, 11297l, 11003l, 10702l,
- 10394l, 10080l, 9760l, 9434l,
- 9102l, 8765l, 8423l, 8076l,
- 7723l, 7366l, 7005l, 6639l,
- 6270l, 5897l, 5520l, 5139l,
- 4756l, 4370l, 3981l, 3590l,
- 3196l, 2801l, 2404l, 2006l,
- 1606l, 1205l, 804l, 402l,
- 0l, -401l, -803l, -1204l,
- -1605l, -2005l, -2403l, -2800l,
- -3195l, -3589l, -3980l, -4369l,
- -4755l, -5138l, -5519l, -5896l,
- -6269l, -6638l, -7004l, -7365l,
- -7722l, -8075l, -8422l, -8764l,
- -9101l, -9433l, -9759l, -10079l,
- -10393l, -10701l, -11002l, -11296l,
- -11584l, -11865l, -12139l, -12405l,
- -12664l, -12915l, -13159l, -13394l,
- -13622l, -13841l, -14052l, -14255l,
- -14448l, -14634l, -14810l, -14977l,
- -15136l, -15285l, -15425l, -15556l,
- -15678l, -15790l, -15892l, -15985l,
- -16068l, -16142l, -16206l, -16260l,
- -16304l, -16339l, -16363l, -16378l,
- -16383l,
-};
-
-#endif
-
-#endif
diff --git a/drivers/vorbis/lpc.c b/drivers/vorbis/lpc.c
deleted file mode 100644
index f5199ec235..0000000000
--- a/drivers/vorbis/lpc.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: LPC low level routines
- last mod: $Id: lpc.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-/* Some of these routines (autocorrelator, LPC coefficient estimator)
- are derived from code written by Jutta Degener and Carsten Bormann;
- thus we include their copyright below. The entirety of this file
- is freely redistributable on the condition that both of these
- copyright notices are preserved without modification. */
-
-/* Preserved Copyright: *********************************************/
-
-/* Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
-Technische Universita"t Berlin
-
-Any use of this software is permitted provided that this notice is not
-removed and that neither the authors nor the Technische Universita"t
-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
-
-*********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "os.h"
-#include "smallft.h"
-#include "lpc.h"
-#include "scales.h"
-#include "misc.h"
-
-/* Autocorrelation LPC coeff generation algorithm invented by
- N. Levinson in 1947, modified by J. Durbin in 1959. */
-
-/* Input : n elements of time doamin data
- Output: m lpc coefficients, excitation energy */
-
-float vorbis_lpc_from_data(float *data,float *lpci,int n,int m){
- double *aut=alloca(sizeof(*aut)*(m+1));
- double *lpc=alloca(sizeof(*lpc)*(m));
- double error;
- double epsilon;
- int i,j;
-
- /* autocorrelation, p+1 lag coefficients */
- j=m+1;
- while(j--){
- double d=0; /* double needed for accumulator depth */
- for(i=j;i<n;i++)d+=(double)data[i]*data[i-j];
- aut[j]=d;
- }
-
- /* Generate lpc coefficients from autocorr values */
-
- /* set our noise floor to about -100dB */
- error=aut[0] * (1. + 1e-10);
- epsilon=1e-9*aut[0]+1e-10;
-
- for(i=0;i<m;i++){
- double r= -aut[i+1];
-
- if(error<epsilon){
- memset(lpc+i,0,(m-i)*sizeof(*lpc));
- goto done;
- }
-
- /* Sum up this iteration's reflection coefficient; note that in
- Vorbis we don't save it. If anyone wants to recycle this code
- and needs reflection coefficients, save the results of 'r' from
- each iteration. */
-
- for(j=0;j<i;j++)r-=lpc[j]*aut[i-j];
- r/=error;
-
- /* Update LPC coefficients and total error */
-
- lpc[i]=r;
- for(j=0;j<i/2;j++){
- double tmp=lpc[j];
-
- lpc[j]+=r*lpc[i-1-j];
- lpc[i-1-j]+=r*tmp;
- }
- if(i&1)lpc[j]+=lpc[j]*r;
-
- error*=1.-r*r;
-
- }
-
- done:
-
- /* slightly damp the filter */
- {
- double g = .99;
- double damp = g;
- for(j=0;j<m;j++){
- lpc[j]*=damp;
- damp*=g;
- }
- }
-
- for(j=0;j<m;j++)lpci[j]=(float)lpc[j];
-
- /* we need the error value to know how big an impulse to hit the
- filter with later */
-
- return error;
-}
-
-void vorbis_lpc_predict(float *coeff,float *prime,int m,
- float *data,long n){
-
- /* in: coeff[0...m-1] LPC coefficients
- prime[0...m-1] initial values (allocated size of n+m-1)
- out: data[0...n-1] data samples */
-
- long i,j,o,p;
- float y;
- float *work=alloca(sizeof(*work)*(m+n));
-
- if(!prime)
- for(i=0;i<m;i++)
- work[i]=0.f;
- else
- for(i=0;i<m;i++)
- work[i]=prime[i];
-
- for(i=0;i<n;i++){
- y=0;
- o=i;
- p=m;
- for(j=0;j<m;j++)
- y-=work[o++]*coeff[--p];
-
- data[i]=work[o]=y;
- }
-}
diff --git a/drivers/vorbis/lpc.h b/drivers/vorbis/lpc.h
deleted file mode 100644
index 39d237601b..0000000000
--- a/drivers/vorbis/lpc.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: LPC low level routines
- last mod: $Id: lpc.h 16037 2009-05-26 21:10:58Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_LPC_H_
-#define _V_LPC_H_
-
-#include "vorbis/codec.h"
-
-/* simple linear scale LPC code */
-extern float vorbis_lpc_from_data(float *data,float *lpc,int n,int m);
-
-extern void vorbis_lpc_predict(float *coeff,float *prime,int m,
- float *data,long n);
-
-#endif
diff --git a/drivers/vorbis/lsp.c b/drivers/vorbis/lsp.c
deleted file mode 100644
index 6a619f7b0c..0000000000
--- a/drivers/vorbis/lsp.c
+++ /dev/null
@@ -1,454 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: LSP (also called LSF) conversion routines
- last mod: $Id: lsp.c 19453 2015-03-02 22:35:34Z xiphmont $
-
- The LSP generation code is taken (with minimal modification and a
- few bugfixes) from "On the Computation of the LSP Frequencies" by
- Joseph Rothweiler (see http://www.rothweiler.us for contact info).
- The paper is available at:
-
- http://www.myown1.com/joe/lsf
-
- ********************************************************************/
-
-/* Note that the lpc-lsp conversion finds the roots of polynomial with
- an iterative root polisher (CACM algorithm 283). It *is* possible
- to confuse this algorithm into not converging; that should only
- happen with absurdly closely spaced roots (very sharp peaks in the
- LPC f response) which in turn should be impossible in our use of
- the code. If this *does* happen anyway, it's a bug in the floor
- finder; find the cause of the confusion (probably a single bin
- spike or accidental near-float-limit resolution problems) and
- correct it. */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "lsp.h"
-#include "os.h"
-#include "misc.h"
-#include "lookup.h"
-#include "scales.h"
-
-/* three possible LSP to f curve functions; the exact computation
- (float), a lookup based float implementation, and an integer
- implementation. The float lookup is likely the optimal choice on
- any machine with an FPU. The integer implementation is *not* fixed
- point (due to the need for a large dynamic range and thus a
- separately tracked exponent) and thus much more complex than the
- relatively simple float implementations. It's mostly for future
- work on a fully fixed point implementation for processors like the
- ARM family. */
-
-/* define either of these (preferably FLOAT_LOOKUP) to have faster
- but less precise implementation. */
-#undef FLOAT_LOOKUP
-#undef INT_LOOKUP
-
-#ifdef FLOAT_LOOKUP
-#include "lookup.c" /* catch this in the build system; we #include for
- compilers (like gcc) that can't inline across
- modules */
-
-/* side effect: changes *lsp to cosines of lsp */
-void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m,
- float amp,float ampoffset){
- int i;
- float wdel=M_PI/ln;
- vorbis_fpu_control fpu;
-
- vorbis_fpu_setround(&fpu);
- for(i=0;i<m;i++)lsp[i]=vorbis_coslook(lsp[i]);
-
- i=0;
- while(i<n){
- int k=map[i];
- int qexp;
- float p=.7071067812f;
- float q=.7071067812f;
- float w=vorbis_coslook(wdel*k);
- float *ftmp=lsp;
- int c=m>>1;
-
- while(c--){
- q*=ftmp[0]-w;
- p*=ftmp[1]-w;
- ftmp+=2;
- }
-
- if(m&1){
- /* odd order filter; slightly assymetric */
- /* the last coefficient */
- q*=ftmp[0]-w;
- q*=q;
- p*=p*(1.f-w*w);
- }else{
- /* even order filter; still symmetric */
- q*=q*(1.f+w);
- p*=p*(1.f-w);
- }
-
- q=frexp(p+q,&qexp);
- q=vorbis_fromdBlook(amp*
- vorbis_invsqlook(q)*
- vorbis_invsq2explook(qexp+m)-
- ampoffset);
-
- do{
- curve[i++]*=q;
- }while(map[i]==k);
- }
- vorbis_fpu_restore(fpu);
-}
-
-#else
-
-#ifdef INT_LOOKUP
-#include "lookup.c" /* catch this in the build system; we #include for
- compilers (like gcc) that can't inline across
- modules */
-
-static const int MLOOP_1[64]={
- 0,10,11,11, 12,12,12,12, 13,13,13,13, 13,13,13,13,
- 14,14,14,14, 14,14,14,14, 14,14,14,14, 14,14,14,14,
- 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
- 15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
-};
-
-static const int MLOOP_2[64]={
- 0,4,5,5, 6,6,6,6, 7,7,7,7, 7,7,7,7,
- 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8,
- 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9,
- 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9,
-};
-
-static const int MLOOP_3[8]={0,1,2,2,3,3,3,3};
-
-
-/* side effect: changes *lsp to cosines of lsp */
-void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m,
- float amp,float ampoffset){
-
- /* 0 <= m < 256 */
-
- /* set up for using all int later */
- int i;
- int ampoffseti=rint(ampoffset*4096.f);
- int ampi=rint(amp*16.f);
- long *ilsp=alloca(m*sizeof(*ilsp));
- for(i=0;i<m;i++)ilsp[i]=vorbis_coslook_i(lsp[i]/M_PI*65536.f+.5f);
-
- i=0;
- while(i<n){
- int j,k=map[i];
- unsigned long pi=46341; /* 2**-.5 in 0.16 */
- unsigned long qi=46341;
- int qexp=0,shift;
- long wi=vorbis_coslook_i(k*65536/ln);
-
- qi*=labs(ilsp[0]-wi);
- pi*=labs(ilsp[1]-wi);
-
- for(j=3;j<m;j+=2){
- if(!(shift=MLOOP_1[(pi|qi)>>25]))
- if(!(shift=MLOOP_2[(pi|qi)>>19]))
- shift=MLOOP_3[(pi|qi)>>16];
- qi=(qi>>shift)*labs(ilsp[j-1]-wi);
- pi=(pi>>shift)*labs(ilsp[j]-wi);
- qexp+=shift;
- }
- if(!(shift=MLOOP_1[(pi|qi)>>25]))
- if(!(shift=MLOOP_2[(pi|qi)>>19]))
- shift=MLOOP_3[(pi|qi)>>16];
-
- /* pi,qi normalized collectively, both tracked using qexp */
-
- if(m&1){
- /* odd order filter; slightly assymetric */
- /* the last coefficient */
- qi=(qi>>shift)*labs(ilsp[j-1]-wi);
- pi=(pi>>shift)<<14;
- qexp+=shift;
-
- if(!(shift=MLOOP_1[(pi|qi)>>25]))
- if(!(shift=MLOOP_2[(pi|qi)>>19]))
- shift=MLOOP_3[(pi|qi)>>16];
-
- pi>>=shift;
- qi>>=shift;
- qexp+=shift-14*((m+1)>>1);
-
- pi=((pi*pi)>>16);
- qi=((qi*qi)>>16);
- qexp=qexp*2+m;
-
- pi*=(1<<14)-((wi*wi)>>14);
- qi+=pi>>14;
-
- }else{
- /* even order filter; still symmetric */
-
- /* p*=p(1-w), q*=q(1+w), let normalization drift because it isn't
- worth tracking step by step */
-
- pi>>=shift;
- qi>>=shift;
- qexp+=shift-7*m;
-
- pi=((pi*pi)>>16);
- qi=((qi*qi)>>16);
- qexp=qexp*2+m;
-
- pi*=(1<<14)-wi;
- qi*=(1<<14)+wi;
- qi=(qi+pi)>>14;
-
- }
-
-
- /* we've let the normalization drift because it wasn't important;
- however, for the lookup, things must be normalized again. We
- need at most one right shift or a number of left shifts */
-
- if(qi&0xffff0000){ /* checks for 1.xxxxxxxxxxxxxxxx */
- qi>>=1; qexp++;
- }else
- while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/
- qi<<=1; qexp--;
- }
-
- amp=vorbis_fromdBlook_i(ampi* /* n.4 */
- vorbis_invsqlook_i(qi,qexp)-
- /* m.8, m+n<=8 */
- ampoffseti); /* 8.12[0] */
-
- curve[i]*=amp;
- while(map[++i]==k)curve[i]*=amp;
- }
-}
-
-#else
-
-/* old, nonoptimized but simple version for any poor sap who needs to
- figure out what the hell this code does, or wants the other
- fraction of a dB precision */
-
-/* side effect: changes *lsp to cosines of lsp */
-void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m,
- float amp,float ampoffset){
- int i;
- float wdel=M_PI/ln;
- for(i=0;i<m;i++)lsp[i]=2.f*cos(lsp[i]);
-
- i=0;
- while(i<n){
- int j,k=map[i];
- float p=.5f;
- float q=.5f;
- float w=2.f*cos(wdel*k);
- for(j=1;j<m;j+=2){
- q *= w-lsp[j-1];
- p *= w-lsp[j];
- }
- if(j==m){
- /* odd order filter; slightly assymetric */
- /* the last coefficient */
- q*=w-lsp[j-1];
- p*=p*(4.f-w*w);
- q*=q;
- }else{
- /* even order filter; still symmetric */
- p*=p*(2.f-w);
- q*=q*(2.f+w);
- }
-
- q=fromdB(amp/sqrt(p+q)-ampoffset);
-
- curve[i]*=q;
- while(map[++i]==k)curve[i]*=q;
- }
-}
-
-#endif
-#endif
-
-static void cheby(float *g, int ord) {
- int i, j;
-
- g[0] *= .5f;
- for(i=2; i<= ord; i++) {
- for(j=ord; j >= i; j--) {
- g[j-2] -= g[j];
- g[j] += g[j];
- }
- }
-}
-
-static int comp(const void *a,const void *b){
- return (*(float *)a<*(float *)b)-(*(float *)a>*(float *)b);
-}
-
-/* Newton-Raphson-Maehly actually functioned as a decent root finder,
- but there are root sets for which it gets into limit cycles
- (exacerbated by zero suppression) and fails. We can't afford to
- fail, even if the failure is 1 in 100,000,000, so we now use
- Laguerre and later polish with Newton-Raphson (which can then
- afford to fail) */
-
-#define EPSILON 10e-7
-static int Laguerre_With_Deflation(float *a,int ord,float *r){
- int i,m;
- double *defl=alloca(sizeof(*defl)*(ord+1));
- for(i=0;i<=ord;i++)defl[i]=a[i];
-
- for(m=ord;m>0;m--){
- double new=0.f,delta;
-
- /* iterate a root */
- while(1){
- double p=defl[m],pp=0.f,ppp=0.f,denom;
-
- /* eval the polynomial and its first two derivatives */
- for(i=m;i>0;i--){
- ppp = new*ppp + pp;
- pp = new*pp + p;
- p = new*p + defl[i-1];
- }
-
- /* Laguerre's method */
- denom=(m-1) * ((m-1)*pp*pp - m*p*ppp);
- if(denom<0)
- return(-1); /* complex root! The LPC generator handed us a bad filter */
-
- if(pp>0){
- denom = pp + sqrt(denom);
- if(denom<EPSILON)denom=EPSILON;
- }else{
- denom = pp - sqrt(denom);
- if(denom>-(EPSILON))denom=-(EPSILON);
- }
-
- delta = m*p/denom;
- new -= delta;
-
- if(delta<0.f)delta*=-1;
-
- if(fabs(delta/new)<10e-12)break;
- }
-
- r[m-1]=new;
-
- /* forward deflation */
-
- for(i=m;i>0;i--)
- defl[i-1]+=new*defl[i];
- defl++;
-
- }
- return(0);
-}
-
-
-/* for spit-and-polish only */
-static int Newton_Raphson(float *a,int ord,float *r){
- int i, k, count=0;
- double error=1.f;
- double *root=alloca(ord*sizeof(*root));
-
- for(i=0; i<ord;i++) root[i] = r[i];
-
- while(error>1e-20){
- error=0;
-
- for(i=0; i<ord; i++) { /* Update each point. */
- double pp=0.,delta;
- double rooti=root[i];
- double p=a[ord];
- for(k=ord-1; k>= 0; k--) {
-
- pp= pp* rooti + p;
- p = p * rooti + a[k];
- }
-
- delta = p/pp;
- root[i] -= delta;
- error+= delta*delta;
- }
-
- if(count>40)return(-1);
-
- count++;
- }
-
- /* Replaced the original bubble sort with a real sort. With your
- help, we can eliminate the bubble sort in our lifetime. --Monty */
-
- for(i=0; i<ord;i++) r[i] = root[i];
- return(0);
-}
-
-
-/* Convert lpc coefficients to lsp coefficients */
-int vorbis_lpc_to_lsp(float *lpc,float *lsp,int m){
- int order2=(m+1)>>1;
- int g1_order,g2_order;
- float *g1=alloca(sizeof(*g1)*(order2+1));
- float *g2=alloca(sizeof(*g2)*(order2+1));
- float *g1r=alloca(sizeof(*g1r)*(order2+1));
- float *g2r=alloca(sizeof(*g2r)*(order2+1));
- int i;
-
- /* even and odd are slightly different base cases */
- g1_order=(m+1)>>1;
- g2_order=(m) >>1;
-
- /* Compute the lengths of the x polynomials. */
- /* Compute the first half of K & R F1 & F2 polynomials. */
- /* Compute half of the symmetric and antisymmetric polynomials. */
- /* Remove the roots at +1 and -1. */
-
- g1[g1_order] = 1.f;
- for(i=1;i<=g1_order;i++) g1[g1_order-i] = lpc[i-1]+lpc[m-i];
- g2[g2_order] = 1.f;
- for(i=1;i<=g2_order;i++) g2[g2_order-i] = lpc[i-1]-lpc[m-i];
-
- if(g1_order>g2_order){
- for(i=2; i<=g2_order;i++) g2[g2_order-i] += g2[g2_order-i+2];
- }else{
- for(i=1; i<=g1_order;i++) g1[g1_order-i] -= g1[g1_order-i+1];
- for(i=1; i<=g2_order;i++) g2[g2_order-i] += g2[g2_order-i+1];
- }
-
- /* Convert into polynomials in cos(alpha) */
- cheby(g1,g1_order);
- cheby(g2,g2_order);
-
- /* Find the roots of the 2 even polynomials.*/
- if(Laguerre_With_Deflation(g1,g1_order,g1r) ||
- Laguerre_With_Deflation(g2,g2_order,g2r))
- return(-1);
-
- Newton_Raphson(g1,g1_order,g1r); /* if it fails, it leaves g1r alone */
- Newton_Raphson(g2,g2_order,g2r); /* if it fails, it leaves g2r alone */
-
- qsort(g1r,g1_order,sizeof(*g1r),comp);
- qsort(g2r,g2_order,sizeof(*g2r),comp);
-
- for(i=0;i<g1_order;i++)
- lsp[i*2] = acos(g1r[i]);
-
- for(i=0;i<g2_order;i++)
- lsp[i*2+1] = acos(g2r[i]);
- return(0);
-}
diff --git a/drivers/vorbis/lsp.h b/drivers/vorbis/lsp.h
deleted file mode 100644
index bacfb0971f..0000000000
--- a/drivers/vorbis/lsp.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: LSP (also called LSF) conversion routines
- last mod: $Id: lsp.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-
-#ifndef _V_LSP_H_
-#define _V_LSP_H_
-
-extern int vorbis_lpc_to_lsp(float *lpc,float *lsp,int m);
-
-extern void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,
- float *lsp,int m,
- float amp,float ampoffset);
-
-#endif
diff --git a/drivers/vorbis/mapping0.c b/drivers/vorbis/mapping0.c
deleted file mode 100644
index 85c7d22d83..0000000000
--- a/drivers/vorbis/mapping0.c
+++ /dev/null
@@ -1,810 +0,0 @@
-/********************************************************************
- * *
- * 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-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: channel mapping 0 implementation
- last mod: $Id: mapping0.c 19441 2015-01-21 01:17:41Z xiphmont $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "codebook.h"
-#include "window.h"
-#include "registry.h"
-#include "psy.h"
-#include "misc.h"
-
-/* simplistic, wasteful way of doing this (unique lookup for each
- mode/submapping); there should be a central repository for
- identical lookups. That will require minor work, so I'm putting it
- off as low priority.
-
- Why a lookup for each backend in a given mode? Because the
- blocksize is set by the mode, and low backend lookups may require
- parameters from other areas of the mode/mapping */
-
-static void mapping0_free_info(vorbis_info_mapping *i){
- vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)i;
- if(info){
- memset(info,0,sizeof(*info));
- _ogg_free(info);
- }
-}
-
-static void mapping0_pack(vorbis_info *vi,vorbis_info_mapping *vm,
- oggpack_buffer *opb){
- int i;
- vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)vm;
-
- /* another 'we meant to do it this way' hack... up to beta 4, we
- packed 4 binary zeros here to signify one submapping in use. We
- now redefine that to mean four bitflags that indicate use of
- deeper features; bit0:submappings, bit1:coupling,
- bit2,3:reserved. This is backward compatable with all actual uses
- of the beta code. */
-
- if(info->submaps>1){
- oggpack_write(opb,1,1);
- oggpack_write(opb,info->submaps-1,4);
- }else
- oggpack_write(opb,0,1);
-
- if(info->coupling_steps>0){
- oggpack_write(opb,1,1);
- oggpack_write(opb,info->coupling_steps-1,8);
-
- for(i=0;i<info->coupling_steps;i++){
- oggpack_write(opb,info->coupling_mag[i],ov_ilog(vi->channels-1));
- oggpack_write(opb,info->coupling_ang[i],ov_ilog(vi->channels-1));
- }
- }else
- oggpack_write(opb,0,1);
-
- oggpack_write(opb,0,2); /* 2,3:reserved */
-
- /* we don't write the channel submappings if we only have one... */
- if(info->submaps>1){
- for(i=0;i<vi->channels;i++)
- oggpack_write(opb,info->chmuxlist[i],4);
- }
- for(i=0;i<info->submaps;i++){
- oggpack_write(opb,0,8); /* time submap unused */
- oggpack_write(opb,info->floorsubmap[i],8);
- oggpack_write(opb,info->residuesubmap[i],8);
- }
-}
-
-/* also responsible for range checking */
-static vorbis_info_mapping *mapping0_unpack(vorbis_info *vi,oggpack_buffer *opb){
- int i,b;
- vorbis_info_mapping0 *info=_ogg_calloc(1,sizeof(*info));
- codec_setup_info *ci=vi->codec_setup;
- memset(info,0,sizeof(*info));
- if(vi->channels<=0)goto err_out;
-
- b=oggpack_read(opb,1);
- if(b<0)goto err_out;
- if(b){
- info->submaps=oggpack_read(opb,4)+1;
- if(info->submaps<=0)goto err_out;
- }else
- info->submaps=1;
-
- b=oggpack_read(opb,1);
- if(b<0)goto err_out;
- if(b){
- info->coupling_steps=oggpack_read(opb,8)+1;
- if(info->coupling_steps<=0)goto err_out;
- for(i=0;i<info->coupling_steps;i++){
- /* vi->channels > 0 is enforced in the caller */
- int testM=info->coupling_mag[i]=
- oggpack_read(opb,ov_ilog(vi->channels-1));
- int testA=info->coupling_ang[i]=
- oggpack_read(opb,ov_ilog(vi->channels-1));
-
- if(testM<0 ||
- testA<0 ||
- testM==testA ||
- testM>=vi->channels ||
- testA>=vi->channels) goto err_out;
- }
-
- }
-
- if(oggpack_read(opb,2)!=0)goto err_out; /* 2,3:reserved */
-
- if(info->submaps>1){
- for(i=0;i<vi->channels;i++){
- info->chmuxlist[i]=oggpack_read(opb,4);
- if(info->chmuxlist[i]>=info->submaps || info->chmuxlist[i]<0)goto err_out;
- }
- }
- for(i=0;i<info->submaps;i++){
- oggpack_read(opb,8); /* time submap unused */
- info->floorsubmap[i]=oggpack_read(opb,8);
- if(info->floorsubmap[i]>=ci->floors || info->floorsubmap[i]<0)goto err_out;
- info->residuesubmap[i]=oggpack_read(opb,8);
- if(info->residuesubmap[i]>=ci->residues || info->residuesubmap[i]<0)goto err_out;
- }
-
- return info;
-
- err_out:
- mapping0_free_info(info);
- return(NULL);
-}
-
-#include "os.h"
-#include "lpc.h"
-#include "lsp.h"
-#include "envelope.h"
-#include "mdct.h"
-#include "psy.h"
-#include "scales.h"
-
-#if 0
-static long seq=0;
-static ogg_int64_t total=0;
-static float FLOOR1_fromdB_LOOKUP[256]={
- 1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F,
- 1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F,
- 1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F,
- 2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F,
- 2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F,
- 3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F,
- 4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F,
- 6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F,
- 7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F,
- 1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F,
- 1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F,
- 1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F,
- 2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F,
- 2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F,
- 3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F,
- 4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F,
- 5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F,
- 7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F,
- 9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F,
- 1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F,
- 1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F,
- 2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F,
- 2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F,
- 3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F,
- 4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F,
- 5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F,
- 7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F,
- 9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F,
- 0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F,
- 0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F,
- 0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F,
- 0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F,
- 0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F,
- 0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F,
- 0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F,
- 0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F,
- 0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F,
- 0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F,
- 0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F,
- 0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F,
- 0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F,
- 0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F,
- 0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F,
- 0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F,
- 0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F,
- 0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F,
- 0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F,
- 0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F,
- 0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F,
- 0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F,
- 0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F,
- 0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F,
- 0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F,
- 0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F,
- 0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F,
- 0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F,
- 0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F,
- 0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F,
- 0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F,
- 0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F,
- 0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F,
- 0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F,
- 0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F,
- 0.82788260F, 0.88168307F, 0.9389798F, 1.F,
-};
-
-#endif
-
-
-static int mapping0_forward(vorbis_block *vb){
- vorbis_dsp_state *vd=vb->vd;
- vorbis_info *vi=vd->vi;
- codec_setup_info *ci=vi->codec_setup;
- private_state *b=vb->vd->backend_state;
- vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal;
- int n=vb->pcmend;
- int i,j,k;
-
- int *nonzero = alloca(sizeof(*nonzero)*vi->channels);
- float **gmdct = _vorbis_block_alloc(vb,vi->channels*sizeof(*gmdct));
- int **iwork = _vorbis_block_alloc(vb,vi->channels*sizeof(*iwork));
- int ***floor_posts = _vorbis_block_alloc(vb,vi->channels*sizeof(*floor_posts));
-
- float global_ampmax=vbi->ampmax;
- float *local_ampmax=alloca(sizeof(*local_ampmax)*vi->channels);
- int blocktype=vbi->blocktype;
-
- int modenumber=vb->W;
- vorbis_info_mapping0 *info=ci->map_param[modenumber];
- vorbis_look_psy *psy_look=b->psy+blocktype+(vb->W?2:0);
-
- vb->mode=modenumber;
-
- for(i=0;i<vi->channels;i++){
- float scale=4.f/n;
- float scale_dB;
-
- float *pcm =vb->pcm[i];
- float *logfft =pcm;
-
- iwork[i]=_vorbis_block_alloc(vb,n/2*sizeof(**iwork));
- gmdct[i]=_vorbis_block_alloc(vb,n/2*sizeof(**gmdct));
-
- scale_dB=todB(&scale) + .345; /* + .345 is a hack; the original
- todB estimation used on IEEE 754
- compliant machines had a bug that
- returned dB values about a third
- of a decibel too high. The bug
- was harmless because tunings
- implicitly took that into
- account. However, fixing the bug
- in the estimator requires
- changing all the tunings as well.
- For now, it's easier to sync
- things back up here, and
- recalibrate the tunings in the
- next major model upgrade. */
-
-#if 0
- if(vi->channels==2){
- if(i==0)
- _analysis_output("pcmL",seq,pcm,n,0,0,total-n/2);
- else
- _analysis_output("pcmR",seq,pcm,n,0,0,total-n/2);
- }else{
- _analysis_output("pcm",seq,pcm,n,0,0,total-n/2);
- }
-#endif
-
- /* window the PCM data */
- _vorbis_apply_window(pcm,b->window,ci->blocksizes,vb->lW,vb->W,vb->nW);
-
-#if 0
- if(vi->channels==2){
- if(i==0)
- _analysis_output("windowedL",seq,pcm,n,0,0,total-n/2);
- else
- _analysis_output("windowedR",seq,pcm,n,0,0,total-n/2);
- }else{
- _analysis_output("windowed",seq,pcm,n,0,0,total-n/2);
- }
-#endif
-
- /* transform the PCM data */
- /* only MDCT right now.... */
- mdct_forward(b->transform[vb->W][0],pcm,gmdct[i]);
-
- /* FFT yields more accurate tonal estimation (not phase sensitive) */
- drft_forward(&b->fft_look[vb->W],pcm);
- logfft[0]=scale_dB+todB(pcm) + .345; /* + .345 is a hack; the
- original todB estimation used on
- IEEE 754 compliant machines had a
- bug that returned dB values about
- a third of a decibel too high.
- The bug was harmless because
- tunings implicitly took that into
- account. However, fixing the bug
- in the estimator requires
- changing all the tunings as well.
- For now, it's easier to sync
- things back up here, and
- recalibrate the tunings in the
- next major model upgrade. */
- local_ampmax[i]=logfft[0];
- for(j=1;j<n-1;j+=2){
- float temp=pcm[j]*pcm[j]+pcm[j+1]*pcm[j+1];
- temp=logfft[(j+1)>>1]=scale_dB+.5f*todB(&temp) + .345; /* +
- .345 is a hack; the original todB
- estimation used on IEEE 754
- compliant machines had a bug that
- returned dB values about a third
- of a decibel too high. The bug
- was harmless because tunings
- implicitly took that into
- account. However, fixing the bug
- in the estimator requires
- changing all the tunings as well.
- For now, it's easier to sync
- things back up here, and
- recalibrate the tunings in the
- next major model upgrade. */
- if(temp>local_ampmax[i])local_ampmax[i]=temp;
- }
-
- if(local_ampmax[i]>0.f)local_ampmax[i]=0.f;
- if(local_ampmax[i]>global_ampmax)global_ampmax=local_ampmax[i];
-
-#if 0
- if(vi->channels==2){
- if(i==0){
- _analysis_output("fftL",seq,logfft,n/2,1,0,0);
- }else{
- _analysis_output("fftR",seq,logfft,n/2,1,0,0);
- }
- }else{
- _analysis_output("fft",seq,logfft,n/2,1,0,0);
- }
-#endif
-
- }
-
- {
- float *noise = _vorbis_block_alloc(vb,n/2*sizeof(*noise));
- float *tone = _vorbis_block_alloc(vb,n/2*sizeof(*tone));
-
- for(i=0;i<vi->channels;i++){
- /* the encoder setup assumes that all the modes used by any
- specific bitrate tweaking use the same floor */
-
- int submap=info->chmuxlist[i];
-
- /* the following makes things clearer to *me* anyway */
- float *mdct =gmdct[i];
- float *logfft =vb->pcm[i];
-
- float *logmdct =logfft+n/2;
- float *logmask =logfft;
-
- vb->mode=modenumber;
-
- floor_posts[i]=_vorbis_block_alloc(vb,PACKETBLOBS*sizeof(**floor_posts));
- memset(floor_posts[i],0,sizeof(**floor_posts)*PACKETBLOBS);
-
- for(j=0;j<n/2;j++)
- logmdct[j]=todB(mdct+j) + .345; /* + .345 is a hack; the original
- todB estimation used on IEEE 754
- compliant machines had a bug that
- returned dB values about a third
- of a decibel too high. The bug
- was harmless because tunings
- implicitly took that into
- account. However, fixing the bug
- in the estimator requires
- changing all the tunings as well.
- For now, it's easier to sync
- things back up here, and
- recalibrate the tunings in the
- next major model upgrade. */
-
-#if 0
- if(vi->channels==2){
- if(i==0)
- _analysis_output("mdctL",seq,logmdct,n/2,1,0,0);
- else
- _analysis_output("mdctR",seq,logmdct,n/2,1,0,0);
- }else{
- _analysis_output("mdct",seq,logmdct,n/2,1,0,0);
- }
-#endif
-
- /* first step; noise masking. Not only does 'noise masking'
- give us curves from which we can decide how much resolution
- to give noise parts of the spectrum, it also implicitly hands
- us a tonality estimate (the larger the value in the
- 'noise_depth' vector, the more tonal that area is) */
-
- _vp_noisemask(psy_look,
- logmdct,
- noise); /* noise does not have by-frequency offset
- bias applied yet */
-#if 0
- if(vi->channels==2){
- if(i==0)
- _analysis_output("noiseL",seq,noise,n/2,1,0,0);
- else
- _analysis_output("noiseR",seq,noise,n/2,1,0,0);
- }else{
- _analysis_output("noise",seq,noise,n/2,1,0,0);
- }
-#endif
-
- /* second step: 'all the other crap'; all the stuff that isn't
- computed/fit for bitrate management goes in the second psy
- vector. This includes tone masking, peak limiting and ATH */
-
- _vp_tonemask(psy_look,
- logfft,
- tone,
- global_ampmax,
- local_ampmax[i]);
-
-#if 0
- if(vi->channels==2){
- if(i==0)
- _analysis_output("toneL",seq,tone,n/2,1,0,0);
- else
- _analysis_output("toneR",seq,tone,n/2,1,0,0);
- }else{
- _analysis_output("tone",seq,tone,n/2,1,0,0);
- }
-#endif
-
- /* third step; we offset the noise vectors, overlay tone
- masking. We then do a floor1-specific line fit. If we're
- performing bitrate management, the line fit is performed
- multiple times for up/down tweakage on demand. */
-
-#if 0
- {
- float aotuv[psy_look->n];
-#endif
-
- _vp_offset_and_mix(psy_look,
- noise,
- tone,
- 1,
- logmask,
- mdct,
- logmdct);
-
-#if 0
- if(vi->channels==2){
- if(i==0)
- _analysis_output("aotuvM1_L",seq,aotuv,psy_look->n,1,1,0);
- else
- _analysis_output("aotuvM1_R",seq,aotuv,psy_look->n,1,1,0);
- }else{
- _analysis_output("aotuvM1",seq,aotuv,psy_look->n,1,1,0);
- }
- }
-#endif
-
-
-#if 0
- if(vi->channels==2){
- if(i==0)
- _analysis_output("mask1L",seq,logmask,n/2,1,0,0);
- else
- _analysis_output("mask1R",seq,logmask,n/2,1,0,0);
- }else{
- _analysis_output("mask1",seq,logmask,n/2,1,0,0);
- }
-#endif
-
- /* this algorithm is hardwired to floor 1 for now; abort out if
- we're *not* floor1. This won't happen unless someone has
- broken the encode setup lib. Guard it anyway. */
- if(ci->floor_type[info->floorsubmap[submap]]!=1)return(-1);
-
- floor_posts[i][PACKETBLOBS/2]=
- floor1_fit(vb,b->flr[info->floorsubmap[submap]],
- logmdct,
- logmask);
-
- /* are we managing bitrate? If so, perform two more fits for
- later rate tweaking (fits represent hi/lo) */
- if(vorbis_bitrate_managed(vb) && floor_posts[i][PACKETBLOBS/2]){
- /* higher rate by way of lower noise curve */
-
- _vp_offset_and_mix(psy_look,
- noise,
- tone,
- 2,
- logmask,
- mdct,
- logmdct);
-
-#if 0
- if(vi->channels==2){
- if(i==0)
- _analysis_output("mask2L",seq,logmask,n/2,1,0,0);
- else
- _analysis_output("mask2R",seq,logmask,n/2,1,0,0);
- }else{
- _analysis_output("mask2",seq,logmask,n/2,1,0,0);
- }
-#endif
-
- floor_posts[i][PACKETBLOBS-1]=
- floor1_fit(vb,b->flr[info->floorsubmap[submap]],
- logmdct,
- logmask);
-
- /* lower rate by way of higher noise curve */
- _vp_offset_and_mix(psy_look,
- noise,
- tone,
- 0,
- logmask,
- mdct,
- logmdct);
-
-#if 0
- if(vi->channels==2){
- if(i==0)
- _analysis_output("mask0L",seq,logmask,n/2,1,0,0);
- else
- _analysis_output("mask0R",seq,logmask,n/2,1,0,0);
- }else{
- _analysis_output("mask0",seq,logmask,n/2,1,0,0);
- }
-#endif
-
- floor_posts[i][0]=
- floor1_fit(vb,b->flr[info->floorsubmap[submap]],
- logmdct,
- logmask);
-
- /* we also interpolate a range of intermediate curves for
- intermediate rates */
- for(k=1;k<PACKETBLOBS/2;k++)
- floor_posts[i][k]=
- floor1_interpolate_fit(vb,b->flr[info->floorsubmap[submap]],
- floor_posts[i][0],
- floor_posts[i][PACKETBLOBS/2],
- k*65536/(PACKETBLOBS/2));
- for(k=PACKETBLOBS/2+1;k<PACKETBLOBS-1;k++)
- floor_posts[i][k]=
- floor1_interpolate_fit(vb,b->flr[info->floorsubmap[submap]],
- floor_posts[i][PACKETBLOBS/2],
- floor_posts[i][PACKETBLOBS-1],
- (k-PACKETBLOBS/2)*65536/(PACKETBLOBS/2));
- }
- }
- }
- vbi->ampmax=global_ampmax;
-
- /*
- the next phases are performed once for vbr-only and PACKETBLOB
- times for bitrate managed modes.
-
- 1) encode actual mode being used
- 2) encode the floor for each channel, compute coded mask curve/res
- 3) normalize and couple.
- 4) encode residue
- 5) save packet bytes to the packetblob vector
-
- */
-
- /* iterate over the many masking curve fits we've created */
-
- {
- int **couple_bundle=alloca(sizeof(*couple_bundle)*vi->channels);
- int *zerobundle=alloca(sizeof(*zerobundle)*vi->channels);
-
- for(k=(vorbis_bitrate_managed(vb)?0:PACKETBLOBS/2);
- k<=(vorbis_bitrate_managed(vb)?PACKETBLOBS-1:PACKETBLOBS/2);
- k++){
- oggpack_buffer *opb=vbi->packetblob[k];
-
- /* start out our new packet blob with packet type and mode */
- /* Encode the packet type */
- oggpack_write(opb,0,1);
- /* Encode the modenumber */
- /* Encode frame mode, pre,post windowsize, then dispatch */
- oggpack_write(opb,modenumber,b->modebits);
- if(vb->W){
- oggpack_write(opb,vb->lW,1);
- oggpack_write(opb,vb->nW,1);
- }
-
- /* encode floor, compute masking curve, sep out residue */
- for(i=0;i<vi->channels;i++){
- int submap=info->chmuxlist[i];
- int *ilogmask=iwork[i];
-
- nonzero[i]=floor1_encode(opb,vb,b->flr[info->floorsubmap[submap]],
- floor_posts[i][k],
- ilogmask);
-#if 0
- {
- char buf[80];
- sprintf(buf,"maskI%c%d",i?'R':'L',k);
- float work[n/2];
- for(j=0;j<n/2;j++)
- work[j]=FLOOR1_fromdB_LOOKUP[iwork[i][j]];
- _analysis_output(buf,seq,work,n/2,1,1,0);
- }
-#endif
- }
-
- /* our iteration is now based on masking curve, not prequant and
- coupling. Only one prequant/coupling step */
-
- /* quantize/couple */
- /* incomplete implementation that assumes the tree is all depth
- one, or no tree at all */
- _vp_couple_quantize_normalize(k,
- &ci->psy_g_param,
- psy_look,
- info,
- gmdct,
- iwork,
- nonzero,
- ci->psy_g_param.sliding_lowpass[vb->W][k],
- vi->channels);
-
-#if 0
- for(i=0;i<vi->channels;i++){
- char buf[80];
- sprintf(buf,"res%c%d",i?'R':'L',k);
- float work[n/2];
- for(j=0;j<n/2;j++)
- work[j]=iwork[i][j];
- _analysis_output(buf,seq,work,n/2,1,0,0);
- }
-#endif
-
- /* classify and encode by submap */
- for(i=0;i<info->submaps;i++){
- int ch_in_bundle=0;
- long **classifications;
- int resnum=info->residuesubmap[i];
-
- for(j=0;j<vi->channels;j++){
- if(info->chmuxlist[j]==i){
- zerobundle[ch_in_bundle]=0;
- if(nonzero[j])zerobundle[ch_in_bundle]=1;
- couple_bundle[ch_in_bundle++]=iwork[j];
- }
- }
-
- classifications=_residue_P[ci->residue_type[resnum]]->
- class(vb,b->residue[resnum],couple_bundle,zerobundle,ch_in_bundle);
-
- ch_in_bundle=0;
- for(j=0;j<vi->channels;j++)
- if(info->chmuxlist[j]==i)
- couple_bundle[ch_in_bundle++]=iwork[j];
-
- _residue_P[ci->residue_type[resnum]]->
- forward(opb,vb,b->residue[resnum],
- couple_bundle,zerobundle,ch_in_bundle,classifications,i);
- }
-
- /* ok, done encoding. Next protopacket. */
- }
-
- }
-
-#if 0
- seq++;
- total+=ci->blocksizes[vb->W]/4+ci->blocksizes[vb->nW]/4;
-#endif
- return(0);
-}
-
-static int mapping0_inverse(vorbis_block *vb,vorbis_info_mapping *l){
- vorbis_dsp_state *vd=vb->vd;
- vorbis_info *vi=vd->vi;
- codec_setup_info *ci=vi->codec_setup;
- private_state *b=vd->backend_state;
- vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)l;
-
- int i,j;
- long n=vb->pcmend=ci->blocksizes[vb->W];
-
- float **pcmbundle=alloca(sizeof(*pcmbundle)*vi->channels);
- int *zerobundle=alloca(sizeof(*zerobundle)*vi->channels);
-
- int *nonzero =alloca(sizeof(*nonzero)*vi->channels);
- void **floormemo=alloca(sizeof(*floormemo)*vi->channels);
-
- /* recover the spectral envelope; store it in the PCM vector for now */
- for(i=0;i<vi->channels;i++){
- int submap=info->chmuxlist[i];
- floormemo[i]=_floor_P[ci->floor_type[info->floorsubmap[submap]]]->
- inverse1(vb,b->flr[info->floorsubmap[submap]]);
- if(floormemo[i])
- nonzero[i]=1;
- else
- nonzero[i]=0;
- memset(vb->pcm[i],0,sizeof(*vb->pcm[i])*n/2);
- }
-
- /* channel coupling can 'dirty' the nonzero listing */
- for(i=0;i<info->coupling_steps;i++){
- if(nonzero[info->coupling_mag[i]] ||
- nonzero[info->coupling_ang[i]]){
- nonzero[info->coupling_mag[i]]=1;
- nonzero[info->coupling_ang[i]]=1;
- }
- }
-
- /* recover the residue into our working vectors */
- for(i=0;i<info->submaps;i++){
- int ch_in_bundle=0;
- for(j=0;j<vi->channels;j++){
- if(info->chmuxlist[j]==i){
- if(nonzero[j])
- zerobundle[ch_in_bundle]=1;
- else
- zerobundle[ch_in_bundle]=0;
- pcmbundle[ch_in_bundle++]=vb->pcm[j];
- }
- }
-
- _residue_P[ci->residue_type[info->residuesubmap[i]]]->
- inverse(vb,b->residue[info->residuesubmap[i]],
- pcmbundle,zerobundle,ch_in_bundle);
- }
-
- /* channel coupling */
- for(i=info->coupling_steps-1;i>=0;i--){
- float *pcmM=vb->pcm[info->coupling_mag[i]];
- float *pcmA=vb->pcm[info->coupling_ang[i]];
-
- for(j=0;j<n/2;j++){
- float mag=pcmM[j];
- float ang=pcmA[j];
-
- if(mag>0)
- if(ang>0){
- pcmM[j]=mag;
- pcmA[j]=mag-ang;
- }else{
- pcmA[j]=mag;
- pcmM[j]=mag+ang;
- }
- else
- if(ang>0){
- pcmM[j]=mag;
- pcmA[j]=mag+ang;
- }else{
- pcmA[j]=mag;
- pcmM[j]=mag-ang;
- }
- }
- }
-
- /* compute and apply spectral envelope */
- for(i=0;i<vi->channels;i++){
- float *pcm=vb->pcm[i];
- int submap=info->chmuxlist[i];
- _floor_P[ci->floor_type[info->floorsubmap[submap]]]->
- inverse2(vb,b->flr[info->floorsubmap[submap]],
- floormemo[i],pcm);
- }
-
- /* transform the PCM data; takes PCM vector, vb; modifies PCM vector */
- /* only MDCT right now.... */
- for(i=0;i<vi->channels;i++){
- float *pcm=vb->pcm[i];
- mdct_backward(b->transform[vb->W][0],pcm,pcm);
- }
-
- /* all done! */
- return(0);
-}
-
-/* export hooks */
-const vorbis_func_mapping mapping0_exportbundle={
- &mapping0_pack,
- &mapping0_unpack,
- &mapping0_free_info,
- &mapping0_forward,
- &mapping0_inverse
-};
diff --git a/drivers/vorbis/masking.h b/drivers/vorbis/masking.h
deleted file mode 100644
index 3576ab7885..0000000000
--- a/drivers/vorbis/masking.h
+++ /dev/null
@@ -1,785 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: masking curve data for psychoacoustics
- last mod: $Id: masking.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_MASKING_H_
-#define _V_MASKING_H_
-
-/* more detailed ATH; the bass if flat to save stressing the floor
- overly for only a bin or two of savings. */
-
-#define MAX_ATH 88
-static const float ATH[]={
- /*15*/ -51, -52, -53, -54, -55, -56, -57, -58,
- /*31*/ -59, -60, -61, -62, -63, -64, -65, -66,
- /*63*/ -67, -68, -69, -70, -71, -72, -73, -74,
- /*125*/ -75, -76, -77, -78, -80, -81, -82, -83,
- /*250*/ -84, -85, -86, -87, -88, -88, -89, -89,
- /*500*/ -90, -91, -91, -92, -93, -94, -95, -96,
- /*1k*/ -96, -97, -98, -98, -99, -99,-100,-100,
- /*2k*/ -101,-102,-103,-104,-106,-107,-107,-107,
- /*4k*/ -107,-105,-103,-102,-101, -99, -98, -96,
- /*8k*/ -95, -95, -96, -97, -96, -95, -93, -90,
- /*16k*/ -80, -70, -50, -40, -30, -30, -30, -30
-};
-
-/* The tone masking curves from Ehmer's and Fielder's papers have been
- replaced by an empirically collected data set. The previously
- published values were, far too often, simply on crack. */
-
-#define EHMER_OFFSET 16
-#define EHMER_MAX 56
-
-/* masking tones from -50 to 0dB, 62.5 through 16kHz at half octaves
- test tones from -2 octaves to +5 octaves sampled at eighth octaves */
-/* (Vorbis 0dB, the loudest possible tone, is assumed to be ~100dB SPL
- for collection of these curves) */
-
-static const float tonemasks[P_BANDS][6][EHMER_MAX]={
- /* 62.5 Hz */
- {{ -60, -60, -60, -60, -60, -60, -60, -60,
- -60, -60, -60, -60, -62, -62, -65, -73,
- -69, -68, -68, -67, -70, -70, -72, -74,
- -75, -79, -79, -80, -83, -88, -93, -100,
- -110, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -48, -48, -48, -48, -48, -48, -48, -48,
- -48, -48, -48, -48, -48, -53, -61, -66,
- -66, -68, -67, -70, -76, -76, -72, -73,
- -75, -76, -78, -79, -83, -88, -93, -100,
- -110, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -37, -37, -37, -37, -37, -37, -37, -37,
- -38, -40, -42, -46, -48, -53, -55, -62,
- -65, -58, -56, -56, -61, -60, -65, -67,
- -69, -71, -77, -77, -78, -80, -82, -84,
- -88, -93, -98, -106, -112, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -25, -25, -25, -25, -25, -25, -25, -25,
- -25, -26, -27, -29, -32, -38, -48, -52,
- -52, -50, -48, -48, -51, -52, -54, -60,
- -67, -67, -66, -68, -69, -73, -73, -76,
- -80, -81, -81, -85, -85, -86, -88, -93,
- -100, -110, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -16, -16, -16, -16, -16, -16, -16, -16,
- -17, -19, -20, -22, -26, -28, -31, -40,
- -47, -39, -39, -40, -42, -43, -47, -51,
- -57, -52, -55, -55, -60, -58, -62, -63,
- -70, -67, -69, -72, -73, -77, -80, -82,
- -83, -87, -90, -94, -98, -104, -115, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -8, -8, -8, -8, -8, -8, -8, -8,
- -8, -8, -10, -11, -15, -19, -25, -30,
- -34, -31, -30, -31, -29, -32, -35, -42,
- -48, -42, -44, -46, -50, -50, -51, -52,
- -59, -54, -55, -55, -58, -62, -63, -66,
- -72, -73, -76, -75, -78, -80, -80, -81,
- -84, -88, -90, -94, -98, -101, -106, -110}},
- /* 88Hz */
- {{ -66, -66, -66, -66, -66, -66, -66, -66,
- -66, -66, -66, -66, -66, -67, -67, -67,
- -76, -72, -71, -74, -76, -76, -75, -78,
- -79, -79, -81, -83, -86, -89, -93, -97,
- -100, -105, -110, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -47, -47, -47, -47, -47, -47, -47, -47,
- -47, -47, -47, -48, -51, -55, -59, -66,
- -66, -66, -67, -66, -68, -69, -70, -74,
- -79, -77, -77, -78, -80, -81, -82, -84,
- -86, -88, -91, -95, -100, -108, -116, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -36, -36, -36, -36, -36, -36, -36, -36,
- -36, -37, -37, -41, -44, -48, -51, -58,
- -62, -60, -57, -59, -59, -60, -63, -65,
- -72, -71, -70, -72, -74, -77, -76, -78,
- -81, -81, -80, -83, -86, -91, -96, -100,
- -105, -110, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -28, -28, -28, -28, -28, -28, -28, -28,
- -28, -30, -32, -32, -33, -35, -41, -49,
- -50, -49, -47, -48, -48, -52, -51, -57,
- -65, -61, -59, -61, -64, -69, -70, -74,
- -77, -77, -78, -81, -84, -85, -87, -90,
- -92, -96, -100, -107, -112, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -19, -19, -19, -19, -19, -19, -19, -19,
- -20, -21, -23, -27, -30, -35, -36, -41,
- -46, -44, -42, -40, -41, -41, -43, -48,
- -55, -53, -52, -53, -56, -59, -58, -60,
- -67, -66, -69, -71, -72, -75, -79, -81,
- -84, -87, -90, -93, -97, -101, -107, -114,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -9, -9, -9, -9, -9, -9, -9, -9,
- -11, -12, -12, -15, -16, -20, -23, -30,
- -37, -34, -33, -34, -31, -32, -32, -38,
- -47, -44, -41, -40, -47, -49, -46, -46,
- -58, -50, -50, -54, -58, -62, -64, -67,
- -67, -70, -72, -76, -79, -83, -87, -91,
- -96, -100, -104, -110, -999, -999, -999, -999}},
- /* 125 Hz */
- {{ -62, -62, -62, -62, -62, -62, -62, -62,
- -62, -62, -63, -64, -66, -67, -66, -68,
- -75, -72, -76, -75, -76, -78, -79, -82,
- -84, -85, -90, -94, -101, -110, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -59, -59, -59, -59, -59, -59, -59, -59,
- -59, -59, -59, -60, -60, -61, -63, -66,
- -71, -68, -70, -70, -71, -72, -72, -75,
- -81, -78, -79, -82, -83, -86, -90, -97,
- -103, -113, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -53, -53, -53, -53, -53, -53, -53, -53,
- -53, -54, -55, -57, -56, -57, -55, -61,
- -65, -60, -60, -62, -63, -63, -66, -68,
- -74, -73, -75, -75, -78, -80, -80, -82,
- -85, -90, -96, -101, -108, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -46, -46, -46, -46, -46, -46, -46, -46,
- -46, -46, -47, -47, -47, -47, -48, -51,
- -57, -51, -49, -50, -51, -53, -54, -59,
- -66, -60, -62, -67, -67, -70, -72, -75,
- -76, -78, -81, -85, -88, -94, -97, -104,
- -112, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -36, -36, -36, -36, -36, -36, -36, -36,
- -39, -41, -42, -42, -39, -38, -41, -43,
- -52, -44, -40, -39, -37, -37, -40, -47,
- -54, -50, -48, -50, -55, -61, -59, -62,
- -66, -66, -66, -69, -69, -73, -74, -74,
- -75, -77, -79, -82, -87, -91, -95, -100,
- -108, -115, -999, -999, -999, -999, -999, -999},
- { -28, -26, -24, -22, -20, -20, -23, -29,
- -30, -31, -28, -27, -28, -28, -28, -35,
- -40, -33, -32, -29, -30, -30, -30, -37,
- -45, -41, -37, -38, -45, -47, -47, -48,
- -53, -49, -48, -50, -49, -49, -51, -52,
- -58, -56, -57, -56, -60, -61, -62, -70,
- -72, -74, -78, -83, -88, -93, -100, -106}},
- /* 177 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -110, -105, -100, -95, -91, -87, -83,
- -80, -78, -76, -78, -78, -81, -83, -85,
- -86, -85, -86, -87, -90, -97, -107, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -110, -105, -100, -95, -90,
- -85, -81, -77, -73, -70, -67, -67, -68,
- -75, -73, -70, -69, -70, -72, -75, -79,
- -84, -83, -84, -86, -88, -89, -89, -93,
- -98, -105, -112, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-105, -100, -95, -90, -85, -80, -76, -71,
- -68, -68, -65, -63, -63, -62, -62, -64,
- -65, -64, -61, -62, -63, -64, -66, -68,
- -73, -73, -74, -75, -76, -81, -83, -85,
- -88, -89, -92, -95, -100, -108, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -80, -75, -71, -68, -65, -63, -62, -61,
- -61, -61, -61, -59, -56, -57, -53, -50,
- -58, -52, -50, -50, -52, -53, -54, -58,
- -67, -63, -67, -68, -72, -75, -78, -80,
- -81, -81, -82, -85, -89, -90, -93, -97,
- -101, -107, -114, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- { -65, -61, -59, -57, -56, -55, -55, -56,
- -56, -57, -55, -53, -52, -47, -44, -44,
- -50, -44, -41, -39, -39, -42, -40, -46,
- -51, -49, -50, -53, -54, -63, -60, -61,
- -62, -66, -66, -66, -70, -73, -74, -75,
- -76, -75, -79, -85, -89, -91, -96, -102,
- -110, -999, -999, -999, -999, -999, -999, -999},
- { -52, -50, -49, -49, -48, -48, -48, -49,
- -50, -50, -49, -46, -43, -39, -35, -33,
- -38, -36, -32, -29, -32, -32, -32, -35,
- -44, -39, -38, -38, -46, -50, -45, -46,
- -53, -50, -50, -50, -54, -54, -53, -53,
- -56, -57, -59, -66, -70, -72, -74, -79,
- -83, -85, -90, -97, -114, -999, -999, -999}},
- /* 250 Hz */
- {{-999, -999, -999, -999, -999, -999, -110, -105,
- -100, -95, -90, -86, -80, -75, -75, -79,
- -80, -79, -80, -81, -82, -88, -95, -103,
- -110, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -108, -103, -98, -93,
- -88, -83, -79, -78, -75, -71, -67, -68,
- -73, -73, -72, -73, -75, -77, -80, -82,
- -88, -93, -100, -107, -114, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -110, -105, -101, -96, -90,
- -86, -81, -77, -73, -69, -66, -61, -62,
- -66, -64, -62, -65, -66, -70, -72, -76,
- -81, -80, -84, -90, -95, -102, -110, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -107, -103, -97, -92, -88,
- -83, -79, -74, -70, -66, -59, -53, -58,
- -62, -55, -54, -54, -54, -58, -61, -62,
- -72, -70, -72, -75, -78, -80, -81, -80,
- -83, -83, -88, -93, -100, -107, -115, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -105, -100, -95, -90, -85,
- -80, -75, -70, -66, -62, -56, -48, -44,
- -48, -46, -46, -43, -46, -48, -48, -51,
- -58, -58, -59, -60, -62, -62, -61, -61,
- -65, -64, -65, -68, -70, -74, -75, -78,
- -81, -86, -95, -110, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -105, -100, -95, -90, -85, -80,
- -75, -70, -65, -61, -55, -49, -39, -33,
- -40, -35, -32, -38, -40, -33, -35, -37,
- -46, -41, -45, -44, -46, -42, -45, -46,
- -52, -50, -50, -50, -54, -54, -55, -57,
- -62, -64, -66, -68, -70, -76, -81, -90,
- -100, -110, -999, -999, -999, -999, -999, -999}},
- /* 354 hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -105, -98, -90, -85, -82, -83, -80, -78,
- -84, -79, -80, -83, -87, -89, -91, -93,
- -99, -106, -117, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -105, -98, -90, -85, -80, -75, -70, -68,
- -74, -72, -74, -77, -80, -82, -85, -87,
- -92, -89, -91, -95, -100, -106, -112, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -105, -98, -90, -83, -75, -71, -63, -64,
- -67, -62, -64, -67, -70, -73, -77, -81,
- -84, -83, -85, -89, -90, -93, -98, -104,
- -109, -114, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -103, -96, -88, -81, -75, -68, -58, -54,
- -56, -54, -56, -56, -58, -60, -63, -66,
- -74, -69, -72, -72, -75, -74, -77, -81,
- -81, -82, -84, -87, -93, -96, -99, -104,
- -110, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -108, -102, -96,
- -91, -85, -80, -74, -68, -60, -51, -46,
- -48, -46, -43, -45, -47, -47, -49, -48,
- -56, -53, -55, -58, -57, -63, -58, -60,
- -66, -64, -67, -70, -70, -74, -77, -84,
- -86, -89, -91, -93, -94, -101, -109, -118,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -108, -103, -98, -93, -88,
- -83, -78, -73, -68, -60, -53, -44, -35,
- -38, -38, -34, -34, -36, -40, -41, -44,
- -51, -45, -46, -47, -46, -54, -50, -49,
- -50, -50, -50, -51, -54, -57, -58, -60,
- -66, -66, -66, -64, -65, -68, -77, -82,
- -87, -95, -110, -999, -999, -999, -999, -999}},
- /* 500 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -107, -102, -97, -92, -87, -83, -78, -75,
- -82, -79, -83, -85, -89, -92, -95, -98,
- -101, -105, -109, -113, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -106,
- -100, -95, -90, -86, -81, -78, -74, -69,
- -74, -74, -76, -79, -83, -84, -86, -89,
- -92, -97, -93, -100, -103, -107, -110, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -106, -100,
- -95, -90, -87, -83, -80, -75, -69, -60,
- -66, -66, -68, -70, -74, -78, -79, -81,
- -81, -83, -84, -87, -93, -96, -99, -103,
- -107, -110, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -108, -103, -98,
- -93, -89, -85, -82, -78, -71, -62, -55,
- -58, -58, -54, -54, -55, -59, -61, -62,
- -70, -66, -66, -67, -70, -72, -75, -78,
- -84, -84, -84, -88, -91, -90, -95, -98,
- -102, -103, -106, -110, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -108, -103, -98, -94,
- -90, -87, -82, -79, -73, -67, -58, -47,
- -50, -45, -41, -45, -48, -44, -44, -49,
- -54, -51, -48, -47, -49, -50, -51, -57,
- -58, -60, -63, -69, -70, -69, -71, -74,
- -78, -82, -90, -95, -101, -105, -110, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -105, -101, -97, -93, -90,
- -85, -80, -77, -72, -65, -56, -48, -37,
- -40, -36, -34, -40, -50, -47, -38, -41,
- -47, -38, -35, -39, -38, -43, -40, -45,
- -50, -45, -44, -47, -50, -55, -48, -48,
- -52, -66, -70, -76, -82, -90, -97, -105,
- -110, -999, -999, -999, -999, -999, -999, -999}},
- /* 707 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -108, -103, -98, -93, -86, -79, -76,
- -83, -81, -85, -87, -89, -93, -98, -102,
- -107, -112, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -108, -103, -98, -93, -86, -79, -71,
- -77, -74, -77, -79, -81, -84, -85, -90,
- -92, -93, -92, -98, -101, -108, -112, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -108, -103, -98, -93, -87, -78, -68, -65,
- -66, -62, -65, -67, -70, -73, -75, -78,
- -82, -82, -83, -84, -91, -93, -98, -102,
- -106, -110, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -105, -100, -95, -90, -82, -74, -62, -57,
- -58, -56, -51, -52, -52, -54, -54, -58,
- -66, -59, -60, -63, -66, -69, -73, -79,
- -83, -84, -80, -81, -81, -82, -88, -92,
- -98, -105, -113, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -107,
- -102, -97, -92, -84, -79, -69, -57, -47,
- -52, -47, -44, -45, -50, -52, -42, -42,
- -53, -43, -43, -48, -51, -56, -55, -52,
- -57, -59, -61, -62, -67, -71, -78, -83,
- -86, -94, -98, -103, -110, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -105, -100,
- -95, -90, -84, -78, -70, -61, -51, -41,
- -40, -38, -40, -46, -52, -51, -41, -40,
- -46, -40, -38, -38, -41, -46, -41, -46,
- -47, -43, -43, -45, -41, -45, -56, -67,
- -68, -83, -87, -90, -95, -102, -107, -113,
- -999, -999, -999, -999, -999, -999, -999, -999}},
- /* 1000 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -109, -105, -101, -96, -91, -84, -77,
- -82, -82, -85, -89, -94, -100, -106, -110,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -106, -103, -98, -92, -85, -80, -71,
- -75, -72, -76, -80, -84, -86, -89, -93,
- -100, -107, -113, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -107,
- -104, -101, -97, -92, -88, -84, -80, -64,
- -66, -63, -64, -66, -69, -73, -77, -83,
- -83, -86, -91, -98, -104, -111, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -107,
- -104, -101, -97, -92, -90, -84, -74, -57,
- -58, -52, -55, -54, -50, -52, -50, -52,
- -63, -62, -69, -76, -77, -78, -78, -79,
- -82, -88, -94, -100, -106, -111, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -106, -102,
- -98, -95, -90, -85, -83, -78, -70, -50,
- -50, -41, -44, -49, -47, -50, -50, -44,
- -55, -46, -47, -48, -48, -54, -49, -49,
- -58, -62, -71, -81, -87, -92, -97, -102,
- -108, -114, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -106, -102,
- -98, -95, -90, -85, -83, -78, -70, -45,
- -43, -41, -47, -50, -51, -50, -49, -45,
- -47, -41, -44, -41, -39, -43, -38, -37,
- -40, -41, -44, -50, -58, -65, -73, -79,
- -85, -92, -97, -101, -105, -109, -113, -999,
- -999, -999, -999, -999, -999, -999, -999, -999}},
- /* 1414 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -107, -100, -95, -87, -81,
- -85, -83, -88, -93, -100, -107, -114, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -107, -101, -95, -88, -83, -76,
- -73, -72, -79, -84, -90, -95, -100, -105,
- -110, -115, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -104, -98, -92, -87, -81, -70,
- -65, -62, -67, -71, -74, -80, -85, -91,
- -95, -99, -103, -108, -111, -114, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -103, -97, -90, -85, -76, -60,
- -56, -54, -60, -62, -61, -56, -63, -65,
- -73, -74, -77, -75, -78, -81, -86, -87,
- -88, -91, -94, -98, -103, -110, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -105,
- -100, -97, -92, -86, -81, -79, -70, -57,
- -51, -47, -51, -58, -60, -56, -53, -50,
- -58, -52, -50, -50, -53, -55, -64, -69,
- -71, -85, -82, -78, -81, -85, -95, -102,
- -112, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -105,
- -100, -97, -92, -85, -83, -79, -72, -49,
- -40, -43, -43, -54, -56, -51, -50, -40,
- -43, -38, -36, -35, -37, -38, -37, -44,
- -54, -60, -57, -60, -70, -75, -84, -92,
- -103, -112, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999}},
- /* 2000 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -110, -102, -95, -89, -82,
- -83, -84, -90, -92, -99, -107, -113, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -107, -101, -95, -89, -83, -72,
- -74, -78, -85, -88, -88, -90, -92, -98,
- -105, -111, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -109, -103, -97, -93, -87, -81, -70,
- -70, -67, -75, -73, -76, -79, -81, -83,
- -88, -89, -97, -103, -110, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -107, -100, -94, -88, -83, -75, -63,
- -59, -59, -63, -66, -60, -62, -67, -67,
- -77, -76, -81, -88, -86, -92, -96, -102,
- -109, -116, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -105, -98, -92, -86, -81, -73, -56,
- -52, -47, -55, -60, -58, -52, -51, -45,
- -49, -50, -53, -54, -61, -71, -70, -69,
- -78, -79, -87, -90, -96, -104, -112, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -103, -96, -90, -86, -78, -70, -51,
- -42, -47, -48, -55, -54, -54, -53, -42,
- -35, -28, -33, -38, -37, -44, -47, -49,
- -54, -63, -68, -78, -82, -89, -94, -99,
- -104, -109, -114, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999}},
- /* 2828 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -110, -100, -90, -79,
- -85, -81, -82, -82, -89, -94, -99, -103,
- -109, -115, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -105, -97, -85, -72,
- -74, -70, -70, -70, -76, -85, -91, -93,
- -97, -103, -109, -115, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -112, -93, -81, -68,
- -62, -60, -60, -57, -63, -70, -77, -82,
- -90, -93, -98, -104, -109, -113, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -113, -100, -93, -84, -63,
- -58, -48, -53, -54, -52, -52, -57, -64,
- -66, -76, -83, -81, -85, -85, -90, -95,
- -98, -101, -103, -106, -108, -111, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -105, -95, -86, -74, -53,
- -50, -38, -43, -49, -43, -42, -39, -39,
- -46, -52, -57, -56, -72, -69, -74, -81,
- -87, -92, -94, -97, -99, -102, -105, -108,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -108, -99, -90, -76, -66, -45,
- -43, -41, -44, -47, -43, -47, -40, -30,
- -31, -31, -39, -33, -40, -41, -43, -53,
- -59, -70, -73, -77, -79, -82, -84, -87,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999}},
- /* 4000 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -110, -91, -76,
- -75, -85, -93, -98, -104, -110, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -110, -91, -70,
- -70, -75, -86, -89, -94, -98, -101, -106,
- -110, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -110, -95, -80, -60,
- -65, -64, -74, -83, -88, -91, -95, -99,
- -103, -107, -110, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -110, -95, -80, -58,
- -55, -49, -66, -68, -71, -78, -78, -80,
- -88, -85, -89, -97, -100, -105, -110, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -110, -95, -80, -53,
- -52, -41, -59, -59, -49, -58, -56, -63,
- -86, -79, -90, -93, -98, -103, -107, -112,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -110, -97, -91, -73, -45,
- -40, -33, -53, -61, -49, -54, -50, -50,
- -60, -52, -67, -74, -81, -92, -96, -100,
- -105, -110, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999}},
- /* 5657 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -113, -106, -99, -92, -77,
- -80, -88, -97, -106, -115, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -116, -109, -102, -95, -89, -74,
- -72, -88, -87, -95, -102, -109, -116, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -116, -109, -102, -95, -89, -75,
- -66, -74, -77, -78, -86, -87, -90, -96,
- -105, -115, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -115, -108, -101, -94, -88, -66,
- -56, -61, -70, -65, -78, -72, -83, -84,
- -93, -98, -105, -110, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -110, -105, -95, -89, -82, -57,
- -52, -52, -59, -56, -59, -58, -69, -67,
- -88, -82, -82, -89, -94, -100, -108, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -110, -101, -96, -90, -83, -77, -54,
- -43, -38, -50, -48, -52, -48, -42, -42,
- -51, -52, -53, -59, -65, -71, -78, -85,
- -95, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999}},
- /* 8000 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -120, -105, -86, -68,
- -78, -79, -90, -100, -110, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -120, -105, -86, -66,
- -73, -77, -88, -96, -105, -115, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -120, -105, -92, -80, -61,
- -64, -68, -80, -87, -92, -100, -110, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -120, -104, -91, -79, -52,
- -60, -54, -64, -69, -77, -80, -82, -84,
- -85, -87, -88, -90, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -118, -100, -87, -77, -49,
- -50, -44, -58, -61, -61, -67, -65, -62,
- -62, -62, -65, -68, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -115, -98, -84, -62, -49,
- -44, -38, -46, -49, -49, -46, -39, -37,
- -39, -40, -42, -43, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999}},
- /* 11314 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -110, -88, -74,
- -77, -82, -82, -85, -90, -94, -99, -104,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -110, -88, -66,
- -70, -81, -80, -81, -84, -88, -91, -93,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -110, -88, -61,
- -63, -70, -71, -74, -77, -80, -83, -85,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -110, -86, -62,
- -63, -62, -62, -58, -52, -50, -50, -52,
- -54, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -118, -108, -84, -53,
- -50, -50, -50, -55, -47, -45, -40, -40,
- -40, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -118, -100, -73, -43,
- -37, -42, -43, -53, -38, -37, -35, -35,
- -38, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999}},
- /* 16000 Hz */
- {{-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -110, -100, -91, -84, -74,
- -80, -80, -80, -80, -80, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -110, -100, -91, -84, -74,
- -68, -68, -68, -68, -68, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -110, -100, -86, -78, -70,
- -60, -45, -30, -21, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -110, -100, -87, -78, -67,
- -48, -38, -29, -21, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -110, -100, -86, -69, -56,
- -45, -35, -33, -29, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999},
- {-999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -110, -100, -83, -71, -48,
- -27, -38, -37, -34, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999,
- -999, -999, -999, -999, -999, -999, -999, -999}}
-};
-
-#endif
diff --git a/drivers/vorbis/mdct.c b/drivers/vorbis/mdct.c
deleted file mode 100644
index 0816331805..0000000000
--- a/drivers/vorbis/mdct.c
+++ /dev/null
@@ -1,563 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: normalized modified discrete cosine transform
- power of two length transform only [64 <= n ]
- last mod: $Id: mdct.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- Original algorithm adapted long ago from _The use of multirate filter
- banks for coding of high quality digital audio_, by T. Sporer,
- K. Brandenburg and B. Edler, collection of the European Signal
- Processing Conference (EUSIPCO), Amsterdam, June 1992, Vol.1, pp
- 211-214
-
- The below code implements an algorithm that no longer looks much like
- that presented in the paper, but the basic structure remains if you
- dig deep enough to see it.
-
- This module DOES NOT INCLUDE code to generate/apply the window
- function. Everybody has their own weird favorite including me... I
- happen to like the properties of y=sin(.5PI*sin^2(x)), but others may
- vehemently disagree.
-
- ********************************************************************/
-
-/* this can also be run as an integer transform by uncommenting a
- define in mdct.h; the integerization is a first pass and although
- it's likely stable for Vorbis, the dynamic range is constrained and
- roundoff isn't done (so it's noisy). Consider it functional, but
- only a starting point. There's no point on a machine with an FPU */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "vorbis/codec.h"
-#include "mdct.h"
-#include "os.h"
-#include "misc.h"
-
-/* build lookups for trig functions; also pre-figure scaling and
- some window function algebra. */
-
-void mdct_init(mdct_lookup *lookup,int n){
- int *bitrev=_ogg_malloc(sizeof(*bitrev)*(n/4));
- DATA_TYPE *T=_ogg_malloc(sizeof(*T)*(n+n/4));
-
- int i;
- int n2=n>>1;
- int log2n=lookup->log2n=rint(log((float)n)/log(2.f));
- lookup->n=n;
- lookup->trig=T;
- lookup->bitrev=bitrev;
-
-/* trig lookups... */
-
- for(i=0;i<n/4;i++){
- T[i*2]=FLOAT_CONV(cos((M_PI/n)*(4*i)));
- T[i*2+1]=FLOAT_CONV(-sin((M_PI/n)*(4*i)));
- T[n2+i*2]=FLOAT_CONV(cos((M_PI/(2*n))*(2*i+1)));
- T[n2+i*2+1]=FLOAT_CONV(sin((M_PI/(2*n))*(2*i+1)));
- }
- for(i=0;i<n/8;i++){
- T[n+i*2]=FLOAT_CONV(cos((M_PI/n)*(4*i+2))*.5);
- T[n+i*2+1]=FLOAT_CONV(-sin((M_PI/n)*(4*i+2))*.5);
- }
-
- /* bitreverse lookup... */
-
- {
- int mask=(1<<(log2n-1))-1,i,j;
- int msb=1<<(log2n-2);
- for(i=0;i<n/8;i++){
- int acc=0;
- for(j=0;msb>>j;j++)
- if((msb>>j)&i)acc|=1<<j;
- bitrev[i*2]=((~acc)&mask)-1;
- bitrev[i*2+1]=acc;
-
- }
- }
- lookup->scale=FLOAT_CONV(4.f/n);
-}
-
-/* 8 point butterfly (in place, 4 register) */
-STIN void mdct_butterfly_8(DATA_TYPE *x){
- REG_TYPE r0 = x[6] + x[2];
- REG_TYPE r1 = x[6] - x[2];
- REG_TYPE r2 = x[4] + x[0];
- REG_TYPE r3 = x[4] - x[0];
-
- x[6] = r0 + r2;
- x[4] = r0 - r2;
-
- r0 = x[5] - x[1];
- r2 = x[7] - x[3];
- x[0] = r1 + r0;
- x[2] = r1 - r0;
-
- r0 = x[5] + x[1];
- r1 = x[7] + x[3];
- x[3] = r2 + r3;
- x[1] = r2 - r3;
- x[7] = r1 + r0;
- x[5] = r1 - r0;
-
-}
-
-/* 16 point butterfly (in place, 4 register) */
-STIN void mdct_butterfly_16(DATA_TYPE *x){
- REG_TYPE r0 = x[1] - x[9];
- REG_TYPE r1 = x[0] - x[8];
-
- x[8] += x[0];
- x[9] += x[1];
- x[0] = MULT_NORM((r0 + r1) * cPI2_8);
- x[1] = MULT_NORM((r0 - r1) * cPI2_8);
-
- r0 = x[3] - x[11];
- r1 = x[10] - x[2];
- x[10] += x[2];
- x[11] += x[3];
- x[2] = r0;
- x[3] = r1;
-
- r0 = x[12] - x[4];
- r1 = x[13] - x[5];
- x[12] += x[4];
- x[13] += x[5];
- x[4] = MULT_NORM((r0 - r1) * cPI2_8);
- x[5] = MULT_NORM((r0 + r1) * cPI2_8);
-
- r0 = x[14] - x[6];
- r1 = x[15] - x[7];
- x[14] += x[6];
- x[15] += x[7];
- x[6] = r0;
- x[7] = r1;
-
- mdct_butterfly_8(x);
- mdct_butterfly_8(x+8);
-}
-
-/* 32 point butterfly (in place, 4 register) */
-STIN void mdct_butterfly_32(DATA_TYPE *x){
- REG_TYPE r0 = x[30] - x[14];
- REG_TYPE r1 = x[31] - x[15];
-
- x[30] += x[14];
- x[31] += x[15];
- x[14] = r0;
- x[15] = r1;
-
- r0 = x[28] - x[12];
- r1 = x[29] - x[13];
- x[28] += x[12];
- x[29] += x[13];
- x[12] = MULT_NORM( r0 * cPI1_8 - r1 * cPI3_8 );
- x[13] = MULT_NORM( r0 * cPI3_8 + r1 * cPI1_8 );
-
- r0 = x[26] - x[10];
- r1 = x[27] - x[11];
- x[26] += x[10];
- x[27] += x[11];
- x[10] = MULT_NORM(( r0 - r1 ) * cPI2_8);
- x[11] = MULT_NORM(( r0 + r1 ) * cPI2_8);
-
- r0 = x[24] - x[8];
- r1 = x[25] - x[9];
- x[24] += x[8];
- x[25] += x[9];
- x[8] = MULT_NORM( r0 * cPI3_8 - r1 * cPI1_8 );
- x[9] = MULT_NORM( r1 * cPI3_8 + r0 * cPI1_8 );
-
- r0 = x[22] - x[6];
- r1 = x[7] - x[23];
- x[22] += x[6];
- x[23] += x[7];
- x[6] = r1;
- x[7] = r0;
-
- r0 = x[4] - x[20];
- r1 = x[5] - x[21];
- x[20] += x[4];
- x[21] += x[5];
- x[4] = MULT_NORM( r1 * cPI1_8 + r0 * cPI3_8 );
- x[5] = MULT_NORM( r1 * cPI3_8 - r0 * cPI1_8 );
-
- r0 = x[2] - x[18];
- r1 = x[3] - x[19];
- x[18] += x[2];
- x[19] += x[3];
- x[2] = MULT_NORM(( r1 + r0 ) * cPI2_8);
- x[3] = MULT_NORM(( r1 - r0 ) * cPI2_8);
-
- r0 = x[0] - x[16];
- r1 = x[1] - x[17];
- x[16] += x[0];
- x[17] += x[1];
- x[0] = MULT_NORM( r1 * cPI3_8 + r0 * cPI1_8 );
- x[1] = MULT_NORM( r1 * cPI1_8 - r0 * cPI3_8 );
-
- mdct_butterfly_16(x);
- mdct_butterfly_16(x+16);
-
-}
-
-/* N point first stage butterfly (in place, 2 register) */
-STIN void mdct_butterfly_first(DATA_TYPE *T,
- DATA_TYPE *x,
- int points){
-
- DATA_TYPE *x1 = x + points - 8;
- DATA_TYPE *x2 = x + (points>>1) - 8;
- REG_TYPE r0;
- REG_TYPE r1;
-
- do{
-
- r0 = x1[6] - x2[6];
- r1 = x1[7] - x2[7];
- x1[6] += x2[6];
- x1[7] += x2[7];
- x2[6] = MULT_NORM(r1 * T[1] + r0 * T[0]);
- x2[7] = MULT_NORM(r1 * T[0] - r0 * T[1]);
-
- r0 = x1[4] - x2[4];
- r1 = x1[5] - x2[5];
- x1[4] += x2[4];
- x1[5] += x2[5];
- x2[4] = MULT_NORM(r1 * T[5] + r0 * T[4]);
- x2[5] = MULT_NORM(r1 * T[4] - r0 * T[5]);
-
- r0 = x1[2] - x2[2];
- r1 = x1[3] - x2[3];
- x1[2] += x2[2];
- x1[3] += x2[3];
- x2[2] = MULT_NORM(r1 * T[9] + r0 * T[8]);
- x2[3] = MULT_NORM(r1 * T[8] - r0 * T[9]);
-
- r0 = x1[0] - x2[0];
- r1 = x1[1] - x2[1];
- x1[0] += x2[0];
- x1[1] += x2[1];
- x2[0] = MULT_NORM(r1 * T[13] + r0 * T[12]);
- x2[1] = MULT_NORM(r1 * T[12] - r0 * T[13]);
-
- x1-=8;
- x2-=8;
- T+=16;
-
- }while(x2>=x);
-}
-
-/* N/stage point generic N stage butterfly (in place, 2 register) */
-STIN void mdct_butterfly_generic(DATA_TYPE *T,
- DATA_TYPE *x,
- int points,
- int trigint){
-
- DATA_TYPE *x1 = x + points - 8;
- DATA_TYPE *x2 = x + (points>>1) - 8;
- REG_TYPE r0;
- REG_TYPE r1;
-
- do{
-
- r0 = x1[6] - x2[6];
- r1 = x1[7] - x2[7];
- x1[6] += x2[6];
- x1[7] += x2[7];
- x2[6] = MULT_NORM(r1 * T[1] + r0 * T[0]);
- x2[7] = MULT_NORM(r1 * T[0] - r0 * T[1]);
-
- T+=trigint;
-
- r0 = x1[4] - x2[4];
- r1 = x1[5] - x2[5];
- x1[4] += x2[4];
- x1[5] += x2[5];
- x2[4] = MULT_NORM(r1 * T[1] + r0 * T[0]);
- x2[5] = MULT_NORM(r1 * T[0] - r0 * T[1]);
-
- T+=trigint;
-
- r0 = x1[2] - x2[2];
- r1 = x1[3] - x2[3];
- x1[2] += x2[2];
- x1[3] += x2[3];
- x2[2] = MULT_NORM(r1 * T[1] + r0 * T[0]);
- x2[3] = MULT_NORM(r1 * T[0] - r0 * T[1]);
-
- T+=trigint;
-
- r0 = x1[0] - x2[0];
- r1 = x1[1] - x2[1];
- x1[0] += x2[0];
- x1[1] += x2[1];
- x2[0] = MULT_NORM(r1 * T[1] + r0 * T[0]);
- x2[1] = MULT_NORM(r1 * T[0] - r0 * T[1]);
-
- T+=trigint;
- x1-=8;
- x2-=8;
-
- }while(x2>=x);
-}
-
-STIN void mdct_butterflies(mdct_lookup *init,
- DATA_TYPE *x,
- int points){
-
- DATA_TYPE *T=init->trig;
- int stages=init->log2n-5;
- int i,j;
-
- if(--stages>0){
- mdct_butterfly_first(T,x,points);
- }
-
- for(i=1;--stages>0;i++){
- for(j=0;j<(1<<i);j++)
- mdct_butterfly_generic(T,x+(points>>i)*j,points>>i,4<<i);
- }
-
- for(j=0;j<points;j+=32)
- mdct_butterfly_32(x+j);
-
-}
-
-void mdct_clear(mdct_lookup *l){
- if(l){
- if(l->trig)_ogg_free(l->trig);
- if(l->bitrev)_ogg_free(l->bitrev);
- memset(l,0,sizeof(*l));
- }
-}
-
-STIN void mdct_bitreverse(mdct_lookup *init,
- DATA_TYPE *x){
- int n = init->n;
- int *bit = init->bitrev;
- DATA_TYPE *w0 = x;
- DATA_TYPE *w1 = x = w0+(n>>1);
- DATA_TYPE *T = init->trig+n;
-
- do{
- DATA_TYPE *x0 = x+bit[0];
- DATA_TYPE *x1 = x+bit[1];
-
- REG_TYPE r0 = x0[1] - x1[1];
- REG_TYPE r1 = x0[0] + x1[0];
- REG_TYPE r2 = MULT_NORM(r1 * T[0] + r0 * T[1]);
- REG_TYPE r3 = MULT_NORM(r1 * T[1] - r0 * T[0]);
-
- w1 -= 4;
-
- r0 = HALVE(x0[1] + x1[1]);
- r1 = HALVE(x0[0] - x1[0]);
-
- w0[0] = r0 + r2;
- w1[2] = r0 - r2;
- w0[1] = r1 + r3;
- w1[3] = r3 - r1;
-
- x0 = x+bit[2];
- x1 = x+bit[3];
-
- r0 = x0[1] - x1[1];
- r1 = x0[0] + x1[0];
- r2 = MULT_NORM(r1 * T[2] + r0 * T[3]);
- r3 = MULT_NORM(r1 * T[3] - r0 * T[2]);
-
- r0 = HALVE(x0[1] + x1[1]);
- r1 = HALVE(x0[0] - x1[0]);
-
- w0[2] = r0 + r2;
- w1[0] = r0 - r2;
- w0[3] = r1 + r3;
- w1[1] = r3 - r1;
-
- T += 4;
- bit += 4;
- w0 += 4;
-
- }while(w0<w1);
-}
-
-void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out){
- int n=init->n;
- int n2=n>>1;
- int n4=n>>2;
-
- /* rotate */
-
- DATA_TYPE *iX = in+n2-7;
- DATA_TYPE *oX = out+n2+n4;
- DATA_TYPE *T = init->trig+n4;
-
- do{
- oX -= 4;
- oX[0] = MULT_NORM(-iX[2] * T[3] - iX[0] * T[2]);
- oX[1] = MULT_NORM (iX[0] * T[3] - iX[2] * T[2]);
- oX[2] = MULT_NORM(-iX[6] * T[1] - iX[4] * T[0]);
- oX[3] = MULT_NORM (iX[4] * T[1] - iX[6] * T[0]);
- iX -= 8;
- T += 4;
- }while(iX>=in);
-
- iX = in+n2-8;
- oX = out+n2+n4;
- T = init->trig+n4;
-
- do{
- T -= 4;
- oX[0] = MULT_NORM (iX[4] * T[3] + iX[6] * T[2]);
- oX[1] = MULT_NORM (iX[4] * T[2] - iX[6] * T[3]);
- oX[2] = MULT_NORM (iX[0] * T[1] + iX[2] * T[0]);
- oX[3] = MULT_NORM (iX[0] * T[0] - iX[2] * T[1]);
- iX -= 8;
- oX += 4;
- }while(iX>=in);
-
- mdct_butterflies(init,out+n2,n2);
- mdct_bitreverse(init,out);
-
- /* roatate + window */
-
- {
- DATA_TYPE *oX1=out+n2+n4;
- DATA_TYPE *oX2=out+n2+n4;
- DATA_TYPE *iX =out;
- T =init->trig+n2;
-
- do{
- oX1-=4;
-
- oX1[3] = MULT_NORM (iX[0] * T[1] - iX[1] * T[0]);
- oX2[0] = -MULT_NORM (iX[0] * T[0] + iX[1] * T[1]);
-
- oX1[2] = MULT_NORM (iX[2] * T[3] - iX[3] * T[2]);
- oX2[1] = -MULT_NORM (iX[2] * T[2] + iX[3] * T[3]);
-
- oX1[1] = MULT_NORM (iX[4] * T[5] - iX[5] * T[4]);
- oX2[2] = -MULT_NORM (iX[4] * T[4] + iX[5] * T[5]);
-
- oX1[0] = MULT_NORM (iX[6] * T[7] - iX[7] * T[6]);
- oX2[3] = -MULT_NORM (iX[6] * T[6] + iX[7] * T[7]);
-
- oX2+=4;
- iX += 8;
- T += 8;
- }while(iX<oX1);
-
- iX=out+n2+n4;
- oX1=out+n4;
- oX2=oX1;
-
- do{
- oX1-=4;
- iX-=4;
-
- oX2[0] = -(oX1[3] = iX[3]);
- oX2[1] = -(oX1[2] = iX[2]);
- oX2[2] = -(oX1[1] = iX[1]);
- oX2[3] = -(oX1[0] = iX[0]);
-
- oX2+=4;
- }while(oX2<iX);
-
- iX=out+n2+n4;
- oX1=out+n2+n4;
- oX2=out+n2;
- do{
- oX1-=4;
- oX1[0]= iX[3];
- oX1[1]= iX[2];
- oX1[2]= iX[1];
- oX1[3]= iX[0];
- iX+=4;
- }while(oX1>oX2);
- }
-}
-
-void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out){
- int n=init->n;
- int n2=n>>1;
- int n4=n>>2;
- int n8=n>>3;
- DATA_TYPE *w=alloca(n*sizeof(*w)); /* forward needs working space */
- DATA_TYPE *w2=w+n2;
-
- /* rotate */
-
- /* window + rotate + step 1 */
-
- REG_TYPE r0;
- REG_TYPE r1;
- DATA_TYPE *x0=in+n2+n4;
- DATA_TYPE *x1=x0+1;
- DATA_TYPE *T=init->trig+n2;
-
- int i=0;
-
- for(i=0;i<n8;i+=2){
- x0 -=4;
- T-=2;
- r0= x0[2] + x1[0];
- r1= x0[0] + x1[2];
- w2[i]= MULT_NORM(r1*T[1] + r0*T[0]);
- w2[i+1]= MULT_NORM(r1*T[0] - r0*T[1]);
- x1 +=4;
- }
-
- x1=in+1;
-
- for(;i<n2-n8;i+=2){
- T-=2;
- x0 -=4;
- r0= x0[2] - x1[0];
- r1= x0[0] - x1[2];
- w2[i]= MULT_NORM(r1*T[1] + r0*T[0]);
- w2[i+1]= MULT_NORM(r1*T[0] - r0*T[1]);
- x1 +=4;
- }
-
- x0=in+n;
-
- for(;i<n2;i+=2){
- T-=2;
- x0 -=4;
- r0= -x0[2] - x1[0];
- r1= -x0[0] - x1[2];
- w2[i]= MULT_NORM(r1*T[1] + r0*T[0]);
- w2[i+1]= MULT_NORM(r1*T[0] - r0*T[1]);
- x1 +=4;
- }
-
-
- mdct_butterflies(init,w+n2,n2);
- mdct_bitreverse(init,w);
-
- /* roatate + window */
-
- T=init->trig+n2;
- x0=out+n2;
-
- for(i=0;i<n4;i++){
- x0--;
- out[i] =MULT_NORM((w[0]*T[0]+w[1]*T[1])*init->scale);
- x0[0] =MULT_NORM((w[0]*T[1]-w[1]*T[0])*init->scale);
- w+=2;
- T+=2;
- }
-}
diff --git a/drivers/vorbis/mdct.h b/drivers/vorbis/mdct.h
deleted file mode 100644
index 3ed94333c5..0000000000
--- a/drivers/vorbis/mdct.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: modified discrete cosine transform prototypes
- last mod: $Id: mdct.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _OGG_mdct_H_
-#define _OGG_mdct_H_
-
-#include "vorbis/codec.h"
-
-
-
-
-
-/*#define MDCT_INTEGERIZED <- be warned there could be some hurt left here*/
-#ifdef MDCT_INTEGERIZED
-
-#define DATA_TYPE int
-#define REG_TYPE register int
-#define TRIGBITS 14
-#define cPI3_8 6270
-#define cPI2_8 11585
-#define cPI1_8 15137
-
-#define FLOAT_CONV(x) ((int)((x)*(1<<TRIGBITS)+.5))
-#define MULT_NORM(x) ((x)>>TRIGBITS)
-#define HALVE(x) ((x)>>1)
-
-#else
-
-#define DATA_TYPE float
-#define REG_TYPE float
-#define cPI3_8 .38268343236508977175F
-#define cPI2_8 .70710678118654752441F
-#define cPI1_8 .92387953251128675613F
-
-#define FLOAT_CONV(x) (x)
-#define MULT_NORM(x) (x)
-#define HALVE(x) ((x)*.5f)
-
-#endif
-
-
-typedef struct {
- int n;
- int log2n;
-
- DATA_TYPE *trig;
- int *bitrev;
-
- DATA_TYPE scale;
-} mdct_lookup;
-
-extern void mdct_init(mdct_lookup *lookup,int n);
-extern void mdct_clear(mdct_lookup *l);
-extern void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out);
-extern void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out);
-
-#endif
diff --git a/drivers/vorbis/misc.h b/drivers/vorbis/misc.h
deleted file mode 100644
index 73b4519898..0000000000
--- a/drivers/vorbis/misc.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: miscellaneous prototypes
- last mod: $Id: misc.h 19457 2015-03-03 00:15:29Z giles $
-
- ********************************************************************/
-
-#ifndef _V_RANDOM_H_
-#define _V_RANDOM_H_
-#include "vorbis/codec.h"
-
-extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
-extern void _vorbis_block_ripcord(vorbis_block *vb);
-extern int ov_ilog(ogg_uint32_t v);
-
-#ifdef ANALYSIS
-extern int analysis_noisy;
-extern void _analysis_output(char *base,int i,float *v,int n,int bark,int dB,
- ogg_int64_t off);
-extern void _analysis_output_always(char *base,int i,float *v,int n,int bark,int dB,
- ogg_int64_t off);
-#endif
-
-#ifdef DEBUG_MALLOC
-
-#define _VDBG_GRAPHFILE "malloc.m"
-#undef _VDBG_GRAPHFILE
-extern void *_VDBG_malloc(void *ptr,long bytes,char *file,long line);
-extern void _VDBG_free(void *ptr,char *file,long line);
-
-#ifndef MISC_C
-#undef _ogg_malloc
-#undef _ogg_calloc
-#undef _ogg_realloc
-#undef _ogg_free
-
-#define _ogg_malloc(x) _VDBG_malloc(NULL,(x),__FILE__,__LINE__)
-#define _ogg_calloc(x,y) _VDBG_malloc(NULL,(x)*(y),__FILE__,__LINE__)
-#define _ogg_realloc(x,y) _VDBG_malloc((x),(y),__FILE__,__LINE__)
-#define _ogg_free(x) _VDBG_free((x),__FILE__,__LINE__)
-#endif
-#endif
-
-#endif
-
-
-
-
diff --git a/drivers/vorbis/modes/floor_all.h b/drivers/vorbis/modes/floor_all.h
deleted file mode 100644
index 4292be326e..0000000000
--- a/drivers/vorbis/modes/floor_all.h
+++ /dev/null
@@ -1,260 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: key floor settings
- last mod: $Id: floor_all.h 17050 2010-03-26 01:34:42Z xiphmont $
-
- ********************************************************************/
-
-#include "vorbis/codec.h"
-#include "backends.h"
-#include "books/floor/floor_books.h"
-
-static const static_codebook*const _floor_128x4_books[]={
- &_huff_book_line_128x4_class0,
- &_huff_book_line_128x4_0sub0,
- &_huff_book_line_128x4_0sub1,
- &_huff_book_line_128x4_0sub2,
- &_huff_book_line_128x4_0sub3,
-};
-static const static_codebook*const _floor_256x4_books[]={
- &_huff_book_line_256x4_class0,
- &_huff_book_line_256x4_0sub0,
- &_huff_book_line_256x4_0sub1,
- &_huff_book_line_256x4_0sub2,
- &_huff_book_line_256x4_0sub3,
-};
-static const static_codebook*const _floor_128x7_books[]={
- &_huff_book_line_128x7_class0,
- &_huff_book_line_128x7_class1,
-
- &_huff_book_line_128x7_0sub1,
- &_huff_book_line_128x7_0sub2,
- &_huff_book_line_128x7_0sub3,
- &_huff_book_line_128x7_1sub1,
- &_huff_book_line_128x7_1sub2,
- &_huff_book_line_128x7_1sub3,
-};
-static const static_codebook*const _floor_256x7_books[]={
- &_huff_book_line_256x7_class0,
- &_huff_book_line_256x7_class1,
-
- &_huff_book_line_256x7_0sub1,
- &_huff_book_line_256x7_0sub2,
- &_huff_book_line_256x7_0sub3,
- &_huff_book_line_256x7_1sub1,
- &_huff_book_line_256x7_1sub2,
- &_huff_book_line_256x7_1sub3,
-};
-static const static_codebook*const _floor_128x11_books[]={
- &_huff_book_line_128x11_class1,
- &_huff_book_line_128x11_class2,
- &_huff_book_line_128x11_class3,
-
- &_huff_book_line_128x11_0sub0,
- &_huff_book_line_128x11_1sub0,
- &_huff_book_line_128x11_1sub1,
- &_huff_book_line_128x11_2sub1,
- &_huff_book_line_128x11_2sub2,
- &_huff_book_line_128x11_2sub3,
- &_huff_book_line_128x11_3sub1,
- &_huff_book_line_128x11_3sub2,
- &_huff_book_line_128x11_3sub3,
-};
-static const static_codebook*const _floor_128x17_books[]={
- &_huff_book_line_128x17_class1,
- &_huff_book_line_128x17_class2,
- &_huff_book_line_128x17_class3,
-
- &_huff_book_line_128x17_0sub0,
- &_huff_book_line_128x17_1sub0,
- &_huff_book_line_128x17_1sub1,
- &_huff_book_line_128x17_2sub1,
- &_huff_book_line_128x17_2sub2,
- &_huff_book_line_128x17_2sub3,
- &_huff_book_line_128x17_3sub1,
- &_huff_book_line_128x17_3sub2,
- &_huff_book_line_128x17_3sub3,
-};
-static const static_codebook*const _floor_256x4low_books[]={
- &_huff_book_line_256x4low_class0,
- &_huff_book_line_256x4low_0sub0,
- &_huff_book_line_256x4low_0sub1,
- &_huff_book_line_256x4low_0sub2,
- &_huff_book_line_256x4low_0sub3,
-};
-static const static_codebook*const _floor_1024x27_books[]={
- &_huff_book_line_1024x27_class1,
- &_huff_book_line_1024x27_class2,
- &_huff_book_line_1024x27_class3,
- &_huff_book_line_1024x27_class4,
-
- &_huff_book_line_1024x27_0sub0,
- &_huff_book_line_1024x27_1sub0,
- &_huff_book_line_1024x27_1sub1,
- &_huff_book_line_1024x27_2sub0,
- &_huff_book_line_1024x27_2sub1,
- &_huff_book_line_1024x27_3sub1,
- &_huff_book_line_1024x27_3sub2,
- &_huff_book_line_1024x27_3sub3,
- &_huff_book_line_1024x27_4sub1,
- &_huff_book_line_1024x27_4sub2,
- &_huff_book_line_1024x27_4sub3,
-};
-static const static_codebook*const _floor_2048x27_books[]={
- &_huff_book_line_2048x27_class1,
- &_huff_book_line_2048x27_class2,
- &_huff_book_line_2048x27_class3,
- &_huff_book_line_2048x27_class4,
-
- &_huff_book_line_2048x27_0sub0,
- &_huff_book_line_2048x27_1sub0,
- &_huff_book_line_2048x27_1sub1,
- &_huff_book_line_2048x27_2sub0,
- &_huff_book_line_2048x27_2sub1,
- &_huff_book_line_2048x27_3sub1,
- &_huff_book_line_2048x27_3sub2,
- &_huff_book_line_2048x27_3sub3,
- &_huff_book_line_2048x27_4sub1,
- &_huff_book_line_2048x27_4sub2,
- &_huff_book_line_2048x27_4sub3,
-};
-
-static const static_codebook*const _floor_512x17_books[]={
- &_huff_book_line_512x17_class1,
- &_huff_book_line_512x17_class2,
- &_huff_book_line_512x17_class3,
-
- &_huff_book_line_512x17_0sub0,
- &_huff_book_line_512x17_1sub0,
- &_huff_book_line_512x17_1sub1,
- &_huff_book_line_512x17_2sub1,
- &_huff_book_line_512x17_2sub2,
- &_huff_book_line_512x17_2sub3,
- &_huff_book_line_512x17_3sub1,
- &_huff_book_line_512x17_3sub2,
- &_huff_book_line_512x17_3sub3,
-};
-
-static const static_codebook*const _floor_Xx0_books[]={
- 0
-};
-
-static const static_codebook*const *const _floor_books[11]={
- _floor_128x4_books,
- _floor_256x4_books,
- _floor_128x7_books,
- _floor_256x7_books,
- _floor_128x11_books,
- _floor_128x17_books,
- _floor_256x4low_books,
- _floor_1024x27_books,
- _floor_2048x27_books,
- _floor_512x17_books,
- _floor_Xx0_books,
-};
-
-static const vorbis_info_floor1 _floor[11]={
- /* 0: 128 x 4 */
- {
- 1,{0},{4},{2},{0},
- {{1,2,3,4}},
- 4,{0,128, 33,8,16,70},
-
- 60,30,500, 1.,18., 128
- },
- /* 1: 256 x 4 */
- {
- 1,{0},{4},{2},{0},
- {{1,2,3,4}},
- 4,{0,256, 66,16,32,140},
-
- 60,30,500, 1.,18., 256
- },
- /* 2: 128 x 7 */
- {
- 2,{0,1},{3,4},{2,2},{0,1},
- {{-1,2,3,4},{-1,5,6,7}},
- 4,{0,128, 14,4,58, 2,8,28,90},
-
- 60,30,500, 1.,18., 128
- },
- /* 3: 256 x 7 */
- {
- 2,{0,1},{3,4},{2,2},{0,1},
- {{-1,2,3,4},{-1,5,6,7}},
- 4,{0,256, 28,8,116, 4,16,56,180},
-
- 60,30,500, 1.,18., 256
- },
- /* 4: 128 x 11 */
- {
- 4,{0,1,2,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2},
- {{3},{4,5},{-1,6,7,8},{-1,9,10,11}},
-
- 2,{0,128, 8,33, 4,16,70, 2,6,12, 23,46,90},
-
- 60,30,500, 1,18., 128
- },
- /* 5: 128 x 17 */
- {
- 6,{0,1,1,2,3,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2},
- {{3},{4,5},{-1,6,7,8},{-1,9,10,11}},
- 2,{0,128, 12,46, 4,8,16, 23,33,70, 2,6,10, 14,19,28, 39,58,90},
-
- 60,30,500, 1,18., 128
- },
- /* 6: 256 x 4 (low bitrate version) */
- {
- 1,{0},{4},{2},{0},
- {{1,2,3,4}},
- 4,{0,256, 66,16,32,140},
-
- 60,30,500, 1.,18., 256
- },
- /* 7: 1024 x 27 */
- {
- 8,{0,1,2,2,3,3,4,4},{3,4,3,4,3},{0,1,1,2,2},{-1,0,1,2,3},
- {{4},{5,6},{7,8},{-1,9,10,11},{-1,12,13,14}},
- 2,{0,1024, 93,23,372, 6,46,186,750, 14,33,65, 130,260,556,
- 3,10,18,28, 39,55,79,111, 158,220,312, 464,650,850},
-
- 60,30,500, 3,18., 1024
- },
- /* 8: 2048 x 27 */
- {
- 8,{0,1,2,2,3,3,4,4},{3,4,3,4,3},{0,1,1,2,2},{-1,0,1,2,3},
- {{4},{5,6},{7,8},{-1,9,10,11},{-1,12,13,14}},
- 2,{0,2048, 186,46,744, 12,92,372,1500, 28,66,130, 260,520,1112,
- 6,20,36,56, 78,110,158,222, 316,440,624, 928,1300,1700},
-
- 60,30,500, 3,18., 2048
- },
- /* 9: 512 x 17 */
- {
- 6,{0,1,1,2,3,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2},
- {{3},{4,5},{-1,6,7,8},{-1,9,10,11}},
- 2,{0,512, 46,186, 16,33,65, 93,130,278,
- 7,23,39, 55,79,110, 156,232,360},
-
- 60,30,500, 1,18., 512
- },
-
- /* 10: X x 0 (LFE floor; edge posts only) */
- {
- 0,{0}, {0},{0},{-1},
- {{-1}},
- 2,{0,12},
- 60,30,500, 1.,18., 10
- },
-
-};
diff --git a/drivers/vorbis/modes/psych_11.h b/drivers/vorbis/modes/psych_11.h
deleted file mode 100644
index 844a8ed3cd..0000000000
--- a/drivers/vorbis/modes/psych_11.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: 11kHz settings
- last mod: $Id: psych_11.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-static const double _psy_lowpass_11[3]={4.5,5.5,30.,};
-
-static const att3 _psy_tone_masteratt_11[3]={
- {{ 30, 25, 12}, 0, 0}, /* 0 */
- {{ 30, 25, 12}, 0, 0}, /* 0 */
- {{ 20, 0, -14}, 0, 0}, /* 0 */
-};
-
-static const vp_adjblock _vp_tonemask_adj_11[3]={
- /* adjust for mode zero */
- /* 63 125 250 500 1 2 4 8 16 */
- {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0,10, 2, 0,99,99,99}}, /* 0 */
- {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0, 5, 0, 0,99,99,99}}, /* 1 */
- {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0, 0, 0, 0,99,99,99}}, /* 2 */
-};
-
-
-static const noise3 _psy_noisebias_11[3]={
- /* 63 125 250 500 1k 2k 4k 8k 16k*/
- {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 10, 10, 12, 12, 12, 99, 99, 99},
- {-15,-15,-15,-15,-10,-10, -5, 0, 0, 4, 4, 5, 5, 10, 99, 99, 99},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
-
- {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 10, 10, 12, 12, 12, 99, 99, 99},
- {-15,-15,-15,-15,-10,-10, -5, -5, -5, 0, 0, 0, 0, 0, 99, 99, 99},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
-
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 99, 99, 99},
- {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10, 99, 99, 99},
- {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24, 99, 99, 99}}},
-};
-
-static const double _noise_thresh_11[3]={ .3,.5,.5 };
-
diff --git a/drivers/vorbis/modes/psych_16.h b/drivers/vorbis/modes/psych_16.h
deleted file mode 100644
index 1c10b3954e..0000000000
--- a/drivers/vorbis/modes/psych_16.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: 16kHz settings
- last mod: $Id: psych_16.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-/* stereo mode by base quality level */
-static const adj_stereo _psy_stereo_modes_16[4]={
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
- {{ 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
- { 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
- { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 4},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- {{ 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
- { 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
- { 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 4, 4, 4},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- {{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
- { 5, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
- { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- {{ 0, 0, 0, 0, 0, 0, 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, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-};
-
-static const double _psy_lowpass_16[4]={6.5,8,30.,99.};
-
-static const att3 _psy_tone_masteratt_16[4]={
- {{ 30, 25, 12}, 0, 0}, /* 0 */
- {{ 25, 22, 12}, 0, 0}, /* 0 */
- {{ 20, 12, 0}, 0, 0}, /* 0 */
- {{ 15, 0, -14}, 0, 0}, /* 0 */
-};
-
-static const vp_adjblock _vp_tonemask_adj_16[4]={
- /* adjust for mode zero */
- /* 63 125 250 500 1 2 4 8 16 */
- {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0,10, 0, 0, 0, 0, 0}}, /* 0 */
- {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0,10, 0, 0, 0, 0, 0}}, /* 1 */
- {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 2 */
- {{-30,-30,-30,-30,-30,-26,-20,-10, -5, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 2 */
-};
-
-
-static const noise3 _psy_noisebias_16_short[4]={
- /* 63 125 250 500 1k 2k 4k 8k 16k*/
- {{{-15,-15,-15,-15,-15,-10,-10,-5, 4, 10, 10, 10, 10, 12, 12, 14, 20},
- {-15,-15,-15,-15,-15,-10,-10, -5, 0, 0, 4, 5, 5, 6, 8, 8, 15},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
-
- {{{-15,-15,-15,-15,-15,-10,-10,-5, 4, 6, 6, 6, 6, 8, 10, 12, 20},
- {-15,-15,-15,-15,-15,-15,-15,-10, -5, -5, -5, 4, 5, 6, 8, 8, 15},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10,-10,-10,-10,-10,-10,-10,-10,-10}}},
-
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 5, 8, 12},
- {-20,-20,-20,-20,-16,-12,-20,-14,-10,-10, -8, 0, 0, 0, 0, 2, 5},
- {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-
- {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5, 0, 0, 0, 6},
- {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10,-10,-10, -6},
- {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-};
-
-static const noise3 _psy_noisebias_16_impulse[4]={
- /* 63 125 250 500 1k 2k 4k 8k 16k*/
- {{{-15,-15,-15,-15,-15,-10,-10,-5, 4, 10, 10, 10, 10, 12, 12, 14, 20},
- {-15,-15,-15,-15,-15,-10,-10, -5, 0, 0, 4, 5, 5, 6, 8, 8, 15},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
-
- {{{-15,-15,-15,-15,-15,-10,-10,-5, 4, 4, 4, 4, 5, 5, 6, 8, 15},
- {-15,-15,-15,-15,-15,-15,-15,-10, -5, -5, -5, 0, 0, 0, 0, 4, 10},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10,-10,-10,-10,-10,-10,-10,-10,-10}}},
-
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 4, 10},
- {-20,-20,-20,-20,-16,-12,-20,-14,-10,-10,-10,-10,-10,-10,-10, -7, -5},
- {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-
- {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5, 0, 0, 0, 6},
- {-30,-30,-30,-30,-26,-22,-20,-18,-18,-18,-20,-20,-20,-20,-20,-20,-16},
- {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-};
-
-static const noise3 _psy_noisebias_16[4]={
- /* 63 125 250 500 1k 2k 4k 8k 16k*/
- {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 6, 8, 8, 10, 10, 10, 14, 20},
- {-10,-10,-10,-10,-10, -5, -2, -2, 0, 0, 0, 4, 5, 6, 8, 8, 15},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
-
- {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 6, 6, 6, 6, 8, 10, 12, 20},
- {-15,-15,-15,-15,-15,-10, -5, -5, 0, 0, 0, 4, 5, 6, 8, 8, 15},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
-
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 5, 8, 12},
- {-20,-20,-20,-20,-16,-12,-20,-10, -5, -5, 0, 0, 0, 0, 0, 2, 5},
- {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-
- {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5, 0, 0, 0, 6},
- {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10,-10,-10, -6},
- {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
-};
-
-static const noiseguard _psy_noiseguards_16[4]={
- {10,10,-1},
- {10,10,-1},
- {20,20,-1},
- {20,20,-1},
-};
-
-static const double _noise_thresh_16[4]={ .3,.5,.5,.5 };
-
-static const int _noise_start_16[3]={ 256,256,9999 };
-static const int _noise_part_16[4]={ 8,8,8,8 };
-
-static const int _psy_ath_floater_16[4]={
- -100,-100,-100,-105,
-};
-
-static const int _psy_ath_abs_16[4]={
- -130,-130,-130,-140,
-};
diff --git a/drivers/vorbis/modes/psych_44.h b/drivers/vorbis/modes/psych_44.h
deleted file mode 100644
index f05c032653..0000000000
--- a/drivers/vorbis/modes/psych_44.h
+++ /dev/null
@@ -1,642 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: key psychoacoustic settings for 44.1/48kHz
- last mod: $Id: psych_44.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-
-/* preecho trigger settings *****************************************/
-
-static const vorbis_info_psy_global _psy_global_44[5]={
-
- {8, /* lines per eighth octave */
- {20.f,14.f,12.f,12.f,12.f,12.f,12.f},
- {-60.f,-30.f,-40.f,-40.f,-40.f,-40.f,-40.f}, 2,-75.f,
- -6.f,
- {99.},{{99.},{99.}},{0},{0},{{0.},{0.}}
- },
- {8, /* lines per eighth octave */
- {14.f,10.f,10.f,10.f,10.f,10.f,10.f},
- {-40.f,-30.f,-25.f,-25.f,-25.f,-25.f,-25.f}, 2,-80.f,
- -6.f,
- {99.},{{99.},{99.}},{0},{0},{{0.},{0.}}
- },
- {8, /* lines per eighth octave */
- {12.f,10.f,10.f,10.f,10.f,10.f,10.f},
- {-20.f,-20.f,-15.f,-15.f,-15.f,-15.f,-15.f}, 0,-80.f,
- -6.f,
- {99.},{{99.},{99.}},{0},{0},{{0.},{0.}}
- },
- {8, /* lines per eighth octave */
- {10.f,8.f,8.f,8.f,8.f,8.f,8.f},
- {-20.f,-15.f,-12.f,-12.f,-12.f,-12.f,-12.f}, 0,-80.f,
- -6.f,
- {99.},{{99.},{99.}},{0},{0},{{0.},{0.}}
- },
- {8, /* lines per eighth octave */
- {10.f,6.f,6.f,6.f,6.f,6.f,6.f},
- {-15.f,-15.f,-12.f,-12.f,-12.f,-12.f,-12.f}, 0,-85.f,
- -6.f,
- {99.},{{99.},{99.}},{0},{0},{{0.},{0.}}
- },
-};
-
-/* noise compander lookups * low, mid, high quality ****************/
-static const compandblock _psy_compand_44[6]={
- /* sub-mode Z short */
- {{
- 0, 1, 2, 3, 4, 5, 6, 7, /* 7dB */
- 8, 9,10,11,12,13,14, 15, /* 15dB */
- 16,17,18,19,20,21,22, 23, /* 23dB */
- 24,25,26,27,28,29,30, 31, /* 31dB */
- 32,33,34,35,36,37,38, 39, /* 39dB */
- }},
- /* mode_Z nominal short */
- {{
- 0, 1, 2, 3, 4, 5, 6, 6, /* 7dB */
- 7, 7, 7, 7, 6, 6, 6, 7, /* 15dB */
- 7, 8, 9,10,11,12,13, 14, /* 23dB */
- 15,16,17,17,17,18,18, 19, /* 31dB */
- 19,19,20,21,22,23,24, 25, /* 39dB */
- }},
- /* mode A short */
- {{
- 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 */
- }},
- /* sub-mode Z long */
- {{
- 0, 1, 2, 3, 4, 5, 6, 7, /* 7dB */
- 8, 9,10,11,12,13,14, 15, /* 15dB */
- 16,17,18,19,20,21,22, 23, /* 23dB */
- 24,25,26,27,28,29,30, 31, /* 31dB */
- 32,33,34,35,36,37,38, 39, /* 39dB */
- }},
- /* mode_Z nominal long */
- {{
- 0, 1, 2, 3, 4, 5, 6, 7, /* 7dB */
- 8, 9,10,11,12,12,13, 13, /* 15dB */
- 13,14,14,14,15,15,15, 15, /* 23dB */
- 16,16,17,17,17,18,18, 19, /* 31dB */
- 19,19,20,21,22,23,24, 25, /* 39dB */
- }},
- /* mode A long */
- {{
- 0, 1, 2, 3, 4, 5, 6, 7, /* 7dB */
- 8, 8, 7, 6, 5, 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 */
- }}
-};
-
-/* tonal masking curve level adjustments *************************/
-
-static const vp_adjblock _vp_tonemask_adj_longblock[12]={
-
- /* 63 125 250 500 1 2 4 8 16 */
-
- {{ -3, -8,-13,-15,-10,-10,-10,-10,-10,-10,-10, 0, 0, 0, 0, 0, 0}}, /* -1 */
-
-/* {{-15,-15,-15,-15,-10, -8, -4, -2, 0, 0, 0, 10, 0, 0, 0, 0, 0}}, 0 */
- {{ -4,-10,-14,-16,-15,-14,-13,-12,-12,-12,-11, -1, -1, -1, -1, -1, 0}}, /* 0 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 5, 0, 0, 0, 0, 0}}, 1 */
- {{ -6,-12,-14,-16,-15,-15,-14,-13,-13,-12,-12, -2, -2, -1, -1, -1, 0}}, /* 1 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 2 */
- {{-12,-13,-14,-16,-16,-16,-15,-14,-13,-12,-12, -6, -3, -1, -1, -1, 0}}, /* 2 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 3 */
- {{-15,-15,-15,-16,-16,-16,-16,-14,-13,-13,-13,-10, -4, -2, -1, -1, 0}}, /* 3 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, *//* 4 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7 -3, -1, -1 , 0}}, /* 4 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 5 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7 -3, -1, -1 , 0}}, /* 5 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 6 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -8, -4, -2, -2, 0}}, /* 6 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 7 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 7 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 8 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 8 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 9 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 9 */
-
-/* {{-15,-15,-15,-15,-15,-12,-10, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, 10 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 10 */
-};
-
-static const vp_adjblock _vp_tonemask_adj_otherblock[12]={
- /* 63 125 250 500 1 2 4 8 16 */
-
- {{ -3, -8,-13,-15,-10,-10, -9, -9, -9, -9, -9, 1, 1, 1, 1, 1, 1}}, /* -1 */
-
-/* {{-20,-20,-20,-20,-14,-12,-10, -8, -4, 0, 0, 10, 0, 0, 0, 0, 0}}, 0 */
- {{ -4,-10,-14,-16,-14,-13,-12,-12,-11,-11,-10, 0, 0, 0, 0, 0, 0}}, /* 0 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 5, 0, 0, 0, 0, 0}}, 1 */
- {{ -6,-12,-14,-16,-15,-15,-14,-13,-13,-12,-12, -2, -2, -1, 0, 0, 0}}, /* 1 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 2 */
- {{-12,-13,-14,-16,-16,-16,-15,-14,-13,-12,-12, -5, -2, -1, 0, 0, 0}}, /* 2 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 3 */
- {{-15,-15,-15,-16,-16,-16,-16,-14,-13,-13,-13,-10, -4, -2, 0, 0, 0}}, /* 3 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 4 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7 -3, -1, -1 , 0}}, /* 4 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 5 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-13,-11, -7 -3, -1, -1 , 0}}, /* 5 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 6 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -8, -4, -2, -2, 0}}, /* 6 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 7 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 7 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 8 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 8 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 9 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 9 */
-
-/* {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, 10 */
- {{-16,-16,-16,-16,-16,-16,-16,-15,-14,-14,-14,-12, -9, -4, -2, -2, 0}}, /* 10 */
-};
-
-/* noise bias (transition block) */
-static const noise3 _psy_noisebias_trans[12]={
- /* 63 125 250 500 1k 2k 4k 8k 16k*/
- /* -1 */
- {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 8, 8, 8, 8, 10, 12, 14, 20},
- {-30,-30,-30,-30,-26,-20,-16, -8, -6, -6, -2, 2, 2, 3, 6, 6, 15},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},
- /* 0
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 5, 8, 10},
- {-30,-30,-30,-30,-26,-22,-20,-14, -8, -4, 0, 0, 0, 0, 2, 4, 10},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -4, -4, -4, -2}}},*/
- {{{-15,-15,-15,-15,-15,-12, -6, -4, 0, 2, 4, 4, 5, 5, 5, 8, 10},
- {-30,-30,-30,-30,-26,-22,-20,-14, -8, -4, 0, 0, 0, 0, 2, 3, 6},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -4, -4, -4, -2}}},
- /* 1
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 5, 8, 10},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2, 0, 2, 8},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},*/
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 5, 8, 10},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2, 0, 1, 4},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},
- /* 2
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 2, 2, 4, 4, 5, 6, 10},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2, 0, 2, 6},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}}, */
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 2, 2, 4, 4, 5, 6, 10},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -2, -1, 0, 3},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -7, -4}}},
- /* 3
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 2, 2, 4, 4, 4, 5, 8},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -1, 1, 6},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 2, 2, 4, 4, 4, 5, 8},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -2, 0, 2},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
- /* 4
- {{{-20,-20,-20,-20,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -1, 1, 5},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/
- {{{-20,-20,-20,-20,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -2, -1, 1},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
- /* 5
- {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7},
- {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -4, -4, -4, -4, -2, -1, 2},
- {-34,-34,-34,-34,-30,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}}, */
- {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7},
- {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -4, -4, -4, -4, -3, -1, 0},
- {-34,-34,-34,-34,-30,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}},
- /* 6
- {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7},
- {-32,-32,-32,-32,-28,-24,-24,-18,-14, -8, -6, -6, -6, -6, -4, -2, 1},
- {-34,-34,-34,-34,-30,-26,-24,-18,-17,-15,-15,-15,-15,-13,-13,-12, -8}}},*/
- {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7},
- {-32,-32,-32,-32,-28,-24,-24,-18,-14, -8, -6, -6, -6, -6, -5, -2, 0},
- {-34,-34,-34,-34,-30,-26,-26,-24,-22,-19,-19,-19,-19,-18,-17,-16,-12}}},
- /* 7
- {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7},
- {-32,-32,-32,-32,-28,-24,-24,-18,-14,-12,-10, -8, -8, -8, -6, -4, 0},
- {-34,-34,-34,-34,-30,-26,-26,-24,-22,-19,-19,-19,-19,-18,-17,-16,-12}}},*/
- {{{-24,-24,-24,-24,-20,-18,-14, -8, -1, 1, 1, 1, 2, 3, 3, 4, 7},
- {-32,-32,-32,-32,-28,-24,-24,-24,-18,-14,-12,-10,-10,-10, -8, -6, -2},
- {-34,-34,-34,-34,-30,-26,-26,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},
- /* 8
- {{{-24,-24,-24,-24,-22,-20,-15,-10, -8, -2, 0, 0, 0, 1, 2, 3, 7},
- {-36,-36,-36,-36,-30,-30,-30,-24,-18,-14,-12,-10,-10,-10, -8, -6, -2},
- {-36,-36,-36,-36,-34,-30,-28,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},*/
- {{{-24,-24,-24,-24,-22,-20,-15,-10, -8, -2, 0, 0, 0, 1, 2, 3, 7},
- {-36,-36,-36,-36,-30,-30,-30,-24,-20,-16,-16,-16,-16,-14,-12,-10, -7},
- {-36,-36,-36,-36,-34,-30,-28,-26,-24,-30,-30,-30,-30,-30,-30,-24,-20}}},
- /* 9
- {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2, 2},
- {-36,-36,-36,-36,-34,-32,-32,-28,-20,-16,-16,-16,-16,-14,-12,-10, -7},
- {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},*/
- {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2, 2},
- {-38,-38,-38,-38,-36,-34,-34,-30,-24,-20,-20,-20,-20,-18,-16,-12,-10},
- {-40,-40,-40,-40,-40,-40,-40,-38,-35,-35,-35,-35,-35,-35,-35,-35,-30}}},
- /* 10 */
- {{{-30,-30,-30,-30,-30,-30,-30,-28,-20,-14,-14,-14,-14,-14,-14,-12,-10},
- {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-30,-30,-30,-30,-30,-30,-20},
- {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
-};
-
-/* noise bias (long block) */
-static const noise3 _psy_noisebias_long[12]={
- /*63 125 250 500 1k 2k 4k 8k 16k*/
- /* -1 */
- {{{-10,-10,-10,-10,-10, -4, 0, 0, 0, 6, 6, 6, 6, 10, 10, 12, 20},
- {-20,-20,-20,-20,-20,-20,-10, -2, 0, 0, 0, 0, 0, 2, 4, 6, 15},
- {-20,-20,-20,-20,-20,-20,-20,-10, -6, -6, -6, -6, -6, -4, -4, -4, -2}}},
-
- /* 0 */
- /* {{{-10,-10,-10,-10,-10,-10, -8, 2, 2, 2, 4, 4, 5, 5, 5, 8, 10},
- {-20,-20,-20,-20,-20,-20,-20,-14, -6, 0, 0, 0, 0, 0, 2, 4, 10},
- {-20,-20,-20,-20,-20,-20,-20,-14, -8, -6, -6, -6, -6, -4, -4, -4, -2}}},*/
- {{{-10,-10,-10,-10,-10,-10, -8, 2, 2, 2, 4, 4, 5, 5, 5, 8, 10},
- {-20,-20,-20,-20,-20,-20,-20,-14, -6, 0, 0, 0, 0, 0, 2, 3, 6},
- {-20,-20,-20,-20,-20,-20,-20,-14, -8, -6, -6, -6, -6, -4, -4, -4, -2}}},
- /* 1 */
- /* {{{-10,-10,-10,-10,-10,-10, -8, -4, 0, 2, 4, 4, 5, 5, 5, 8, 10},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2, 0, 2, 8},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},*/
- {{{-10,-10,-10,-10,-10,-10, -8, -4, 0, 2, 4, 4, 5, 5, 5, 8, 10},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2, 0, 1, 4},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},
- /* 2 */
- /* {{{-10,-10,-10,-10,-10,-10,-10, -8, 0, 2, 2, 2, 4, 4, 5, 6, 10},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2, 0, 2, 6},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/
- {{{-10,-10,-10,-10,-10,-10,-10, -8, 0, 2, 2, 2, 4, 4, 5, 6, 10},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -2, -1, 0, 3},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
- /* 3 */
- /* {{{-10,-10,-10,-10,-10,-10,-10, -8, 0, 2, 2, 2, 4, 4, 4, 5, 8},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -1, 1, 6},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/
- {{{-10,-10,-10,-10,-10,-10,-10, -8, 0, 2, 2, 2, 4, 4, 4, 5, 8},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -2, 0, 2},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -5}}},
- /* 4 */
- /* {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -1, 1, 5},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},*/
- {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -2, -1, 1},
- {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -7}}},
- /* 5 */
- /* {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7},
- {-22,-22,-22,-22,-22,-22,-22,-16,-12, -6, -4, -4, -4, -4, -2, -1, 2},
- {-24,-24,-24,-24,-24,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}},*/
- {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7},
- {-22,-22,-22,-22,-22,-22,-22,-16,-12, -6, -4, -4, -4, -4, -3, -1, 0},
- {-24,-24,-24,-24,-24,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -8}}},
- /* 6 */
- /* {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7},
- {-24,-24,-24,-24,-24,-24,-24,-18,-14, -8, -6, -6, -6, -6, -4, -2, 1},
- {-26,-26,-26,-26,-26,-26,-26,-18,-16,-15,-15,-15,-15,-13,-13,-12, -8}}},*/
- {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7},
- {-24,-24,-24,-24,-24,-24,-24,-18,-14, -8, -6, -6, -6, -6, -5, -2, 0},
- {-26,-26,-26,-26,-26,-26,-26,-18,-16,-15,-15,-15,-15,-13,-13,-12,-10}}},
- /* 7 */
- {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 1, 1, 1, 2, 3, 3, 4, 7},
- {-24,-24,-24,-24,-24,-24,-24,-18,-14,-10, -8, -8, -8, -8, -6, -4, 0},
- {-26,-26,-26,-26,-26,-26,-26,-22,-20,-19,-19,-19,-19,-18,-17,-16,-12}}},
- /* 8 */
- {{{-15,-15,-15,-15,-15,-15,-15,-10, -4, 0, 0, 0, 0, 1, 2, 3, 7},
- {-26,-26,-26,-26,-26,-26,-26,-20,-16,-12,-10,-10,-10,-10, -8, -6, -2},
- {-28,-28,-28,-28,-28,-28,-28,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},
- /* 9 */
- {{{-22,-22,-22,-22,-22,-22,-22,-18,-14, -8, -4, -4, -4, -4, -4, -2, 2},
- {-26,-26,-26,-26,-26,-26,-26,-22,-18,-16,-16,-16,-16,-14,-12,-10, -7},
- {-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},
- /* 10 */
- {{{-24,-24,-24,-24,-24,-24,-24,-24,-24,-18,-14,-14,-14,-14,-14,-12,-10},
- {-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-20},
- {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
-};
-
-/* noise bias (impulse block) */
-static const noise3 _psy_noisebias_impulse[12]={
- /* 63 125 250 500 1k 2k 4k 8k 16k*/
- /* -1 */
- {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 8, 8, 8, 8, 10, 12, 14, 20},
- {-30,-30,-30,-30,-26,-20,-16, -8, -6, -6, -2, 2, 2, 3, 6, 6, 15},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},
-
- /* 0 */
- /* {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 4, 8, 8, 8, 10, 12, 14, 20},
- {-30,-30,-30,-30,-26,-22,-20,-14, -6, -2, 0, 0, 0, 0, 2, 4, 10},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},*/
- {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 4, 8, 8, 8, 10, 12, 14, 20},
- {-30,-30,-30,-30,-26,-22,-20,-14, -6, -2, 0, 0, 0, 0, 2, 3, 6},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},
- /* 1 */
- {{{-12,-12,-12,-12,-12, -8, -6, -4, 0, 4, 4, 4, 4, 10, 12, 14, 20},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -4, -4, -2, -2, -2, -2, 2},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8,-10,-10, -8, -8, -8, -6, -4}}},
- /* 2 */
- {{{-14,-14,-14,-14,-14,-10, -8, -6, -2, 2, 2, 2, 2, 8, 10, 10, 16},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2, 0},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}},
- /* 3 */
- {{{-14,-14,-14,-14,-14,-10, -8, -6, -2, 2, 2, 2, 2, 6, 8, 8, 14},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2, 0},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}},
- /* 4 */
- {{{-16,-16,-16,-16,-16,-12,-10, -6, -2, 0, 0, 0, 0, 4, 6, 6, 12},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2, 0},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}},
- /* 5 */
- {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 4, 6, 11},
- {-32,-32,-32,-32,-28,-24,-22,-16,-10, -6, -8, -8, -6, -6, -6, -4, -2},
- {-34,-34,-34,-34,-30,-26,-24,-18,-14,-12,-12,-12,-12,-12,-10, -9, -5}}},
- /* 6
- {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 4, 6, 11},
- {-34,-34,-34,-34,-30,-30,-24,-20,-12,-12,-14,-14,-10, -9, -8, -6, -4},
- {-34,-34,-34,-34,-34,-30,-26,-20,-16,-15,-15,-15,-15,-15,-13,-12, -8}}},*/
- {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 4, 6, 11},
- {-34,-34,-34,-34,-30,-30,-30,-24,-16,-16,-16,-16,-16,-16,-14,-14,-12},
- {-36,-36,-36,-36,-36,-34,-28,-24,-20,-20,-20,-20,-20,-20,-20,-18,-16}}},
- /* 7 */
- /* {{{-22,-22,-22,-22,-22,-20,-14,-10, -6, 0, 0, 0, 0, 4, 4, 6, 11},
- {-34,-34,-34,-34,-30,-30,-24,-20,-14,-14,-16,-16,-14,-12,-10,-10,-10},
- {-34,-34,-34,-34,-32,-32,-30,-24,-20,-19,-19,-19,-19,-19,-17,-16,-12}}},*/
- {{{-22,-22,-22,-22,-22,-20,-14,-10, -6, 0, 0, 0, 0, 4, 4, 6, 11},
- {-34,-34,-34,-34,-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-24,-22},
- {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-30,-24}}},
- /* 8 */
- /* {{{-24,-24,-24,-24,-24,-22,-14,-10, -6, -1, -1, -1, -1, 3, 3, 5, 10},
- {-34,-34,-34,-34,-30,-30,-30,-24,-20,-20,-20,-20,-20,-18,-16,-16,-14},
- {-36,-36,-36,-36,-36,-34,-28,-24,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},*/
- {{{-24,-24,-24,-24,-24,-22,-14,-10, -6, -1, -1, -1, -1, 3, 3, 5, 10},
- {-34,-34,-34,-34,-34,-32,-32,-30,-26,-26,-26,-26,-26,-26,-26,-26,-24},
- {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-30,-24}}},
- /* 9 */
- /* {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2, 2},
- {-36,-36,-36,-36,-34,-32,-32,-30,-26,-26,-26,-26,-26,-22,-20,-20,-18},
- {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},*/
- {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2, 2},
- {-36,-36,-36,-36,-34,-32,-32,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26},
- {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},
- /* 10 */
- {{{-30,-30,-30,-30,-30,-26,-24,-24,-24,-20,-16,-16,-16,-16,-16,-14,-12},
- {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-30,-30,-30,-30,-30,-30,-26},
- {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
-};
-
-/* noise bias (padding block) */
-static const noise3 _psy_noisebias_padding[12]={
- /* 63 125 250 500 1k 2k 4k 8k 16k*/
-
- /* -1 */
- {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 8, 8, 8, 8, 10, 12, 14, 20},
- {-30,-30,-30,-30,-26,-20,-16, -8, -6, -6, -2, 2, 2, 3, 6, 6, 15},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},
-
- /* 0 */
- {{{-10,-10,-10,-10,-10, -4, 0, 0, 4, 8, 8, 8, 8, 10, 12, 14, 20},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, 2, 3, 6, 6, 8, 10},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -4, -4, -4, -4, -2, 0, 2}}},
- /* 1 */
- {{{-12,-12,-12,-12,-12, -8, -6, -4, 0, 4, 4, 4, 4, 10, 12, 14, 20},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, 0, 0, 0, 2, 2, 4, 8},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -6, -4, -2, 0}}},
- /* 2 */
- /* {{{-14,-14,-14,-14,-14,-10, -8, -6, -2, 2, 2, 2, 2, 8, 10, 10, 16},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, 0, 0, 0, 2, 2, 4, 8},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},*/
- {{{-14,-14,-14,-14,-14,-10, -8, -6, -2, 2, 2, 2, 2, 8, 10, 10, 16},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1, 0, 0, 2, 6},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},
- /* 3 */
- {{{-14,-14,-14,-14,-14,-10, -8, -6, -2, 2, 2, 2, 2, 6, 8, 8, 14},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1, 0, 0, 2, 6},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},
- /* 4 */
- {{{-16,-16,-16,-16,-16,-12,-10, -6, -2, 0, 0, 0, 0, 4, 6, 6, 12},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1, -1, 0, 2, 6},
- {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},
- /* 5 */
- {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 6, 6, 12},
- {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -3, -3, -3, -3, -2, 0, 4},
- {-34,-34,-34,-34,-30,-26,-24,-18,-14,-10,-10,-10,-10,-10, -8, -5, -3}}},
- /* 6 */
- {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 6, 6, 12},
- {-34,-34,-34,-34,-30,-30,-24,-20,-14, -8, -4, -4, -4, -4, -3, -1, 4},
- {-34,-34,-34,-34,-34,-30,-26,-20,-16,-13,-13,-13,-13,-13,-11, -8, -6}}},
- /* 7 */
- {{{-20,-20,-20,-20,-20,-18,-14,-10, -4, 0, 0, 0, 0, 4, 6, 6, 12},
- {-34,-34,-34,-34,-30,-30,-30,-24,-16,-10, -8, -6, -6, -6, -5, -3, 1},
- {-34,-34,-34,-34,-32,-32,-28,-22,-18,-16,-16,-16,-16,-16,-14,-12,-10}}},
- /* 8 */
- {{{-22,-22,-22,-22,-22,-20,-14,-10, -4, 0, 0, 0, 0, 3, 5, 5, 11},
- {-34,-34,-34,-34,-30,-30,-30,-24,-16,-12,-10, -8, -8, -8, -7, -5, -2},
- {-36,-36,-36,-36,-36,-34,-28,-22,-20,-20,-20,-20,-20,-20,-20,-16,-14}}},
- /* 9 */
- {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -2, -2, -2, -2, 0, 2, 6},
- {-36,-36,-36,-36,-34,-32,-32,-24,-16,-12,-12,-12,-12,-12,-10, -8, -5},
- {-40,-40,-40,-40,-40,-40,-40,-32,-26,-24,-24,-24,-24,-24,-24,-20,-18}}},
- /* 10 */
- {{{-30,-30,-30,-30,-30,-26,-24,-24,-24,-20,-12,-12,-12,-12,-12,-10, -8},
- {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-25,-25,-25,-25,-25,-25,-15},
- {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
-};
-
-
-static const noiseguard _psy_noiseguards_44[4]={
- {3,3,15},
- {3,3,15},
- {10,10,100},
- {10,10,100},
-};
-
-static const int _psy_tone_suppress[12]={
- -20,-20,-20,-20,-20,-24,-30,-40,-40,-45,-45,-45,
-};
-static const int _psy_tone_0dB[12]={
- 90,90,95,95,95,95,105,105,105,105,105,105,
-};
-static const int _psy_noise_suppress[12]={
- -20,-20,-24,-24,-24,-24,-30,-40,-40,-45,-45,-45,
-};
-
-static const vorbis_info_psy _psy_info_template={
- /* blockflag */
- -1,
- /* ath_adjatt, ath_maxatt */
- -140.,-140.,
- /* tonemask att boost/decay,suppr,curves */
- {0.f,0.f,0.f}, 0.,0., -40.f, {0.},
-
- /*noisemaskp,supp, low/high window, low/hi guard, minimum */
- 1, -0.f, .5f, .5f, 0,0,0,
- /* noiseoffset*3, noisecompand, max_curve_dB */
- {{-1},{-1},{-1}},{-1},105.f,
- /* noise normalization - noise_p, start, partition, thresh. */
- 0,-1,-1,0.,
-};
-
-/* ath ****************/
-
-static const int _psy_ath_floater[12]={
- -100,-100,-100,-100,-100,-100,-105,-105,-105,-105,-110,-120,
-};
-static const int _psy_ath_abs[12]={
- -130,-130,-130,-130,-140,-140,-140,-140,-140,-140,-140,-150,
-};
-
-/* stereo setup. These don't map directly to quality level, there's
- an additional indirection as several of the below may be used in a
- single bitmanaged stream
-
-****************/
-
-/* various stereo possibilities */
-
-/* stereo mode by base quality level */
-static const adj_stereo _psy_stereo_modes_44[12]={
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -1 */
- {{ 4, 4, 4, 4, 4, 4, 4, 3, 2, 2, 1, 0, 0, 0, 0},
- { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 5, 4, 3},
- { 1, 2, 3, 4, 4, 4, 4, 4, 4, 5, 6, 7, 8, 8, 8},
- { 12,12.5, 13,13.5, 14,14.5, 15, 99, 99, 99, 99, 99, 99, 99, 99}},
-
-/* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 0 */
- {{ 4, 4, 4, 4, 4, 4, 4, 3, 2, 1, 0, 0, 0, 0, 0},
- { 8, 8, 8, 8, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 3},
- { 1, 2, 3, 4, 4, 5, 6, 6, 6, 6, 6, 8, 8, 8, 8},
- { 12,12.5, 13,13.5, 14,14.5, 15, 99, 99, 99, 99, 99, 99, 99, 99}},
-
-
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 */
- {{ 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0, 0, 0},
- { 8, 8, 8, 8, 6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 3},
- { 1, 2, 3, 4, 4, 5, 6, 6, 6, 6, 6, 8, 8, 8, 8},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-
-
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 2 */
- {{ 3, 3, 3, 3, 3, 3, 3, 2, 1, 1, 0, 0, 0, 0, 0},
- { 8, 8, 6, 6, 5, 5, 4, 4, 4, 4, 4, 4, 3, 2, 1},
- { 3, 4, 4, 5, 5, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 3 */
- {{ 2, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0},
- { 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 1},
- { 4, 4, 5, 6, 6, 6, 6, 6, 8, 8, 10, 10, 10, 10, 10},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 4 */
- {{ 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 2, 1, 0},
- { 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5 */
- {{ 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0},
- { 6, 7, 8, 8, 8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 6 */
- {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { 3, 3, 3, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { 8, 8, 8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 7 */
- {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { 3, 3, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { 8, 8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 8 */
- {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- { 8, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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},
- { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 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},
- { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-};
-
-/* tone master attenuation by base quality mode and bitrate tweak */
-static const att3 _psy_tone_masteratt_44[12]={
- {{ 35, 21, 9}, 0, 0}, /* -1 */
- {{ 30, 20, 8}, -2, 1.25}, /* 0 */
- /* {{ 25, 14, 4}, 0, 0}, *//* 1 */
- {{ 25, 12, 2}, 0, 0}, /* 1 */
- /* {{ 20, 10, -2}, 0, 0}, *//* 2 */
- {{ 20, 9, -3}, 0, 0}, /* 2 */
- {{ 20, 9, -4}, 0, 0}, /* 3 */
- {{ 20, 9, -4}, 0, 0}, /* 4 */
- {{ 20, 6, -6}, 0, 0}, /* 5 */
- {{ 20, 3, -10}, 0, 0}, /* 6 */
- {{ 18, 1, -14}, 0, 0}, /* 7 */
- {{ 18, 0, -16}, 0, 0}, /* 8 */
- {{ 18, -2, -16}, 0, 0}, /* 9 */
- {{ 12, -2, -20}, 0, 0}, /* 10 */
-};
-
-/* lowpass by mode **************/
-static const double _psy_lowpass_44[12]={
- /* 15.1,15.8,16.5,17.9,20.5,48.,999.,999.,999.,999.,999. */
- 13.9,15.1,15.8,16.5,17.2,18.9,20.1,48.,999.,999.,999.,999.
-};
-
-/* noise normalization **********/
-
-static const int _noise_start_short_44[11]={
- /* 16,16,16,16,32,32,9999,9999,9999,9999 */
- 32,16,16,16,32,9999,9999,9999,9999,9999,9999
-};
-static const int _noise_start_long_44[11]={
- /* 128,128,128,256,512,512,9999,9999,9999,9999 */
- 256,128,128,256,512,9999,9999,9999,9999,9999,9999
-};
-
-static const int _noise_part_short_44[11]={
- 8,8,8,8,8,8,8,8,8,8,8
-};
-static const int _noise_part_long_44[11]={
- 32,32,32,32,32,32,32,32,32,32,32
-};
-
-static const double _noise_thresh_44[11]={
- /* .2,.2,.3,.4,.5,.5,9999.,9999.,9999.,9999., */
- .2,.2,.2,.4,.6,9999.,9999.,9999.,9999.,9999.,9999.,
-};
-
-static const double _noise_thresh_5only[2]={
- .5,.5,
-};
diff --git a/drivers/vorbis/modes/psych_8.h b/drivers/vorbis/modes/psych_8.h
deleted file mode 100644
index 0e2dd57371..0000000000
--- a/drivers/vorbis/modes/psych_8.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: 8kHz psychoacoustic settings
- last mod: $Id: psych_8.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-static const att3 _psy_tone_masteratt_8[3]={
- {{ 32, 25, 12}, 0, 0}, /* 0 */
- {{ 30, 25, 12}, 0, 0}, /* 0 */
- {{ 20, 0, -14}, 0, 0}, /* 0 */
-};
-
-static const vp_adjblock _vp_tonemask_adj_8[3]={
- /* adjust for mode zero */
- /* 63 125 250 500 1 2 4 8 16 */
- {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0,10, 0, 0,99,99,99}}, /* 1 */
- {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0,10, 0, 0,99,99,99}}, /* 1 */
- {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0, 0, 0, 0,99,99,99}}, /* 1 */
-};
-
-
-static const noise3 _psy_noisebias_8[3]={
- /* 63 125 250 500 1k 2k 4k 8k 16k*/
- {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 8, 8, 8, 10, 10, 99, 99, 99},
- {-10,-10,-10,-10, -5, -5, -5, 0, 0, 4, 4, 4, 4, 4, 99, 99, 99},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
-
- {{{-10,-10,-10,-10, -5, -5, -5, 0, 4, 8, 8, 8, 10, 10, 99, 99, 99},
- {-10,-10,-10,-10,-10,-10, -5, -5, -5, 0, 0, 0, 0, 0, 99, 99, 99},
- {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
-
- {{{-15,-15,-15,-15,-15,-12,-10, -8, 0, 2, 4, 4, 5, 5, 99, 99, 99},
- {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10, 99, 99, 99},
- {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24, 99, 99, 99}}},
-};
-
-/* stereo mode by base quality level */
-static const adj_stereo _psy_stereo_modes_8[3]={
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */
- {{ 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
- { 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
- { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- {{ 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
- { 6, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
- { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
- {{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
- { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
- { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
- { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
-};
-
-static const noiseguard _psy_noiseguards_8[2]={
- {10,10,-1},
- {10,10,-1},
-};
-
-static const compandblock _psy_compand_8[2]={
- {{
- 0, 1, 2, 3, 4, 5, 6, 7, /* 7dB */
- 8, 8, 9, 9,10,10,11, 11, /* 15dB */
- 12,12,13,13,14,14,15, 15, /* 23dB */
- 16,16,17,17,17,18,18, 19, /* 31dB */
- 19,19,20,21,22,23,24, 25, /* 39dB */
- }},
- {{
- 0, 1, 2, 3, 4, 5, 6, 6, /* 7dB */
- 7, 7, 6, 6, 5, 5, 4, 4, /* 15dB */
- 3, 3, 3, 4, 5, 6, 7, 8, /* 23dB */
- 9,10,11,12,13,14,15, 16, /* 31dB */
- 17,18,19,20,21,22,23, 24, /* 39dB */
- }},
-};
-
-static const double _psy_lowpass_8[3]={3.,4.,4.};
-static const int _noise_start_8[2]={
- 64,64,
-};
-static const int _noise_part_8[2]={
- 8,8,
-};
-
-static const int _psy_ath_floater_8[3]={
- -100,-100,-105,
-};
-
-static const int _psy_ath_abs_8[3]={
- -130,-130,-140,
-};
diff --git a/drivers/vorbis/modes/residue_16.h b/drivers/vorbis/modes/residue_16.h
deleted file mode 100644
index dcaca5451e..0000000000
--- a/drivers/vorbis/modes/residue_16.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: toplevel residue templates 16/22kHz
- last mod: $Id: residue_16.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-/***** residue backends *********************************************/
-
-static const static_bookblock _resbook_16s_0={
- {
- {0},
- {0,0,&_16c0_s_p1_0},
- {0},
- {0,0,&_16c0_s_p3_0},
- {0,0,&_16c0_s_p4_0},
- {0,0,&_16c0_s_p5_0},
- {0,0,&_16c0_s_p6_0},
- {&_16c0_s_p7_0,&_16c0_s_p7_1},
- {&_16c0_s_p8_0,&_16c0_s_p8_1},
- {&_16c0_s_p9_0,&_16c0_s_p9_1,&_16c0_s_p9_2}
- }
-};
-static const static_bookblock _resbook_16s_1={
- {
- {0},
- {0,0,&_16c1_s_p1_0},
- {0},
- {0,0,&_16c1_s_p3_0},
- {0,0,&_16c1_s_p4_0},
- {0,0,&_16c1_s_p5_0},
- {0,0,&_16c1_s_p6_0},
- {&_16c1_s_p7_0,&_16c1_s_p7_1},
- {&_16c1_s_p8_0,&_16c1_s_p8_1},
- {&_16c1_s_p9_0,&_16c1_s_p9_1,&_16c1_s_p9_2}
- }
-};
-static const static_bookblock _resbook_16s_2={
- {
- {0},
- {0,0,&_16c2_s_p1_0},
- {0,0,&_16c2_s_p2_0},
- {0,0,&_16c2_s_p3_0},
- {0,0,&_16c2_s_p4_0},
- {&_16c2_s_p5_0,&_16c2_s_p5_1},
- {&_16c2_s_p6_0,&_16c2_s_p6_1},
- {&_16c2_s_p7_0,&_16c2_s_p7_1},
- {&_16c2_s_p8_0,&_16c2_s_p8_1},
- {&_16c2_s_p9_0,&_16c2_s_p9_1,&_16c2_s_p9_2}
- }
-};
-
-static const vorbis_residue_template _res_16s_0[]={
- {2,0,32, &_residue_44_mid,
- &_huff_book__16c0_s_single,&_huff_book__16c0_s_single,
- &_resbook_16s_0,&_resbook_16s_0},
-};
-static const vorbis_residue_template _res_16s_1[]={
- {2,0,32, &_residue_44_mid,
- &_huff_book__16c1_s_short,&_huff_book__16c1_s_short,
- &_resbook_16s_1,&_resbook_16s_1},
-
- {2,0,32, &_residue_44_mid,
- &_huff_book__16c1_s_long,&_huff_book__16c1_s_long,
- &_resbook_16s_1,&_resbook_16s_1}
-};
-static const vorbis_residue_template _res_16s_2[]={
- {2,0,32, &_residue_44_high,
- &_huff_book__16c2_s_short,&_huff_book__16c2_s_short,
- &_resbook_16s_2,&_resbook_16s_2},
-
- {2,0,32, &_residue_44_high,
- &_huff_book__16c2_s_long,&_huff_book__16c2_s_long,
- &_resbook_16s_2,&_resbook_16s_2}
-};
-
-static const vorbis_mapping_template _mapres_template_16_stereo[3]={
- { _map_nominal, _res_16s_0 }, /* 0 */
- { _map_nominal, _res_16s_1 }, /* 1 */
- { _map_nominal, _res_16s_2 }, /* 2 */
-};
-
-static const static_bookblock _resbook_16u_0={
- {
- {0},
- {0,0,&_16u0__p1_0},
- {0,0,&_16u0__p2_0},
- {0,0,&_16u0__p3_0},
- {0,0,&_16u0__p4_0},
- {0,0,&_16u0__p5_0},
- {&_16u0__p6_0,&_16u0__p6_1},
- {&_16u0__p7_0,&_16u0__p7_1,&_16u0__p7_2}
- }
-};
-static const static_bookblock _resbook_16u_1={
- {
- {0},
- {0,0,&_16u1__p1_0},
- {0,0,&_16u1__p2_0},
- {0,0,&_16u1__p3_0},
- {0,0,&_16u1__p4_0},
- {0,0,&_16u1__p5_0},
- {0,0,&_16u1__p6_0},
- {&_16u1__p7_0,&_16u1__p7_1},
- {&_16u1__p8_0,&_16u1__p8_1},
- {&_16u1__p9_0,&_16u1__p9_1,&_16u1__p9_2}
- }
-};
-static const static_bookblock _resbook_16u_2={
- {
- {0},
- {0,0,&_16u2_p1_0},
- {0,0,&_16u2_p2_0},
- {0,0,&_16u2_p3_0},
- {0,0,&_16u2_p4_0},
- {&_16u2_p5_0,&_16u2_p5_1},
- {&_16u2_p6_0,&_16u2_p6_1},
- {&_16u2_p7_0,&_16u2_p7_1},
- {&_16u2_p8_0,&_16u2_p8_1},
- {&_16u2_p9_0,&_16u2_p9_1,&_16u2_p9_2}
- }
-};
-
-static const vorbis_residue_template _res_16u_0[]={
- {1,0,32, &_residue_44_low_un,
- &_huff_book__16u0__single,&_huff_book__16u0__single,
- &_resbook_16u_0,&_resbook_16u_0},
-};
-static const vorbis_residue_template _res_16u_1[]={
- {1,0,32, &_residue_44_mid_un,
- &_huff_book__16u1__short,&_huff_book__16u1__short,
- &_resbook_16u_1,&_resbook_16u_1},
-
- {1,0,32, &_residue_44_mid_un,
- &_huff_book__16u1__long,&_huff_book__16u1__long,
- &_resbook_16u_1,&_resbook_16u_1}
-};
-static const vorbis_residue_template _res_16u_2[]={
- {1,0,32, &_residue_44_hi_un,
- &_huff_book__16u2__short,&_huff_book__16u2__short,
- &_resbook_16u_2,&_resbook_16u_2},
-
- {1,0,32, &_residue_44_hi_un,
- &_huff_book__16u2__long,&_huff_book__16u2__long,
- &_resbook_16u_2,&_resbook_16u_2}
-};
-
-
-static const vorbis_mapping_template _mapres_template_16_uncoupled[3]={
- { _map_nominal_u, _res_16u_0 }, /* 0 */
- { _map_nominal_u, _res_16u_1 }, /* 1 */
- { _map_nominal_u, _res_16u_2 }, /* 2 */
-};
diff --git a/drivers/vorbis/modes/residue_44.h b/drivers/vorbis/modes/residue_44.h
deleted file mode 100644
index 236c18341b..0000000000
--- a/drivers/vorbis/modes/residue_44.h
+++ /dev/null
@@ -1,292 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: toplevel residue templates for 32/44.1/48kHz
- last mod: $Id: residue_44.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-#include "vorbis/codec.h"
-#include "backends.h"
-#include "books/coupled/res_books_stereo.h"
-
-/***** residue backends *********************************************/
-
-static const vorbis_info_residue0 _residue_44_low={
- 0,-1, -1, 9,-1,-1,
- /* 0 1 2 3 4 5 6 7 */
- {0},
- {-1},
- { 0, 1, 2, 2, 4, 8, 16, 32},
- { 0, 0, 0,999, 4, 8, 16, 32},
-};
-
-static const vorbis_info_residue0 _residue_44_mid={
- 0,-1, -1, 10,-1,-1,
- /* 0 1 2 3 4 5 6 7 8 */
- {0},
- {-1},
- { 0, 1, 1, 2, 2, 4, 8, 16, 32},
- { 0, 0,999, 0,999, 4, 8, 16, 32},
-};
-
-static const vorbis_info_residue0 _residue_44_high={
- 0,-1, -1, 10,-1,-1,
- /* 0 1 2 3 4 5 6 7 8 */
- {0},
- {-1},
- { 0, 1, 2, 4, 8, 16, 32, 71,157},
- { 0, 1, 2, 3, 4, 8, 16, 71,157},
-};
-
-static const static_bookblock _resbook_44s_n1={
- {
- {0},{0,0,&_44cn1_s_p1_0},{0,0,&_44cn1_s_p2_0},
- {0,0,&_44cn1_s_p3_0},{0,0,&_44cn1_s_p4_0},{0,0,&_44cn1_s_p5_0},
- {&_44cn1_s_p6_0,&_44cn1_s_p6_1},{&_44cn1_s_p7_0,&_44cn1_s_p7_1},
- {&_44cn1_s_p8_0,&_44cn1_s_p8_1,&_44cn1_s_p8_2}
- }
-};
-static const static_bookblock _resbook_44sm_n1={
- {
- {0},{0,0,&_44cn1_sm_p1_0},{0,0,&_44cn1_sm_p2_0},
- {0,0,&_44cn1_sm_p3_0},{0,0,&_44cn1_sm_p4_0},{0,0,&_44cn1_sm_p5_0},
- {&_44cn1_sm_p6_0,&_44cn1_sm_p6_1},{&_44cn1_sm_p7_0,&_44cn1_sm_p7_1},
- {&_44cn1_sm_p8_0,&_44cn1_sm_p8_1,&_44cn1_sm_p8_2}
- }
-};
-
-static const static_bookblock _resbook_44s_0={
- {
- {0},{0,0,&_44c0_s_p1_0},{0,0,&_44c0_s_p2_0},
- {0,0,&_44c0_s_p3_0},{0,0,&_44c0_s_p4_0},{0,0,&_44c0_s_p5_0},
- {&_44c0_s_p6_0,&_44c0_s_p6_1},{&_44c0_s_p7_0,&_44c0_s_p7_1},
- {&_44c0_s_p8_0,&_44c0_s_p8_1,&_44c0_s_p8_2}
- }
-};
-static const static_bookblock _resbook_44sm_0={
- {
- {0},{0,0,&_44c0_sm_p1_0},{0,0,&_44c0_sm_p2_0},
- {0,0,&_44c0_sm_p3_0},{0,0,&_44c0_sm_p4_0},{0,0,&_44c0_sm_p5_0},
- {&_44c0_sm_p6_0,&_44c0_sm_p6_1},{&_44c0_sm_p7_0,&_44c0_sm_p7_1},
- {&_44c0_sm_p8_0,&_44c0_sm_p8_1,&_44c0_sm_p8_2}
- }
-};
-
-static const static_bookblock _resbook_44s_1={
- {
- {0},{0,0,&_44c1_s_p1_0},{0,0,&_44c1_s_p2_0},
- {0,0,&_44c1_s_p3_0},{0,0,&_44c1_s_p4_0},{0,0,&_44c1_s_p5_0},
- {&_44c1_s_p6_0,&_44c1_s_p6_1},{&_44c1_s_p7_0,&_44c1_s_p7_1},
- {&_44c1_s_p8_0,&_44c1_s_p8_1,&_44c1_s_p8_2}
- }
-};
-static const static_bookblock _resbook_44sm_1={
- {
- {0},{0,0,&_44c1_sm_p1_0},{0,0,&_44c1_sm_p2_0},
- {0,0,&_44c1_sm_p3_0},{0,0,&_44c1_sm_p4_0},{0,0,&_44c1_sm_p5_0},
- {&_44c1_sm_p6_0,&_44c1_sm_p6_1},{&_44c1_sm_p7_0,&_44c1_sm_p7_1},
- {&_44c1_sm_p8_0,&_44c1_sm_p8_1,&_44c1_sm_p8_2}
- }
-};
-
-static const static_bookblock _resbook_44s_2={
- {
- {0},{0,0,&_44c2_s_p1_0},{0,0,&_44c2_s_p2_0},{0,0,&_44c2_s_p3_0},
- {0,0,&_44c2_s_p4_0},{0,0,&_44c2_s_p5_0},{0,0,&_44c2_s_p6_0},
- {&_44c2_s_p7_0,&_44c2_s_p7_1},{&_44c2_s_p8_0,&_44c2_s_p8_1},
- {&_44c2_s_p9_0,&_44c2_s_p9_1,&_44c2_s_p9_2}
- }
-};
-static const static_bookblock _resbook_44s_3={
- {
- {0},{0,0,&_44c3_s_p1_0},{0,0,&_44c3_s_p2_0},{0,0,&_44c3_s_p3_0},
- {0,0,&_44c3_s_p4_0},{0,0,&_44c3_s_p5_0},{0,0,&_44c3_s_p6_0},
- {&_44c3_s_p7_0,&_44c3_s_p7_1},{&_44c3_s_p8_0,&_44c3_s_p8_1},
- {&_44c3_s_p9_0,&_44c3_s_p9_1,&_44c3_s_p9_2}
- }
-};
-static const static_bookblock _resbook_44s_4={
- {
- {0},{0,0,&_44c4_s_p1_0},{0,0,&_44c4_s_p2_0},{0,0,&_44c4_s_p3_0},
- {0,0,&_44c4_s_p4_0},{0,0,&_44c4_s_p5_0},{0,0,&_44c4_s_p6_0},
- {&_44c4_s_p7_0,&_44c4_s_p7_1},{&_44c4_s_p8_0,&_44c4_s_p8_1},
- {&_44c4_s_p9_0,&_44c4_s_p9_1,&_44c4_s_p9_2}
- }
-};
-static const static_bookblock _resbook_44s_5={
- {
- {0},{0,0,&_44c5_s_p1_0},{0,0,&_44c5_s_p2_0},{0,0,&_44c5_s_p3_0},
- {0,0,&_44c5_s_p4_0},{0,0,&_44c5_s_p5_0},{0,0,&_44c5_s_p6_0},
- {&_44c5_s_p7_0,&_44c5_s_p7_1},{&_44c5_s_p8_0,&_44c5_s_p8_1},
- {&_44c5_s_p9_0,&_44c5_s_p9_1,&_44c5_s_p9_2}
- }
-};
-static const static_bookblock _resbook_44s_6={
- {
- {0},{0,0,&_44c6_s_p1_0},{0,0,&_44c6_s_p2_0},{0,0,&_44c6_s_p3_0},
- {0,0,&_44c6_s_p4_0},
- {&_44c6_s_p5_0,&_44c6_s_p5_1},
- {&_44c6_s_p6_0,&_44c6_s_p6_1},
- {&_44c6_s_p7_0,&_44c6_s_p7_1},
- {&_44c6_s_p8_0,&_44c6_s_p8_1},
- {&_44c6_s_p9_0,&_44c6_s_p9_1,&_44c6_s_p9_2}
- }
-};
-static const static_bookblock _resbook_44s_7={
- {
- {0},{0,0,&_44c7_s_p1_0},{0,0,&_44c7_s_p2_0},{0,0,&_44c7_s_p3_0},
- {0,0,&_44c7_s_p4_0},
- {&_44c7_s_p5_0,&_44c7_s_p5_1},
- {&_44c7_s_p6_0,&_44c7_s_p6_1},
- {&_44c7_s_p7_0,&_44c7_s_p7_1},
- {&_44c7_s_p8_0,&_44c7_s_p8_1},
- {&_44c7_s_p9_0,&_44c7_s_p9_1,&_44c7_s_p9_2}
- }
-};
-static const static_bookblock _resbook_44s_8={
- {
- {0},{0,0,&_44c8_s_p1_0},{0,0,&_44c8_s_p2_0},{0,0,&_44c8_s_p3_0},
- {0,0,&_44c8_s_p4_0},
- {&_44c8_s_p5_0,&_44c8_s_p5_1},
- {&_44c8_s_p6_0,&_44c8_s_p6_1},
- {&_44c8_s_p7_0,&_44c8_s_p7_1},
- {&_44c8_s_p8_0,&_44c8_s_p8_1},
- {&_44c8_s_p9_0,&_44c8_s_p9_1,&_44c8_s_p9_2}
- }
-};
-static const static_bookblock _resbook_44s_9={
- {
- {0},{0,0,&_44c9_s_p1_0},{0,0,&_44c9_s_p2_0},{0,0,&_44c9_s_p3_0},
- {0,0,&_44c9_s_p4_0},
- {&_44c9_s_p5_0,&_44c9_s_p5_1},
- {&_44c9_s_p6_0,&_44c9_s_p6_1},
- {&_44c9_s_p7_0,&_44c9_s_p7_1},
- {&_44c9_s_p8_0,&_44c9_s_p8_1},
- {&_44c9_s_p9_0,&_44c9_s_p9_1,&_44c9_s_p9_2}
- }
-};
-
-static const vorbis_residue_template _res_44s_n1[]={
- {2,0,32, &_residue_44_low,
- &_huff_book__44cn1_s_short,&_huff_book__44cn1_sm_short,
- &_resbook_44s_n1,&_resbook_44sm_n1},
-
- {2,0,32, &_residue_44_low,
- &_huff_book__44cn1_s_long,&_huff_book__44cn1_sm_long,
- &_resbook_44s_n1,&_resbook_44sm_n1}
-};
-static const vorbis_residue_template _res_44s_0[]={
- {2,0,16, &_residue_44_low,
- &_huff_book__44c0_s_short,&_huff_book__44c0_sm_short,
- &_resbook_44s_0,&_resbook_44sm_0},
-
- {2,0,32, &_residue_44_low,
- &_huff_book__44c0_s_long,&_huff_book__44c0_sm_long,
- &_resbook_44s_0,&_resbook_44sm_0}
-};
-static const vorbis_residue_template _res_44s_1[]={
- {2,0,16, &_residue_44_low,
- &_huff_book__44c1_s_short,&_huff_book__44c1_sm_short,
- &_resbook_44s_1,&_resbook_44sm_1},
-
- {2,0,32, &_residue_44_low,
- &_huff_book__44c1_s_long,&_huff_book__44c1_sm_long,
- &_resbook_44s_1,&_resbook_44sm_1}
-};
-
-static const vorbis_residue_template _res_44s_2[]={
- {2,0,16, &_residue_44_mid,
- &_huff_book__44c2_s_short,&_huff_book__44c2_s_short,
- &_resbook_44s_2,&_resbook_44s_2},
-
- {2,0,32, &_residue_44_mid,
- &_huff_book__44c2_s_long,&_huff_book__44c2_s_long,
- &_resbook_44s_2,&_resbook_44s_2}
-};
-static const vorbis_residue_template _res_44s_3[]={
- {2,0,16, &_residue_44_mid,
- &_huff_book__44c3_s_short,&_huff_book__44c3_s_short,
- &_resbook_44s_3,&_resbook_44s_3},
-
- {2,0,32, &_residue_44_mid,
- &_huff_book__44c3_s_long,&_huff_book__44c3_s_long,
- &_resbook_44s_3,&_resbook_44s_3}
-};
-static const vorbis_residue_template _res_44s_4[]={
- {2,0,16, &_residue_44_mid,
- &_huff_book__44c4_s_short,&_huff_book__44c4_s_short,
- &_resbook_44s_4,&_resbook_44s_4},
-
- {2,0,32, &_residue_44_mid,
- &_huff_book__44c4_s_long,&_huff_book__44c4_s_long,
- &_resbook_44s_4,&_resbook_44s_4}
-};
-static const vorbis_residue_template _res_44s_5[]={
- {2,0,16, &_residue_44_mid,
- &_huff_book__44c5_s_short,&_huff_book__44c5_s_short,
- &_resbook_44s_5,&_resbook_44s_5},
-
- {2,0,32, &_residue_44_mid,
- &_huff_book__44c5_s_long,&_huff_book__44c5_s_long,
- &_resbook_44s_5,&_resbook_44s_5}
-};
-static const vorbis_residue_template _res_44s_6[]={
- {2,0,16, &_residue_44_high,
- &_huff_book__44c6_s_short,&_huff_book__44c6_s_short,
- &_resbook_44s_6,&_resbook_44s_6},
-
- {2,0,32, &_residue_44_high,
- &_huff_book__44c6_s_long,&_huff_book__44c6_s_long,
- &_resbook_44s_6,&_resbook_44s_6}
-};
-static const vorbis_residue_template _res_44s_7[]={
- {2,0,16, &_residue_44_high,
- &_huff_book__44c7_s_short,&_huff_book__44c7_s_short,
- &_resbook_44s_7,&_resbook_44s_7},
-
- {2,0,32, &_residue_44_high,
- &_huff_book__44c7_s_long,&_huff_book__44c7_s_long,
- &_resbook_44s_7,&_resbook_44s_7}
-};
-static const vorbis_residue_template _res_44s_8[]={
- {2,0,16, &_residue_44_high,
- &_huff_book__44c8_s_short,&_huff_book__44c8_s_short,
- &_resbook_44s_8,&_resbook_44s_8},
-
- {2,0,32, &_residue_44_high,
- &_huff_book__44c8_s_long,&_huff_book__44c8_s_long,
- &_resbook_44s_8,&_resbook_44s_8}
-};
-static const vorbis_residue_template _res_44s_9[]={
- {2,0,16, &_residue_44_high,
- &_huff_book__44c9_s_short,&_huff_book__44c9_s_short,
- &_resbook_44s_9,&_resbook_44s_9},
-
- {2,0,32, &_residue_44_high,
- &_huff_book__44c9_s_long,&_huff_book__44c9_s_long,
- &_resbook_44s_9,&_resbook_44s_9}
-};
-
-static const vorbis_mapping_template _mapres_template_44_stereo[]={
- { _map_nominal, _res_44s_n1 }, /* -1 */
- { _map_nominal, _res_44s_0 }, /* 0 */
- { _map_nominal, _res_44s_1 }, /* 1 */
- { _map_nominal, _res_44s_2 }, /* 2 */
- { _map_nominal, _res_44s_3 }, /* 3 */
- { _map_nominal, _res_44s_4 }, /* 4 */
- { _map_nominal, _res_44s_5 }, /* 5 */
- { _map_nominal, _res_44s_6 }, /* 6 */
- { _map_nominal, _res_44s_7 }, /* 7 */
- { _map_nominal, _res_44s_8 }, /* 8 */
- { _map_nominal, _res_44s_9 }, /* 9 */
-};
diff --git a/drivers/vorbis/modes/residue_44p51.h b/drivers/vorbis/modes/residue_44p51.h
deleted file mode 100644
index a52cc5245e..0000000000
--- a/drivers/vorbis/modes/residue_44p51.h
+++ /dev/null
@@ -1,451 +0,0 @@
-/********************************************************************
- * *
- * 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-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: toplevel residue templates for 32/44.1/48kHz uncoupled
- last mod: $Id: residue_44p51.h 19013 2013-11-12 04:04:50Z giles $
-
- ********************************************************************/
-
-#include "vorbis/codec.h"
-#include "backends.h"
-
-#include "books/coupled/res_books_51.h"
-
-/***** residue backends *********************************************/
-
-static const vorbis_info_residue0 _residue_44p_lo={
- 0,-1, -1, 7,-1,-1,
- /* 0 1 2 3 4 5 6 7 8 */
- {0},
- {-1},
- { 0, 1, 2, 7, 17, 31},
- { 0, 0, 99, 7, 17, 31},
-};
-
-static const vorbis_info_residue0 _residue_44p={
- 0,-1, -1, 8,-1,-1,
- /* 0 1 2 3 4 5 6 7 8 */
- {0},
- {-1},
- { 0, 1, 1, 2, 7, 17, 31},
- { 0, 0, 99, 99, 7, 17, 31},
-};
-
-static const vorbis_info_residue0 _residue_44p_hi={
- 0,-1, -1, 8,-1,-1,
- /* 0 1 2 3 4 5 6 7 8 */
- {0},
- {-1},
- { 0, 1, 2, 4, 7, 17, 31},
- { 0, 1, 2, 4, 7, 17, 31},
-};
-
-static const vorbis_info_residue0 _residue_44p_lfe={
- 0,-1, -1, 2,-1,-1,
- /* 0 1 2 3 4 5 6 7 8 */
- {0},
- {-1},
- { 32},
- { -1}
-};
-
-static const static_bookblock _resbook_44p_n1={
- {
- {0},
- {0,&_44pn1_p1_0},
-
- {&_44pn1_p2_0,&_44pn1_p2_1,0},
- {&_44pn1_p3_0,&_44pn1_p3_1,0},
- {&_44pn1_p4_0,&_44pn1_p4_1,0},
-
- {&_44pn1_p5_0,&_44pn1_p5_1,&_44pn1_p4_1},
- {&_44pn1_p6_0,&_44pn1_p6_1,&_44pn1_p6_2},
- }
-};
-
-static const static_bookblock _resbook_44p_0={
- {
- {0},
- {0,&_44p0_p1_0},
-
- {&_44p0_p2_0,&_44p0_p2_1,0},
- {&_44p0_p3_0,&_44p0_p3_1,0},
- {&_44p0_p4_0,&_44p0_p4_1,0},
-
- {&_44p0_p5_0,&_44p0_p5_1,&_44p0_p4_1},
- {&_44p0_p6_0,&_44p0_p6_1,&_44p0_p6_2},
- }
-};
-
-static const static_bookblock _resbook_44p_1={
- {
- {0},
- {0,&_44p1_p1_0},
-
- {&_44p1_p2_0,&_44p1_p2_1,0},
- {&_44p1_p3_0,&_44p1_p3_1,0},
- {&_44p1_p4_0,&_44p1_p4_1,0},
-
- {&_44p1_p5_0,&_44p1_p5_1,&_44p1_p4_1},
- {&_44p1_p6_0,&_44p1_p6_1,&_44p1_p6_2},
- }
-};
-
-static const static_bookblock _resbook_44p_2={
- {
- {0},
- {0,0,&_44p2_p1_0},
- {0,&_44p2_p2_0,0},
-
- {&_44p2_p3_0,&_44p2_p3_1,0},
- {&_44p2_p4_0,&_44p2_p4_1,0},
- {&_44p2_p5_0,&_44p2_p5_1,0},
-
- {&_44p2_p6_0,&_44p2_p6_1,&_44p2_p5_1},
- {&_44p2_p7_0,&_44p2_p7_1,&_44p2_p7_2,&_44p2_p7_3}
- }
-};
-static const static_bookblock _resbook_44p_3={
- {
- {0},
- {0,0,&_44p3_p1_0},
- {0,&_44p3_p2_0,0},
-
- {&_44p3_p3_0,&_44p3_p3_1,0},
- {&_44p3_p4_0,&_44p3_p4_1,0},
- {&_44p3_p5_0,&_44p3_p5_1,0},
-
- {&_44p3_p6_0,&_44p3_p6_1,&_44p3_p5_1},
- {&_44p3_p7_0,&_44p3_p7_1,&_44p3_p7_2,&_44p3_p7_3}
- }
-};
-static const static_bookblock _resbook_44p_4={
- {
- {0},
- {0,0,&_44p4_p1_0},
- {0,&_44p4_p2_0,0},
-
- {&_44p4_p3_0,&_44p4_p3_1,0},
- {&_44p4_p4_0,&_44p4_p4_1,0},
- {&_44p4_p5_0,&_44p4_p5_1,0},
-
- {&_44p4_p6_0,&_44p4_p6_1,&_44p4_p5_1},
- {&_44p4_p7_0,&_44p4_p7_1,&_44p4_p7_2,&_44p4_p7_3}
- }
-};
-static const static_bookblock _resbook_44p_5={
- {
- {0},
- {0,0,&_44p5_p1_0},
- {0,&_44p5_p2_0,0},
-
- {&_44p5_p3_0,&_44p5_p3_1,0},
- {&_44p5_p4_0,&_44p5_p4_1,0},
- {&_44p5_p5_0,&_44p5_p5_1,0},
-
- {&_44p5_p6_0,&_44p5_p6_1,&_44p5_p5_1},
- {&_44p5_p7_0,&_44p5_p7_1,&_44p5_p7_2,&_44p5_p7_3}
- }
-};
-static const static_bookblock _resbook_44p_6={
- {
- {0},
- {0,0,&_44p6_p1_0},
- {0,&_44p6_p2_0,0},
-
- {&_44p6_p3_0,&_44p6_p3_1,0},
- {&_44p6_p4_0,&_44p6_p4_1,0},
- {&_44p6_p5_0,&_44p6_p5_1,0},
-
- {&_44p6_p6_0,&_44p6_p6_1,&_44p6_p5_1},
- {&_44p6_p7_0,&_44p6_p7_1,&_44p6_p7_2,&_44p6_p7_3}
- }
-};
-static const static_bookblock _resbook_44p_7={
- {
- {0},
- {0,0,&_44p7_p1_0},
- {0,&_44p7_p2_0,0},
-
- {&_44p7_p3_0,&_44p7_p3_1,0},
- {&_44p7_p4_0,&_44p7_p4_1,0},
- {&_44p7_p5_0,&_44p7_p5_1,0},
-
- {&_44p7_p6_0,&_44p7_p6_1,&_44p7_p5_1},
- {&_44p7_p7_0,&_44p7_p7_1,&_44p7_p7_2,&_44p7_p7_3}
- }
-};
-static const static_bookblock _resbook_44p_8={
- {
- {0},
- {0,0,&_44p8_p1_0},
- {0,&_44p8_p2_0,0},
-
- {&_44p8_p3_0,&_44p8_p3_1,0},
- {&_44p8_p4_0,&_44p8_p4_1,0},
- {&_44p8_p5_0,&_44p8_p5_1,0},
-
- {&_44p8_p6_0,&_44p8_p6_1,&_44p8_p5_1},
- {&_44p8_p7_0,&_44p8_p7_1,&_44p8_p7_2,&_44p8_p7_3}
- }
-};
-static const static_bookblock _resbook_44p_9={
- {
- {0},
- {0,0,&_44p9_p1_0},
- {0,&_44p9_p2_0,0},
-
- {&_44p9_p3_0,&_44p9_p3_1,0},
- {&_44p9_p4_0,&_44p9_p4_1,0},
- {&_44p9_p5_0,&_44p9_p5_1,0},
-
- {&_44p9_p6_0,&_44p9_p6_1,&_44p9_p5_1},
- {&_44p9_p7_0,&_44p9_p7_1,&_44p9_p7_2,&_44p9_p7_3}
- }
-};
-
-static const static_bookblock _resbook_44p_ln1={
- {
- {&_44pn1_l0_0,&_44pn1_l0_1,0},
- {&_44pn1_l1_0,&_44pn1_p6_1,&_44pn1_p6_2},
- }
-};
-static const static_bookblock _resbook_44p_l0={
- {
- {&_44p0_l0_0,&_44p0_l0_1,0},
- {&_44p0_l1_0,&_44p0_p6_1,&_44p0_p6_2},
- }
-};
-static const static_bookblock _resbook_44p_l1={
- {
- {&_44p1_l0_0,&_44p1_l0_1,0},
- {&_44p1_l1_0,&_44p1_p6_1,&_44p1_p6_2},
- }
-};
-static const static_bookblock _resbook_44p_l2={
- {
- {&_44p2_l0_0,&_44p2_l0_1,0},
- {&_44p2_l1_0,&_44p2_p7_2,&_44p2_p7_3},
- }
-};
-static const static_bookblock _resbook_44p_l3={
- {
- {&_44p3_l0_0,&_44p3_l0_1,0},
- {&_44p3_l1_0,&_44p3_p7_2,&_44p3_p7_3},
- }
-};
-static const static_bookblock _resbook_44p_l4={
- {
- {&_44p4_l0_0,&_44p4_l0_1,0},
- {&_44p4_l1_0,&_44p4_p7_2,&_44p4_p7_3},
- }
-};
-static const static_bookblock _resbook_44p_l5={
- {
- {&_44p5_l0_0,&_44p5_l0_1,0},
- {&_44p5_l1_0,&_44p5_p7_2,&_44p5_p7_3},
- }
-};
-static const static_bookblock _resbook_44p_l6={
- {
- {&_44p6_l0_0,&_44p6_l0_1,0},
- {&_44p6_l1_0,&_44p6_p7_2,&_44p6_p7_3},
- }
-};
-static const static_bookblock _resbook_44p_l7={
- {
- {&_44p7_l0_0,&_44p7_l0_1,0},
- {&_44p7_l1_0,&_44p7_p7_2,&_44p7_p7_3},
- }
-};
-static const static_bookblock _resbook_44p_l8={
- {
- {&_44p8_l0_0,&_44p8_l0_1,0},
- {&_44p8_l1_0,&_44p8_p7_2,&_44p8_p7_3},
- }
-};
-static const static_bookblock _resbook_44p_l9={
- {
- {&_44p9_l0_0,&_44p9_l0_1,0},
- {&_44p9_l1_0,&_44p9_p7_2,&_44p9_p7_3},
- }
-};
-
-
-static const vorbis_info_mapping0 _map_nominal_51[2]={
- {2, {0,0,0,0,0,1}, {0,2}, {0,2}, 4,{0,3,0,0},{2,4,1,3}},
- {2, {0,0,0,0,0,1}, {1,2}, {1,2}, 4,{0,3,0,0},{2,4,1,3}}
-};
-static const vorbis_info_mapping0 _map_nominal_51u[2]={
- {2, {0,0,0,0,0,1}, {0,2}, {0,2}, 0,{0},{0}},
- {2, {0,0,0,0,0,1}, {1,2}, {1,2}, 0,{0},{0}}
-};
-
-static const vorbis_residue_template _res_44p51_n1[]={
- {2,0,30, &_residue_44p_lo,
- &_huff_book__44pn1_short,&_huff_book__44pn1_short,
- &_resbook_44p_n1,&_resbook_44p_n1},
-
- {2,0,30, &_residue_44p_lo,
- &_huff_book__44pn1_long,&_huff_book__44pn1_long,
- &_resbook_44p_n1,&_resbook_44p_n1},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44pn1_lfe,&_huff_book__44pn1_lfe,
- &_resbook_44p_ln1,&_resbook_44p_ln1}
-};
-static const vorbis_residue_template _res_44p51_0[]={
- {2,0,15, &_residue_44p_lo,
- &_huff_book__44p0_short,&_huff_book__44p0_short,
- &_resbook_44p_0,&_resbook_44p_0},
-
- {2,0,30, &_residue_44p_lo,
- &_huff_book__44p0_long,&_huff_book__44p0_long,
- &_resbook_44p_0,&_resbook_44p_0},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44p0_lfe,&_huff_book__44p0_lfe,
- &_resbook_44p_l0,&_resbook_44p_l0}
-};
-static const vorbis_residue_template _res_44p51_1[]={
- {2,0,15, &_residue_44p_lo,
- &_huff_book__44p1_short,&_huff_book__44p1_short,
- &_resbook_44p_1,&_resbook_44p_1},
-
- {2,0,30, &_residue_44p_lo,
- &_huff_book__44p1_long,&_huff_book__44p1_long,
- &_resbook_44p_1,&_resbook_44p_1},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44p1_lfe,&_huff_book__44p1_lfe,
- &_resbook_44p_l1,&_resbook_44p_l1}
-};
-static const vorbis_residue_template _res_44p51_2[]={
- {2,0,15, &_residue_44p,
- &_huff_book__44p2_short,&_huff_book__44p2_short,
- &_resbook_44p_2,&_resbook_44p_2},
-
- {2,0,30, &_residue_44p,
- &_huff_book__44p2_long,&_huff_book__44p2_long,
- &_resbook_44p_2,&_resbook_44p_2},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44p2_lfe,&_huff_book__44p2_lfe,
- &_resbook_44p_l2,&_resbook_44p_l2}
-};
-static const vorbis_residue_template _res_44p51_3[]={
- {2,0,15, &_residue_44p,
- &_huff_book__44p3_short,&_huff_book__44p3_short,
- &_resbook_44p_3,&_resbook_44p_3},
-
- {2,0,30, &_residue_44p,
- &_huff_book__44p3_long,&_huff_book__44p3_long,
- &_resbook_44p_3,&_resbook_44p_3},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44p3_lfe,&_huff_book__44p3_lfe,
- &_resbook_44p_l3,&_resbook_44p_l3}
-};
-static const vorbis_residue_template _res_44p51_4[]={
- {2,0,15, &_residue_44p,
- &_huff_book__44p4_short,&_huff_book__44p4_short,
- &_resbook_44p_4,&_resbook_44p_4},
-
- {2,0,30, &_residue_44p,
- &_huff_book__44p4_long,&_huff_book__44p4_long,
- &_resbook_44p_4,&_resbook_44p_4},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44p4_lfe,&_huff_book__44p4_lfe,
- &_resbook_44p_l4,&_resbook_44p_l4}
-};
-static const vorbis_residue_template _res_44p51_5[]={
- {2,0,15, &_residue_44p_hi,
- &_huff_book__44p5_short,&_huff_book__44p5_short,
- &_resbook_44p_5,&_resbook_44p_5},
-
- {2,0,30, &_residue_44p_hi,
- &_huff_book__44p5_long,&_huff_book__44p5_long,
- &_resbook_44p_5,&_resbook_44p_5},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44p5_lfe,&_huff_book__44p5_lfe,
- &_resbook_44p_l5,&_resbook_44p_l5}
-};
-static const vorbis_residue_template _res_44p51_6[]={
- {2,0,15, &_residue_44p_hi,
- &_huff_book__44p6_short,&_huff_book__44p6_short,
- &_resbook_44p_6,&_resbook_44p_6},
-
- {2,0,30, &_residue_44p_hi,
- &_huff_book__44p6_long,&_huff_book__44p6_long,
- &_resbook_44p_6,&_resbook_44p_6},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44p6_lfe,&_huff_book__44p6_lfe,
- &_resbook_44p_l6,&_resbook_44p_l6}
-};
-
-
-static const vorbis_residue_template _res_44p51_7[]={
- {2,0,15, &_residue_44p_hi,
- &_huff_book__44p7_short,&_huff_book__44p7_short,
- &_resbook_44p_7,&_resbook_44p_7},
-
- {2,0,30, &_residue_44p_hi,
- &_huff_book__44p7_long,&_huff_book__44p7_long,
- &_resbook_44p_7,&_resbook_44p_7},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44p6_lfe,&_huff_book__44p6_lfe,
- &_resbook_44p_l6,&_resbook_44p_l6}
-};
-static const vorbis_residue_template _res_44p51_8[]={
- {2,0,15, &_residue_44p_hi,
- &_huff_book__44p8_short,&_huff_book__44p8_short,
- &_resbook_44p_8,&_resbook_44p_8},
-
- {2,0,30, &_residue_44p_hi,
- &_huff_book__44p8_long,&_huff_book__44p8_long,
- &_resbook_44p_8,&_resbook_44p_8},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44p6_lfe,&_huff_book__44p6_lfe,
- &_resbook_44p_l6,&_resbook_44p_l6}
-};
-static const vorbis_residue_template _res_44p51_9[]={
- {2,0,15, &_residue_44p_hi,
- &_huff_book__44p9_short,&_huff_book__44p9_short,
- &_resbook_44p_9,&_resbook_44p_9},
-
- {2,0,30, &_residue_44p_hi,
- &_huff_book__44p9_long,&_huff_book__44p9_long,
- &_resbook_44p_9,&_resbook_44p_9},
-
- {1,2,6, &_residue_44p_lfe,
- &_huff_book__44p6_lfe,&_huff_book__44p6_lfe,
- &_resbook_44p_l6,&_resbook_44p_l6}
-};
-
-static const vorbis_mapping_template _mapres_template_44_51[]={
- { _map_nominal_51, _res_44p51_n1 }, /* -1 */
- { _map_nominal_51, _res_44p51_0 }, /* 0 */
- { _map_nominal_51, _res_44p51_1 }, /* 1 */
- { _map_nominal_51, _res_44p51_2 }, /* 2 */
- { _map_nominal_51, _res_44p51_3 }, /* 3 */
- { _map_nominal_51, _res_44p51_4 }, /* 4 */
- { _map_nominal_51u, _res_44p51_5 }, /* 5 */
- { _map_nominal_51u, _res_44p51_6 }, /* 6 */
- { _map_nominal_51u, _res_44p51_7 }, /* 7 */
- { _map_nominal_51u, _res_44p51_8 }, /* 8 */
- { _map_nominal_51u, _res_44p51_9 }, /* 9 */
-};
diff --git a/drivers/vorbis/modes/residue_44u.h b/drivers/vorbis/modes/residue_44u.h
deleted file mode 100644
index 92c4a09ce3..0000000000
--- a/drivers/vorbis/modes/residue_44u.h
+++ /dev/null
@@ -1,318 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: toplevel residue templates for 32/44.1/48kHz uncoupled
- last mod: $Id: residue_44u.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-#include "vorbis/codec.h"
-#include "backends.h"
-#include "books/uncoupled/res_books_uncoupled.h"
-
-/***** residue backends *********************************************/
-
-
-static const vorbis_info_residue0 _residue_44_low_un={
- 0,-1, -1, 8,-1,-1,
- {0},
- {-1},
- { 0, 1, 1, 2, 2, 4, 28},
- { -1, 25, -1, 45, -1, -1, -1}
-};
-
-static const vorbis_info_residue0 _residue_44_mid_un={
- 0,-1, -1, 10,-1,-1,
- /* 0 1 2 3 4 5 6 7 8 9 */
- {0},
- {-1},
- { 0, 1, 1, 2, 2, 4, 4, 16, 60},
- { -1, 30, -1, 50, -1, 80, -1, -1, -1}
-};
-
-static const vorbis_info_residue0 _residue_44_hi_un={
- 0,-1, -1, 10,-1,-1,
- /* 0 1 2 3 4 5 6 7 8 9 */
- {0},
- {-1},
- { 0, 1, 2, 4, 8, 16, 32, 71,157},
- { -1, -1, -1, -1, -1, -1, -1, -1, -1}
-};
-
-/* mapping conventions:
- only one submap (this would change for efficient 5.1 support for example)*/
-/* Four psychoacoustic profiles are used, one for each blocktype */
-static const vorbis_info_mapping0 _map_nominal_u[2]={
- {1, {0,0,0,0,0,0}, {0}, {0}, 0,{0},{0}},
- {1, {0,0,0,0,0,0}, {1}, {1}, 0,{0},{0}}
-};
-
-static const static_bookblock _resbook_44u_n1={
- {
- {0},
- {0,0,&_44un1__p1_0},
- {0,0,&_44un1__p2_0},
- {0,0,&_44un1__p3_0},
- {0,0,&_44un1__p4_0},
- {0,0,&_44un1__p5_0},
- {&_44un1__p6_0,&_44un1__p6_1},
- {&_44un1__p7_0,&_44un1__p7_1,&_44un1__p7_2}
- }
-};
-static const static_bookblock _resbook_44u_0={
- {
- {0},
- {0,0,&_44u0__p1_0},
- {0,0,&_44u0__p2_0},
- {0,0,&_44u0__p3_0},
- {0,0,&_44u0__p4_0},
- {0,0,&_44u0__p5_0},
- {&_44u0__p6_0,&_44u0__p6_1},
- {&_44u0__p7_0,&_44u0__p7_1,&_44u0__p7_2}
- }
-};
-static const static_bookblock _resbook_44u_1={
- {
- {0},
- {0,0,&_44u1__p1_0},
- {0,0,&_44u1__p2_0},
- {0,0,&_44u1__p3_0},
- {0,0,&_44u1__p4_0},
- {0,0,&_44u1__p5_0},
- {&_44u1__p6_0,&_44u1__p6_1},
- {&_44u1__p7_0,&_44u1__p7_1,&_44u1__p7_2}
- }
-};
-static const static_bookblock _resbook_44u_2={
- {
- {0},
- {0,0,&_44u2__p1_0},
- {0,0,&_44u2__p2_0},
- {0,0,&_44u2__p3_0},
- {0,0,&_44u2__p4_0},
- {0,0,&_44u2__p5_0},
- {&_44u2__p6_0,&_44u2__p6_1},
- {&_44u2__p7_0,&_44u2__p7_1,&_44u2__p7_2}
- }
-};
-static const static_bookblock _resbook_44u_3={
- {
- {0},
- {0,0,&_44u3__p1_0},
- {0,0,&_44u3__p2_0},
- {0,0,&_44u3__p3_0},
- {0,0,&_44u3__p4_0},
- {0,0,&_44u3__p5_0},
- {&_44u3__p6_0,&_44u3__p6_1},
- {&_44u3__p7_0,&_44u3__p7_1,&_44u3__p7_2}
- }
-};
-static const static_bookblock _resbook_44u_4={
- {
- {0},
- {0,0,&_44u4__p1_0},
- {0,0,&_44u4__p2_0},
- {0,0,&_44u4__p3_0},
- {0,0,&_44u4__p4_0},
- {0,0,&_44u4__p5_0},
- {&_44u4__p6_0,&_44u4__p6_1},
- {&_44u4__p7_0,&_44u4__p7_1,&_44u4__p7_2}
- }
-};
-static const static_bookblock _resbook_44u_5={
- {
- {0},
- {0,0,&_44u5__p1_0},
- {0,0,&_44u5__p2_0},
- {0,0,&_44u5__p3_0},
- {0,0,&_44u5__p4_0},
- {0,0,&_44u5__p5_0},
- {0,0,&_44u5__p6_0},
- {&_44u5__p7_0,&_44u5__p7_1},
- {&_44u5__p8_0,&_44u5__p8_1},
- {&_44u5__p9_0,&_44u5__p9_1,&_44u5__p9_2}
- }
-};
-static const static_bookblock _resbook_44u_6={
- {
- {0},
- {0,0,&_44u6__p1_0},
- {0,0,&_44u6__p2_0},
- {0,0,&_44u6__p3_0},
- {0,0,&_44u6__p4_0},
- {0,0,&_44u6__p5_0},
- {0,0,&_44u6__p6_0},
- {&_44u6__p7_0,&_44u6__p7_1},
- {&_44u6__p8_0,&_44u6__p8_1},
- {&_44u6__p9_0,&_44u6__p9_1,&_44u6__p9_2}
- }
-};
-static const static_bookblock _resbook_44u_7={
- {
- {0},
- {0,0,&_44u7__p1_0},
- {0,0,&_44u7__p2_0},
- {0,0,&_44u7__p3_0},
- {0,0,&_44u7__p4_0},
- {0,0,&_44u7__p5_0},
- {0,0,&_44u7__p6_0},
- {&_44u7__p7_0,&_44u7__p7_1},
- {&_44u7__p8_0,&_44u7__p8_1},
- {&_44u7__p9_0,&_44u7__p9_1,&_44u7__p9_2}
- }
-};
-static const static_bookblock _resbook_44u_8={
- {
- {0},
- {0,0,&_44u8_p1_0},
- {0,0,&_44u8_p2_0},
- {0,0,&_44u8_p3_0},
- {0,0,&_44u8_p4_0},
- {&_44u8_p5_0,&_44u8_p5_1},
- {&_44u8_p6_0,&_44u8_p6_1},
- {&_44u8_p7_0,&_44u8_p7_1},
- {&_44u8_p8_0,&_44u8_p8_1},
- {&_44u8_p9_0,&_44u8_p9_1,&_44u8_p9_2}
- }
-};
-static const static_bookblock _resbook_44u_9={
- {
- {0},
- {0,0,&_44u9_p1_0},
- {0,0,&_44u9_p2_0},
- {0,0,&_44u9_p3_0},
- {0,0,&_44u9_p4_0},
- {&_44u9_p5_0,&_44u9_p5_1},
- {&_44u9_p6_0,&_44u9_p6_1},
- {&_44u9_p7_0,&_44u9_p7_1},
- {&_44u9_p8_0,&_44u9_p8_1},
- {&_44u9_p9_0,&_44u9_p9_1,&_44u9_p9_2}
- }
-};
-
-static const vorbis_residue_template _res_44u_n1[]={
- {1,0,32, &_residue_44_low_un,
- &_huff_book__44un1__short,&_huff_book__44un1__short,
- &_resbook_44u_n1,&_resbook_44u_n1},
-
- {1,0,32, &_residue_44_low_un,
- &_huff_book__44un1__long,&_huff_book__44un1__long,
- &_resbook_44u_n1,&_resbook_44u_n1}
-};
-static const vorbis_residue_template _res_44u_0[]={
- {1,0,16, &_residue_44_low_un,
- &_huff_book__44u0__short,&_huff_book__44u0__short,
- &_resbook_44u_0,&_resbook_44u_0},
-
- {1,0,32, &_residue_44_low_un,
- &_huff_book__44u0__long,&_huff_book__44u0__long,
- &_resbook_44u_0,&_resbook_44u_0}
-};
-static const vorbis_residue_template _res_44u_1[]={
- {1,0,16, &_residue_44_low_un,
- &_huff_book__44u1__short,&_huff_book__44u1__short,
- &_resbook_44u_1,&_resbook_44u_1},
-
- {1,0,32, &_residue_44_low_un,
- &_huff_book__44u1__long,&_huff_book__44u1__long,
- &_resbook_44u_1,&_resbook_44u_1}
-};
-static const vorbis_residue_template _res_44u_2[]={
- {1,0,16, &_residue_44_low_un,
- &_huff_book__44u2__short,&_huff_book__44u2__short,
- &_resbook_44u_2,&_resbook_44u_2},
-
- {1,0,32, &_residue_44_low_un,
- &_huff_book__44u2__long,&_huff_book__44u2__long,
- &_resbook_44u_2,&_resbook_44u_2}
-};
-static const vorbis_residue_template _res_44u_3[]={
- {1,0,16, &_residue_44_low_un,
- &_huff_book__44u3__short,&_huff_book__44u3__short,
- &_resbook_44u_3,&_resbook_44u_3},
-
- {1,0,32, &_residue_44_low_un,
- &_huff_book__44u3__long,&_huff_book__44u3__long,
- &_resbook_44u_3,&_resbook_44u_3}
-};
-static const vorbis_residue_template _res_44u_4[]={
- {1,0,16, &_residue_44_low_un,
- &_huff_book__44u4__short,&_huff_book__44u4__short,
- &_resbook_44u_4,&_resbook_44u_4},
-
- {1,0,32, &_residue_44_low_un,
- &_huff_book__44u4__long,&_huff_book__44u4__long,
- &_resbook_44u_4,&_resbook_44u_4}
-};
-
-static const vorbis_residue_template _res_44u_5[]={
- {1,0,16, &_residue_44_mid_un,
- &_huff_book__44u5__short,&_huff_book__44u5__short,
- &_resbook_44u_5,&_resbook_44u_5},
-
- {1,0,32, &_residue_44_mid_un,
- &_huff_book__44u5__long,&_huff_book__44u5__long,
- &_resbook_44u_5,&_resbook_44u_5}
-};
-
-static const vorbis_residue_template _res_44u_6[]={
- {1,0,16, &_residue_44_mid_un,
- &_huff_book__44u6__short,&_huff_book__44u6__short,
- &_resbook_44u_6,&_resbook_44u_6},
-
- {1,0,32, &_residue_44_mid_un,
- &_huff_book__44u6__long,&_huff_book__44u6__long,
- &_resbook_44u_6,&_resbook_44u_6}
-};
-
-static const vorbis_residue_template _res_44u_7[]={
- {1,0,16, &_residue_44_mid_un,
- &_huff_book__44u7__short,&_huff_book__44u7__short,
- &_resbook_44u_7,&_resbook_44u_7},
-
- {1,0,32, &_residue_44_mid_un,
- &_huff_book__44u7__long,&_huff_book__44u7__long,
- &_resbook_44u_7,&_resbook_44u_7}
-};
-
-static const vorbis_residue_template _res_44u_8[]={
- {1,0,16, &_residue_44_hi_un,
- &_huff_book__44u8__short,&_huff_book__44u8__short,
- &_resbook_44u_8,&_resbook_44u_8},
-
- {1,0,32, &_residue_44_hi_un,
- &_huff_book__44u8__long,&_huff_book__44u8__long,
- &_resbook_44u_8,&_resbook_44u_8}
-};
-static const vorbis_residue_template _res_44u_9[]={
- {1,0,16, &_residue_44_hi_un,
- &_huff_book__44u9__short,&_huff_book__44u9__short,
- &_resbook_44u_9,&_resbook_44u_9},
-
- {1,0,32, &_residue_44_hi_un,
- &_huff_book__44u9__long,&_huff_book__44u9__long,
- &_resbook_44u_9,&_resbook_44u_9}
-};
-
-static const vorbis_mapping_template _mapres_template_44_uncoupled[]={
- { _map_nominal_u, _res_44u_n1 }, /* -1 */
- { _map_nominal_u, _res_44u_0 }, /* 0 */
- { _map_nominal_u, _res_44u_1 }, /* 1 */
- { _map_nominal_u, _res_44u_2 }, /* 2 */
- { _map_nominal_u, _res_44u_3 }, /* 3 */
- { _map_nominal_u, _res_44u_4 }, /* 4 */
- { _map_nominal_u, _res_44u_5 }, /* 5 */
- { _map_nominal_u, _res_44u_6 }, /* 6 */
- { _map_nominal_u, _res_44u_7 }, /* 7 */
- { _map_nominal_u, _res_44u_8 }, /* 8 */
- { _map_nominal_u, _res_44u_9 }, /* 9 */
-};
diff --git a/drivers/vorbis/modes/residue_8.h b/drivers/vorbis/modes/residue_8.h
deleted file mode 100644
index 94c6d84c44..0000000000
--- a/drivers/vorbis/modes/residue_8.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: toplevel residue templates 8/11kHz
- last mod: $Id: residue_8.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-#include "vorbis/codec.h"
-#include "backends.h"
-
-/***** residue backends *********************************************/
-
-static const static_bookblock _resbook_8s_0={
- {
- {0},
- {0,0,&_8c0_s_p1_0},
- {0},
- {0,0,&_8c0_s_p3_0},
- {0,0,&_8c0_s_p4_0},
- {0,0,&_8c0_s_p5_0},
- {0,0,&_8c0_s_p6_0},
- {&_8c0_s_p7_0,&_8c0_s_p7_1},
- {&_8c0_s_p8_0,&_8c0_s_p8_1},
- {&_8c0_s_p9_0,&_8c0_s_p9_1,&_8c0_s_p9_2}
- }
-};
-static const static_bookblock _resbook_8s_1={
- {
- {0},
- {0,0,&_8c1_s_p1_0},
- {0},
- {0,0,&_8c1_s_p3_0},
- {0,0,&_8c1_s_p4_0},
- {0,0,&_8c1_s_p5_0},
- {0,0,&_8c1_s_p6_0},
- {&_8c1_s_p7_0,&_8c1_s_p7_1},
- {&_8c1_s_p8_0,&_8c1_s_p8_1},
- {&_8c1_s_p9_0,&_8c1_s_p9_1,&_8c1_s_p9_2}
- }
-};
-
-static const vorbis_residue_template _res_8s_0[]={
- {2,0,32, &_residue_44_mid,
- &_huff_book__8c0_s_single,&_huff_book__8c0_s_single,
- &_resbook_8s_0,&_resbook_8s_0},
-};
-static const vorbis_residue_template _res_8s_1[]={
- {2,0,32, &_residue_44_mid,
- &_huff_book__8c1_s_single,&_huff_book__8c1_s_single,
- &_resbook_8s_1,&_resbook_8s_1},
-};
-
-static const vorbis_mapping_template _mapres_template_8_stereo[2]={
- { _map_nominal, _res_8s_0 }, /* 0 */
- { _map_nominal, _res_8s_1 }, /* 1 */
-};
-
-static const static_bookblock _resbook_8u_0={
- {
- {0},
- {0,0,&_8u0__p1_0},
- {0,0,&_8u0__p2_0},
- {0,0,&_8u0__p3_0},
- {0,0,&_8u0__p4_0},
- {0,0,&_8u0__p5_0},
- {&_8u0__p6_0,&_8u0__p6_1},
- {&_8u0__p7_0,&_8u0__p7_1,&_8u0__p7_2}
- }
-};
-static const static_bookblock _resbook_8u_1={
- {
- {0},
- {0,0,&_8u1__p1_0},
- {0,0,&_8u1__p2_0},
- {0,0,&_8u1__p3_0},
- {0,0,&_8u1__p4_0},
- {0,0,&_8u1__p5_0},
- {0,0,&_8u1__p6_0},
- {&_8u1__p7_0,&_8u1__p7_1},
- {&_8u1__p8_0,&_8u1__p8_1},
- {&_8u1__p9_0,&_8u1__p9_1,&_8u1__p9_2}
- }
-};
-
-static const vorbis_residue_template _res_8u_0[]={
- {1,0,32, &_residue_44_low_un,
- &_huff_book__8u0__single,&_huff_book__8u0__single,
- &_resbook_8u_0,&_resbook_8u_0},
-};
-static const vorbis_residue_template _res_8u_1[]={
- {1,0,32, &_residue_44_mid_un,
- &_huff_book__8u1__single,&_huff_book__8u1__single,
- &_resbook_8u_1,&_resbook_8u_1},
-};
-
-static const vorbis_mapping_template _mapres_template_8_uncoupled[2]={
- { _map_nominal_u, _res_8u_0 }, /* 0 */
- { _map_nominal_u, _res_8u_1 }, /* 1 */
-};
diff --git a/drivers/vorbis/modes/setup_11.h b/drivers/vorbis/modes/setup_11.h
deleted file mode 100644
index 4c2d619ca2..0000000000
--- a/drivers/vorbis/modes/setup_11.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: 11kHz settings
- last mod: $Id: setup_11.h 16894 2010-02-12 20:32:12Z xiphmont $
-
- ********************************************************************/
-
-#include "psych_11.h"
-
-static const int blocksize_11[2]={
- 512,512
-};
-
-static const int _floor_mapping_11a[]={
- 6,6
-};
-static const int *_floor_mapping_11[]={
- _floor_mapping_11a
-};
-
-static const double rate_mapping_11[3]={
- 8000.,13000.,44000.,
-};
-
-static const double rate_mapping_11_uncoupled[3]={
- 12000.,20000.,50000.,
-};
-
-static const double quality_mapping_11[3]={
- -.1,.0,1.
-};
-
-static const ve_setup_data_template ve_setup_11_stereo={
- 2,
- rate_mapping_11,
- quality_mapping_11,
- 2,
- 9000,
- 15000,
-
- blocksize_11,
- blocksize_11,
-
- _psy_tone_masteratt_11,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_11,
- NULL,
- _vp_tonemask_adj_11,
-
- _psy_noiseguards_8,
- _psy_noisebias_11,
- _psy_noisebias_11,
- NULL,
- NULL,
- _psy_noise_suppress,
-
- _psy_compand_8,
- _psy_compand_8_mapping,
- NULL,
-
- {_noise_start_8,_noise_start_8},
- {_noise_part_8,_noise_part_8},
- _noise_thresh_11,
-
- _psy_ath_floater_8,
- _psy_ath_abs_8,
-
- _psy_lowpass_11,
-
- _psy_global_44,
- _global_mapping_8,
- _psy_stereo_modes_8,
-
- _floor_books,
- _floor,
- 1,
- _floor_mapping_11,
-
- _mapres_template_8_stereo
-};
-
-static const ve_setup_data_template ve_setup_11_uncoupled={
- 2,
- rate_mapping_11_uncoupled,
- quality_mapping_11,
- -1,
- 9000,
- 15000,
-
- blocksize_11,
- blocksize_11,
-
- _psy_tone_masteratt_11,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_11,
- NULL,
- _vp_tonemask_adj_11,
-
- _psy_noiseguards_8,
- _psy_noisebias_11,
- _psy_noisebias_11,
- NULL,
- NULL,
- _psy_noise_suppress,
-
- _psy_compand_8,
- _psy_compand_8_mapping,
- NULL,
-
- {_noise_start_8,_noise_start_8},
- {_noise_part_8,_noise_part_8},
- _noise_thresh_11,
-
- _psy_ath_floater_8,
- _psy_ath_abs_8,
-
- _psy_lowpass_11,
-
- _psy_global_44,
- _global_mapping_8,
- _psy_stereo_modes_8,
-
- _floor_books,
- _floor,
- 1,
- _floor_mapping_11,
-
- _mapres_template_8_uncoupled
-};
diff --git a/drivers/vorbis/modes/setup_16.h b/drivers/vorbis/modes/setup_16.h
deleted file mode 100644
index 336007f98e..0000000000
--- a/drivers/vorbis/modes/setup_16.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: 16kHz settings
- last mod: $Id: setup_16.h 16894 2010-02-12 20:32:12Z xiphmont $
-
- ********************************************************************/
-
-#include "psych_16.h"
-#include "residue_16.h"
-
-static const int blocksize_16_short[3]={
- 1024,512,512
-};
-static const int blocksize_16_long[3]={
- 1024,1024,1024
-};
-
-static const int _floor_mapping_16a[]={
- 9,3,3
-};
-static const int _floor_mapping_16b[]={
- 9,9,9
-};
-static const int *_floor_mapping_16[]={
- _floor_mapping_16a,
- _floor_mapping_16b
-};
-
-static const double rate_mapping_16[4]={
- 12000.,20000.,44000.,86000.
-};
-
-static const double rate_mapping_16_uncoupled[4]={
- 16000.,28000.,64000.,100000.
-};
-
-static const double _global_mapping_16[4]={ 1., 2., 3., 4. };
-
-static const double quality_mapping_16[4]={ -.1,.05,.5,1. };
-
-static const double _psy_compand_16_mapping[4]={ 0., .8, 1., 1.};
-
-static const ve_setup_data_template ve_setup_16_stereo={
- 3,
- rate_mapping_16,
- quality_mapping_16,
- 2,
- 15000,
- 19000,
-
- blocksize_16_short,
- blocksize_16_long,
-
- _psy_tone_masteratt_16,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_16,
- _vp_tonemask_adj_16,
- _vp_tonemask_adj_16,
-
- _psy_noiseguards_16,
- _psy_noisebias_16_impulse,
- _psy_noisebias_16_short,
- _psy_noisebias_16_short,
- _psy_noisebias_16,
- _psy_noise_suppress,
-
- _psy_compand_8,
- _psy_compand_16_mapping,
- _psy_compand_16_mapping,
-
- {_noise_start_16,_noise_start_16},
- { _noise_part_16, _noise_part_16},
- _noise_thresh_16,
-
- _psy_ath_floater_16,
- _psy_ath_abs_16,
-
- _psy_lowpass_16,
-
- _psy_global_44,
- _global_mapping_16,
- _psy_stereo_modes_16,
-
- _floor_books,
- _floor,
- 2,
- _floor_mapping_16,
-
- _mapres_template_16_stereo
-};
-
-static const ve_setup_data_template ve_setup_16_uncoupled={
- 3,
- rate_mapping_16_uncoupled,
- quality_mapping_16,
- -1,
- 15000,
- 19000,
-
- blocksize_16_short,
- blocksize_16_long,
-
- _psy_tone_masteratt_16,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_16,
- _vp_tonemask_adj_16,
- _vp_tonemask_adj_16,
-
- _psy_noiseguards_16,
- _psy_noisebias_16_impulse,
- _psy_noisebias_16_short,
- _psy_noisebias_16_short,
- _psy_noisebias_16,
- _psy_noise_suppress,
-
- _psy_compand_8,
- _psy_compand_16_mapping,
- _psy_compand_16_mapping,
-
- {_noise_start_16,_noise_start_16},
- { _noise_part_16, _noise_part_16},
- _noise_thresh_16,
-
- _psy_ath_floater_16,
- _psy_ath_abs_16,
-
- _psy_lowpass_16,
-
- _psy_global_44,
- _global_mapping_16,
- _psy_stereo_modes_16,
-
- _floor_books,
- _floor,
- 2,
- _floor_mapping_16,
-
- _mapres_template_16_uncoupled
-};
diff --git a/drivers/vorbis/modes/setup_22.h b/drivers/vorbis/modes/setup_22.h
deleted file mode 100644
index 4fd5e57111..0000000000
--- a/drivers/vorbis/modes/setup_22.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: 22kHz settings
- last mod: $Id: setup_22.h 17026 2010-03-25 05:00:27Z xiphmont $
-
- ********************************************************************/
-
-static const double rate_mapping_22[4]={
- 15000.,20000.,44000.,86000.
-};
-
-static const double rate_mapping_22_uncoupled[4]={
- 16000.,28000.,50000.,90000.
-};
-
-static const double _psy_lowpass_22[4]={9.5,11.,30.,99.};
-
-static const ve_setup_data_template ve_setup_22_stereo={
- 3,
- rate_mapping_22,
- quality_mapping_16,
- 2,
- 19000,
- 26000,
-
- blocksize_16_short,
- blocksize_16_long,
-
- _psy_tone_masteratt_16,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_16,
- _vp_tonemask_adj_16,
- _vp_tonemask_adj_16,
-
- _psy_noiseguards_16,
- _psy_noisebias_16_impulse,
- _psy_noisebias_16_short,
- _psy_noisebias_16_short,
- _psy_noisebias_16,
- _psy_noise_suppress,
-
- _psy_compand_8,
- _psy_compand_16_mapping,
- _psy_compand_16_mapping,
-
- {_noise_start_16,_noise_start_16},
- { _noise_part_16, _noise_part_16},
- _noise_thresh_16,
-
- _psy_ath_floater_16,
- _psy_ath_abs_16,
-
- _psy_lowpass_22,
-
- _psy_global_44,
- _global_mapping_16,
- _psy_stereo_modes_16,
-
- _floor_books,
- _floor,
- 2,
- _floor_mapping_16,
-
- _mapres_template_16_stereo
-};
-
-static const ve_setup_data_template ve_setup_22_uncoupled={
- 3,
- rate_mapping_22_uncoupled,
- quality_mapping_16,
- -1,
- 19000,
- 26000,
-
- blocksize_16_short,
- blocksize_16_long,
-
- _psy_tone_masteratt_16,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_16,
- _vp_tonemask_adj_16,
- _vp_tonemask_adj_16,
-
- _psy_noiseguards_16,
- _psy_noisebias_16_impulse,
- _psy_noisebias_16_short,
- _psy_noisebias_16_short,
- _psy_noisebias_16,
- _psy_noise_suppress,
-
- _psy_compand_8,
- _psy_compand_16_mapping,
- _psy_compand_16_mapping,
-
- {_noise_start_16,_noise_start_16},
- { _noise_part_16, _noise_part_16},
- _noise_thresh_16,
-
- _psy_ath_floater_16,
- _psy_ath_abs_16,
-
- _psy_lowpass_22,
-
- _psy_global_44,
- _global_mapping_16,
- _psy_stereo_modes_16,
-
- _floor_books,
- _floor,
- 2,
- _floor_mapping_16,
-
- _mapres_template_16_uncoupled
-};
diff --git a/drivers/vorbis/modes/setup_32.h b/drivers/vorbis/modes/setup_32.h
deleted file mode 100644
index 2275ac9615..0000000000
--- a/drivers/vorbis/modes/setup_32.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: toplevel settings for 32kHz
- last mod: $Id: setup_32.h 16894 2010-02-12 20:32:12Z xiphmont $
-
- ********************************************************************/
-
-static const double rate_mapping_32[12]={
- 18000.,28000.,35000.,45000.,56000.,60000.,
- 75000.,90000.,100000.,115000.,150000.,190000.,
-};
-
-static const double rate_mapping_32_un[12]={
- 30000.,42000.,52000.,64000.,72000.,78000.,
- 86000.,92000.,110000.,120000.,140000.,190000.,
-};
-
-static const double _psy_lowpass_32[12]={
- 12.3,13.,13.,14.,15.,99.,99.,99.,99.,99.,99.,99.
-};
-
-static const ve_setup_data_template ve_setup_32_stereo={
- 11,
- rate_mapping_32,
- quality_mapping_44,
- 2,
- 26000,
- 40000,
-
- blocksize_short_44,
- blocksize_long_44,
-
- _psy_tone_masteratt_44,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_otherblock,
- _vp_tonemask_adj_longblock,
- _vp_tonemask_adj_otherblock,
-
- _psy_noiseguards_44,
- _psy_noisebias_impulse,
- _psy_noisebias_padding,
- _psy_noisebias_trans,
- _psy_noisebias_long,
- _psy_noise_suppress,
-
- _psy_compand_44,
- _psy_compand_short_mapping,
- _psy_compand_long_mapping,
-
- {_noise_start_short_44,_noise_start_long_44},
- {_noise_part_short_44,_noise_part_long_44},
- _noise_thresh_44,
-
- _psy_ath_floater,
- _psy_ath_abs,
-
- _psy_lowpass_32,
-
- _psy_global_44,
- _global_mapping_44,
- _psy_stereo_modes_44,
-
- _floor_books,
- _floor,
- 2,
- _floor_mapping_44,
-
- _mapres_template_44_stereo
-};
-
-static const ve_setup_data_template ve_setup_32_uncoupled={
- 11,
- rate_mapping_32_un,
- quality_mapping_44,
- -1,
- 26000,
- 40000,
-
- blocksize_short_44,
- blocksize_long_44,
-
- _psy_tone_masteratt_44,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_otherblock,
- _vp_tonemask_adj_longblock,
- _vp_tonemask_adj_otherblock,
-
- _psy_noiseguards_44,
- _psy_noisebias_impulse,
- _psy_noisebias_padding,
- _psy_noisebias_trans,
- _psy_noisebias_long,
- _psy_noise_suppress,
-
- _psy_compand_44,
- _psy_compand_short_mapping,
- _psy_compand_long_mapping,
-
- {_noise_start_short_44,_noise_start_long_44},
- {_noise_part_short_44,_noise_part_long_44},
- _noise_thresh_44,
-
- _psy_ath_floater,
- _psy_ath_abs,
-
- _psy_lowpass_32,
-
- _psy_global_44,
- _global_mapping_44,
- NULL,
-
- _floor_books,
- _floor,
- 2,
- _floor_mapping_44,
-
- _mapres_template_44_uncoupled
-};
diff --git a/drivers/vorbis/modes/setup_44.h b/drivers/vorbis/modes/setup_44.h
deleted file mode 100644
index 3b88a89ac5..0000000000
--- a/drivers/vorbis/modes/setup_44.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: toplevel settings for 44.1/48kHz
- last mod: $Id: setup_44.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-#include "modes/floor_all.h"
-#include "modes/residue_44.h"
-#include "modes/psych_44.h"
-
-static const double rate_mapping_44_stereo[12]={
- 22500.,32000.,40000.,48000.,56000.,64000.,
- 80000.,96000.,112000.,128000.,160000.,250001.
-};
-
-static const double quality_mapping_44[12]={
- -.1,.0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1.0
-};
-
-static const int blocksize_short_44[11]={
- 512,256,256,256,256,256,256,256,256,256,256
-};
-static const int blocksize_long_44[11]={
- 4096,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048
-};
-
-static const double _psy_compand_short_mapping[12]={
- 0.5, 1., 1., 1.3, 1.6, 2., 2., 2., 2., 2., 2., 2.
-};
-static const double _psy_compand_long_mapping[12]={
- 3.5, 4., 4., 4.3, 4.6, 5., 5., 5., 5., 5., 5., 5.
-};
-
-static const double _global_mapping_44[12]={
- /* 1., 1., 1.5, 2., 2., 2.5, 2.7, 3.0, 3.5, 4., 4. */
- 0., 1., 1., 1.5, 2., 2., 2.5, 2.7, 3.0, 3.7, 4., 4.
-};
-
-static const int _floor_mapping_44a[11]={
- 1,0,0,2,2,4,5,5,5,5,5
-};
-
-static const int _floor_mapping_44b[11]={
- 8,7,7,7,7,7,7,7,7,7,7
-};
-
-static const int _floor_mapping_44c[11]={
- 10,10,10,10,10,10,10,10,10,10,10
-};
-
-static const int *_floor_mapping_44[]={
- _floor_mapping_44a,
- _floor_mapping_44b,
- _floor_mapping_44c,
-};
-
-static const ve_setup_data_template ve_setup_44_stereo={
- 11,
- rate_mapping_44_stereo,
- quality_mapping_44,
- 2,
- 40000,
- 50000,
-
- blocksize_short_44,
- blocksize_long_44,
-
- _psy_tone_masteratt_44,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_otherblock,
- _vp_tonemask_adj_longblock,
- _vp_tonemask_adj_otherblock,
-
- _psy_noiseguards_44,
- _psy_noisebias_impulse,
- _psy_noisebias_padding,
- _psy_noisebias_trans,
- _psy_noisebias_long,
- _psy_noise_suppress,
-
- _psy_compand_44,
- _psy_compand_short_mapping,
- _psy_compand_long_mapping,
-
- {_noise_start_short_44,_noise_start_long_44},
- {_noise_part_short_44,_noise_part_long_44},
- _noise_thresh_44,
-
- _psy_ath_floater,
- _psy_ath_abs,
-
- _psy_lowpass_44,
-
- _psy_global_44,
- _global_mapping_44,
- _psy_stereo_modes_44,
-
- _floor_books,
- _floor,
- 2,
- _floor_mapping_44,
-
- _mapres_template_44_stereo
-};
diff --git a/drivers/vorbis/modes/setup_44p51.h b/drivers/vorbis/modes/setup_44p51.h
deleted file mode 100644
index 67d9979608..0000000000
--- a/drivers/vorbis/modes/setup_44p51.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/********************************************************************
- * *
- * 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-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: toplevel settings for 44.1/48kHz 5.1 surround modes
- last mod: $Id: setup_44p51.h 19013 2013-11-12 04:04:50Z giles $
-
- ********************************************************************/
-
-#include "modes/residue_44p51.h"
-
-static const double rate_mapping_44p51[12]={
- 14000.,20000.,28000.,38000.,46000.,54000.,
- 75000.,96000.,120000.,140000.,180000.,240001.
-};
-
-static const ve_setup_data_template ve_setup_44_51={
- 11,
- rate_mapping_44p51,
- quality_mapping_44,
- 6,
- 40000,
- 70000,
-
- blocksize_short_44,
- blocksize_long_44,
-
- _psy_tone_masteratt_44,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_otherblock,
- _vp_tonemask_adj_longblock,
- _vp_tonemask_adj_otherblock,
-
- _psy_noiseguards_44,
- _psy_noisebias_impulse,
- _psy_noisebias_padding,
- _psy_noisebias_trans,
- _psy_noisebias_long,
- _psy_noise_suppress,
-
- _psy_compand_44,
- _psy_compand_short_mapping,
- _psy_compand_long_mapping,
-
- {_noise_start_short_44,_noise_start_long_44},
- {_noise_part_short_44,_noise_part_long_44},
- _noise_thresh_44,
-
- _psy_ath_floater,
- _psy_ath_abs,
-
- _psy_lowpass_44,
-
- _psy_global_44,
- _global_mapping_44,
- _psy_stereo_modes_44,
-
- _floor_books,
- _floor,
- 3,
- _floor_mapping_44,
-
- _mapres_template_44_51
-};
diff --git a/drivers/vorbis/modes/setup_44u.h b/drivers/vorbis/modes/setup_44u.h
deleted file mode 100644
index 568b5f8959..0000000000
--- a/drivers/vorbis/modes/setup_44u.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: toplevel settings for 44.1/48kHz uncoupled modes
- last mod: $Id: setup_44u.h 16962 2010-03-11 07:30:34Z xiphmont $
-
- ********************************************************************/
-
-#include "modes/residue_44u.h"
-
-static const double rate_mapping_44_un[12]={
- 32000.,48000.,60000.,70000.,80000.,86000.,
- 96000.,110000.,120000.,140000.,160000.,240001.
-};
-
-static const ve_setup_data_template ve_setup_44_uncoupled={
- 11,
- rate_mapping_44_un,
- quality_mapping_44,
- -1,
- 40000,
- 50000,
-
- blocksize_short_44,
- blocksize_long_44,
-
- _psy_tone_masteratt_44,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_otherblock,
- _vp_tonemask_adj_longblock,
- _vp_tonemask_adj_otherblock,
-
- _psy_noiseguards_44,
- _psy_noisebias_impulse,
- _psy_noisebias_padding,
- _psy_noisebias_trans,
- _psy_noisebias_long,
- _psy_noise_suppress,
-
- _psy_compand_44,
- _psy_compand_short_mapping,
- _psy_compand_long_mapping,
-
- {_noise_start_short_44,_noise_start_long_44},
- {_noise_part_short_44,_noise_part_long_44},
- _noise_thresh_44,
-
- _psy_ath_floater,
- _psy_ath_abs,
-
- _psy_lowpass_44,
-
- _psy_global_44,
- _global_mapping_44,
- _psy_stereo_modes_44,
-
- _floor_books,
- _floor,
- 2,
- _floor_mapping_44,
-
- _mapres_template_44_uncoupled
-};
diff --git a/drivers/vorbis/modes/setup_8.h b/drivers/vorbis/modes/setup_8.h
deleted file mode 100644
index 14c48374fa..0000000000
--- a/drivers/vorbis/modes/setup_8.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: 8kHz settings
- last mod: $Id: setup_8.h 16894 2010-02-12 20:32:12Z xiphmont $
-
- ********************************************************************/
-
-#include "psych_8.h"
-#include "residue_8.h"
-
-static const int blocksize_8[2]={
- 512,512
-};
-
-static const int _floor_mapping_8a[]={
- 6,6
-};
-
-static const int *_floor_mapping_8[]={
- _floor_mapping_8a
-};
-
-static const double rate_mapping_8[3]={
- 6000.,9000.,32000.,
-};
-
-static const double rate_mapping_8_uncoupled[3]={
- 8000.,14000.,42000.,
-};
-
-static const double quality_mapping_8[3]={
- -.1,.0,1.
-};
-
-static const double _psy_compand_8_mapping[3]={ 0., 1., 1.};
-
-static const double _global_mapping_8[3]={ 1., 2., 3. };
-
-static const ve_setup_data_template ve_setup_8_stereo={
- 2,
- rate_mapping_8,
- quality_mapping_8,
- 2,
- 8000,
- 9000,
-
- blocksize_8,
- blocksize_8,
-
- _psy_tone_masteratt_8,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_8,
- NULL,
- _vp_tonemask_adj_8,
-
- _psy_noiseguards_8,
- _psy_noisebias_8,
- _psy_noisebias_8,
- NULL,
- NULL,
- _psy_noise_suppress,
-
- _psy_compand_8,
- _psy_compand_8_mapping,
- NULL,
-
- {_noise_start_8,_noise_start_8},
- {_noise_part_8,_noise_part_8},
- _noise_thresh_5only,
-
- _psy_ath_floater_8,
- _psy_ath_abs_8,
-
- _psy_lowpass_8,
-
- _psy_global_44,
- _global_mapping_8,
- _psy_stereo_modes_8,
-
- _floor_books,
- _floor,
- 1,
- _floor_mapping_8,
-
- _mapres_template_8_stereo
-};
-
-static const ve_setup_data_template ve_setup_8_uncoupled={
- 2,
- rate_mapping_8_uncoupled,
- quality_mapping_8,
- -1,
- 8000,
- 9000,
-
- blocksize_8,
- blocksize_8,
-
- _psy_tone_masteratt_8,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_8,
- NULL,
- _vp_tonemask_adj_8,
-
- _psy_noiseguards_8,
- _psy_noisebias_8,
- _psy_noisebias_8,
- NULL,
- NULL,
- _psy_noise_suppress,
-
- _psy_compand_8,
- _psy_compand_8_mapping,
- NULL,
-
- {_noise_start_8,_noise_start_8},
- {_noise_part_8,_noise_part_8},
- _noise_thresh_5only,
-
- _psy_ath_floater_8,
- _psy_ath_abs_8,
-
- _psy_lowpass_8,
-
- _psy_global_44,
- _global_mapping_8,
- _psy_stereo_modes_8,
-
- _floor_books,
- _floor,
- 1,
- _floor_mapping_8,
-
- _mapres_template_8_uncoupled
-};
diff --git a/drivers/vorbis/modes/setup_X.h b/drivers/vorbis/modes/setup_X.h
deleted file mode 100644
index a69f5d40a2..0000000000
--- a/drivers/vorbis/modes/setup_X.h
+++ /dev/null
@@ -1,225 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: catch-all toplevel settings for q modes only
- last mod: $Id: setup_X.h 16894 2010-02-12 20:32:12Z xiphmont $
-
- ********************************************************************/
-
-static const double rate_mapping_X[12]={
- -1.,-1.,-1.,-1.,-1.,-1.,
- -1.,-1.,-1.,-1.,-1.,-1.
-};
-
-static const ve_setup_data_template ve_setup_X_stereo={
- 11,
- rate_mapping_X,
- quality_mapping_44,
- 2,
- 50000,
- 200000,
-
- blocksize_short_44,
- blocksize_long_44,
-
- _psy_tone_masteratt_44,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_otherblock,
- _vp_tonemask_adj_longblock,
- _vp_tonemask_adj_otherblock,
-
- _psy_noiseguards_44,
- _psy_noisebias_impulse,
- _psy_noisebias_padding,
- _psy_noisebias_trans,
- _psy_noisebias_long,
- _psy_noise_suppress,
-
- _psy_compand_44,
- _psy_compand_short_mapping,
- _psy_compand_long_mapping,
-
- {_noise_start_short_44,_noise_start_long_44},
- {_noise_part_short_44,_noise_part_long_44},
- _noise_thresh_44,
-
- _psy_ath_floater,
- _psy_ath_abs,
-
- _psy_lowpass_44,
-
- _psy_global_44,
- _global_mapping_44,
- _psy_stereo_modes_44,
-
- _floor_books,
- _floor,
- 2,
- _floor_mapping_44,
-
- _mapres_template_44_stereo
-};
-
-static const ve_setup_data_template ve_setup_X_uncoupled={
- 11,
- rate_mapping_X,
- quality_mapping_44,
- -1,
- 50000,
- 200000,
-
- blocksize_short_44,
- blocksize_long_44,
-
- _psy_tone_masteratt_44,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_otherblock,
- _vp_tonemask_adj_longblock,
- _vp_tonemask_adj_otherblock,
-
- _psy_noiseguards_44,
- _psy_noisebias_impulse,
- _psy_noisebias_padding,
- _psy_noisebias_trans,
- _psy_noisebias_long,
- _psy_noise_suppress,
-
- _psy_compand_44,
- _psy_compand_short_mapping,
- _psy_compand_long_mapping,
-
- {_noise_start_short_44,_noise_start_long_44},
- {_noise_part_short_44,_noise_part_long_44},
- _noise_thresh_44,
-
- _psy_ath_floater,
- _psy_ath_abs,
-
- _psy_lowpass_44,
-
- _psy_global_44,
- _global_mapping_44,
- NULL,
-
- _floor_books,
- _floor,
- 2,
- _floor_mapping_44,
-
- _mapres_template_44_uncoupled
-};
-
-static const ve_setup_data_template ve_setup_XX_stereo={
- 2,
- rate_mapping_X,
- quality_mapping_8,
- 2,
- 0,
- 8000,
-
- blocksize_8,
- blocksize_8,
-
- _psy_tone_masteratt_8,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_8,
- NULL,
- _vp_tonemask_adj_8,
-
- _psy_noiseguards_8,
- _psy_noisebias_8,
- _psy_noisebias_8,
- NULL,
- NULL,
- _psy_noise_suppress,
-
- _psy_compand_8,
- _psy_compand_8_mapping,
- NULL,
-
- {_noise_start_8,_noise_start_8},
- {_noise_part_8,_noise_part_8},
- _noise_thresh_5only,
-
- _psy_ath_floater_8,
- _psy_ath_abs_8,
-
- _psy_lowpass_8,
-
- _psy_global_44,
- _global_mapping_8,
- _psy_stereo_modes_8,
-
- _floor_books,
- _floor,
- 1,
- _floor_mapping_8,
-
- _mapres_template_8_stereo
-};
-
-static const ve_setup_data_template ve_setup_XX_uncoupled={
- 2,
- rate_mapping_X,
- quality_mapping_8,
- -1,
- 0,
- 8000,
-
- blocksize_8,
- blocksize_8,
-
- _psy_tone_masteratt_8,
- _psy_tone_0dB,
- _psy_tone_suppress,
-
- _vp_tonemask_adj_8,
- NULL,
- _vp_tonemask_adj_8,
-
- _psy_noiseguards_8,
- _psy_noisebias_8,
- _psy_noisebias_8,
- NULL,
- NULL,
- _psy_noise_suppress,
-
- _psy_compand_8,
- _psy_compand_8_mapping,
- NULL,
-
- {_noise_start_8,_noise_start_8},
- {_noise_part_8,_noise_part_8},
- _noise_thresh_5only,
-
- _psy_ath_floater_8,
- _psy_ath_abs_8,
-
- _psy_lowpass_8,
-
- _psy_global_44,
- _global_mapping_8,
- _psy_stereo_modes_8,
-
- _floor_books,
- _floor,
- 1,
- _floor_mapping_8,
-
- _mapres_template_8_uncoupled
-};
diff --git a/drivers/vorbis/os.h b/drivers/vorbis/os.h
deleted file mode 100644
index 8bc3e5fe9c..0000000000
--- a/drivers/vorbis/os.h
+++ /dev/null
@@ -1,191 +0,0 @@
-#ifndef _OS_H
-#define _OS_H
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: #ifdef jail to whip a few platforms into the UNIX ideal.
- last mod: $Id: os.h 19457 2015-03-03 00:15:29Z giles $
-
- ********************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <math.h>
-#include <ogg/os_types.h>
-
-#include "misc.h"
-
-#ifndef _V_IFDEFJAIL_H_
-# define _V_IFDEFJAIL_H_
-
-# ifdef __GNUC__
-# define STIN static __inline__
-# elif _WIN32
-# define STIN static __inline
-# else
-# define STIN static
-# endif
-
-#ifdef DJGPP
-# define rint(x) (floor((x)+0.5f))
-#endif
-
-#ifndef M_PI
-# define M_PI (3.1415926536f)
-#endif
-
-#if defined(_WIN32) && !defined(__SYMBIAN32__)
-# include <malloc.h>
-# define rint(x) (floor((x)+0.5f))
-# define NO_FLOAT_MATH_LIB
-# define FAST_HYPOT(a, b) sqrt((a)*(a) + (b)*(b))
-#endif
-
-#if defined(__SYMBIAN32__) && defined(__WINS__)
-void *_alloca(size_t size);
-# define alloca _alloca
-#endif
-
-#ifndef FAST_HYPOT
-# define FAST_HYPOT hypot
-#endif
-
-#endif
-
-#ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-#endif
-
-#ifdef USE_MEMORY_H
-# include <memory.h>
-#endif
-
-#ifndef min
-# define min(x,y) ((x)>(y)?(y):(x))
-#endif
-
-#ifndef max
-# define max(x,y) ((x)<(y)?(y):(x))
-#endif
-
-
-/* Special i386 GCC implementation */
-#if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__)
-# define VORBIS_FPU_CONTROL
-/* both GCC and MSVC are kinda stupid about rounding/casting to int.
- Because of encapsulation constraints (GCC can't see inside the asm
- block and so we end up doing stupid things like a store/load that
- is collectively a noop), we do it this way */
-
-/* we must set up the fpu before this works!! */
-
-typedef ogg_int16_t vorbis_fpu_control;
-
-static inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
- ogg_int16_t ret;
- ogg_int16_t temp;
- __asm__ __volatile__("fnstcw %0\n\t"
- "movw %0,%%dx\n\t"
- "andw $62463,%%dx\n\t"
- "movw %%dx,%1\n\t"
- "fldcw %1\n\t":"=m"(ret):"m"(temp): "dx");
- *fpu=ret;
-}
-
-static inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
- __asm__ __volatile__("fldcw %0":: "m"(fpu));
-}
-
-/* assumes the FPU is in round mode! */
-static inline int vorbis_ftoi(double f){ /* yes, double! Otherwise,
- we get extra fst/fld to
- truncate precision */
- int i;
- __asm__("fistl %0": "=m"(i) : "t"(f));
- return(i);
-}
-#endif /* Special i386 GCC implementation */
-
-
-/* MSVC inline assembly. 32 bit only; inline ASM isn't implemented in the
- * 64 bit compiler and doesn't work on arm. */
-#if defined(_MSC_VER) && !defined(_WIN64) && \
- !defined(_WIN32_WCE) && !defined(_M_ARM)
-# define VORBIS_FPU_CONTROL
-
-typedef ogg_int16_t vorbis_fpu_control;
-
-static __inline int vorbis_ftoi(double f){
- int i;
- __asm{
- fld f
- fistp i
- }
- return i;
-}
-
-static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
- (void)fpu;
-}
-
-static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
- (void)fpu;
-}
-
-#endif /* Special MSVC 32 bit implementation */
-
-
-/* Optimized code path for x86_64 builds. Uses SSE2 intrinsics. This can be
- done safely because all x86_64 CPUs supports SSE2. */
-#if (defined(_MSC_VER) && defined(_WIN64)) || (defined(__GNUC__) && defined (__x86_64__))
-# define VORBIS_FPU_CONTROL
-
-typedef ogg_int16_t vorbis_fpu_control;
-
-#include <emmintrin.h>
-static __inline int vorbis_ftoi(double f){
- return _mm_cvtsd_si32(_mm_load_sd(&f));
-}
-
-static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
- (void)fpu;
-}
-
-static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
- (void)fpu;
-}
-
-#endif /* Special MSVC x64 implementation */
-
-
-/* If no special implementation was found for the current compiler / platform,
- use the default implementation here: */
-#ifndef VORBIS_FPU_CONTROL
-
-typedef int vorbis_fpu_control;
-
-static int vorbis_ftoi(double f){
- /* Note: MSVC and GCC (at least on some systems) round towards zero, thus,
- the floor() call is required to ensure correct roudning of
- negative numbers */
- return (int)floor(f+.5);
-}
-
-/* We don't have special code for this compiler/arch, so do it the slow way */
-# define vorbis_fpu_setround(vorbis_fpu_control) {}
-# define vorbis_fpu_restore(vorbis_fpu_control) {}
-
-#endif /* default implementation */
-
-#endif /* _OS_H */
diff --git a/drivers/vorbis/psy.c b/drivers/vorbis/psy.c
deleted file mode 100644
index f7a44c6d00..0000000000
--- a/drivers/vorbis/psy.c
+++ /dev/null
@@ -1,1206 +0,0 @@
-/********************************************************************
- * *
- * 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-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: psychoacoustics not including preecho
- last mod: $Id: psy.c 18077 2011-09-02 02:49:00Z giles $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-
-#include "masking.h"
-#include "psy.h"
-#include "os.h"
-#include "lpc.h"
-#include "smallft.h"
-#include "scales.h"
-#include "misc.h"
-
-#define NEGINF -9999.f
-static const double stereo_threshholds[]={0.0, .5, 1.0, 1.5, 2.5, 4.5, 8.5, 16.5, 9e10};
-static const double stereo_threshholds_limited[]={0.0, .5, 1.0, 1.5, 2.0, 2.5, 4.5, 8.5, 9e10};
-
-vorbis_look_psy_global *_vp_global_look(vorbis_info *vi){
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy_global *gi=&ci->psy_g_param;
- vorbis_look_psy_global *look=_ogg_calloc(1,sizeof(*look));
-
- look->channels=vi->channels;
-
- look->ampmax=-9999.;
- look->gi=gi;
- return(look);
-}
-
-void _vp_global_free(vorbis_look_psy_global *look){
- if(look){
- memset(look,0,sizeof(*look));
- _ogg_free(look);
- }
-}
-
-void _vi_gpsy_free(vorbis_info_psy_global *i){
- if(i){
- memset(i,0,sizeof(*i));
- _ogg_free(i);
- }
-}
-
-void _vi_psy_free(vorbis_info_psy *i){
- if(i){
- memset(i,0,sizeof(*i));
- _ogg_free(i);
- }
-}
-
-static void min_curve(float *c,
- float *c2){
- int i;
- for(i=0;i<EHMER_MAX;i++)if(c2[i]<c[i])c[i]=c2[i];
-}
-static void max_curve(float *c,
- float *c2){
- int i;
- for(i=0;i<EHMER_MAX;i++)if(c2[i]>c[i])c[i]=c2[i];
-}
-
-static void attenuate_curve(float *c,float att){
- int i;
- for(i=0;i<EHMER_MAX;i++)
- c[i]+=att;
-}
-
-static float ***setup_tone_curves(float curveatt_dB[P_BANDS],float binHz,int n,
- float center_boost, float center_decay_rate){
- int i,j,k,m;
- float ath[EHMER_MAX];
- float workc[P_BANDS][P_LEVELS][EHMER_MAX];
- float athc[P_LEVELS][EHMER_MAX];
- float *brute_buffer=alloca(n*sizeof(*brute_buffer));
-
- float ***ret=_ogg_malloc(sizeof(*ret)*P_BANDS);
-
- memset(workc,0,sizeof(workc));
-
- for(i=0;i<P_BANDS;i++){
- /* we add back in the ATH to avoid low level curves falling off to
- -infinity and unnecessarily cutting off high level curves in the
- curve limiting (last step). */
-
- /* A half-band's settings must be valid over the whole band, and
- it's better to mask too little than too much */
- int ath_offset=i*4;
- for(j=0;j<EHMER_MAX;j++){
- float min=999.;
- for(k=0;k<4;k++)
- if(j+k+ath_offset<MAX_ATH){
- if(min>ATH[j+k+ath_offset])min=ATH[j+k+ath_offset];
- }else{
- if(min>ATH[MAX_ATH-1])min=ATH[MAX_ATH-1];
- }
- ath[j]=min;
- }
-
- /* copy curves into working space, replicate the 50dB curve to 30
- and 40, replicate the 100dB curve to 110 */
- for(j=0;j<6;j++)
- memcpy(workc[i][j+2],tonemasks[i][j],EHMER_MAX*sizeof(*tonemasks[i][j]));
- memcpy(workc[i][0],tonemasks[i][0],EHMER_MAX*sizeof(*tonemasks[i][0]));
- memcpy(workc[i][1],tonemasks[i][0],EHMER_MAX*sizeof(*tonemasks[i][0]));
-
- /* apply centered curve boost/decay */
- for(j=0;j<P_LEVELS;j++){
- for(k=0;k<EHMER_MAX;k++){
- float adj=center_boost+abs(EHMER_OFFSET-k)*center_decay_rate;
- if(adj<0. && center_boost>0)adj=0.;
- if(adj>0. && center_boost<0)adj=0.;
- workc[i][j][k]+=adj;
- }
- }
-
- /* normalize curves so the driving amplitude is 0dB */
- /* make temp curves with the ATH overlayed */
- for(j=0;j<P_LEVELS;j++){
- attenuate_curve(workc[i][j],curveatt_dB[i]+100.-(j<2?2:j)*10.-P_LEVEL_0);
- memcpy(athc[j],ath,EHMER_MAX*sizeof(**athc));
- attenuate_curve(athc[j],+100.-j*10.f-P_LEVEL_0);
- max_curve(athc[j],workc[i][j]);
- }
-
- /* Now limit the louder curves.
-
- the idea is this: We don't know what the playback attenuation
- will be; 0dB SL moves every time the user twiddles the volume
- knob. So that means we have to use a single 'most pessimal' curve
- for all masking amplitudes, right? Wrong. The *loudest* sound
- can be in (we assume) a range of ...+100dB] SL. However, sounds
- 20dB down will be in a range ...+80], 40dB down is from ...+60],
- etc... */
-
- for(j=1;j<P_LEVELS;j++){
- min_curve(athc[j],athc[j-1]);
- min_curve(workc[i][j],athc[j]);
- }
- }
-
- for(i=0;i<P_BANDS;i++){
- int hi_curve,lo_curve,bin;
- ret[i]=_ogg_malloc(sizeof(**ret)*P_LEVELS);
-
- /* low frequency curves are measured with greater resolution than
- the MDCT/FFT will actually give us; we want the curve applied
- to the tone data to be pessimistic and thus apply the minimum
- masking possible for a given bin. That means that a single bin
- could span more than one octave and that the curve will be a
- composite of multiple octaves. It also may mean that a single
- bin may span > an eighth of an octave and that the eighth
- octave values may also be composited. */
-
- /* which octave curves will we be compositing? */
- bin=floor(fromOC(i*.5)/binHz);
- lo_curve= ceil(toOC(bin*binHz+1)*2);
- hi_curve= floor(toOC((bin+1)*binHz)*2);
- if(lo_curve>i)lo_curve=i;
- if(lo_curve<0)lo_curve=0;
- if(hi_curve>=P_BANDS)hi_curve=P_BANDS-1;
-
- for(m=0;m<P_LEVELS;m++){
- ret[i][m]=_ogg_malloc(sizeof(***ret)*(EHMER_MAX+2));
-
- for(j=0;j<n;j++)brute_buffer[j]=999.;
-
- /* render the curve into bins, then pull values back into curve.
- The point is that any inherent subsampling aliasing results in
- a safe minimum */
- for(k=lo_curve;k<=hi_curve;k++){
- int l=0;
-
- for(j=0;j<EHMER_MAX;j++){
- int lo_bin= fromOC(j*.125+k*.5-2.0625)/binHz;
- int hi_bin= fromOC(j*.125+k*.5-1.9375)/binHz+1;
-
- if(lo_bin<0)lo_bin=0;
- if(lo_bin>n)lo_bin=n;
- if(lo_bin<l)l=lo_bin;
- if(hi_bin<0)hi_bin=0;
- if(hi_bin>n)hi_bin=n;
-
- for(;l<hi_bin && l<n;l++)
- if(brute_buffer[l]>workc[k][m][j])
- brute_buffer[l]=workc[k][m][j];
- }
-
- for(;l<n;l++)
- if(brute_buffer[l]>workc[k][m][EHMER_MAX-1])
- brute_buffer[l]=workc[k][m][EHMER_MAX-1];
-
- }
-
- /* be equally paranoid about being valid up to next half ocatve */
- if(i+1<P_BANDS){
- int l=0;
- k=i+1;
- for(j=0;j<EHMER_MAX;j++){
- int lo_bin= fromOC(j*.125+i*.5-2.0625)/binHz;
- int hi_bin= fromOC(j*.125+i*.5-1.9375)/binHz+1;
-
- if(lo_bin<0)lo_bin=0;
- if(lo_bin>n)lo_bin=n;
- if(lo_bin<l)l=lo_bin;
- if(hi_bin<0)hi_bin=0;
- if(hi_bin>n)hi_bin=n;
-
- for(;l<hi_bin && l<n;l++)
- if(brute_buffer[l]>workc[k][m][j])
- brute_buffer[l]=workc[k][m][j];
- }
-
- for(;l<n;l++)
- if(brute_buffer[l]>workc[k][m][EHMER_MAX-1])
- brute_buffer[l]=workc[k][m][EHMER_MAX-1];
-
- }
-
-
- for(j=0;j<EHMER_MAX;j++){
- int bin=fromOC(j*.125+i*.5-2.)/binHz;
- if(bin<0){
- ret[i][m][j+2]=-999.;
- }else{
- if(bin>=n){
- ret[i][m][j+2]=-999.;
- }else{
- ret[i][m][j+2]=brute_buffer[bin];
- }
- }
- }
-
- /* add fenceposts */
- for(j=0;j<EHMER_OFFSET;j++)
- if(ret[i][m][j+2]>-200.f)break;
- ret[i][m][0]=j;
-
- for(j=EHMER_MAX-1;j>EHMER_OFFSET+1;j--)
- if(ret[i][m][j+2]>-200.f)
- break;
- ret[i][m][1]=j;
-
- }
- }
-
- return(ret);
-}
-
-void _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi,
- vorbis_info_psy_global *gi,int n,long rate){
- long i,j,lo=-99,hi=1;
- long maxoc;
- memset(p,0,sizeof(*p));
-
- p->eighth_octave_lines=gi->eighth_octave_lines;
- p->shiftoc=rint(log(gi->eighth_octave_lines*8.f)/log(2.f))-1;
-
- p->firstoc=toOC(.25f*rate*.5/n)*(1<<(p->shiftoc+1))-gi->eighth_octave_lines;
- maxoc=toOC((n+.25f)*rate*.5/n)*(1<<(p->shiftoc+1))+.5f;
- p->total_octave_lines=maxoc-p->firstoc+1;
- p->ath=_ogg_malloc(n*sizeof(*p->ath));
-
- p->octave=_ogg_malloc(n*sizeof(*p->octave));
- p->bark=_ogg_malloc(n*sizeof(*p->bark));
- p->vi=vi;
- p->n=n;
- p->rate=rate;
-
- /* AoTuV HF weighting */
- p->m_val = 1.;
- if(rate < 26000) p->m_val = 0;
- else if(rate < 38000) p->m_val = .94; /* 32kHz */
- else if(rate > 46000) p->m_val = 1.275; /* 48kHz */
-
- /* set up the lookups for a given blocksize and sample rate */
-
- for(i=0,j=0;i<MAX_ATH-1;i++){
- int endpos=rint(fromOC((i+1)*.125-2.)*2*n/rate);
- float base=ATH[i];
- if(j<endpos){
- float delta=(ATH[i+1]-base)/(endpos-j);
- for(;j<endpos && j<n;j++){
- p->ath[j]=base+100.;
- base+=delta;
- }
- }
- }
-
- for(;j<n;j++){
- p->ath[j]=p->ath[j-1];
- }
-
- for(i=0;i<n;i++){
- float bark=toBARK(rate/(2*n)*i);
-
- for(;lo+vi->noisewindowlomin<i &&
- toBARK(rate/(2*n)*lo)<(bark-vi->noisewindowlo);lo++);
-
- for(;hi<=n && (hi<i+vi->noisewindowhimin ||
- toBARK(rate/(2*n)*hi)<(bark+vi->noisewindowhi));hi++);
-
- p->bark[i]=((lo-1)<<16)+(hi-1);
-
- }
-
- for(i=0;i<n;i++)
- p->octave[i]=toOC((i+.25f)*.5*rate/n)*(1<<(p->shiftoc+1))+.5f;
-
- p->tonecurves=setup_tone_curves(vi->toneatt,rate*.5/n,n,
- vi->tone_centerboost,vi->tone_decay);
-
- /* set up rolling noise median */
- p->noiseoffset=_ogg_malloc(P_NOISECURVES*sizeof(*p->noiseoffset));
- for(i=0;i<P_NOISECURVES;i++)
- p->noiseoffset[i]=_ogg_malloc(n*sizeof(**p->noiseoffset));
-
- for(i=0;i<n;i++){
- float halfoc=toOC((i+.5)*rate/(2.*n))*2.;
- int inthalfoc;
- float del;
-
- if(halfoc<0)halfoc=0;
- if(halfoc>=P_BANDS-1)halfoc=P_BANDS-1;
- inthalfoc=(int)halfoc;
- del=halfoc-inthalfoc;
-
- for(j=0;j<P_NOISECURVES;j++)
- p->noiseoffset[j][i]=
- p->vi->noiseoff[j][inthalfoc]*(1.-del) +
- p->vi->noiseoff[j][inthalfoc+1]*del;
-
- }
-#if 0
- {
- static int ls=0;
- _analysis_output_always("noiseoff0",ls,p->noiseoffset[0],n,1,0,0);
- _analysis_output_always("noiseoff1",ls,p->noiseoffset[1],n,1,0,0);
- _analysis_output_always("noiseoff2",ls++,p->noiseoffset[2],n,1,0,0);
- }
-#endif
-}
-
-void _vp_psy_clear(vorbis_look_psy *p){
- int i,j;
- if(p){
- if(p->ath)_ogg_free(p->ath);
- if(p->octave)_ogg_free(p->octave);
- if(p->bark)_ogg_free(p->bark);
- if(p->tonecurves){
- for(i=0;i<P_BANDS;i++){
- for(j=0;j<P_LEVELS;j++){
- _ogg_free(p->tonecurves[i][j]);
- }
- _ogg_free(p->tonecurves[i]);
- }
- _ogg_free(p->tonecurves);
- }
- if(p->noiseoffset){
- for(i=0;i<P_NOISECURVES;i++){
- _ogg_free(p->noiseoffset[i]);
- }
- _ogg_free(p->noiseoffset);
- }
- memset(p,0,sizeof(*p));
- }
-}
-
-/* octave/(8*eighth_octave_lines) x scale and dB y scale */
-static void seed_curve(float *seed,
- const float **curves,
- float amp,
- int oc, int n,
- int linesper,float dBoffset){
- int i,post1;
- int seedptr;
- const float *posts,*curve;
-
- int choice=(int)((amp+dBoffset-P_LEVEL_0)*.1f);
- choice=max(choice,0);
- choice=min(choice,P_LEVELS-1);
- posts=curves[choice];
- curve=posts+2;
- post1=(int)posts[1];
- seedptr=oc+(posts[0]-EHMER_OFFSET)*linesper-(linesper>>1);
-
- for(i=posts[0];i<post1;i++){
- if(seedptr>0){
- float lin=amp+curve[i];
- if(seed[seedptr]<lin)seed[seedptr]=lin;
- }
- seedptr+=linesper;
- if(seedptr>=n)break;
- }
-}
-
-static void seed_loop(vorbis_look_psy *p,
- const float ***curves,
- const float *f,
- const float *flr,
- float *seed,
- float specmax){
- vorbis_info_psy *vi=p->vi;
- long n=p->n,i;
- float dBoffset=vi->max_curve_dB-specmax;
-
- /* prime the working vector with peak values */
-
- for(i=0;i<n;i++){
- float max=f[i];
- long oc=p->octave[i];
- while(i+1<n && p->octave[i+1]==oc){
- i++;
- if(f[i]>max)max=f[i];
- }
-
- if(max+6.f>flr[i]){
- oc=oc>>p->shiftoc;
-
- if(oc>=P_BANDS)oc=P_BANDS-1;
- if(oc<0)oc=0;
-
- seed_curve(seed,
- curves[oc],
- max,
- p->octave[i]-p->firstoc,
- p->total_octave_lines,
- p->eighth_octave_lines,
- dBoffset);
- }
- }
-}
-
-static void seed_chase(float *seeds, int linesper, long n){
- long *posstack=alloca(n*sizeof(*posstack));
- float *ampstack=alloca(n*sizeof(*ampstack));
- long stack=0;
- long pos=0;
- long i;
-
- for(i=0;i<n;i++){
- if(stack<2){
- posstack[stack]=i;
- ampstack[stack++]=seeds[i];
- }else{
- while(1){
- if(seeds[i]<ampstack[stack-1]){
- posstack[stack]=i;
- ampstack[stack++]=seeds[i];
- break;
- }else{
- if(i<posstack[stack-1]+linesper){
- if(stack>1 && ampstack[stack-1]<=ampstack[stack-2] &&
- i<posstack[stack-2]+linesper){
- /* we completely overlap, making stack-1 irrelevant. pop it */
- stack--;
- continue;
- }
- }
- posstack[stack]=i;
- ampstack[stack++]=seeds[i];
- break;
-
- }
- }
- }
- }
-
- /* the stack now contains only the positions that are relevant. Scan
- 'em straight through */
-
- for(i=0;i<stack;i++){
- long endpos;
- if(i<stack-1 && ampstack[i+1]>ampstack[i]){
- endpos=posstack[i+1];
- }else{
- endpos=posstack[i]+linesper+1; /* +1 is important, else bin 0 is
- discarded in short frames */
- }
- if(endpos>n)endpos=n;
- for(;pos<endpos;pos++)
- seeds[pos]=ampstack[i];
- }
-
- /* there. Linear time. I now remember this was on a problem set I
- had in Grad Skool... I didn't solve it at the time ;-) */
-
-}
-
-/* bleaugh, this is more complicated than it needs to be */
-#include<stdio.h>
-static void max_seeds(vorbis_look_psy *p,
- float *seed,
- float *flr){
- long n=p->total_octave_lines;
- int linesper=p->eighth_octave_lines;
- long linpos=0;
- long pos;
-
- seed_chase(seed,linesper,n); /* for masking */
-
- pos=p->octave[0]-p->firstoc-(linesper>>1);
-
- while(linpos+1<p->n){
- float minV=seed[pos];
- long end=((p->octave[linpos]+p->octave[linpos+1])>>1)-p->firstoc;
- if(minV>p->vi->tone_abs_limit)minV=p->vi->tone_abs_limit;
- while(pos+1<=end){
- pos++;
- if((seed[pos]>NEGINF && seed[pos]<minV) || minV==NEGINF)
- minV=seed[pos];
- }
-
- end=pos+p->firstoc;
- for(;linpos<p->n && p->octave[linpos]<=end;linpos++)
- if(flr[linpos]<minV)flr[linpos]=minV;
- }
-
- {
- float minV=seed[p->total_octave_lines-1];
- for(;linpos<p->n;linpos++)
- if(flr[linpos]<minV)flr[linpos]=minV;
- }
-
-}
-
-static void bark_noise_hybridmp(int n,const long *b,
- const float *f,
- float *noise,
- const float offset,
- const int fixed){
-
- float *N=alloca(n*sizeof(*N));
- float *X=alloca(n*sizeof(*N));
- float *XX=alloca(n*sizeof(*N));
- float *Y=alloca(n*sizeof(*N));
- float *XY=alloca(n*sizeof(*N));
-
- float tN, tX, tXX, tY, tXY;
- int i;
-
- int lo, hi;
- float R=0.f;
- float A=0.f;
- float B=0.f;
- float D=1.f;
- float w, x, y;
-
- tN = tX = tXX = tY = tXY = 0.f;
-
- y = f[0] + offset;
- if (y < 1.f) y = 1.f;
-
- w = y * y * .5;
-
- tN += w;
- tX += w;
- tY += w * y;
-
- N[0] = tN;
- X[0] = tX;
- XX[0] = tXX;
- Y[0] = tY;
- XY[0] = tXY;
-
- for (i = 1, x = 1.f; i < n; i++, x += 1.f) {
-
- y = f[i] + offset;
- if (y < 1.f) y = 1.f;
-
- w = y * y;
-
- tN += w;
- tX += w * x;
- tXX += w * x * x;
- tY += w * y;
- tXY += w * x * y;
-
- N[i] = tN;
- X[i] = tX;
- XX[i] = tXX;
- Y[i] = tY;
- XY[i] = tXY;
- }
-
- for (i = 0, x = 0.f;; i++, x += 1.f) {
-
- lo = b[i] >> 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;
- }
-}
-
-void _vp_noisemask(vorbis_look_psy *p,
- float *logmdct,
- float *logmask){
-
- int i,n=p->n;
- float *work=alloca(n*sizeof(*work));
-
- bark_noise_hybridmp(n,p->bark,logmdct,logmask,
- 140.,-1);
-
- for(i=0;i<n;i++)work[i]=logmdct[i]-logmask[i];
-
- bark_noise_hybridmp(n,p->bark,work,logmask,0.,
- p->vi->noisewindowfixed);
-
- for(i=0;i<n;i++)work[i]=logmdct[i]-work[i];
-
-#if 0
- {
- static int seq=0;
-
- float work2[n];
- for(i=0;i<n;i++){
- work2[i]=logmask[i]+work[i];
- }
-
- if(seq&1)
- _analysis_output("median2R",seq/2,work,n,1,0,0);
- else
- _analysis_output("median2L",seq/2,work,n,1,0,0);
-
- if(seq&1)
- _analysis_output("envelope2R",seq/2,work2,n,1,0,0);
- else
- _analysis_output("envelope2L",seq/2,work2,n,1,0,0);
- seq++;
- }
-#endif
-
- for(i=0;i<n;i++){
- int dB=logmask[i]+.5;
- if(dB>=NOISE_COMPAND_LEVELS)dB=NOISE_COMPAND_LEVELS-1;
- if(dB<0)dB=0;
- logmask[i]= work[i]+p->vi->noisecompand[dB];
- }
-
-}
-
-void _vp_tonemask(vorbis_look_psy *p,
- float *logfft,
- float *logmask,
- float global_specmax,
- float local_specmax){
-
- int i,n=p->n;
-
- float *seed=alloca(sizeof(*seed)*p->total_octave_lines);
- float att=local_specmax+p->vi->ath_adjatt;
- for(i=0;i<p->total_octave_lines;i++)seed[i]=NEGINF;
-
- /* set the ATH (floating below localmax, not global max by a
- specified att) */
- if(att<p->vi->ath_maxatt)att=p->vi->ath_maxatt;
-
- for(i=0;i<n;i++)
- logmask[i]=p->ath[i]+att;
-
- /* tone masking */
- seed_loop(p,(const float ***)p->tonecurves,logfft,logmask,seed,global_specmax);
- max_seeds(p,seed,logmask);
-
-}
-
-void _vp_offset_and_mix(vorbis_look_psy *p,
- float *noise,
- float *tone,
- int offset_select,
- float *logmask,
- float *mdct,
- float *logmdct){
- int i,n=p->n;
- float de, coeffi, cx;/* AoTuV */
- float toneatt=p->vi->tone_masteratt[offset_select];
-
- cx = p->m_val;
-
- for(i=0;i<n;i++){
- float val= noise[i]+p->noiseoffset[offset_select][i];
- if(val>p->vi->noisemaxsupp)val=p->vi->noisemaxsupp;
- logmask[i]=max(val,tone[i]+toneatt);
-
-
- /* AoTuV */
- /** @ M1 **
- The following codes improve a noise problem.
- A fundamental idea uses the value of masking and carries out
- the relative compensation of the MDCT.
- However, this code is not perfect and all noise problems cannot be solved.
- by Aoyumi @ 2004/04/18
- */
-
- if(offset_select == 1) {
- coeffi = -17.2; /* coeffi is a -17.2dB threshold */
- val = val - logmdct[i]; /* val == mdct line value relative to floor in dB */
-
- if(val > coeffi){
- /* mdct value is > -17.2 dB below floor */
-
- de = 1.0-((val-coeffi)*0.005*cx);
- /* pro-rated attenuation:
- -0.00 dB boost if mdct value is -17.2dB (relative to floor)
- -0.77 dB boost if mdct value is 0dB (relative to floor)
- -1.64 dB boost if mdct value is +17.2dB (relative to floor)
- etc... */
-
- if(de < 0) de = 0.0001;
- }else
- /* mdct value is <= -17.2 dB below floor */
-
- de = 1.0-((val-coeffi)*0.0003*cx);
- /* pro-rated attenuation:
- +0.00 dB atten if mdct value is -17.2dB (relative to floor)
- +0.45 dB atten if mdct value is -34.4dB (relative to floor)
- etc... */
-
- mdct[i] *= de;
-
- }
- }
-}
-
-float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd){
- vorbis_info *vi=vd->vi;
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy_global *gi=&ci->psy_g_param;
-
- int n=ci->blocksizes[vd->W]/2;
- float secs=(float)n/vi->rate;
-
- amp+=secs*gi->ampmax_att_per_sec;
- if(amp<-9999)amp=-9999;
- return(amp);
-}
-
-static float FLOOR1_fromdB_LOOKUP[256]={
- 1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F,
- 1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F,
- 1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F,
- 2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F,
- 2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F,
- 3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F,
- 4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F,
- 6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F,
- 7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F,
- 1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F,
- 1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F,
- 1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F,
- 2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F,
- 2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F,
- 3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F,
- 4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F,
- 5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F,
- 7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F,
- 9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F,
- 1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F,
- 1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F,
- 2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F,
- 2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F,
- 3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F,
- 4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F,
- 5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F,
- 7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F,
- 9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F,
- 0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F,
- 0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F,
- 0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F,
- 0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F,
- 0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F,
- 0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F,
- 0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F,
- 0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F,
- 0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F,
- 0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F,
- 0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F,
- 0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F,
- 0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F,
- 0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F,
- 0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F,
- 0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F,
- 0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F,
- 0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F,
- 0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F,
- 0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F,
- 0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F,
- 0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F,
- 0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F,
- 0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F,
- 0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F,
- 0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F,
- 0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F,
- 0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F,
- 0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F,
- 0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F,
- 0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F,
- 0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F,
- 0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F,
- 0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F,
- 0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F,
- 0.82788260F, 0.88168307F, 0.9389798F, 1.F,
-};
-
-/* this is for per-channel noise normalization */
-static int apsort(const void *a, const void *b){
- float f1=**(float**)a;
- float f2=**(float**)b;
- return (f1<f2)-(f1>f2);
-}
-
-static void flag_lossless(int limit, float prepoint, float postpoint, float *mdct,
- float *floor, int *flag, int i, int jn){
- int j;
- for(j=0;j<jn;j++){
- float point = j>=limit-i ? postpoint : prepoint;
- float r = fabs(mdct[j])/floor[j];
- if(r<point)
- flag[j]=0;
- else
- flag[j]=1;
- }
-}
-
-/* Overload/Side effect: On input, the *q vector holds either the
- quantized energy (for elements with the flag set) or the absolute
- values of the *r vector (for elements with flag unset). On output,
- *q holds the quantized energy for all elements */
-static float noise_normalize(vorbis_look_psy *p, int limit, float *r, float *q, float *f, int *flags, float acc, int i, int n, int *out){
-
- vorbis_info_psy *vi=p->vi;
- float **sort = alloca(n*sizeof(*sort));
- int j,count=0;
- int start = (vi->normal_p ? vi->normal_start-i : n);
- if(start>n)start=n;
-
- /* force classic behavior where only energy in the current band is considered */
- acc=0.f;
-
- /* still responsible for populating *out where noise norm not in
- effect. There's no need to [re]populate *q in these areas */
- for(j=0;j<start;j++){
- if(!flags || !flags[j]){ /* lossless coupling already quantized.
- Don't touch; requantizing based on
- energy would be incorrect. */
- float ve = q[j]/f[j];
- if(r[j]<0)
- out[j] = -rint(sqrt(ve));
- else
- out[j] = rint(sqrt(ve));
- }
- }
-
- /* sort magnitudes for noise norm portion of partition */
- for(;j<n;j++){
- if(!flags || !flags[j]){ /* can't noise norm elements that have
- already been loslessly coupled; we can
- only account for their energy error */
- float ve = q[j]/f[j];
- /* Despite all the new, more capable coupling code, for now we
- implement noise norm as it has been up to this point. Only
- consider promotions to unit magnitude from 0. In addition
- the only energy error counted is quantizations to zero. */
- /* also-- the original point code only applied noise norm at > pointlimit */
- if(ve<.25f && (!flags || j>=limit-i)){
- acc += ve;
- sort[count++]=q+j; /* q is fabs(r) for unflagged element */
- }else{
- /* For now: no acc adjustment for nonzero quantization. populate *out and q as this value is final. */
- if(r[j]<0)
- out[j] = -rint(sqrt(ve));
- else
- out[j] = rint(sqrt(ve));
- q[j] = out[j]*out[j]*f[j];
- }
- }/* else{
- again, no energy adjustment for error in nonzero quant-- for now
- }*/
- }
-
- if(count){
- /* noise norm to do */
- qsort(sort,count,sizeof(*sort),apsort);
- for(j=0;j<count;j++){
- int k=sort[j]-q;
- if(acc>=vi->normal_thresh){
- out[k]=unitnorm(r[k]);
- acc-=1.f;
- q[k]=f[k];
- }else{
- out[k]=0;
- q[k]=0.f;
- }
- }
- }
-
- return acc;
-}
-
-/* Noise normalization, quantization and coupling are not wholly
- seperable processes in depth>1 coupling. */
-void _vp_couple_quantize_normalize(int blobno,
- vorbis_info_psy_global *g,
- vorbis_look_psy *p,
- vorbis_info_mapping0 *vi,
- float **mdct,
- int **iwork,
- int *nonzero,
- int sliding_lowpass,
- int ch){
-
- int i;
- int n = p->n;
- int partition=(p->vi->normal_p ? p->vi->normal_partition : 16);
- int limit = g->coupling_pointlimit[p->vi->blockflag][blobno];
- float prepoint=stereo_threshholds[g->coupling_prepointamp[blobno]];
- float postpoint=stereo_threshholds[g->coupling_postpointamp[blobno]];
-#if 0
- float de=0.1*p->m_val; /* a blend of the AoTuV M2 and M3 code here and below */
-#endif
-
- /* mdct is our raw mdct output, floor not removed. */
- /* inout passes in the ifloor, passes back quantized result */
-
- /* unquantized energy (negative indicates amplitude has negative sign) */
- float **raw = alloca(ch*sizeof(*raw));
-
- /* dual pupose; quantized energy (if flag set), othersize fabs(raw) */
- float **quant = alloca(ch*sizeof(*quant));
-
- /* floor energy */
- float **floor = alloca(ch*sizeof(*floor));
-
- /* flags indicating raw/quantized status of elements in raw vector */
- int **flag = alloca(ch*sizeof(*flag));
-
- /* non-zero flag working vector */
- int *nz = alloca(ch*sizeof(*nz));
-
- /* energy surplus/defecit tracking */
- float *acc = alloca((ch+vi->coupling_steps)*sizeof(*acc));
-
- /* The threshold of a stereo is changed with the size of n */
- if(n > 1000)
- postpoint=stereo_threshholds_limited[g->coupling_postpointamp[blobno]];
-
- raw[0] = alloca(ch*partition*sizeof(**raw));
- quant[0] = alloca(ch*partition*sizeof(**quant));
- floor[0] = alloca(ch*partition*sizeof(**floor));
- flag[0] = alloca(ch*partition*sizeof(**flag));
-
- for(i=1;i<ch;i++){
- raw[i] = &raw[0][partition*i];
- quant[i] = &quant[0][partition*i];
- floor[i] = &floor[0][partition*i];
- flag[i] = &flag[0][partition*i];
- }
- for(i=0;i<ch+vi->coupling_steps;i++)
- acc[i]=0.f;
-
- for(i=0;i<n;i+=partition){
- int k,j,jn = partition > n-i ? n-i : partition;
- int step,track = 0;
-
- memcpy(nz,nonzero,sizeof(*nz)*ch);
-
- /* prefill */
- memset(flag[0],0,ch*partition*sizeof(**flag));
- for(k=0;k<ch;k++){
- int *iout = &iwork[k][i];
- if(nz[k]){
-
- for(j=0;j<jn;j++)
- floor[k][j] = FLOOR1_fromdB_LOOKUP[iout[j]];
-
- flag_lossless(limit,prepoint,postpoint,&mdct[k][i],floor[k],flag[k],i,jn);
-
- for(j=0;j<jn;j++){
- quant[k][j] = raw[k][j] = mdct[k][i+j]*mdct[k][i+j];
- if(mdct[k][i+j]<0.f) raw[k][j]*=-1.f;
- floor[k][j]*=floor[k][j];
- }
-
- acc[track]=noise_normalize(p,limit,raw[k],quant[k],floor[k],NULL,acc[track],i,jn,iout);
-
- }else{
- for(j=0;j<jn;j++){
- floor[k][j] = 1e-10f;
- raw[k][j] = 0.f;
- quant[k][j] = 0.f;
- flag[k][j] = 0;
- iout[j]=0;
- }
- acc[track]=0.f;
- }
- track++;
- }
-
- /* coupling */
- for(step=0;step<vi->coupling_steps;step++){
- int Mi = vi->coupling_mag[step];
- int Ai = vi->coupling_ang[step];
- int *iM = &iwork[Mi][i];
- int *iA = &iwork[Ai][i];
- float *reM = raw[Mi];
- float *reA = raw[Ai];
- float *qeM = quant[Mi];
- float *qeA = quant[Ai];
- float *floorM = floor[Mi];
- float *floorA = floor[Ai];
- int *fM = flag[Mi];
- int *fA = flag[Ai];
-
- if(nz[Mi] || nz[Ai]){
- nz[Mi] = nz[Ai] = 1;
-
- for(j=0;j<jn;j++){
-
- if(j<sliding_lowpass-i){
- if(fM[j] || fA[j]){
- /* lossless coupling */
-
- reM[j] = fabs(reM[j])+fabs(reA[j]);
- qeM[j] = qeM[j]+qeA[j];
- fM[j]=fA[j]=1;
-
- /* couple iM/iA */
- {
- int A = iM[j];
- int B = iA[j];
-
- if(abs(A)>abs(B)){
- iA[j]=(A>0?A-B:B-A);
- }else{
- iA[j]=(B>0?A-B:B-A);
- iM[j]=B;
- }
-
- /* collapse two equivalent tuples to one */
- if(iA[j]>=abs(iM[j])*2){
- iA[j]= -iA[j];
- iM[j]= -iM[j];
- }
-
- }
-
- }else{
- /* lossy (point) coupling */
- if(j<limit-i){
- /* dipole */
- reM[j] += reA[j];
- qeM[j] = fabs(reM[j]);
- }else{
-#if 0
- /* AoTuV */
- /** @ M2 **
- The boost problem by the combination of noise normalization and point stereo is eased.
- However, this is a temporary patch.
- by Aoyumi @ 2004/04/18
- */
- float derate = (1.0 - de*((float)(j-limit+i) / (float)(n-limit)));
- /* elliptical */
- if(reM[j]+reA[j]<0){
- reM[j] = - (qeM[j] = (fabs(reM[j])+fabs(reA[j]))*derate*derate);
- }else{
- reM[j] = (qeM[j] = (fabs(reM[j])+fabs(reA[j]))*derate*derate);
- }
-#else
- /* elliptical */
- if(reM[j]+reA[j]<0){
- reM[j] = - (qeM[j] = fabs(reM[j])+fabs(reA[j]));
- }else{
- reM[j] = (qeM[j] = fabs(reM[j])+fabs(reA[j]));
- }
-#endif
-
- }
- reA[j]=qeA[j]=0.f;
- fA[j]=1;
- iA[j]=0;
- }
- }
- floorM[j]=floorA[j]=floorM[j]+floorA[j];
- }
- /* normalize the resulting mag vector */
- acc[track]=noise_normalize(p,limit,raw[Mi],quant[Mi],floor[Mi],flag[Mi],acc[track],i,jn,iM);
- track++;
- }
- }
- }
-
- for(i=0;i<vi->coupling_steps;i++){
- /* make sure coupling a zero and a nonzero channel results in two
- nonzero channels. */
- if(nonzero[vi->coupling_mag[i]] ||
- nonzero[vi->coupling_ang[i]]){
- nonzero[vi->coupling_mag[i]]=1;
- nonzero[vi->coupling_ang[i]]=1;
- }
- }
-}
diff --git a/drivers/vorbis/psy.h b/drivers/vorbis/psy.h
deleted file mode 100644
index c1ea824401..0000000000
--- a/drivers/vorbis/psy.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: random psychoacoustics (not including preecho)
- last mod: $Id: psy.h 16946 2010-03-03 16:12:40Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_PSY_H_
-#define _V_PSY_H_
-#include "smallft.h"
-
-#include "backends.h"
-#include "envelope.h"
-
-#ifndef EHMER_MAX
-#define EHMER_MAX 56
-#endif
-
-/* psychoacoustic setup ********************************************/
-#define P_BANDS 17 /* 62Hz to 16kHz */
-#define P_LEVELS 8 /* 30dB to 100dB */
-#define P_LEVEL_0 30. /* 30 dB */
-#define P_NOISECURVES 3
-
-#define NOISE_COMPAND_LEVELS 40
-typedef struct vorbis_info_psy{
- int blockflag;
-
- float ath_adjatt;
- float ath_maxatt;
-
- float tone_masteratt[P_NOISECURVES];
- float tone_centerboost;
- float tone_decay;
- float tone_abs_limit;
- float toneatt[P_BANDS];
-
- int noisemaskp;
- float noisemaxsupp;
- float noisewindowlo;
- float noisewindowhi;
- int noisewindowlomin;
- int noisewindowhimin;
- int noisewindowfixed;
- float noiseoff[P_NOISECURVES][P_BANDS];
- float noisecompand[NOISE_COMPAND_LEVELS];
-
- float max_curve_dB;
-
- int normal_p;
- int normal_start;
- int normal_partition;
- double normal_thresh;
-} vorbis_info_psy;
-
-typedef struct{
- int eighth_octave_lines;
-
- /* for block long/short tuning; encode only */
- float preecho_thresh[VE_BANDS];
- float postecho_thresh[VE_BANDS];
- float stretch_penalty;
- float preecho_minenergy;
-
- float ampmax_att_per_sec;
-
- /* channel coupling config */
- int coupling_pkHz[PACKETBLOBS];
- int coupling_pointlimit[2][PACKETBLOBS];
- int coupling_prepointamp[PACKETBLOBS];
- int coupling_postpointamp[PACKETBLOBS];
- int sliding_lowpass[2][PACKETBLOBS];
-
-} vorbis_info_psy_global;
-
-typedef struct {
- float ampmax;
- int channels;
-
- vorbis_info_psy_global *gi;
- int coupling_pointlimit[2][P_NOISECURVES];
-} vorbis_look_psy_global;
-
-
-typedef struct {
- int n;
- struct vorbis_info_psy *vi;
-
- float ***tonecurves;
- float **noiseoffset;
-
- float *ath;
- long *octave; /* in n.ocshift format */
- long *bark;
-
- long firstoc;
- long shiftoc;
- int eighth_octave_lines; /* power of two, please */
- int total_octave_lines;
- long rate; /* cache it */
-
- float m_val; /* Masking compensation value */
-
-} vorbis_look_psy;
-
-extern void _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi,
- vorbis_info_psy_global *gi,int n,long rate);
-extern void _vp_psy_clear(vorbis_look_psy *p);
-extern void *_vi_psy_dup(void *source);
-
-extern void _vi_psy_free(vorbis_info_psy *i);
-extern vorbis_info_psy *_vi_psy_copy(vorbis_info_psy *i);
-
-extern void _vp_noisemask(vorbis_look_psy *p,
- float *logmdct,
- float *logmask);
-
-extern void _vp_tonemask(vorbis_look_psy *p,
- float *logfft,
- float *logmask,
- float global_specmax,
- float local_specmax);
-
-extern void _vp_offset_and_mix(vorbis_look_psy *p,
- float *noise,
- float *tone,
- int offset_select,
- float *logmask,
- float *mdct,
- float *logmdct);
-
-extern float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd);
-
-extern void _vp_couple_quantize_normalize(int blobno,
- vorbis_info_psy_global *g,
- vorbis_look_psy *p,
- vorbis_info_mapping0 *vi,
- float **mdct,
- int **iwork,
- int *nonzero,
- int sliding_lowpass,
- int ch);
-
-#endif
diff --git a/drivers/vorbis/psytune.c b/drivers/vorbis/psytune.c
deleted file mode 100644
index 64c13171f7..0000000000
--- a/drivers/vorbis/psytune.c
+++ /dev/null
@@ -1,524 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: simple utility that runs audio through the psychoacoustics
- without encoding
- last mod: $Id: psytune.c 16037 2009-05-26 21:10:58Z xiphmont $
-
- ********************************************************************/
-
-/* NB: this is dead code, retained purely for doc and reference value
- don't try to compile it */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "os.h"
-#include "misc.h"
-#include "psy.h"
-#include "mdct.h"
-#include "smallft.h"
-#include "window.h"
-#include "scales.h"
-#include "lpc.h"
-#include "lsp.h"
-#include "masking.h"
-#include "registry.h"
-
-static vorbis_info_psy_global _psy_set0G={
- 0, /* decaydBpms */
- 8, /* lines per eighth octave */
-
- /* thresh sample period, preecho clamp trigger threshhold, range, minenergy */
- 256, {26.f,26.f,26.f,30.f}, {-90.f,-90.f,-90.f,-90.f}, -90.f,
- -6.f,
-
- 0,
-
- 0.,
- 0.,
-};
-
-static vp_part _vp_part0[]={
- { 1,9e10f, 9e10f, 1.f,9999.f},
- { 9999, .75f, 9e10f, .5f,9999.f},
-/*{ 9999, 1.5f, 9e10f, .5f,9999.f},*/
- { 18,9e10f, 9e10f, .5f, 30.f},
- { 9999,9e10f, 9e10f, .5f, 30.f}
-};
-
-static vp_couple _vp_couple0[]={
- { 1, {9e10f,9e10f,0}, { 0.f, 0.f,0}, { 0.f, 0.f,0}, {0.f,0.f,0}},
- { 18, {9e10f,9e10f,0}, { 0.f, 0.f,0}, { 0.f, 0.f,0}, {0.f,0.f,0}},
- { 9999, {9e10f,9e10f,0}, { 0.f, 9e10f,0}, { 0.f,22.f,1}, {0.f,0.f,0}}
-};
-
-static vorbis_info_psy _psy_set0={
- ATH_Bark_dB_lineaggressive,
-
- -100.f,
- -140.f,
- 6.f, /* floor master att */
-
- /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 */
- /* x: 63 88 125 175 250 350 500 700 1k 1.4k 2k 2.8k 4k 5.6k 8k 11.5k 16k Hz */
- /* y: 0 10 20 30 40 50 60 70 80 90 100 dB */
- 1, /* tonemaskp */
- 0.f, /* tone master att */
- /* 0 10 20 30 40 50 60 70 80 90 100 */
- {
- {-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f}, /*63*/
- {-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f}, /*88*/
- {-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f,-999.f}, /*125*/
-
- {-30.f,-30.f,-35.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*175*/
- {-30.f,-30.f,-35.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*250*/
- {-30.f,-30.f,-35.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*350*/
- {-30.f,-30.f,-35.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*500*/
- {-30.f,-30.f,-35.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*700*/
- {-30.f,-30.f,-35.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*1000*/
- {-30.f,-30.f,-35.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*1400*/
- {-40.f,-40.f,-40.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*2000*/
- {-40.f,-40.f,-40.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*2800*/
- {-40.f,-40.f,-40.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*4000*/
-
- {-30.f,-35.f,-35.f,-40.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*5600*/
-
- {-30.f,-30.f,-33.f,-35.f,-40.f,-50.f,-60.f,-70.f,-80.f,-90.f,-100.f}, /*8000*/
- {-30.f,-30.f,-33.f,-35.f,-40.f,-45.f,-50.f,-60.f,-70.f,-85.f,-100.f}, /*11500*/
- {-24.f,-24.f,-26.f,-32.f,-32.f,-42.f,-50.f,-60.f,-70.f,-85.f,-100.f}, /*16000*/
-
- },
-
- 1,/* peakattp */
- {{-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*63*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*88*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*125*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*175*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*250*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*350*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*500*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*700*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*1000*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*1400*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*2000*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*2800*/
- {-14.f,-20.f,-20.f,-20.f,-26.f,-32.f,-40.f,-40.f,-40.f,-40.f,-40.f},/*4000*/
- {-10.f,-12.f,-14.f,-16.f,-16.f,-20.f,-24.f,-30.f,-32.f,-40.f,-40.f},/*5600*/
- {-10.f,-12.f,-14.f,-16.f,-16.f,-20.f,-24.f,-30.f,-32.f,-40.f,-40.f},/*8000*/
- {-10.f,-10.f,-10.f,-12.f,-14.f,-18.f,-22.f,-28.f,-32.f,-40.f,-40.f},/*11500*/
- {-10.f,-10.f,-10.f,-12.f,-14.f,-18.f,-22.f,-28.f,-32.f,-40.f,-40.f},/*16000*/
- },
-
- 1,/*noisemaskp */
- -10.f, /* suppress any noise curve over maxspec+n */
- .5f, /* low window */
- .5f, /* high window */
- 10,
- 10,
- 25,
- {.000f, 0.f, /*63*/
- .000f, 0.f, /*88*/
- .000f, 0.f, /*125*/
- .000f, 0.f, /*175*/
- .000f, 0.f, /*250*/
- .000f, 0.f, /*350*/
- .000f, 0.f, /*500*/
- .000f, 0.f, /*700*/
- .000f, 0.f, /*1000*/
- .300f, 0.f, /*1400*/
- .300f, 0.f, /*2000*/
- .300f, 0.f, /*2800*/
- .500f, 0.f, /*4000*/
- .700f, 0.f, /*5600*/
- .850f, 0.f, /*8000*/
- .900f, 0.f, /*11500*/
- .900f, 1.f, /*16000*/
- },
-
- 95.f, /* even decade + 5 is important; saves an rint() later in a
- tight loop) */
- -44.,
-
- 32,
- _vp_part0,_vp_couple0
-};
-
-static vorbis_info_floor1 _floor_set0={1,
- {0},
-
- {32},
- {0},
- {0},
- {{-1}},
-
- 2,
- {0,1024,
-
- 88,31,243,
-
- 14,54,143,460,
-
- 6,3,10, 22,18,26, 41,36,47,
- 69,61,78, 112,99,126, 185,162,211,
- 329,282,387, 672,553,825
- },
-
- 60,30,400,
- 20,8,1,18.,
- 20,600,
- 960};
-
-
-static vorbis_info_mapping0 mapping_info={1,{0,1},{0},{0},{0},0, 1, {0},{1}};
-static codec_setup_info codec_setup0={ {0,0},
- 1,1,1,1,1,0,1,
- {NULL},
- {0},{&mapping_info},
- {0},{NULL},
- {1},{&_floor_set0},
- {2},{NULL},
- {NULL},
- {&_psy_set0},
- &_psy_set0G};
-
-static int noisy=0;
-void analysis(char *base,int i,float *v,int n,int bark,int dB){
- if(noisy){
- int j;
- FILE *of;
- char buffer[80];
- sprintf(buffer,"%s_%d.m",base,i);
- of=fopen(buffer,"w");
-
- for(j=0;j<n;j++){
- if(dB && v[j]==0)
- fprintf(of,"\n\n");
- else{
- if(bark)
- fprintf(of,"%g ",toBARK(22050.f*j/n));
- else
- fprintf(of,"%g ",(float)j);
-
- if(dB){
- fprintf(of,"%g\n",todB(v+j));
- }else{
- fprintf(of,"%g\n",v[j]);
- }
- }
- }
- fclose(of);
- }
-}
-
-long frameno=0;
-
-/****************************************************************/
-
-int main(int argc,char *argv[]){
- int eos=0;
- float nonz=0.f;
- float acc=0.f;
- float tot=0.f;
- float ampmax=-9999,newmax;
- float local_ampmax[2];
-
- int framesize=2048;
- float ampmax_att_per_sec=-6.;
-
- float *pcm[2],*out[2],*window,*flr[2],*mask[2],*work[2];
- signed char *buffer,*buffer2;
- mdct_lookup m_look;
- drft_lookup f_look;
- vorbis_look_psy p_look;
- vorbis_look_psy_global *pg_look;
- vorbis_look_floor *floor_look;
- vorbis_info vi;
- long i,j,k;
-
- int ath=0;
- int decayp=0;
-
- argv++;
- while(*argv){
- if(*argv[0]=='-'){
- /* option */
- if(argv[0][1]=='v'){
- noisy=0;
- }
- }else
- if(*argv[0]=='+'){
- /* option */
- if(argv[0][1]=='v'){
- noisy=1;
- }
- }else
- framesize=atoi(argv[0]);
- argv++;
- }
-
- vi.channels=2;
- vi.codec_setup=&codec_setup0;
-
- pcm[0]=_ogg_malloc(framesize*sizeof(float));
- pcm[1]=_ogg_malloc(framesize*sizeof(float));
- out[0]=_ogg_calloc(framesize/2,sizeof(float));
- out[1]=_ogg_calloc(framesize/2,sizeof(float));
- work[0]=_ogg_calloc(framesize,sizeof(float));
- work[1]=_ogg_calloc(framesize,sizeof(float));
- flr[0]=_ogg_calloc(framesize/2,sizeof(float));
- flr[1]=_ogg_calloc(framesize/2,sizeof(float));
- buffer=_ogg_malloc(framesize*4);
- buffer2=buffer+framesize*2;
- window=_vorbis_window_create(0,framesize,framesize/2,framesize/2);
- mdct_init(&m_look,framesize);
- drft_init(&f_look,framesize);
- _vp_psy_init(&p_look,&_psy_set0,&_psy_set0G,framesize/2,44100);
- pg_look=_vp_global_look(&vi);
- floor_look=_floor_P[1]->look(NULL,NULL,&_floor_set0);
-
- /* we cheat on the WAV header; we just bypass 44 bytes and never
- verify that it matches 16bit/stereo/44.1kHz. */
-
- fread(buffer,1,44,stdin);
- fwrite(buffer,1,44,stdout);
- memset(buffer,0,framesize*2);
-
- analysis("window",0,window,framesize,0,0);
-
- fprintf(stderr,"Processing for frame size %d...\n",framesize);
-
- while(!eos){
- long bytes=fread(buffer2,1,framesize*2,stdin);
- if(bytes<framesize*2)
- memset(buffer2+bytes,0,framesize*2-bytes);
-
- if(bytes!=0){
- int nonzero[2];
-
- /* uninterleave samples */
- for(i=0;i<framesize;i++){
- pcm[0][i]=((buffer[i*4+1]<<8)|
- (0x00ff&(int)buffer[i*4]))/32768.f;
- pcm[1][i]=((buffer[i*4+3]<<8)|
- (0x00ff&(int)buffer[i*4+2]))/32768.f;
- }
-
- {
- float secs=framesize/44100.;
-
- ampmax+=secs*ampmax_att_per_sec;
- if(ampmax<-9999)ampmax=-9999;
- }
-
- for(i=0;i<2;i++){
- float scale=4.f/framesize;
- float *fft=work[i];
- float *mdct=pcm[i];
- float *logmdct=mdct+framesize/2;
-
- analysis("pre",frameno+i,pcm[i],framesize,0,0);
-
- /* fft and mdct transforms */
- for(j=0;j<framesize;j++)
- fft[j]=pcm[i][j]*=window[j];
-
- drft_forward(&f_look,fft);
-
- local_ampmax[i]=-9999.f;
- fft[0]*=scale;
- fft[0]=todB(fft);
- for(j=1;j<framesize-1;j+=2){
- float temp=scale*FAST_HYPOT(fft[j],fft[j+1]);
- temp=fft[(j+1)>>1]=todB(&temp);
- if(temp>local_ampmax[i])local_ampmax[i]=temp;
- }
- if(local_ampmax[i]>ampmax)ampmax=local_ampmax[i];
-
- mdct_forward(&m_look,pcm[i],mdct);
- for(j=0;j<framesize/2;j++)
- logmdct[j]=todB(mdct+j);
-
- analysis("mdct",frameno+i,logmdct,framesize/2,1,0);
- analysis("fft",frameno+i,fft,framesize/2,1,0);
- }
-
- for(i=0;i<2;i++){
- float amp;
- float *fft=work[i];
- float *logmax=fft;
- float *mdct=pcm[i];
- float *logmdct=mdct+framesize/2;
- float *mask=fft+framesize/2;
-
- /* floor psychoacoustics */
- _vp_compute_mask(&p_look,
- pg_look,
- i,
- fft,
- logmdct,
- mask,
- ampmax,
- local_ampmax[i],
- framesize/2);
-
- analysis("mask",frameno+i,mask,framesize/2,1,0);
-
- {
- vorbis_block vb;
- vorbis_dsp_state vd;
- memset(&vd,0,sizeof(vd));
- vd.vi=&vi;
- vb.vd=&vd;
- vb.pcmend=framesize;
-
- /* floor quantization/application */
- nonzero[i]=_floor_P[1]->forward(&vb,floor_look,
- mdct,
- logmdct,
- mask,
- logmax,
-
- flr[i]);
- }
-
- _vp_remove_floor(&p_look,
- pg_look,
- logmdct,
- mdct,
- flr[i],
- pcm[i],
- local_ampmax[i]);
-
- for(j=0;j<framesize/2;j++)
- if(fabs(pcm[i][j])>1500)
- fprintf(stderr,"%ld ",frameno+i);
-
- analysis("res",frameno+i,pcm[i],framesize/2,1,0);
- analysis("codedflr",frameno+i,flr[i],framesize/2,1,1);
- }
-
- /* residue prequantization */
- _vp_partition_prequant(&p_look,
- &vi,
- pcm,
- nonzero);
-
- for(i=0;i<2;i++)
- analysis("quant",frameno+i,pcm[i],framesize/2,1,0);
-
- /* channel coupling / stereo quantization */
-
- _vp_couple(&p_look,
- &mapping_info,
- pcm,
- nonzero);
-
- for(i=0;i<2;i++)
- analysis("coupled",frameno+i,pcm[i],framesize/2,1,0);
-
- /* decoupling */
- for(i=mapping_info.coupling_steps-1;i>=0;i--){
- float *pcmM=pcm[mapping_info.coupling_mag[i]];
- float *pcmA=pcm[mapping_info.coupling_ang[i]];
-
- for(j=0;j<framesize/2;j++){
- float mag=pcmM[j];
- float ang=pcmA[j];
-
- if(mag>0)
- if(ang>0){
- pcmM[j]=mag;
- pcmA[j]=mag-ang;
- }else{
- pcmA[j]=mag;
- pcmM[j]=mag+ang;
- }
- else
- if(ang>0){
- pcmM[j]=mag;
- pcmA[j]=mag+ang;
- }else{
- pcmA[j]=mag;
- pcmM[j]=mag-ang;
- }
- }
- }
-
- for(i=0;i<2;i++)
- analysis("decoupled",frameno+i,pcm[i],framesize/2,1,0);
-
- for(i=0;i<2;i++){
- float amp;
-
- for(j=0;j<framesize/2;j++)
- pcm[i][j]*=flr[i][j];
-
- analysis("final",frameno+i,pcm[i],framesize/2,1,1);
-
- /* take it back to time */
- mdct_backward(&m_look,pcm[i],pcm[i]);
-
- for(j=0;j<framesize/2;j++)
- out[i][j]+=pcm[i][j]*window[j];
-
- analysis("out",frameno+i,out[i],framesize/2,0,0);
-
-
- }
-
- /* write data. Use the part of buffer we're about to shift out */
- for(i=0;i<2;i++){
- char *ptr=buffer+i*2;
- float *mono=out[i];
- int flag=0;
- for(j=0;j<framesize/2;j++){
- int val=mono[j]*32767.;
- /* might as well guard against clipping */
- if(val>32767){
- if(!flag)fprintf(stderr,"clipping in frame %ld ",frameno+i);
- flag=1;
- val=32767;
- }
- if(val<-32768){
- if(!flag)fprintf(stderr,"clipping in frame %ld ",frameno+i);
- flag=1;
- val=-32768;
- }
- ptr[0]=val&0xff;
- ptr[1]=(val>>8)&0xff;
- ptr+=4;
- }
- }
-
- fprintf(stderr,"*");
- fwrite(buffer,1,framesize*2,stdout);
- memmove(buffer,buffer2,framesize*2);
-
- for(i=0;i<2;i++){
- for(j=0,k=framesize/2;j<framesize/2;j++,k++)
- out[i][j]=pcm[i][k]*window[k];
- }
- frameno+=2;
- }else
- eos=1;
- }
- fprintf(stderr,"average raw bits of entropy: %.03g/sample\n",acc/tot);
- fprintf(stderr,"average nonzero samples: %.03g/%d\n",nonz/tot*framesize/2,
- framesize/2);
- fprintf(stderr,"Done\n\n");
- return 0;
-}
diff --git a/drivers/vorbis/registry.c b/drivers/vorbis/registry.c
deleted file mode 100644
index 3961ed1403..0000000000
--- a/drivers/vorbis/registry.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: registry for time, floor, res backends and channel mappings
- last mod: $Id: registry.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "misc.h"
-/* seems like major overkill now; the backend numbers will grow into
- the infrastructure soon enough */
-
-extern const vorbis_func_floor floor0_exportbundle;
-extern const vorbis_func_floor floor1_exportbundle;
-extern const vorbis_func_residue residue0_exportbundle;
-extern const vorbis_func_residue residue1_exportbundle;
-extern const vorbis_func_residue residue2_exportbundle;
-extern const vorbis_func_mapping mapping0_exportbundle;
-
-const vorbis_func_floor *const _floor_P[]={
- &floor0_exportbundle,
- &floor1_exportbundle,
-};
-
-const vorbis_func_residue *const _residue_P[]={
- &residue0_exportbundle,
- &residue1_exportbundle,
- &residue2_exportbundle,
-};
-
-const vorbis_func_mapping *const _mapping_P[]={
- &mapping0_exportbundle,
-};
diff --git a/drivers/vorbis/registry.h b/drivers/vorbis/registry.h
deleted file mode 100644
index 3ae04776d8..0000000000
--- a/drivers/vorbis/registry.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: registry for time, floor, res backends and channel mappings
- last mod: $Id: registry.h 15531 2008-11-24 23:50:06Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_REG_H_
-#define _V_REG_H_
-
-#define VI_TRANSFORMB 1
-#define VI_WINDOWB 1
-#define VI_TIMEB 1
-#define VI_FLOORB 2
-#define VI_RESB 3
-#define VI_MAPB 1
-
-extern const vorbis_func_floor *const _floor_P[];
-extern const vorbis_func_residue *const _residue_P[];
-extern const vorbis_func_mapping *const _mapping_P[];
-
-#endif
diff --git a/drivers/vorbis/res0.c b/drivers/vorbis/res0.c
deleted file mode 100644
index ec11488c2f..0000000000
--- a/drivers/vorbis/res0.c
+++ /dev/null
@@ -1,890 +0,0 @@
-/********************************************************************
- * *
- * 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-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: residue backend 0, 1 and 2 implementation
- last mod: $Id: res0.c 19441 2015-01-21 01:17:41Z xiphmont $
-
- ********************************************************************/
-
-/* Slow, slow, slow, simpleminded and did I mention it was slow? The
- encode/decode loops are coded for clarity and performance is not
- yet even a nagging little idea lurking in the shadows. Oh and BTW,
- it's slow. */
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "codebook.h"
-#include "misc.h"
-#include "os.h"
-
-//#define TRAIN_RES 1
-//#define TRAIN_RESAUX 1
-
-#if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
-#include <stdio.h>
-#endif
-
-typedef struct {
- vorbis_info_residue0 *info;
-
- int parts;
- int stages;
- codebook *fullbooks;
- codebook *phrasebook;
- codebook ***partbooks;
-
- int partvals;
- int **decodemap;
-
- long postbits;
- long phrasebits;
- long frames;
-
-#if defined(TRAIN_RES) || defined(TRAIN_RESAUX)
- int train_seq;
- long *training_data[8][64];
- float training_max[8][64];
- float training_min[8][64];
- float tmin;
- float tmax;
- int submap;
-#endif
-
-} vorbis_look_residue0;
-
-void res0_free_info(vorbis_info_residue *i){
- vorbis_info_residue0 *info=(vorbis_info_residue0 *)i;
- if(info){
- memset(info,0,sizeof(*info));
- _ogg_free(info);
- }
-}
-
-void res0_free_look(vorbis_look_residue *i){
- int j;
- if(i){
-
- vorbis_look_residue0 *look=(vorbis_look_residue0 *)i;
-
-#ifdef TRAIN_RES
- {
- int j,k,l;
- for(j=0;j<look->parts;j++){
- /*fprintf(stderr,"partition %d: ",j);*/
- for(k=0;k<8;k++)
- if(look->training_data[k][j]){
- char buffer[80];
- FILE *of;
- codebook *statebook=look->partbooks[j][k];
-
- /* long and short into the same bucket by current convention */
- sprintf(buffer,"res_sub%d_part%d_pass%d.vqd",look->submap,j,k);
- of=fopen(buffer,"a");
-
- for(l=0;l<statebook->entries;l++)
- fprintf(of,"%d:%ld\n",l,look->training_data[k][j][l]);
-
- fclose(of);
-
- /*fprintf(stderr,"%d(%.2f|%.2f) ",k,
- look->training_min[k][j],look->training_max[k][j]);*/
-
- _ogg_free(look->training_data[k][j]);
- look->training_data[k][j]=NULL;
- }
- /*fprintf(stderr,"\n");*/
- }
- }
- fprintf(stderr,"min/max residue: %g::%g\n",look->tmin,look->tmax);
-
- /*fprintf(stderr,"residue bit usage %f:%f (%f total)\n",
- (float)look->phrasebits/look->frames,
- (float)look->postbits/look->frames,
- (float)(look->postbits+look->phrasebits)/look->frames);*/
-#endif
-
-
- /*vorbis_info_residue0 *info=look->info;
-
- fprintf(stderr,
- "%ld frames encoded in %ld phrasebits and %ld residue bits "
- "(%g/frame) \n",look->frames,look->phrasebits,
- look->resbitsflat,
- (look->phrasebits+look->resbitsflat)/(float)look->frames);
-
- for(j=0;j<look->parts;j++){
- long acc=0;
- fprintf(stderr,"\t[%d] == ",j);
- for(k=0;k<look->stages;k++)
- if((info->secondstages[j]>>k)&1){
- fprintf(stderr,"%ld,",look->resbits[j][k]);
- acc+=look->resbits[j][k];
- }
-
- fprintf(stderr,":: (%ld vals) %1.2fbits/sample\n",look->resvals[j],
- acc?(float)acc/(look->resvals[j]*info->grouping):0);
- }
- fprintf(stderr,"\n");*/
-
- for(j=0;j<look->parts;j++)
- if(look->partbooks[j])_ogg_free(look->partbooks[j]);
- _ogg_free(look->partbooks);
- for(j=0;j<look->partvals;j++)
- _ogg_free(look->decodemap[j]);
- _ogg_free(look->decodemap);
-
- memset(look,0,sizeof(*look));
- _ogg_free(look);
- }
-}
-
-static int icount(unsigned int v){
- int ret=0;
- while(v){
- ret+=v&1;
- v>>=1;
- }
- return(ret);
-}
-
-
-void res0_pack(vorbis_info_residue *vr,oggpack_buffer *opb){
- vorbis_info_residue0 *info=(vorbis_info_residue0 *)vr;
- int j,acc=0;
- oggpack_write(opb,info->begin,24);
- oggpack_write(opb,info->end,24);
-
- oggpack_write(opb,info->grouping-1,24); /* residue vectors to group and
- code with a partitioned book */
- oggpack_write(opb,info->partitions-1,6); /* possible partition choices */
- oggpack_write(opb,info->groupbook,8); /* group huffman book */
-
- /* secondstages is a bitmask; as encoding progresses pass by pass, a
- bitmask of one indicates this partition class has bits to write
- this pass */
- for(j=0;j<info->partitions;j++){
- if(ov_ilog(info->secondstages[j])>3){
- /* yes, this is a minor hack due to not thinking ahead */
- oggpack_write(opb,info->secondstages[j],3);
- oggpack_write(opb,1,1);
- oggpack_write(opb,info->secondstages[j]>>3,5);
- }else
- oggpack_write(opb,info->secondstages[j],4); /* trailing zero */
- acc+=icount(info->secondstages[j]);
- }
- for(j=0;j<acc;j++)
- oggpack_write(opb,info->booklist[j],8);
-
-}
-
-/* vorbis_info is for range checking */
-vorbis_info_residue *res0_unpack(vorbis_info *vi,oggpack_buffer *opb){
- int j,acc=0;
- vorbis_info_residue0 *info=_ogg_calloc(1,sizeof(*info));
- codec_setup_info *ci=vi->codec_setup;
-
- info->begin=oggpack_read(opb,24);
- info->end=oggpack_read(opb,24);
- info->grouping=oggpack_read(opb,24)+1;
- info->partitions=oggpack_read(opb,6)+1;
- info->groupbook=oggpack_read(opb,8);
-
- /* check for premature EOP */
- if(info->groupbook<0)goto errout;
-
- for(j=0;j<info->partitions;j++){
- int cascade=oggpack_read(opb,3);
- int cflag=oggpack_read(opb,1);
- if(cflag<0) goto errout;
- if(cflag){
- int c=oggpack_read(opb,5);
- if(c<0) goto errout;
- cascade|=(c<<3);
- }
- info->secondstages[j]=cascade;
-
- acc+=icount(cascade);
- }
- for(j=0;j<acc;j++){
- int book=oggpack_read(opb,8);
- if(book<0) goto errout;
- info->booklist[j]=book;
- }
-
- if(info->groupbook>=ci->books)goto errout;
- for(j=0;j<acc;j++){
- if(info->booklist[j]>=ci->books)goto errout;
- if(ci->book_param[info->booklist[j]]->maptype==0)goto errout;
- }
-
- /* verify the phrasebook is not specifying an impossible or
- inconsistent partitioning scheme. */
- /* modify the phrasebook ranging check from r16327; an early beta
- encoder had a bug where it used an oversized phrasebook by
- accident. These files should continue to be playable, but don't
- allow an exploit */
- {
- int entries = ci->book_param[info->groupbook]->entries;
- int dim = ci->book_param[info->groupbook]->dim;
- int partvals = 1;
- if (dim<1) goto errout;
- while(dim>0){
- partvals *= info->partitions;
- if(partvals > entries) goto errout;
- dim--;
- }
- info->partvals = partvals;
- }
-
- return(info);
- errout:
- res0_free_info(info);
- return(NULL);
-}
-
-vorbis_look_residue *res0_look(vorbis_dsp_state *vd,
- vorbis_info_residue *vr){
- vorbis_info_residue0 *info=(vorbis_info_residue0 *)vr;
- vorbis_look_residue0 *look=_ogg_calloc(1,sizeof(*look));
- codec_setup_info *ci=vd->vi->codec_setup;
-
- int j,k,acc=0;
- int dim;
- int maxstage=0;
- look->info=info;
-
- look->parts=info->partitions;
- look->fullbooks=ci->fullbooks;
- look->phrasebook=ci->fullbooks+info->groupbook;
- dim=look->phrasebook->dim;
-
- look->partbooks=_ogg_calloc(look->parts,sizeof(*look->partbooks));
-
- for(j=0;j<look->parts;j++){
- int stages=ov_ilog(info->secondstages[j]);
- if(stages){
- if(stages>maxstage)maxstage=stages;
- look->partbooks[j]=_ogg_calloc(stages,sizeof(*look->partbooks[j]));
- for(k=0;k<stages;k++)
- if(info->secondstages[j]&(1<<k)){
- look->partbooks[j][k]=ci->fullbooks+info->booklist[acc++];
-#ifdef TRAIN_RES
- look->training_data[k][j]=_ogg_calloc(look->partbooks[j][k]->entries,
- sizeof(***look->training_data));
-#endif
- }
- }
- }
-
- look->partvals=1;
- for(j=0;j<dim;j++)
- look->partvals*=look->parts;
-
- look->stages=maxstage;
- look->decodemap=_ogg_malloc(look->partvals*sizeof(*look->decodemap));
- for(j=0;j<look->partvals;j++){
- long val=j;
- long mult=look->partvals/look->parts;
- look->decodemap[j]=_ogg_malloc(dim*sizeof(*look->decodemap[j]));
- for(k=0;k<dim;k++){
- long deco=val/mult;
- val-=deco*mult;
- mult/=look->parts;
- look->decodemap[j][k]=deco;
- }
- }
-#if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
- {
- static int train_seq=0;
- look->train_seq=train_seq++;
- }
-#endif
- return(look);
-}
-
-/* break an abstraction and copy some code for performance purposes */
-static int local_book_besterror(codebook *book,int *a){
- int dim=book->dim;
- int i,j,o;
- int minval=book->minval;
- int del=book->delta;
- int qv=book->quantvals;
- int ze=(qv>>1);
- int index=0;
- /* assumes integer/centered encoder codebook maptype 1 no more than dim 8 */
- int p[8]={0,0,0,0,0,0,0,0};
-
- if(del!=1){
- for(i=0,o=dim;i<dim;i++){
- int v = (a[--o]-minval+(del>>1))/del;
- int m = (v<ze ? ((ze-v)<<1)-1 : ((v-ze)<<1));
- index = index*qv+ (m<0?0:(m>=qv?qv-1:m));
- p[o]=v*del+minval;
- }
- }else{
- for(i=0,o=dim;i<dim;i++){
- int v = a[--o]-minval;
- int m = (v<ze ? ((ze-v)<<1)-1 : ((v-ze)<<1));
- index = index*qv+ (m<0?0:(m>=qv?qv-1:m));
- p[o]=v*del+minval;
- }
- }
-
- if(book->c->lengthlist[index]<=0){
- const static_codebook *c=book->c;
- int best=-1;
- /* assumes integer/centered encoder codebook maptype 1 no more than dim 8 */
- int e[8]={0,0,0,0,0,0,0,0};
- int maxval = book->minval + book->delta*(book->quantvals-1);
- for(i=0;i<book->entries;i++){
- if(c->lengthlist[i]>0){
- int this=0;
- for(j=0;j<dim;j++){
- int val=(e[j]-a[j]);
- this+=val*val;
- }
- if(best==-1 || this<best){
- memcpy(p,e,sizeof(p));
- best=this;
- index=i;
- }
- }
- /* assumes the value patterning created by the tools in vq/ */
- j=0;
- while(e[j]>=maxval)
- e[j++]=0;
- if(e[j]>=0)
- e[j]+=book->delta;
- e[j]= -e[j];
- }
- }
-
- if(index>-1){
- for(i=0;i<dim;i++)
- *a++ -= p[i];
- }
-
- return(index);
-}
-
-#ifdef TRAIN_RES
-static int _encodepart(oggpack_buffer *opb,int *vec, int n,
- codebook *book,long *acc){
-#else
-static int _encodepart(oggpack_buffer *opb,int *vec, int n,
- codebook *book){
-#endif
- int i,bits=0;
- int dim=book->dim;
- int step=n/dim;
-
- for(i=0;i<step;i++){
- int entry=local_book_besterror(book,vec+i*dim);
-
-#ifdef TRAIN_RES
- if(entry>=0)
- acc[entry]++;
-#endif
-
- bits+=vorbis_book_encode(book,entry,opb);
-
- }
-
- return(bits);
-}
-
-static long **_01class(vorbis_block *vb,vorbis_look_residue *vl,
- int **in,int ch){
- long i,j,k;
- vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
- vorbis_info_residue0 *info=look->info;
-
- /* move all this setup out later */
- int samples_per_partition=info->grouping;
- int possible_partitions=info->partitions;
- int n=info->end-info->begin;
-
- int partvals=n/samples_per_partition;
- long **partword=_vorbis_block_alloc(vb,ch*sizeof(*partword));
- float scale=100./samples_per_partition;
-
- /* we find the partition type for each partition of each
- channel. We'll go back and do the interleaved encoding in a
- bit. For now, clarity */
-
- for(i=0;i<ch;i++){
- partword[i]=_vorbis_block_alloc(vb,n/samples_per_partition*sizeof(*partword[i]));
- memset(partword[i],0,n/samples_per_partition*sizeof(*partword[i]));
- }
-
- for(i=0;i<partvals;i++){
- int offset=i*samples_per_partition+info->begin;
- for(j=0;j<ch;j++){
- int max=0;
- int ent=0;
- for(k=0;k<samples_per_partition;k++){
- if(abs(in[j][offset+k])>max)max=abs(in[j][offset+k]);
- ent+=abs(in[j][offset+k]);
- }
- ent*=scale;
-
- for(k=0;k<possible_partitions-1;k++)
- if(max<=info->classmetric1[k] &&
- (info->classmetric2[k]<0 || ent<info->classmetric2[k]))
- break;
-
- partword[j][i]=k;
- }
- }
-
-#ifdef TRAIN_RESAUX
- {
- FILE *of;
- char buffer[80];
-
- for(i=0;i<ch;i++){
- sprintf(buffer,"resaux_%d.vqd",look->train_seq);
- of=fopen(buffer,"a");
- for(j=0;j<partvals;j++)
- fprintf(of,"%ld, ",partword[i][j]);
- fprintf(of,"\n");
- fclose(of);
- }
- }
-#endif
- look->frames++;
-
- return(partword);
-}
-
-/* designed for stereo or other modes where the partition size is an
- integer multiple of the number of channels encoded in the current
- submap */
-static long **_2class(vorbis_block *vb,vorbis_look_residue *vl,int **in,
- int ch){
- long i,j,k,l;
- vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
- vorbis_info_residue0 *info=look->info;
-
- /* move all this setup out later */
- int samples_per_partition=info->grouping;
- int possible_partitions=info->partitions;
- int n=info->end-info->begin;
-
- int partvals=n/samples_per_partition;
- long **partword=_vorbis_block_alloc(vb,sizeof(*partword));
-
-#if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
- FILE *of;
- char buffer[80];
-#endif
-
- partword[0]=_vorbis_block_alloc(vb,partvals*sizeof(*partword[0]));
- memset(partword[0],0,partvals*sizeof(*partword[0]));
-
- for(i=0,l=info->begin/ch;i<partvals;i++){
- int magmax=0;
- int angmax=0;
- for(j=0;j<samples_per_partition;j+=ch){
- if(abs(in[0][l])>magmax)magmax=abs(in[0][l]);
- for(k=1;k<ch;k++)
- if(abs(in[k][l])>angmax)angmax=abs(in[k][l]);
- l++;
- }
-
- for(j=0;j<possible_partitions-1;j++)
- if(magmax<=info->classmetric1[j] &&
- angmax<=info->classmetric2[j])
- break;
-
- partword[0][i]=j;
-
- }
-
-#ifdef TRAIN_RESAUX
- sprintf(buffer,"resaux_%d.vqd",look->train_seq);
- of=fopen(buffer,"a");
- for(i=0;i<partvals;i++)
- fprintf(of,"%ld, ",partword[0][i]);
- fprintf(of,"\n");
- fclose(of);
-#endif
-
- look->frames++;
-
- return(partword);
-}
-
-static int _01forward(oggpack_buffer *opb,
- vorbis_look_residue *vl,
- int **in,int ch,
- long **partword,
-#ifdef TRAIN_RES
- int (*encode)(oggpack_buffer *,int *,int,
- codebook *,long *),
- int submap
-#else
- int (*encode)(oggpack_buffer *,int *,int,
- codebook *)
-#endif
-){
- long i,j,k,s;
- vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
- vorbis_info_residue0 *info=look->info;
-
-#ifdef TRAIN_RES
- look->submap=submap;
-#endif
-
- /* move all this setup out later */
- int samples_per_partition=info->grouping;
- int possible_partitions=info->partitions;
- int partitions_per_word=look->phrasebook->dim;
- int n=info->end-info->begin;
-
- int partvals=n/samples_per_partition;
- long resbits[128];
- long resvals[128];
-
-#ifdef TRAIN_RES
- for(i=0;i<ch;i++)
- for(j=info->begin;j<info->end;j++){
- if(in[i][j]>look->tmax)look->tmax=in[i][j];
- if(in[i][j]<look->tmin)look->tmin=in[i][j];
- }
-#endif
-
- memset(resbits,0,sizeof(resbits));
- memset(resvals,0,sizeof(resvals));
-
- /* we code the partition words for each channel, then the residual
- words for a partition per channel until we've written all the
- residual words for that partition word. Then write the next
- partition channel words... */
-
- for(s=0;s<look->stages;s++){
-
- for(i=0;i<partvals;){
-
- /* first we encode a partition codeword for each channel */
- if(s==0){
- for(j=0;j<ch;j++){
- long val=partword[j][i];
- for(k=1;k<partitions_per_word;k++){
- val*=possible_partitions;
- if(i+k<partvals)
- val+=partword[j][i+k];
- }
-
- /* training hack */
- if(val<look->phrasebook->entries)
- look->phrasebits+=vorbis_book_encode(look->phrasebook,val,opb);
-#if 0 /*def TRAIN_RES*/
- else
- fprintf(stderr,"!");
-#endif
-
- }
- }
-
- /* now we encode interleaved residual values for the partitions */
- for(k=0;k<partitions_per_word && i<partvals;k++,i++){
- long offset=i*samples_per_partition+info->begin;
-
- for(j=0;j<ch;j++){
- if(s==0)resvals[partword[j][i]]+=samples_per_partition;
- if(info->secondstages[partword[j][i]]&(1<<s)){
- codebook *statebook=look->partbooks[partword[j][i]][s];
- if(statebook){
- int ret;
-#ifdef TRAIN_RES
- long *accumulator=NULL;
- accumulator=look->training_data[s][partword[j][i]];
- {
- int l;
- int *samples=in[j]+offset;
- for(l=0;l<samples_per_partition;l++){
- if(samples[l]<look->training_min[s][partword[j][i]])
- look->training_min[s][partword[j][i]]=samples[l];
- if(samples[l]>look->training_max[s][partword[j][i]])
- look->training_max[s][partword[j][i]]=samples[l];
- }
- }
- ret=encode(opb,in[j]+offset,samples_per_partition,
- statebook,accumulator);
-#else
- ret=encode(opb,in[j]+offset,samples_per_partition,
- statebook);
-#endif
-
- look->postbits+=ret;
- resbits[partword[j][i]]+=ret;
- }
- }
- }
- }
- }
- }
-
- return(0);
-}
-
-/* a truncated packet here just means 'stop working'; it's not an error */
-static int _01inverse(vorbis_block *vb,vorbis_look_residue *vl,
- float **in,int ch,
- long (*decodepart)(codebook *, float *,
- oggpack_buffer *,int)){
-
- long i,j,k,l,s;
- vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
- vorbis_info_residue0 *info=look->info;
-
- /* move all this setup out later */
- int samples_per_partition=info->grouping;
- int partitions_per_word=look->phrasebook->dim;
- int max=vb->pcmend>>1;
- int end=(info->end<max?info->end:max);
- int n=end-info->begin;
-
- if(n>0){
- int partvals=n/samples_per_partition;
- int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
- int ***partword=alloca(ch*sizeof(*partword));
-
- for(j=0;j<ch;j++)
- partword[j]=_vorbis_block_alloc(vb,partwords*sizeof(*partword[j]));
-
- for(s=0;s<look->stages;s++){
-
- /* each loop decodes on partition codeword containing
- partitions_per_word partitions */
- for(i=0,l=0;i<partvals;l++){
- if(s==0){
- /* fetch the partition word for each channel */
- for(j=0;j<ch;j++){
- int temp=vorbis_book_decode(look->phrasebook,&vb->opb);
-
- if(temp==-1 || temp>=info->partvals)goto eopbreak;
- partword[j][l]=look->decodemap[temp];
- if(partword[j][l]==NULL)goto errout;
- }
- }
-
- /* now we decode residual values for the partitions */
- for(k=0;k<partitions_per_word && i<partvals;k++,i++)
- for(j=0;j<ch;j++){
- long offset=info->begin+i*samples_per_partition;
- if(info->secondstages[partword[j][l][k]]&(1<<s)){
- codebook *stagebook=look->partbooks[partword[j][l][k]][s];
- if(stagebook){
- if(decodepart(stagebook,in[j]+offset,&vb->opb,
- samples_per_partition)==-1)goto eopbreak;
- }
- }
- }
- }
- }
- }
- errout:
- eopbreak:
- return(0);
-}
-
-int res0_inverse(vorbis_block *vb,vorbis_look_residue *vl,
- float **in,int *nonzero,int ch){
- int i,used=0;
- for(i=0;i<ch;i++)
- if(nonzero[i])
- in[used++]=in[i];
- if(used)
- return(_01inverse(vb,vl,in,used,vorbis_book_decodevs_add));
- else
- return(0);
-}
-
-int res1_forward(oggpack_buffer *opb,vorbis_block *vb,vorbis_look_residue *vl,
- int **in,int *nonzero,int ch, long **partword, int submap){
- int i,used=0;
- (void)vb;
- for(i=0;i<ch;i++)
- if(nonzero[i])
- in[used++]=in[i];
-
- if(used){
-#ifdef TRAIN_RES
- return _01forward(opb,vl,in,used,partword,_encodepart,submap);
-#else
- (void)submap;
- return _01forward(opb,vl,in,used,partword,_encodepart);
-#endif
- }else{
- return(0);
- }
-}
-
-long **res1_class(vorbis_block *vb,vorbis_look_residue *vl,
- int **in,int *nonzero,int ch){
- int i,used=0;
- for(i=0;i<ch;i++)
- if(nonzero[i])
- in[used++]=in[i];
- if(used)
- return(_01class(vb,vl,in,used));
- else
- return(0);
-}
-
-int res1_inverse(vorbis_block *vb,vorbis_look_residue *vl,
- float **in,int *nonzero,int ch){
- int i,used=0;
- for(i=0;i<ch;i++)
- if(nonzero[i])
- in[used++]=in[i];
- if(used)
- return(_01inverse(vb,vl,in,used,vorbis_book_decodev_add));
- else
- return(0);
-}
-
-long **res2_class(vorbis_block *vb,vorbis_look_residue *vl,
- int **in,int *nonzero,int ch){
- int i,used=0;
- for(i=0;i<ch;i++)
- if(nonzero[i])used++;
- if(used)
- return(_2class(vb,vl,in,ch));
- else
- return(0);
-}
-
-/* res2 is slightly more different; all the channels are interleaved
- into a single vector and encoded. */
-
-int res2_forward(oggpack_buffer *opb,
- vorbis_block *vb,vorbis_look_residue *vl,
- int **in,int *nonzero,int ch, long **partword,int submap){
- long i,j,k,n=vb->pcmend/2,used=0;
-
- /* don't duplicate the code; use a working vector hack for now and
- reshape ourselves into a single channel res1 */
- /* ugly; reallocs for each coupling pass :-( */
- int *work=_vorbis_block_alloc(vb,ch*n*sizeof(*work));
- for(i=0;i<ch;i++){
- int *pcm=in[i];
- if(nonzero[i])used++;
- for(j=0,k=i;j<n;j++,k+=ch)
- work[k]=pcm[j];
- }
-
- if(used){
-#ifdef TRAIN_RES
- return _01forward(opb,vl,&work,1,partword,_encodepart,submap);
-#else
- (void)submap;
- return _01forward(opb,vl,&work,1,partword,_encodepart);
-#endif
- }else{
- return(0);
- }
-}
-
-/* duplicate code here as speed is somewhat more important */
-int res2_inverse(vorbis_block *vb,vorbis_look_residue *vl,
- float **in,int *nonzero,int ch){
- long i,k,l,s;
- vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
- vorbis_info_residue0 *info=look->info;
-
- /* move all this setup out later */
- int samples_per_partition=info->grouping;
- int partitions_per_word=look->phrasebook->dim;
- int max=(vb->pcmend*ch)>>1;
- int end=(info->end<max?info->end:max);
- int n=end-info->begin;
-
- if(n>0){
- int partvals=n/samples_per_partition;
- int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
- int **partword=_vorbis_block_alloc(vb,partwords*sizeof(*partword));
-
- for(i=0;i<ch;i++)if(nonzero[i])break;
- if(i==ch)return(0); /* no nonzero vectors */
-
- for(s=0;s<look->stages;s++){
- for(i=0,l=0;i<partvals;l++){
-
- if(s==0){
- /* fetch the partition word */
- int temp=vorbis_book_decode(look->phrasebook,&vb->opb);
- if(temp==-1 || temp>=info->partvals)goto eopbreak;
- partword[l]=look->decodemap[temp];
- if(partword[l]==NULL)goto errout;
- }
-
- /* now we decode residual values for the partitions */
- for(k=0;k<partitions_per_word && i<partvals;k++,i++)
- if(info->secondstages[partword[l][k]]&(1<<s)){
- codebook *stagebook=look->partbooks[partword[l][k]][s];
-
- if(stagebook){
- if(vorbis_book_decodevv_add(stagebook,in,
- i*samples_per_partition+info->begin,ch,
- &vb->opb,samples_per_partition)==-1)
- goto eopbreak;
- }
- }
- }
- }
- }
- errout:
- eopbreak:
- return(0);
-}
-
-
-const vorbis_func_residue residue0_exportbundle={
- NULL,
- &res0_unpack,
- &res0_look,
- &res0_free_info,
- &res0_free_look,
- NULL,
- NULL,
- &res0_inverse
-};
-
-const vorbis_func_residue residue1_exportbundle={
- &res0_pack,
- &res0_unpack,
- &res0_look,
- &res0_free_info,
- &res0_free_look,
- &res1_class,
- &res1_forward,
- &res1_inverse
-};
-
-const vorbis_func_residue residue2_exportbundle={
- &res0_pack,
- &res0_unpack,
- &res0_look,
- &res0_free_info,
- &res0_free_look,
- &res2_class,
- &res2_forward,
- &res2_inverse
-};
diff --git a/drivers/vorbis/scales.h b/drivers/vorbis/scales.h
deleted file mode 100644
index 613f796e77..0000000000
--- a/drivers/vorbis/scales.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: linear scale -> dB, Bark and Mel scales
- last mod: $Id: scales.h 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_SCALES_H_
-#define _V_SCALES_H_
-
-#include <math.h>
-#include "os.h"
-
-#ifdef _MSC_VER
-/* MS Visual Studio doesn't have C99 inline keyword. */
-#define inline __inline
-#endif
-
-/* 20log10(x) */
-#define VORBIS_IEEE_FLOAT32 1
-#ifdef VORBIS_IEEE_FLOAT32
-
-static inline float unitnorm(float x){
- union {
- ogg_uint32_t i;
- float f;
- } ix;
- ix.f = x;
- ix.i = (ix.i & 0x80000000U) | (0x3f800000U);
- return ix.f;
-}
-
-/* Segher was off (too high) by ~ .3 decibel. Center the conversion correctly. */
-static inline float todB(const float *x){
- union {
- ogg_uint32_t i;
- float f;
- } ix;
- ix.f = *x;
- ix.i = ix.i&0x7fffffff;
- return (float)(ix.i * 7.17711438e-7f -764.6161886f);
-}
-
-#define todB_nn(x) todB(x)
-
-#else
-
-static float unitnorm(float x){
- if(x<0)return(-1.f);
- return(1.f);
-}
-
-#define todB(x) (*(x)==0?-400.f:log(*(x)**(x))*4.34294480f)
-#define todB_nn(x) (*(x)==0.f?-400.f:log(*(x))*8.6858896f)
-
-#endif
-
-#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)
-#define toMEL(n) (log(1.f+(n)*.001f)*1442.695f)
-#define fromMEL(m) (1000.f*exp((m)/1442.695f)-1000.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))
-
-#endif
diff --git a/drivers/vorbis/sharedbook.c b/drivers/vorbis/sharedbook.c
deleted file mode 100644
index 6bfdf7311e..0000000000
--- a/drivers/vorbis/sharedbook.c
+++ /dev/null
@@ -1,586 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: basic shared codebook operations
- last mod: $Id: sharedbook.c 19457 2015-03-03 00:15:29Z giles $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <math.h>
-#include <string.h>
-#include <ogg/ogg.h>
-#include "os.h"
-#include "misc.h"
-#include "vorbis/codec.h"
-#include "codebook.h"
-#include "scales.h"
-
-/**** pack/unpack helpers ******************************************/
-
-int ov_ilog(ogg_uint32_t v){
- int ret;
- for(ret=0;v;ret++)v>>=1;
- return ret;
-}
-
-/* 32 bit float (not IEEE; nonnormalized mantissa +
- biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm
- Why not IEEE? It's just not that important here. */
-
-#define VQ_FEXP 10
-#define VQ_FMAN 21
-#define VQ_FEXP_BIAS 768 /* bias toward values smaller than 1. */
-
-/* doesn't currently guard under/overflow */
-long _float32_pack(float val){
- int sign=0;
- long exp;
- long mant;
- if(val<0){
- sign=0x80000000;
- val= -val;
- }
- exp= floor(log(val)/log(2.f)+.001); //+epsilon
- mant=rint(ldexp(val,(VQ_FMAN-1)-exp));
- exp=(exp+VQ_FEXP_BIAS)<<VQ_FMAN;
-
- return(sign|exp|mant);
-}
-
-float _float32_unpack(long val){
- double mant=val&0x1fffff;
- int sign=val&0x80000000;
- long exp =(val&0x7fe00000L)>>VQ_FMAN;
- if(sign)mant= -mant;
- return(ldexp(mant,exp-(VQ_FMAN-1)-VQ_FEXP_BIAS));
-}
-
-/* given a list of word lengths, generate a list of codewords. Works
- for length ordered or unordered, always assigns the lowest valued
- codewords first. Extended to handle unused entries (length 0) */
-ogg_uint32_t *_make_words(char *l,long n,long sparsecount){
- long i,j,count=0;
- ogg_uint32_t marker[33];
- ogg_uint32_t *r=_ogg_malloc((sparsecount?sparsecount:n)*sizeof(*r));
- memset(marker,0,sizeof(marker));
-
- for(i=0;i<n;i++){
- long length=l[i];
- if(length>0){
- ogg_uint32_t entry=marker[length];
-
- /* when we claim a node for an entry, we also claim the nodes
- below it (pruning off the imagined tree that may have dangled
- from it) as well as blocking the use of any nodes directly
- above for leaves */
-
- /* update ourself */
- if(length<32 && (entry>>length)){
- /* error condition; the lengths must specify an overpopulated tree */
- _ogg_free(r);
- return(NULL);
- }
- r[count++]=entry;
-
- /* Look to see if the next shorter marker points to the node
- above. if so, update it and repeat. */
- {
- for(j=length;j>0;j--){
-
- if(marker[j]&1){
- /* have to jump branches */
- if(j==1)
- marker[1]++;
- else
- marker[j]=marker[j-1]<<1;
- break; /* invariant says next upper marker would already
- have been moved if it was on the same path */
- }
- marker[j]++;
- }
- }
-
- /* prune the tree; the implicit invariant says all the longer
- markers were dangling from our just-taken node. Dangle them
- from our *new* node. */
- for(j=length+1;j<33;j++)
- if((marker[j]>>1) == entry){
- entry=marker[j];
- marker[j]=marker[j-1]<<1;
- }else
- break;
- }else
- if(sparsecount==0)count++;
- }
-
- /* any underpopulated tree must be rejected. */
- /* Single-entry codebooks are a retconned extension to the spec.
- They have a single codeword '0' of length 1 that results in an
- underpopulated tree. Shield that case from the underformed tree check. */
- if(!(count==1 && marker[2]==2)){
- for(i=1;i<33;i++)
- if(marker[i] & (0xffffffffUL>>(32-i))){
- _ogg_free(r);
- return(NULL);
- }
- }
-
- /* bitreverse the words because our bitwise packer/unpacker is LSb
- endian */
- for(i=0,count=0;i<n;i++){
- ogg_uint32_t temp=0;
- for(j=0;j<l[i];j++){
- temp<<=1;
- temp|=(r[count]>>j)&1;
- }
-
- if(sparsecount){
- if(l[i])
- r[count++]=temp;
- }else
- r[count++]=temp;
- }
-
- return(r);
-}
-
-/* there might be a straightforward one-line way to do the below
- that's portable and totally safe against roundoff, but I haven't
- thought of it. Therefore, we opt on the side of caution */
-long _book_maptype1_quantvals(const static_codebook *b){
- long vals=floor(pow((float)b->entries,1.f/b->dim));
-
- /* the above *should* be reliable, but we'll not assume that FP is
- ever reliable when bitstream sync is at stake; verify via integer
- means that vals really is the greatest value of dim for which
- vals^b->bim <= b->entries */
- /* treat the above as an initial guess */
- while(1){
- long acc=1;
- long acc1=1;
- int i;
- for(i=0;i<b->dim;i++){
- acc*=vals;
- acc1*=vals+1;
- }
- if(acc<=b->entries && acc1>b->entries){
- return(vals);
- }else{
- if(acc>b->entries){
- vals--;
- }else{
- vals++;
- }
- }
- }
-}
-
-/* unpack the quantized list of values for encode/decode ***********/
-/* we need to deal with two map types: in map type 1, the values are
- generated algorithmically (each column of the vector counts through
- the values in the quant vector). in map type 2, all the values came
- in in an explicit list. Both value lists must be unpacked */
-float *_book_unquantize(const static_codebook *b,int n,int *sparsemap){
- long j,k,count=0;
- if(b->maptype==1 || b->maptype==2){
- int quantvals;
- float mindel=_float32_unpack(b->q_min);
- float delta=_float32_unpack(b->q_delta);
- float *r=_ogg_calloc(n*b->dim,sizeof(*r));
-
- /* maptype 1 and 2 both use a quantized value vector, but
- different sizes */
- switch(b->maptype){
- case 1:
- /* most of the time, entries%dimensions == 0, but we need to be
- well defined. We define that the possible vales at each
- scalar is values == entries/dim. If entries%dim != 0, we'll
- have 'too few' values (values*dim<entries), which means that
- we'll have 'left over' entries; left over entries use zeroed
- values (and are wasted). So don't generate codebooks like
- that */
- quantvals=_book_maptype1_quantvals(b);
- for(j=0;j<b->entries;j++){
- if((sparsemap && b->lengthlist[j]) || !sparsemap){
- float last=0.f;
- int indexdiv=1;
- for(k=0;k<b->dim;k++){
- int index= (j/indexdiv)%quantvals;
- float val=b->quantlist[index];
- val=fabs(val)*delta+mindel+last;
- if(b->q_sequencep)last=val;
- if(sparsemap)
- r[sparsemap[count]*b->dim+k]=val;
- else
- r[count*b->dim+k]=val;
- indexdiv*=quantvals;
- }
- count++;
- }
-
- }
- break;
- case 2:
- for(j=0;j<b->entries;j++){
- if((sparsemap && b->lengthlist[j]) || !sparsemap){
- float last=0.f;
-
- for(k=0;k<b->dim;k++){
- float val=b->quantlist[j*b->dim+k];
- val=fabs(val)*delta+mindel+last;
- if(b->q_sequencep)last=val;
- if(sparsemap)
- r[sparsemap[count]*b->dim+k]=val;
- else
- r[count*b->dim+k]=val;
- }
- count++;
- }
- }
- break;
- }
-
- return(r);
- }
- return(NULL);
-}
-
-void vorbis_staticbook_destroy(static_codebook *b){
- if(b->allocedp){
- if(b->quantlist)_ogg_free(b->quantlist);
- if(b->lengthlist)_ogg_free(b->lengthlist);
- memset(b,0,sizeof(*b));
- _ogg_free(b);
- } /* otherwise, it is in static memory */
-}
-
-void vorbis_book_clear(codebook *b){
- /* static book is not cleared; we're likely called on the lookup and
- the static codebook belongs to the info struct */
- if(b->valuelist)_ogg_free(b->valuelist);
- if(b->codelist)_ogg_free(b->codelist);
-
- if(b->dec_index)_ogg_free(b->dec_index);
- if(b->dec_codelengths)_ogg_free(b->dec_codelengths);
- if(b->dec_firsttable)_ogg_free(b->dec_firsttable);
-
- memset(b,0,sizeof(*b));
-}
-
-int vorbis_book_init_encode(codebook *c,const static_codebook *s){
-
- memset(c,0,sizeof(*c));
- c->c=s;
- c->entries=s->entries;
- c->used_entries=s->entries;
- c->dim=s->dim;
- c->codelist=_make_words(s->lengthlist,s->entries,0);
- //c->valuelist=_book_unquantize(s,s->entries,NULL);
- c->quantvals=_book_maptype1_quantvals(s);
- c->minval=(int)rint(_float32_unpack(s->q_min));
- c->delta=(int)rint(_float32_unpack(s->q_delta));
-
- return(0);
-}
-
-static ogg_uint32_t bitreverse(ogg_uint32_t x){
- x= ((x>>16)&0x0000ffffUL) | ((x<<16)&0xffff0000UL);
- x= ((x>> 8)&0x00ff00ffUL) | ((x<< 8)&0xff00ff00UL);
- x= ((x>> 4)&0x0f0f0f0fUL) | ((x<< 4)&0xf0f0f0f0UL);
- x= ((x>> 2)&0x33333333UL) | ((x<< 2)&0xccccccccUL);
- return((x>> 1)&0x55555555UL) | ((x<< 1)&0xaaaaaaaaUL);
-}
-
-static int sort32a(const void *a,const void *b){
- return ( **(ogg_uint32_t **)a>**(ogg_uint32_t **)b)-
- ( **(ogg_uint32_t **)a<**(ogg_uint32_t **)b);
-}
-
-/* decode codebook arrangement is more heavily optimized than encode */
-int vorbis_book_init_decode(codebook *c,const static_codebook *s){
- int i,j,n=0,tabn;
- int *sortindex;
-
- memset(c,0,sizeof(*c));
-
- /* count actually used entries and find max length */
- for(i=0;i<s->entries;i++)
- if(s->lengthlist[i]>0)
- n++;
-
- c->entries=s->entries;
- c->used_entries=n;
- c->dim=s->dim;
-
- if(n>0){
- /* two different remappings go on here.
-
- First, we collapse the likely sparse codebook down only to
- actually represented values/words. This collapsing needs to be
- indexed as map-valueless books are used to encode original entry
- positions as integers.
-
- Second, we reorder all vectors, including the entry index above,
- by sorted bitreversed codeword to allow treeless decode. */
-
- /* perform sort */
- ogg_uint32_t *codes=_make_words(s->lengthlist,s->entries,c->used_entries);
- ogg_uint32_t **codep=alloca(sizeof(*codep)*n);
-
- if(codes==NULL)goto err_out;
-
- for(i=0;i<n;i++){
- codes[i]=bitreverse(codes[i]);
- codep[i]=codes+i;
- }
-
- qsort(codep,n,sizeof(*codep),sort32a);
-
- sortindex=alloca(n*sizeof(*sortindex));
- c->codelist=_ogg_malloc(n*sizeof(*c->codelist));
- /* the index is a reverse index */
- for(i=0;i<n;i++){
- int position=codep[i]-codes;
- sortindex[position]=i;
- }
-
- for(i=0;i<n;i++)
- c->codelist[sortindex[i]]=codes[i];
- _ogg_free(codes);
-
- c->valuelist=_book_unquantize(s,n,sortindex);
- c->dec_index=_ogg_malloc(n*sizeof(*c->dec_index));
-
- for(n=0,i=0;i<s->entries;i++)
- if(s->lengthlist[i]>0)
- c->dec_index[sortindex[n++]]=i;
-
- c->dec_codelengths=_ogg_malloc(n*sizeof(*c->dec_codelengths));
- c->dec_maxlength=0;
- for(n=0,i=0;i<s->entries;i++)
- if(s->lengthlist[i]>0){
- c->dec_codelengths[sortindex[n++]]=s->lengthlist[i];
- if(s->lengthlist[i]>c->dec_maxlength)
- c->dec_maxlength=s->lengthlist[i];
- }
-
- if(n==1 && c->dec_maxlength==1){
- /* special case the 'single entry codebook' with a single bit
- fastpath table (that always returns entry 0 )in order to use
- unmodified decode paths. */
- c->dec_firsttablen=1;
- c->dec_firsttable=_ogg_calloc(2,sizeof(*c->dec_firsttable));
- c->dec_firsttable[0]=c->dec_firsttable[1]=1;
-
- }else{
- c->dec_firsttablen=ov_ilog(c->used_entries)-4; /* this is magic */
- if(c->dec_firsttablen<5)c->dec_firsttablen=5;
- if(c->dec_firsttablen>8)c->dec_firsttablen=8;
-
- tabn=1<<c->dec_firsttablen;
- c->dec_firsttable=_ogg_calloc(tabn,sizeof(*c->dec_firsttable));
-
- for(i=0;i<n;i++){
- if(c->dec_codelengths[i]<=c->dec_firsttablen){
- ogg_uint32_t orig=bitreverse(c->codelist[i]);
- for(j=0;j<(1<<(c->dec_firsttablen-c->dec_codelengths[i]));j++)
- c->dec_firsttable[orig|(j<<c->dec_codelengths[i])]=i+1;
- }
- }
-
- /* now fill in 'unused' entries in the firsttable with hi/lo search
- hints for the non-direct-hits */
- {
- ogg_uint32_t mask=0xfffffffeUL<<(31-c->dec_firsttablen);
- long lo=0,hi=0;
-
- for(i=0;i<tabn;i++){
- ogg_uint32_t word=i<<(32-c->dec_firsttablen);
- if(c->dec_firsttable[bitreverse(word)]==0){
- while((lo+1)<n && c->codelist[lo+1]<=word)lo++;
- while( hi<n && word>=(c->codelist[hi]&mask))hi++;
-
- /* we only actually have 15 bits per hint to play with here.
- In order to overflow gracefully (nothing breaks, efficiency
- just drops), encode as the difference from the extremes. */
- {
- unsigned long loval=lo;
- unsigned long hival=n-hi;
-
- if(loval>0x7fff)loval=0x7fff;
- if(hival>0x7fff)hival=0x7fff;
- c->dec_firsttable[bitreverse(word)]=
- 0x80000000UL | (loval<<15) | hival;
- }
- }
- }
- }
- }
- }
-
- return(0);
- err_out:
- vorbis_book_clear(c);
- return(-1);
-}
-
-long vorbis_book_codeword(codebook *book,int entry){
- if(book->c) /* only use with encode; decode optimizations are
- allowed to break this */
- return book->codelist[entry];
- return -1;
-}
-
-long vorbis_book_codelen(codebook *book,int entry){
- if(book->c) /* only use with encode; decode optimizations are
- allowed to break this */
- return book->c->lengthlist[entry];
- return -1;
-}
-
-#ifdef _V_SELFTEST
-
-/* Unit tests of the dequantizer; this stuff will be OK
- cross-platform, I simply want to be sure that special mapping cases
- actually work properly; a bug could go unnoticed for a while */
-
-#include <stdio.h>
-
-/* cases:
-
- no mapping
- full, explicit mapping
- algorithmic mapping
-
- nonsequential
- sequential
-*/
-
-static long full_quantlist1[]={0,1,2,3, 4,5,6,7, 8,3,6,1};
-static long partial_quantlist1[]={0,7,2};
-
-/* no mapping */
-static_codebook test1={
- 4,16,
- NULL,
- 0,
- 0,0,0,0,
- NULL,
- 0
-};
-static float *test1_result=NULL;
-
-/* linear, full mapping, nonsequential */
-static_codebook test2={
- 4,3,
- NULL,
- 2,
- -533200896,1611661312,4,0,
- full_quantlist1,
- 0
-};
-static float test2_result[]={-3,-2,-1,0, 1,2,3,4, 5,0,3,-2};
-
-/* linear, full mapping, sequential */
-static_codebook test3={
- 4,3,
- NULL,
- 2,
- -533200896,1611661312,4,1,
- full_quantlist1,
- 0
-};
-static float test3_result[]={-3,-5,-6,-6, 1,3,6,10, 5,5,8,6};
-
-/* linear, algorithmic mapping, nonsequential */
-static_codebook test4={
- 3,27,
- NULL,
- 1,
- -533200896,1611661312,4,0,
- partial_quantlist1,
- 0
-};
-static float test4_result[]={-3,-3,-3, 4,-3,-3, -1,-3,-3,
- -3, 4,-3, 4, 4,-3, -1, 4,-3,
- -3,-1,-3, 4,-1,-3, -1,-1,-3,
- -3,-3, 4, 4,-3, 4, -1,-3, 4,
- -3, 4, 4, 4, 4, 4, -1, 4, 4,
- -3,-1, 4, 4,-1, 4, -1,-1, 4,
- -3,-3,-1, 4,-3,-1, -1,-3,-1,
- -3, 4,-1, 4, 4,-1, -1, 4,-1,
- -3,-1,-1, 4,-1,-1, -1,-1,-1};
-
-/* linear, algorithmic mapping, sequential */
-static_codebook test5={
- 3,27,
- NULL,
- 1,
- -533200896,1611661312,4,1,
- partial_quantlist1,
- 0
-};
-static float test5_result[]={-3,-6,-9, 4, 1,-2, -1,-4,-7,
- -3, 1,-2, 4, 8, 5, -1, 3, 0,
- -3,-4,-7, 4, 3, 0, -1,-2,-5,
- -3,-6,-2, 4, 1, 5, -1,-4, 0,
- -3, 1, 5, 4, 8,12, -1, 3, 7,
- -3,-4, 0, 4, 3, 7, -1,-2, 2,
- -3,-6,-7, 4, 1, 0, -1,-4,-5,
- -3, 1, 0, 4, 8, 7, -1, 3, 2,
- -3,-4,-5, 4, 3, 2, -1,-2,-3};
-
-void run_test(static_codebook *b,float *comp){
- float *out=_book_unquantize(b,b->entries,NULL);
- int i;
-
- if(comp){
- if(!out){
- fprintf(stderr,"_book_unquantize incorrectly returned NULL\n");
- exit(1);
- }
-
- for(i=0;i<b->entries*b->dim;i++)
- if(fabs(out[i]-comp[i])>.0001){
- fprintf(stderr,"disagreement in unquantized and reference data:\n"
- "position %d, %g != %g\n",i,out[i],comp[i]);
- exit(1);
- }
-
- }else{
- if(out){
- fprintf(stderr,"_book_unquantize returned a value array: \n"
- " correct result should have been NULL\n");
- exit(1);
- }
- }
-}
-
-int main(){
- /* run the nine dequant tests, and compare to the hand-rolled results */
- fprintf(stderr,"Dequant test 1... ");
- run_test(&test1,test1_result);
- fprintf(stderr,"OK\nDequant test 2... ");
- run_test(&test2,test2_result);
- fprintf(stderr,"OK\nDequant test 3... ");
- run_test(&test3,test3_result);
- fprintf(stderr,"OK\nDequant test 4... ");
- run_test(&test4,test4_result);
- fprintf(stderr,"OK\nDequant test 5... ");
- run_test(&test5,test5_result);
- fprintf(stderr,"OK\n\n");
-
- return(0);
-}
-
-#endif
diff --git a/drivers/vorbis/smallft.c b/drivers/vorbis/smallft.c
deleted file mode 100644
index ae2bc41b6b..0000000000
--- a/drivers/vorbis/smallft.c
+++ /dev/null
@@ -1,1255 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: *unnormalized* fft transform
- last mod: $Id: smallft.c 16227 2009-07-08 06:58:46Z xiphmont $
-
- ********************************************************************/
-
-/* FFT implementation from OggSquish, minus cosine transforms,
- * minus all but radix 2/4 case. In Vorbis we only need this
- * cut-down version.
- *
- * To do more than just power-of-two sized vectors, see the full
- * version I wrote for NetLib.
- *
- * Note that the packing is a little strange; rather than the FFT r/i
- * packing following R_0, I_n, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1,
- * it follows R_0, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1, I_n like the
- * FORTRAN version
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include "smallft.h"
-#include "os.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<nf;i++){
- ib=nf-i+1;
- ifac[ib+1]=ifac[ib];
- }
- ifac[2] = 2;
-
- L107:
- if(nl!=1)goto L104;
- ifac[0]=n;
- ifac[1]=nf;
- argh=tpi/n;
- is=0;
- nfm1=nf-1;
- l1=1;
-
- if(nfm1==0)return;
-
- for (k1=0;k1<nfm1;k1++){
- ip=ifac[k1+2];
- ld=0;
- l2=l1*ip;
- ido=n/l2;
- ipm=ip-1;
-
- for (j=0;j<ipm;j++){
- ld+=l1;
- i=is;
- argld=(float)ld*argh;
- fi=0.f;
- for (ii=2;ii<ido;ii+=2){
- fi+=1.f;
- arg=fi*argld;
- wa[i++]=cos(arg);
- wa[i++]=sin(arg);
- }
- is+=ido;
- }
- l1=l2;
- }
-}
-
-static void fdrffti(int n, float *wsave, int *ifac){
-
- if (n == 1) return;
- drfti1(n, wsave+n, ifac);
-}
-
-static void dradf2(int ido,int l1,float *cc,float *ch,float *wa1){
- int i,k;
- float ti2,tr2;
- int t0,t1,t2,t3,t4,t5,t6;
-
- t1=0;
- t0=(t2=l1*ido);
- t3=ido<<1;
- for(k=0;k<l1;k++){
- ch[t1<<1]=cc[t1]+cc[t2];
- ch[(t1<<1)+t3-1]=cc[t1]-cc[t2];
- t1+=ido;
- t2+=ido;
- }
-
- if(ido<2)return;
- if(ido==2)goto L105;
-
- t1=0;
- t2=t0;
- for(k=0;k<l1;k++){
- t3=t2;
- t4=(t1<<1)+(ido<<1);
- t5=t1;
- t6=t1+t1;
- for(i=2;i<ido;i+=2){
- t3+=2;
- t4-=2;
- t5+=2;
- t6+=2;
- tr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3];
- ti2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1];
- ch[t6]=cc[t5]+ti2;
- ch[t4]=ti2-cc[t5];
- ch[t6-1]=cc[t5-1]+tr2;
- ch[t4-1]=cc[t5-1]-tr2;
- }
- t1+=ido;
- t2+=ido;
- }
-
- if(ido%2==1)return;
-
- L105:
- t3=(t2=(t1=ido)-1);
- t2+=t0;
- for(k=0;k<l1;k++){
- ch[t1]=-cc[t2];
- ch[t1-1]=cc[t3];
- t1+=ido<<1;
- t2+=ido;
- t3+=ido;
- }
-}
-
-static void dradf4(int ido,int l1,float *cc,float *ch,float *wa1,
- float *wa2,float *wa3){
- static float hsqt2 = .70710678118654752f;
- int i,k,t0,t1,t2,t3,t4,t5,t6;
- float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
- t0=l1*ido;
-
- t1=t0;
- t4=t1<<1;
- t2=t1+(t1<<1);
- t3=0;
-
- for(k=0;k<l1;k++){
- tr1=cc[t1]+cc[t2];
- tr2=cc[t3]+cc[t4];
-
- ch[t5=t3<<2]=tr1+tr2;
- ch[(ido<<2)+t5-1]=tr2-tr1;
- ch[(t5+=(ido<<1))-1]=cc[t3]-cc[t4];
- ch[t5]=cc[t2]-cc[t1];
-
- t1+=ido;
- t2+=ido;
- t3+=ido;
- t4+=ido;
- }
-
- if(ido<2)return;
- if(ido==2)goto L105;
-
-
- t1=0;
- for(k=0;k<l1;k++){
- t2=t1;
- t4=t1<<2;
- t5=(t6=ido<<1)+t4;
- for(i=2;i<ido;i+=2){
- t3=(t2+=2);
- t4+=2;
- t5-=2;
-
- t3+=t0;
- cr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3];
- ci2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1];
- t3+=t0;
- cr3=wa2[i-2]*cc[t3-1]+wa2[i-1]*cc[t3];
- ci3=wa2[i-2]*cc[t3]-wa2[i-1]*cc[t3-1];
- t3+=t0;
- cr4=wa3[i-2]*cc[t3-1]+wa3[i-1]*cc[t3];
- ci4=wa3[i-2]*cc[t3]-wa3[i-1]*cc[t3-1];
-
- tr1=cr2+cr4;
- tr4=cr4-cr2;
- ti1=ci2+ci4;
- ti4=ci2-ci4;
-
- ti2=cc[t2]+ci3;
- ti3=cc[t2]-ci3;
- tr2=cc[t2-1]+cr3;
- tr3=cc[t2-1]-cr3;
-
- ch[t4-1]=tr1+tr2;
- ch[t4]=ti1+ti2;
-
- ch[t5-1]=tr3-ti4;
- ch[t5]=tr4-ti3;
-
- ch[t4+t6-1]=ti4+tr3;
- ch[t4+t6]=tr4+ti3;
-
- ch[t5+t6-1]=tr2-tr1;
- ch[t5+t6]=ti1-ti2;
- }
- t1+=ido;
- }
- if(ido&1)return;
-
- L105:
-
- t2=(t1=t0+ido-1)+(t0<<1);
- t3=ido<<2;
- t4=ido;
- t5=ido<<1;
- t6=ido;
-
- for(k=0;k<l1;k++){
- ti1=-hsqt2*(cc[t1]+cc[t2]);
- tr1=hsqt2*(cc[t1]-cc[t2]);
-
- ch[t4-1]=tr1+cc[t6-1];
- ch[t4+t5-1]=cc[t6-1]-tr1;
-
- ch[t4]=ti1-cc[t1+t0];
- ch[t4+t5]=ti1+cc[t1+t0];
-
- t1+=ido;
- t2+=ido;
- t4+=t3;
- t6+=ido;
- }
-}
-
-static void dradfg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
- float *c2,float *ch,float *ch2,float *wa){
-
- static float tpi=6.283185307179586f;
- int idij,ipph,i,j,k,l,ic,ik,is;
- int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
- float dc2,ai1,ai2,ar1,ar2,ds2;
- int nbd;
- float dcp,arg,dsp,ar1h,ar2h;
- int idp2,ipp2;
-
- arg=tpi/(float)ip;
- dcp=cos(arg);
- dsp=sin(arg);
- ipph=(ip+1)>>1;
- ipp2=ip;
- idp2=ido;
- nbd=(ido-1)>>1;
- t0=l1*ido;
- t10=ip*ido;
-
- if(ido==1)goto L119;
- for(ik=0;ik<idl1;ik++)ch2[ik]=c2[ik];
-
- t1=0;
- for(j=1;j<ip;j++){
- t1+=t0;
- t2=t1;
- for(k=0;k<l1;k++){
- ch[t2]=c1[t2];
- t2+=ido;
- }
- }
-
- is=-ido;
- t1=0;
- if(nbd>l1){
- for(j=1;j<ip;j++){
- t1+=t0;
- is+=ido;
- t2= -ido+t1;
- for(k=0;k<l1;k++){
- idij=is-1;
- t2+=ido;
- t3=t2;
- for(i=2;i<ido;i+=2){
- idij+=2;
- t3+=2;
- ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3];
- ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1];
- }
- }
- }
- }else{
-
- for(j=1;j<ip;j++){
- is+=ido;
- idij=is-1;
- t1+=t0;
- t2=t1;
- for(i=2;i<ido;i+=2){
- idij+=2;
- t2+=2;
- t3=t2;
- for(k=0;k<l1;k++){
- ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3];
- ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1];
- t3+=ido;
- }
- }
- }
- }
-
- t1=0;
- t2=ipp2*t0;
- if(nbd<l1){
- for(j=1;j<ipph;j++){
- t1+=t0;
- t2-=t0;
- t3=t1;
- t4=t2;
- for(i=2;i<ido;i+=2){
- t3+=2;
- t4+=2;
- t5=t3-ido;
- t6=t4-ido;
- for(k=0;k<l1;k++){
- t5+=ido;
- t6+=ido;
- c1[t5-1]=ch[t5-1]+ch[t6-1];
- c1[t6-1]=ch[t5]-ch[t6];
- c1[t5]=ch[t5]+ch[t6];
- c1[t6]=ch[t6-1]-ch[t5-1];
- }
- }
- }
- }else{
- for(j=1;j<ipph;j++){
- t1+=t0;
- t2-=t0;
- t3=t1;
- t4=t2;
- for(k=0;k<l1;k++){
- t5=t3;
- t6=t4;
- for(i=2;i<ido;i+=2){
- t5+=2;
- t6+=2;
- c1[t5-1]=ch[t5-1]+ch[t6-1];
- c1[t6-1]=ch[t5]-ch[t6];
- c1[t5]=ch[t5]+ch[t6];
- c1[t6]=ch[t6-1]-ch[t5-1];
- }
- t3+=ido;
- t4+=ido;
- }
- }
- }
-
-L119:
- for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik];
-
- t1=0;
- t2=ipp2*idl1;
- for(j=1;j<ipph;j++){
- t1+=t0;
- t2-=t0;
- t3=t1-ido;
- t4=t2-ido;
- for(k=0;k<l1;k++){
- t3+=ido;
- t4+=ido;
- c1[t3]=ch[t3]+ch[t4];
- c1[t4]=ch[t4]-ch[t3];
- }
- }
-
- ar1=1.f;
- ai1=0.f;
- t1=0;
- t2=ipp2*idl1;
- t3=(ip-1)*idl1;
- for(l=1;l<ipph;l++){
- t1+=idl1;
- t2-=idl1;
- ar1h=dcp*ar1-dsp*ai1;
- ai1=dcp*ai1+dsp*ar1;
- ar1=ar1h;
- t4=t1;
- t5=t2;
- t6=t3;
- t7=idl1;
-
- for(ik=0;ik<idl1;ik++){
- ch2[t4++]=c2[ik]+ar1*c2[t7++];
- ch2[t5++]=ai1*c2[t6++];
- }
-
- dc2=ar1;
- ds2=ai1;
- ar2=ar1;
- ai2=ai1;
-
- t4=idl1;
- t5=(ipp2-1)*idl1;
- for(j=2;j<ipph;j++){
- t4+=idl1;
- t5-=idl1;
-
- ar2h=dc2*ar2-ds2*ai2;
- ai2=dc2*ai2+ds2*ar2;
- ar2=ar2h;
-
- t6=t1;
- t7=t2;
- t8=t4;
- t9=t5;
- for(ik=0;ik<idl1;ik++){
- ch2[t6++]+=ar2*c2[t8++];
- ch2[t7++]+=ai2*c2[t9++];
- }
- }
- }
-
- t1=0;
- for(j=1;j<ipph;j++){
- t1+=idl1;
- t2=t1;
- for(ik=0;ik<idl1;ik++)ch2[ik]+=c2[t2++];
- }
-
- if(ido<l1)goto L132;
-
- t1=0;
- t2=0;
- for(k=0;k<l1;k++){
- t3=t1;
- t4=t2;
- for(i=0;i<ido;i++)cc[t4++]=ch[t3++];
- t1+=ido;
- t2+=t10;
- }
-
- goto L135;
-
- L132:
- for(i=0;i<ido;i++){
- t1=i;
- t2=i;
- for(k=0;k<l1;k++){
- cc[t2]=ch[t1];
- t1+=ido;
- t2+=t10;
- }
- }
-
- L135:
- t1=0;
- t2=ido<<1;
- t3=0;
- t4=ipp2*t0;
- for(j=1;j<ipph;j++){
-
- t1+=t2;
- t3+=t0;
- t4-=t0;
-
- t5=t1;
- t6=t3;
- t7=t4;
-
- for(k=0;k<l1;k++){
- cc[t5-1]=ch[t6];
- cc[t5]=ch[t7];
- t5+=t10;
- t6+=ido;
- t7+=ido;
- }
- }
-
- if(ido==1)return;
- if(nbd<l1)goto L141;
-
- t1=-ido;
- t3=0;
- t4=0;
- t5=ipp2*t0;
- for(j=1;j<ipph;j++){
- t1+=t2;
- t3+=t2;
- t4+=t0;
- t5-=t0;
- t6=t1;
- t7=t3;
- t8=t4;
- t9=t5;
- for(k=0;k<l1;k++){
- for(i=2;i<ido;i+=2){
- ic=idp2-i;
- cc[i+t7-1]=ch[i+t8-1]+ch[i+t9-1];
- cc[ic+t6-1]=ch[i+t8-1]-ch[i+t9-1];
- cc[i+t7]=ch[i+t8]+ch[i+t9];
- cc[ic+t6]=ch[i+t9]-ch[i+t8];
- }
- t6+=t10;
- t7+=t10;
- t8+=ido;
- t9+=ido;
- }
- }
- return;
-
- L141:
-
- t1=-ido;
- t3=0;
- t4=0;
- t5=ipp2*t0;
- for(j=1;j<ipph;j++){
- t1+=t2;
- t3+=t2;
- t4+=t0;
- t5-=t0;
- for(i=2;i<ido;i+=2){
- t6=idp2+t1-i;
- t7=i+t3;
- t8=i+t4;
- t9=i+t5;
- for(k=0;k<l1;k++){
- cc[t7-1]=ch[t8-1]+ch[t9-1];
- cc[t6-1]=ch[t8-1]-ch[t9-1];
- cc[t7]=ch[t8]+ch[t9];
- cc[t6]=ch[t9]-ch[t8];
- t6+=t10;
- t7+=t10;
- t8+=ido;
- t9+=ido;
- }
- }
- }
-}
-
-static void drftf1(int n,float *c,float *ch,float *wa,int *ifac){
- int i,k1,l1,l2;
- int na,kh,nf;
- int ip,iw,ido,idl1,ix2,ix3;
-
- nf=ifac[1];
- na=1;
- l2=n;
- iw=n;
-
- for(k1=0;k1<nf;k1++){
- kh=nf-k1;
- ip=ifac[kh+1];
- l1=l2/ip;
- ido=n/l2;
- idl1=ido*l1;
- iw-=(ip-1)*ido;
- na=1-na;
-
- if(ip!=4)goto L102;
-
- ix2=iw+ido;
- ix3=ix2+ido;
- if(na!=0)
- dradf4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1);
- else
- dradf4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1);
- goto L110;
-
- L102:
- if(ip!=2)goto L104;
- if(na!=0)goto L103;
-
- dradf2(ido,l1,c,ch,wa+iw-1);
- goto L110;
-
- L103:
- dradf2(ido,l1,ch,c,wa+iw-1);
- goto L110;
-
- L104:
- if(ido==1)na=1-na;
- if(na!=0)goto L109;
-
- dradfg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1);
- na=1;
- goto L110;
-
- L109:
- dradfg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1);
- na=0;
-
- L110:
- l2=l1;
- }
-
- if(na==1)return;
-
- for(i=0;i<n;i++)c[i]=ch[i];
-}
-
-static void dradb2(int ido,int l1,float *cc,float *ch,float *wa1){
- int i,k,t0,t1,t2,t3,t4,t5,t6;
- float ti2,tr2;
-
- t0=l1*ido;
-
- t1=0;
- t2=0;
- t3=(ido<<1)-1;
- for(k=0;k<l1;k++){
- ch[t1]=cc[t2]+cc[t3+t2];
- ch[t1+t0]=cc[t2]-cc[t3+t2];
- t2=(t1+=ido)<<1;
- }
-
- if(ido<2)return;
- if(ido==2)goto L105;
-
- t1=0;
- t2=0;
- for(k=0;k<l1;k++){
- t3=t1;
- t5=(t4=t2)+(ido<<1);
- t6=t0+t1;
- for(i=2;i<ido;i+=2){
- t3+=2;
- t4+=2;
- t5-=2;
- t6+=2;
- ch[t3-1]=cc[t4-1]+cc[t5-1];
- tr2=cc[t4-1]-cc[t5-1];
- ch[t3]=cc[t4]-cc[t5];
- ti2=cc[t4]+cc[t5];
- ch[t6-1]=wa1[i-2]*tr2-wa1[i-1]*ti2;
- ch[t6]=wa1[i-2]*ti2+wa1[i-1]*tr2;
- }
- t2=(t1+=ido)<<1;
- }
-
- if(ido%2==1)return;
-
-L105:
- t1=ido-1;
- t2=ido-1;
- for(k=0;k<l1;k++){
- ch[t1]=cc[t2]+cc[t2];
- ch[t1+t0]=-(cc[t2+1]+cc[t2+1]);
- t1+=ido;
- t2+=ido<<1;
- }
-}
-
-static void dradb3(int ido,int l1,float *cc,float *ch,float *wa1,
- float *wa2){
- static float taur = -.5f;
- static float taui = .8660254037844386f;
- int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
- float ci2,ci3,di2,di3,cr2,cr3,dr2,dr3,ti2,tr2;
- t0=l1*ido;
-
- t1=0;
- t2=t0<<1;
- t3=ido<<1;
- t4=ido+(ido<<1);
- t5=0;
- for(k=0;k<l1;k++){
- tr2=cc[t3-1]+cc[t3-1];
- cr2=cc[t5]+(taur*tr2);
- ch[t1]=cc[t5]+tr2;
- ci3=taui*(cc[t3]+cc[t3]);
- ch[t1+t0]=cr2-ci3;
- ch[t1+t2]=cr2+ci3;
- t1+=ido;
- t3+=t4;
- t5+=t4;
- }
-
- if(ido==1)return;
-
- t1=0;
- t3=ido<<1;
- for(k=0;k<l1;k++){
- t7=t1+(t1<<1);
- t6=(t5=t7+t3);
- t8=t1;
- t10=(t9=t1+t0)+t0;
-
- for(i=2;i<ido;i+=2){
- t5+=2;
- t6-=2;
- t7+=2;
- t8+=2;
- t9+=2;
- t10+=2;
- tr2=cc[t5-1]+cc[t6-1];
- cr2=cc[t7-1]+(taur*tr2);
- ch[t8-1]=cc[t7-1]+tr2;
- ti2=cc[t5]-cc[t6];
- ci2=cc[t7]+(taur*ti2);
- ch[t8]=cc[t7]+ti2;
- cr3=taui*(cc[t5-1]-cc[t6-1]);
- ci3=taui*(cc[t5]+cc[t6]);
- dr2=cr2-ci3;
- dr3=cr2+ci3;
- di2=ci2+cr3;
- di3=ci2-cr3;
- ch[t9-1]=wa1[i-2]*dr2-wa1[i-1]*di2;
- ch[t9]=wa1[i-2]*di2+wa1[i-1]*dr2;
- ch[t10-1]=wa2[i-2]*dr3-wa2[i-1]*di3;
- ch[t10]=wa2[i-2]*di3+wa2[i-1]*dr3;
- }
- t1+=ido;
- }
-}
-
-static void dradb4(int ido,int l1,float *cc,float *ch,float *wa1,
- float *wa2,float *wa3){
- static float sqrt2=1.414213562373095f;
- int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8;
- float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
- t0=l1*ido;
-
- t1=0;
- t2=ido<<2;
- t3=0;
- t6=ido<<1;
- for(k=0;k<l1;k++){
- t4=t3+t6;
- t5=t1;
- tr3=cc[t4-1]+cc[t4-1];
- tr4=cc[t4]+cc[t4];
- tr1=cc[t3]-cc[(t4+=t6)-1];
- tr2=cc[t3]+cc[t4-1];
- ch[t5]=tr2+tr3;
- ch[t5+=t0]=tr1-tr4;
- ch[t5+=t0]=tr2-tr3;
- ch[t5+=t0]=tr1+tr4;
- t1+=ido;
- t3+=t2;
- }
-
- if(ido<2)return;
- if(ido==2)goto L105;
-
- t1=0;
- for(k=0;k<l1;k++){
- t5=(t4=(t3=(t2=t1<<2)+t6))+t6;
- t7=t1;
- for(i=2;i<ido;i+=2){
- t2+=2;
- t3+=2;
- t4-=2;
- t5-=2;
- t7+=2;
- ti1=cc[t2]+cc[t5];
- ti2=cc[t2]-cc[t5];
- ti3=cc[t3]-cc[t4];
- tr4=cc[t3]+cc[t4];
- tr1=cc[t2-1]-cc[t5-1];
- tr2=cc[t2-1]+cc[t5-1];
- ti4=cc[t3-1]-cc[t4-1];
- tr3=cc[t3-1]+cc[t4-1];
- ch[t7-1]=tr2+tr3;
- cr3=tr2-tr3;
- ch[t7]=ti2+ti3;
- ci3=ti2-ti3;
- cr2=tr1-tr4;
- cr4=tr1+tr4;
- ci2=ti1+ti4;
- ci4=ti1-ti4;
-
- ch[(t8=t7+t0)-1]=wa1[i-2]*cr2-wa1[i-1]*ci2;
- ch[t8]=wa1[i-2]*ci2+wa1[i-1]*cr2;
- ch[(t8+=t0)-1]=wa2[i-2]*cr3-wa2[i-1]*ci3;
- ch[t8]=wa2[i-2]*ci3+wa2[i-1]*cr3;
- ch[(t8+=t0)-1]=wa3[i-2]*cr4-wa3[i-1]*ci4;
- ch[t8]=wa3[i-2]*ci4+wa3[i-1]*cr4;
- }
- t1+=ido;
- }
-
- if(ido%2 == 1)return;
-
- L105:
-
- t1=ido;
- t2=ido<<2;
- t3=ido-1;
- t4=ido+(ido<<1);
- for(k=0;k<l1;k++){
- t5=t3;
- ti1=cc[t1]+cc[t4];
- ti2=cc[t4]-cc[t1];
- tr1=cc[t1-1]-cc[t4-1];
- tr2=cc[t1-1]+cc[t4-1];
- ch[t5]=tr2+tr2;
- ch[t5+=t0]=sqrt2*(tr1-ti1);
- ch[t5+=t0]=ti2+ti2;
- ch[t5+=t0]=-sqrt2*(tr1+ti1);
-
- t3+=ido;
- t1+=t2;
- t4+=t2;
- }
-}
-
-static void dradbg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
- float *c2,float *ch,float *ch2,float *wa){
- static float tpi=6.283185307179586f;
- int idij,ipph,i,j,k,l,ik,is,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,
- t11,t12;
- float dc2,ai1,ai2,ar1,ar2,ds2;
- int nbd;
- float dcp,arg,dsp,ar1h,ar2h;
- int ipp2;
-
- t10=ip*ido;
- t0=l1*ido;
- arg=tpi/(float)ip;
- dcp=cos(arg);
- dsp=sin(arg);
- nbd=(ido-1)>>1;
- ipp2=ip;
- ipph=(ip+1)>>1;
- if(ido<l1)goto L103;
-
- t1=0;
- t2=0;
- for(k=0;k<l1;k++){
- t3=t1;
- t4=t2;
- for(i=0;i<ido;i++){
- ch[t3]=cc[t4];
- t3++;
- t4++;
- }
- t1+=ido;
- t2+=t10;
- }
- goto L106;
-
- L103:
- t1=0;
- for(i=0;i<ido;i++){
- t2=t1;
- t3=t1;
- for(k=0;k<l1;k++){
- ch[t2]=cc[t3];
- t2+=ido;
- t3+=t10;
- }
- t1++;
- }
-
- L106:
- t1=0;
- t2=ipp2*t0;
- t7=(t5=ido<<1);
- for(j=1;j<ipph;j++){
- t1+=t0;
- t2-=t0;
- t3=t1;
- t4=t2;
- t6=t5;
- for(k=0;k<l1;k++){
- ch[t3]=cc[t6-1]+cc[t6-1];
- ch[t4]=cc[t6]+cc[t6];
- t3+=ido;
- t4+=ido;
- t6+=t10;
- }
- t5+=t7;
- }
-
- if (ido == 1)goto L116;
- if(nbd<l1)goto L112;
-
- t1=0;
- t2=ipp2*t0;
- t7=0;
- for(j=1;j<ipph;j++){
- t1+=t0;
- t2-=t0;
- t3=t1;
- t4=t2;
-
- t7+=(ido<<1);
- t8=t7;
- for(k=0;k<l1;k++){
- t5=t3;
- t6=t4;
- t9=t8;
- t11=t8;
- for(i=2;i<ido;i+=2){
- t5+=2;
- t6+=2;
- t9+=2;
- t11-=2;
- ch[t5-1]=cc[t9-1]+cc[t11-1];
- ch[t6-1]=cc[t9-1]-cc[t11-1];
- ch[t5]=cc[t9]-cc[t11];
- ch[t6]=cc[t9]+cc[t11];
- }
- t3+=ido;
- t4+=ido;
- t8+=t10;
- }
- }
- goto L116;
-
- L112:
- t1=0;
- t2=ipp2*t0;
- t7=0;
- for(j=1;j<ipph;j++){
- t1+=t0;
- t2-=t0;
- t3=t1;
- t4=t2;
- t7+=(ido<<1);
- t8=t7;
- t9=t7;
- for(i=2;i<ido;i+=2){
- t3+=2;
- t4+=2;
- t8+=2;
- t9-=2;
- t5=t3;
- t6=t4;
- t11=t8;
- t12=t9;
- for(k=0;k<l1;k++){
- ch[t5-1]=cc[t11-1]+cc[t12-1];
- ch[t6-1]=cc[t11-1]-cc[t12-1];
- ch[t5]=cc[t11]-cc[t12];
- ch[t6]=cc[t11]+cc[t12];
- t5+=ido;
- t6+=ido;
- t11+=t10;
- t12+=t10;
- }
- }
- }
-
-L116:
- ar1=1.f;
- ai1=0.f;
- t1=0;
- t9=(t2=ipp2*idl1);
- t3=(ip-1)*idl1;
- for(l=1;l<ipph;l++){
- t1+=idl1;
- t2-=idl1;
-
- ar1h=dcp*ar1-dsp*ai1;
- ai1=dcp*ai1+dsp*ar1;
- ar1=ar1h;
- t4=t1;
- t5=t2;
- t6=0;
- t7=idl1;
- t8=t3;
- for(ik=0;ik<idl1;ik++){
- c2[t4++]=ch2[t6++]+ar1*ch2[t7++];
- c2[t5++]=ai1*ch2[t8++];
- }
- dc2=ar1;
- ds2=ai1;
- ar2=ar1;
- ai2=ai1;
-
- t6=idl1;
- t7=t9-idl1;
- for(j=2;j<ipph;j++){
- t6+=idl1;
- t7-=idl1;
- ar2h=dc2*ar2-ds2*ai2;
- ai2=dc2*ai2+ds2*ar2;
- ar2=ar2h;
- t4=t1;
- t5=t2;
- t11=t6;
- t12=t7;
- for(ik=0;ik<idl1;ik++){
- c2[t4++]+=ar2*ch2[t11++];
- c2[t5++]+=ai2*ch2[t12++];
- }
- }
- }
-
- t1=0;
- for(j=1;j<ipph;j++){
- t1+=idl1;
- t2=t1;
- for(ik=0;ik<idl1;ik++)ch2[ik]+=ch2[t2++];
- }
-
- t1=0;
- t2=ipp2*t0;
- for(j=1;j<ipph;j++){
- t1+=t0;
- t2-=t0;
- t3=t1;
- t4=t2;
- for(k=0;k<l1;k++){
- ch[t3]=c1[t3]-c1[t4];
- ch[t4]=c1[t3]+c1[t4];
- t3+=ido;
- t4+=ido;
- }
- }
-
- if(ido==1)goto L132;
- if(nbd<l1)goto L128;
-
- t1=0;
- t2=ipp2*t0;
- for(j=1;j<ipph;j++){
- t1+=t0;
- t2-=t0;
- t3=t1;
- t4=t2;
- for(k=0;k<l1;k++){
- t5=t3;
- t6=t4;
- for(i=2;i<ido;i+=2){
- t5+=2;
- t6+=2;
- ch[t5-1]=c1[t5-1]-c1[t6];
- ch[t6-1]=c1[t5-1]+c1[t6];
- ch[t5]=c1[t5]+c1[t6-1];
- ch[t6]=c1[t5]-c1[t6-1];
- }
- t3+=ido;
- t4+=ido;
- }
- }
- goto L132;
-
- L128:
- t1=0;
- t2=ipp2*t0;
- for(j=1;j<ipph;j++){
- t1+=t0;
- t2-=t0;
- t3=t1;
- t4=t2;
- for(i=2;i<ido;i+=2){
- t3+=2;
- t4+=2;
- t5=t3;
- t6=t4;
- for(k=0;k<l1;k++){
- ch[t5-1]=c1[t5-1]-c1[t6];
- ch[t6-1]=c1[t5-1]+c1[t6];
- ch[t5]=c1[t5]+c1[t6-1];
- ch[t6]=c1[t5]-c1[t6-1];
- t5+=ido;
- t6+=ido;
- }
- }
- }
-
-L132:
- if(ido==1)return;
-
- for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik];
-
- t1=0;
- for(j=1;j<ip;j++){
- t2=(t1+=t0);
- for(k=0;k<l1;k++){
- c1[t2]=ch[t2];
- t2+=ido;
- }
- }
-
- if(nbd>l1)goto L139;
-
- is= -ido-1;
- t1=0;
- for(j=1;j<ip;j++){
- is+=ido;
- t1+=t0;
- idij=is;
- t2=t1;
- for(i=2;i<ido;i+=2){
- t2+=2;
- idij+=2;
- t3=t2;
- for(k=0;k<l1;k++){
- c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3];
- c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1];
- t3+=ido;
- }
- }
- }
- return;
-
- L139:
- is= -ido-1;
- t1=0;
- for(j=1;j<ip;j++){
- is+=ido;
- t1+=t0;
- t2=t1;
- for(k=0;k<l1;k++){
- idij=is;
- t3=t2;
- for(i=2;i<ido;i+=2){
- idij+=2;
- t3+=2;
- c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3];
- c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1];
- }
- t2+=ido;
- }
- }
-}
-
-static void drftb1(int n, float *c, float *ch, float *wa, int *ifac){
- int i,k1,l1,l2;
- int na;
- int nf,ip,iw,ix2,ix3,ido,idl1;
-
- nf=ifac[1];
- na=0;
- l1=1;
- iw=1;
-
- for(k1=0;k1<nf;k1++){
- ip=ifac[k1 + 2];
- l2=ip*l1;
- ido=n/l2;
- idl1=ido*l1;
- if(ip!=4)goto L103;
- ix2=iw+ido;
- ix3=ix2+ido;
-
- if(na!=0)
- dradb4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1);
- else
- dradb4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1);
- na=1-na;
- goto L115;
-
- L103:
- if(ip!=2)goto L106;
-
- if(na!=0)
- dradb2(ido,l1,ch,c,wa+iw-1);
- else
- dradb2(ido,l1,c,ch,wa+iw-1);
- na=1-na;
- goto L115;
-
- L106:
- if(ip!=3)goto L109;
-
- ix2=iw+ido;
- if(na!=0)
- dradb3(ido,l1,ch,c,wa+iw-1,wa+ix2-1);
- else
- dradb3(ido,l1,c,ch,wa+iw-1,wa+ix2-1);
- na=1-na;
- goto L115;
-
- L109:
-/* The radix five case can be translated later..... */
-/* if(ip!=5)goto L112;
-
- ix2=iw+ido;
- ix3=ix2+ido;
- ix4=ix3+ido;
- if(na!=0)
- dradb5(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1);
- else
- dradb5(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1);
- na=1-na;
- goto L115;
-
- L112:*/
- if(na!=0)
- dradbg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1);
- else
- dradbg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1);
- if(ido==1)na=1-na;
-
- L115:
- l1=l2;
- iw+=(ip-1)*ido;
- }
-
- if(na==0)return;
-
- for(i=0;i<n;i++)c[i]=ch[i];
-}
-
-void drft_forward(drft_lookup *l,float *data){
- if(l->n==1)return;
- drftf1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
-}
-
-void drft_backward(drft_lookup *l,float *data){
- if (l->n==1)return;
- drftb1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
-}
-
-void drft_init(drft_lookup *l,int n){
- l->n=n;
- l->trigcache=_ogg_calloc(3*n,sizeof(*l->trigcache));
- l->splitcache=_ogg_calloc(32,sizeof(*l->splitcache));
- fdrffti(n, l->trigcache, l->splitcache);
-}
-
-void drft_clear(drft_lookup *l){
- if(l){
- if(l->trigcache)_ogg_free(l->trigcache);
- if(l->splitcache)_ogg_free(l->splitcache);
- memset(l,0,sizeof(*l));
- }
-}
diff --git a/drivers/vorbis/smallft.h b/drivers/vorbis/smallft.h
deleted file mode 100644
index 456497326c..0000000000
--- a/drivers/vorbis/smallft.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: fft transform
- last mod: $Id: smallft.h 13293 2007-07-24 00:09:47Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _V_SMFT_H_
-#define _V_SMFT_H_
-
-#include "vorbis/codec.h"
-
-typedef struct {
- int n;
- float *trigcache;
- int *splitcache;
-} drft_lookup;
-
-extern void drft_forward(drft_lookup *l,float *data);
-extern void drft_backward(drft_lookup *l,float *data);
-extern void drft_init(drft_lookup *l,int n);
-extern void drft_clear(drft_lookup *l);
-
-#endif
diff --git a/drivers/vorbis/synthesis.c b/drivers/vorbis/synthesis.c
deleted file mode 100644
index 932d271a63..0000000000
--- a/drivers/vorbis/synthesis.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: single-block PCM synthesis
- last mod: $Id: synthesis.c 19441 2015-01-21 01:17:41Z xiphmont $
-
- ********************************************************************/
-
-#include <stdio.h>
-#include <ogg/ogg.h>
-#include "vorbis/codec.h"
-#include "codec_internal.h"
-#include "registry.h"
-#include "misc.h"
-#include "os.h"
-
-int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){
- vorbis_dsp_state *vd= vb ? vb->vd : 0;
- private_state *b= vd ? vd->backend_state : 0;
- vorbis_info *vi= vd ? vd->vi : 0;
- codec_setup_info *ci= vi ? vi->codec_setup : 0;
- oggpack_buffer *opb=vb ? &vb->opb : 0;
- int type,mode,i;
-
- if (!vd || !b || !vi || !ci || !opb) {
- return OV_EBADPACKET;
- }
-
- /* first things first. Make sure decode is ready */
- _vorbis_block_ripcord(vb);
- oggpack_readinit(opb,op->packet,op->bytes);
-
- /* Check the packet type */
- if(oggpack_read(opb,1)!=0){
- /* Oops. This is not an audio data packet */
- return(OV_ENOTAUDIO);
- }
-
- /* read our mode and pre/post windowsize */
- mode=oggpack_read(opb,b->modebits);
- if(mode==-1){
- return(OV_EBADPACKET);
- }
-
- vb->mode=mode;
- if(!ci->mode_param[mode]){
- return(OV_EBADPACKET);
- }
-
- vb->W=ci->mode_param[mode]->blockflag;
- if(vb->W){
-
- /* this doesn;t get mapped through mode selection as it's used
- only for window selection */
- vb->lW=oggpack_read(opb,1);
- vb->nW=oggpack_read(opb,1);
- if(vb->nW==-1){
- return(OV_EBADPACKET);
- }
- }else{
- vb->lW=0;
- vb->nW=0;
- }
-
- /* more setup */
- vb->granulepos=op->granulepos;
- vb->sequence=op->packetno;
- vb->eofflag=op->e_o_s;
-
- /* alloc pcm passback storage */
- vb->pcmend=ci->blocksizes[vb->W];
- vb->pcm=_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels);
- for(i=0;i<vi->channels;i++)
- vb->pcm[i]=_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i]));
-
- /* unpack_header enforces range checking */
- type=ci->map_type[ci->mode_param[mode]->mapping];
-
- return(_mapping_P[type]->inverse(vb,ci->map_param[ci->mode_param[mode]->
- mapping]));
-}
-
-/* used to track pcm position without actually performing decode.
- Useful for sequential 'fast forward' */
-int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op){
- vorbis_dsp_state *vd=vb->vd;
- private_state *b=vd->backend_state;
- vorbis_info *vi=vd->vi;
- codec_setup_info *ci=vi->codec_setup;
- oggpack_buffer *opb=&vb->opb;
- int mode;
-
- /* first things first. Make sure decode is ready */
- _vorbis_block_ripcord(vb);
- oggpack_readinit(opb,op->packet,op->bytes);
-
- /* Check the packet type */
- if(oggpack_read(opb,1)!=0){
- /* Oops. This is not an audio data packet */
- return(OV_ENOTAUDIO);
- }
-
- /* read our mode and pre/post windowsize */
- mode=oggpack_read(opb,b->modebits);
- if(mode==-1)return(OV_EBADPACKET);
-
- vb->mode=mode;
- if(!ci->mode_param[mode]){
- return(OV_EBADPACKET);
- }
-
- vb->W=ci->mode_param[mode]->blockflag;
- if(vb->W){
- vb->lW=oggpack_read(opb,1);
- vb->nW=oggpack_read(opb,1);
- if(vb->nW==-1) return(OV_EBADPACKET);
- }else{
- vb->lW=0;
- vb->nW=0;
- }
-
- /* more setup */
- vb->granulepos=op->granulepos;
- vb->sequence=op->packetno;
- vb->eofflag=op->e_o_s;
-
- /* no pcm */
- vb->pcmend=0;
- vb->pcm=NULL;
-
- return(0);
-}
-
-long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){
- codec_setup_info *ci=vi->codec_setup;
- oggpack_buffer opb;
- int mode;
-
- if(ci==NULL || ci->modes<=0){
- /* codec setup not properly intialized */
- return(OV_EFAULT);
- }
-
- oggpack_readinit(&opb,op->packet,op->bytes);
-
- /* Check the packet type */
- if(oggpack_read(&opb,1)!=0){
- /* Oops. This is not an audio data packet */
- return(OV_ENOTAUDIO);
- }
-
- /* read our mode and pre/post windowsize */
- mode=oggpack_read(&opb,ov_ilog(ci->modes-1));
- if(mode==-1 || !ci->mode_param[mode])return(OV_EBADPACKET);
- return(ci->blocksizes[ci->mode_param[mode]->blockflag]);
-}
-
-int vorbis_synthesis_halfrate(vorbis_info *vi,int flag){
- /* set / clear half-sample-rate mode */
- codec_setup_info *ci=vi->codec_setup;
-
- /* right now, our MDCT can't handle < 64 sample windows. */
- if(ci->blocksizes[0]<=64 && flag)return -1;
- ci->halfrate_flag=(flag?1:0);
- return 0;
-}
-
-int vorbis_synthesis_halfrate_p(vorbis_info *vi){
- codec_setup_info *ci=vi->codec_setup;
- return ci->halfrate_flag;
-}
diff --git a/drivers/vorbis/tone.c b/drivers/vorbis/tone.c
deleted file mode 100644
index 73afc67d4c..0000000000
--- a/drivers/vorbis/tone.c
+++ /dev/null
@@ -1,54 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-
-void usage(){
- fprintf(stderr,"tone <frequency_Hz>,[<amplitude>] [<frequency_Hz>,[<amplitude>]...]\n");
- exit(1);
-}
-
-int main (int argc,char *argv[]){
- int i,j;
- double *f;
- double *amp;
-
- if(argc<2)usage();
-
- f=alloca(sizeof(*f)*(argc-1));
- amp=alloca(sizeof(*amp)*(argc-1));
-
- i=0;
- while(argv[i+1]){
- char *pos=strchr(argv[i+1],',');
-
- f[i]=atof(argv[i+1]);
- if(pos)
- amp[i]=atof(pos+1)*32767.f;
- else
- amp[i]=32767.f;
-
- fprintf(stderr,"%g Hz, %g amp\n",f[i],amp[i]);
-
- i++;
- }
-
- for(i=0;i<44100*10;i++){
- float val=0;
- int ival;
- for(j=0;j<argc-1;j++)
- val+=amp[j]*sin(i/44100.f*f[j]*2*M_PI);
- ival=rint(val);
-
- if(ival>32767.f)ival=32767.f;
- if(ival<-32768.f)ival=-32768.f;
-
- fprintf(stdout,"%c%c%c%c",
- (char)(ival&0xff),
- (char)((ival>>8)&0xff),
- (char)(ival&0xff),
- (char)((ival>>8)&0xff));
- }
- return(0);
-}
-
diff --git a/drivers/vorbis/vorbisenc.c b/drivers/vorbis/vorbisenc.c
deleted file mode 100644
index b5d621e900..0000000000
--- a/drivers/vorbis/vorbisenc.c
+++ /dev/null
@@ -1,1224 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: simple programmatic interface for encoder mode setup
- last mod: $Id: vorbisenc.c 19457 2015-03-03 00:15:29Z giles $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "vorbis/codec.h"
-#include "vorbis/vorbisenc.h"
-
-#include "codec_internal.h"
-
-#include "os.h"
-#include "misc.h"
-
-/* careful with this; it's using static array sizing to make managing
- all the modes a little less annoying. If we use a residue backend
- with > 12 partition types, or a different division of iteration,
- this needs to be updated. */
-typedef struct {
- const static_codebook *books[12][4];
-} static_bookblock;
-
-typedef struct {
- int res_type;
- int limit_type; /* 0 lowpass limited, 1 point stereo limited */
- int grouping;
- const vorbis_info_residue0 *res;
- const static_codebook *book_aux;
- const static_codebook *book_aux_managed;
- const static_bookblock *books_base;
- const static_bookblock *books_base_managed;
-} vorbis_residue_template;
-
-typedef struct {
- const vorbis_info_mapping0 *map;
- const vorbis_residue_template *res;
-} vorbis_mapping_template;
-
-typedef struct vp_adjblock{
- int block[P_BANDS];
-} vp_adjblock;
-
-typedef struct {
- int data[NOISE_COMPAND_LEVELS];
-} compandblock;
-
-/* high level configuration information for setting things up
- step-by-step with the detailed vorbis_encode_ctl interface.
- There's a fair amount of redundancy such that interactive setup
- does not directly deal with any vorbis_info or codec_setup_info
- initialization; it's all stored (until full init) in this highlevel
- setup, then flushed out to the real codec setup structs later. */
-
-typedef struct {
- int att[P_NOISECURVES];
- float boost;
- float decay;
-} att3;
-typedef struct { int data[P_NOISECURVES]; } adj3;
-
-typedef struct {
- int pre[PACKETBLOBS];
- int post[PACKETBLOBS];
- float kHz[PACKETBLOBS];
- float lowpasskHz[PACKETBLOBS];
-} adj_stereo;
-
-typedef struct {
- int lo;
- int hi;
- int fixed;
-} noiseguard;
-typedef struct {
- int data[P_NOISECURVES][17];
-} noise3;
-
-typedef struct {
- int mappings;
- const double *rate_mapping;
- const double *quality_mapping;
- int coupling_restriction;
- long samplerate_min_restriction;
- long samplerate_max_restriction;
-
-
- const int *blocksize_short;
- const int *blocksize_long;
-
- const att3 *psy_tone_masteratt;
- const int *psy_tone_0dB;
- const int *psy_tone_dBsuppress;
-
- const vp_adjblock *psy_tone_adj_impulse;
- const vp_adjblock *psy_tone_adj_long;
- const vp_adjblock *psy_tone_adj_other;
-
- const noiseguard *psy_noiseguards;
- const noise3 *psy_noise_bias_impulse;
- const noise3 *psy_noise_bias_padding;
- const noise3 *psy_noise_bias_trans;
- const noise3 *psy_noise_bias_long;
- const int *psy_noise_dBsuppress;
-
- const compandblock *psy_noise_compand;
- const double *psy_noise_compand_short_mapping;
- const double *psy_noise_compand_long_mapping;
-
- const int *psy_noise_normal_start[2];
- const int *psy_noise_normal_partition[2];
- const double *psy_noise_normal_thresh;
-
- const int *psy_ath_float;
- const int *psy_ath_abs;
-
- const double *psy_lowpass;
-
- const vorbis_info_psy_global *global_params;
- const double *global_mapping;
- const adj_stereo *stereo_modes;
-
- const static_codebook *const *const *const floor_books;
- const vorbis_info_floor1 *floor_params;
- const int floor_mappings;
- const int **floor_mapping_list;
-
- const vorbis_mapping_template *maps;
-} ve_setup_data_template;
-
-/* a few static coder conventions */
-static const vorbis_info_mode _mode_template[2]={
- {0,0,0,0},
- {1,0,0,1}
-};
-
-static const vorbis_info_mapping0 _map_nominal[2]={
- {1, {0,0}, {0}, {0}, 1,{0},{1}},
- {1, {0,0}, {1}, {1}, 1,{0},{1}}
-};
-
-#include "modes/setup_44.h"
-#include "modes/setup_44u.h"
-#include "modes/setup_44p51.h"
-#include "modes/setup_32.h"
-#include "modes/setup_8.h"
-#include "modes/setup_11.h"
-#include "modes/setup_16.h"
-#include "modes/setup_22.h"
-#include "modes/setup_X.h"
-
-static const ve_setup_data_template *const setup_list[]={
- &ve_setup_44_stereo,
- &ve_setup_44_51,
- &ve_setup_44_uncoupled,
-
- &ve_setup_32_stereo,
- &ve_setup_32_uncoupled,
-
- &ve_setup_22_stereo,
- &ve_setup_22_uncoupled,
- &ve_setup_16_stereo,
- &ve_setup_16_uncoupled,
-
- &ve_setup_11_stereo,
- &ve_setup_11_uncoupled,
- &ve_setup_8_stereo,
- &ve_setup_8_uncoupled,
-
- &ve_setup_X_stereo,
- &ve_setup_X_uncoupled,
- &ve_setup_XX_stereo,
- &ve_setup_XX_uncoupled,
- 0
-};
-
-static void vorbis_encode_floor_setup(vorbis_info *vi,int s,
- const static_codebook *const *const *const books,
- const vorbis_info_floor1 *in,
- const int *x){
- int i,k,is=s;
- vorbis_info_floor1 *f=_ogg_calloc(1,sizeof(*f));
- codec_setup_info *ci=vi->codec_setup;
-
- memcpy(f,in+x[is],sizeof(*f));
-
- /* books */
- {
- int partitions=f->partitions;
- int maxclass=-1;
- int maxbook=-1;
- for(i=0;i<partitions;i++)
- if(f->partitionclass[i]>maxclass)maxclass=f->partitionclass[i];
- for(i=0;i<=maxclass;i++){
- if(f->class_book[i]>maxbook)maxbook=f->class_book[i];
- f->class_book[i]+=ci->books;
- for(k=0;k<(1<<f->class_subs[i]);k++){
- if(f->class_subbook[i][k]>maxbook)maxbook=f->class_subbook[i][k];
- if(f->class_subbook[i][k]>=0)f->class_subbook[i][k]+=ci->books;
- }
- }
-
- for(i=0;i<=maxbook;i++)
- ci->book_param[ci->books++]=(static_codebook *)books[x[is]][i];
- }
-
- /* for now, we're only using floor 1 */
- ci->floor_type[ci->floors]=1;
- ci->floor_param[ci->floors]=f;
- ci->floors++;
-
- return;
-}
-
-static void vorbis_encode_global_psych_setup(vorbis_info *vi,double s,
- const vorbis_info_psy_global *in,
- const double *x){
- int i,is=s;
- double ds=s-is;
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy_global *g=&ci->psy_g_param;
-
- memcpy(g,in+(int)x[is],sizeof(*g));
-
- ds=x[is]*(1.-ds)+x[is+1]*ds;
- is=(int)ds;
- ds-=is;
- if(ds==0 && is>0){
- is--;
- ds=1.;
- }
-
- /* interpolate the trigger threshholds */
- for(i=0;i<4;i++){
- g->preecho_thresh[i]=in[is].preecho_thresh[i]*(1.-ds)+in[is+1].preecho_thresh[i]*ds;
- g->postecho_thresh[i]=in[is].postecho_thresh[i]*(1.-ds)+in[is+1].postecho_thresh[i]*ds;
- }
- g->ampmax_att_per_sec=ci->hi.amplitude_track_dBpersec;
- return;
-}
-
-static void vorbis_encode_global_stereo(vorbis_info *vi,
- const highlevel_encode_setup *const hi,
- const adj_stereo *p){
- float s=hi->stereo_point_setting;
- int i,is=s;
- double ds=s-is;
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy_global *g=&ci->psy_g_param;
-
- if(p){
- memcpy(g->coupling_prepointamp,p[is].pre,sizeof(*p[is].pre)*PACKETBLOBS);
- memcpy(g->coupling_postpointamp,p[is].post,sizeof(*p[is].post)*PACKETBLOBS);
-
- if(hi->managed){
- /* interpolate the kHz threshholds */
- for(i=0;i<PACKETBLOBS;i++){
- float kHz=p[is].kHz[i]*(1.-ds)+p[is+1].kHz[i]*ds;
- g->coupling_pointlimit[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
- g->coupling_pointlimit[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
- g->coupling_pkHz[i]=kHz;
-
- kHz=p[is].lowpasskHz[i]*(1.-ds)+p[is+1].lowpasskHz[i]*ds;
- g->sliding_lowpass[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
- g->sliding_lowpass[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
-
- }
- }else{
- float kHz=p[is].kHz[PACKETBLOBS/2]*(1.-ds)+p[is+1].kHz[PACKETBLOBS/2]*ds;
- for(i=0;i<PACKETBLOBS;i++){
- g->coupling_pointlimit[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
- g->coupling_pointlimit[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
- g->coupling_pkHz[i]=kHz;
- }
-
- kHz=p[is].lowpasskHz[PACKETBLOBS/2]*(1.-ds)+p[is+1].lowpasskHz[PACKETBLOBS/2]*ds;
- for(i=0;i<PACKETBLOBS;i++){
- g->sliding_lowpass[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
- g->sliding_lowpass[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
- }
- }
- }else{
- for(i=0;i<PACKETBLOBS;i++){
- g->sliding_lowpass[0][i]=ci->blocksizes[0];
- g->sliding_lowpass[1][i]=ci->blocksizes[1];
- }
- }
- return;
-}
-
-static void vorbis_encode_psyset_setup(vorbis_info *vi,double s,
- const int *nn_start,
- const int *nn_partition,
- const double *nn_thresh,
- int block){
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy *p=ci->psy_param[block];
- highlevel_encode_setup *hi=&ci->hi;
- int is=s;
-
- if(block>=ci->psys)
- ci->psys=block+1;
- if(!p){
- p=_ogg_calloc(1,sizeof(*p));
- ci->psy_param[block]=p;
- }
-
- memcpy(p,&_psy_info_template,sizeof(*p));
- p->blockflag=block>>1;
-
- if(hi->noise_normalize_p){
- p->normal_p=1;
- p->normal_start=nn_start[is];
- p->normal_partition=nn_partition[is];
- p->normal_thresh=nn_thresh[is];
- }
-
- return;
-}
-
-static void vorbis_encode_tonemask_setup(vorbis_info *vi,double s,int block,
- const att3 *att,
- const int *max,
- const vp_adjblock *in){
- int i,is=s;
- double ds=s-is;
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy *p=ci->psy_param[block];
-
- /* 0 and 2 are only used by bitmanagement, but there's no harm to always
- filling the values in here */
- p->tone_masteratt[0]=att[is].att[0]*(1.-ds)+att[is+1].att[0]*ds;
- p->tone_masteratt[1]=att[is].att[1]*(1.-ds)+att[is+1].att[1]*ds;
- p->tone_masteratt[2]=att[is].att[2]*(1.-ds)+att[is+1].att[2]*ds;
- p->tone_centerboost=att[is].boost*(1.-ds)+att[is+1].boost*ds;
- p->tone_decay=att[is].decay*(1.-ds)+att[is+1].decay*ds;
-
- p->max_curve_dB=max[is]*(1.-ds)+max[is+1]*ds;
-
- for(i=0;i<P_BANDS;i++)
- p->toneatt[i]=in[is].block[i]*(1.-ds)+in[is+1].block[i]*ds;
- return;
-}
-
-
-static void vorbis_encode_compand_setup(vorbis_info *vi,double s,int block,
- const compandblock *in,
- const double *x){
- int i,is=s;
- double ds=s-is;
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy *p=ci->psy_param[block];
-
- ds=x[is]*(1.-ds)+x[is+1]*ds;
- is=(int)ds;
- ds-=is;
- if(ds==0 && is>0){
- is--;
- ds=1.;
- }
-
- /* interpolate the compander settings */
- for(i=0;i<NOISE_COMPAND_LEVELS;i++)
- p->noisecompand[i]=in[is].data[i]*(1.-ds)+in[is+1].data[i]*ds;
- return;
-}
-
-static void vorbis_encode_peak_setup(vorbis_info *vi,double s,int block,
- const int *suppress){
- int is=s;
- double ds=s-is;
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy *p=ci->psy_param[block];
-
- p->tone_abs_limit=suppress[is]*(1.-ds)+suppress[is+1]*ds;
-
- return;
-}
-
-static void vorbis_encode_noisebias_setup(vorbis_info *vi,double s,int block,
- const int *suppress,
- const noise3 *in,
- const noiseguard *guard,
- double userbias){
- int i,is=s,j;
- double ds=s-is;
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy *p=ci->psy_param[block];
-
- p->noisemaxsupp=suppress[is]*(1.-ds)+suppress[is+1]*ds;
- p->noisewindowlomin=guard[block].lo;
- p->noisewindowhimin=guard[block].hi;
- p->noisewindowfixed=guard[block].fixed;
-
- for(j=0;j<P_NOISECURVES;j++)
- for(i=0;i<P_BANDS;i++)
- p->noiseoff[j][i]=in[is].data[j][i]*(1.-ds)+in[is+1].data[j][i]*ds;
-
- /* impulse blocks may take a user specified bias to boost the
- nominal/high noise encoding depth */
- for(j=0;j<P_NOISECURVES;j++){
- float min=p->noiseoff[j][0]+6; /* the lowest it can go */
- for(i=0;i<P_BANDS;i++){
- p->noiseoff[j][i]+=userbias;
- if(p->noiseoff[j][i]<min)p->noiseoff[j][i]=min;
- }
- }
-
- return;
-}
-
-static void vorbis_encode_ath_setup(vorbis_info *vi,int block){
- codec_setup_info *ci=vi->codec_setup;
- vorbis_info_psy *p=ci->psy_param[block];
-
- p->ath_adjatt=ci->hi.ath_floating_dB;
- p->ath_maxatt=ci->hi.ath_absolute_dB;
- return;
-}
-
-
-static int book_dup_or_new(codec_setup_info *ci,const static_codebook *book){
- int i;
- for(i=0;i<ci->books;i++)
- if(ci->book_param[i]==book)return(i);
-
- return(ci->books++);
-}
-
-static void vorbis_encode_blocksize_setup(vorbis_info *vi,double s,
- const int *shortb,const int *longb){
-
- codec_setup_info *ci=vi->codec_setup;
- int is=s;
-
- int blockshort=shortb[is];
- int blocklong=longb[is];
- ci->blocksizes[0]=blockshort;
- ci->blocksizes[1]=blocklong;
-
-}
-
-static void vorbis_encode_residue_setup(vorbis_info *vi,
- int number, int block,
- const vorbis_residue_template *res){
-
- codec_setup_info *ci=vi->codec_setup;
- int i;
-
- vorbis_info_residue0 *r=ci->residue_param[number]=
- _ogg_malloc(sizeof(*r));
-
- memcpy(r,res->res,sizeof(*r));
- if(ci->residues<=number)ci->residues=number+1;
-
- r->grouping=res->grouping;
- ci->residue_type[number]=res->res_type;
-
- /* fill in all the books */
- {
- int booklist=0,k;
-
- if(ci->hi.managed){
- for(i=0;i<r->partitions;i++)
- for(k=0;k<4;k++)
- if(res->books_base_managed->books[i][k])
- r->secondstages[i]|=(1<<k);
-
- r->groupbook=book_dup_or_new(ci,res->book_aux_managed);
- ci->book_param[r->groupbook]=(static_codebook *)res->book_aux_managed;
-
- for(i=0;i<r->partitions;i++){
- for(k=0;k<4;k++){
- if(res->books_base_managed->books[i][k]){
- int bookid=book_dup_or_new(ci,res->books_base_managed->books[i][k]);
- r->booklist[booklist++]=bookid;
- ci->book_param[bookid]=(static_codebook *)res->books_base_managed->books[i][k];
- }
- }
- }
-
- }else{
-
- for(i=0;i<r->partitions;i++)
- for(k=0;k<4;k++)
- if(res->books_base->books[i][k])
- r->secondstages[i]|=(1<<k);
-
- r->groupbook=book_dup_or_new(ci,res->book_aux);
- ci->book_param[r->groupbook]=(static_codebook *)res->book_aux;
-
- for(i=0;i<r->partitions;i++){
- for(k=0;k<4;k++){
- if(res->books_base->books[i][k]){
- int bookid=book_dup_or_new(ci,res->books_base->books[i][k]);
- r->booklist[booklist++]=bookid;
- ci->book_param[bookid]=(static_codebook *)res->books_base->books[i][k];
- }
- }
- }
- }
- }
-
- /* lowpass setup/pointlimit */
- {
- double freq=ci->hi.lowpass_kHz*1000.;
- vorbis_info_floor1 *f=ci->floor_param[block]; /* by convention */
- double nyq=vi->rate/2.;
- long blocksize=ci->blocksizes[block]>>1;
-
- /* lowpass needs to be set in the floor and the residue. */
- if(freq>nyq)freq=nyq;
- /* in the floor, the granularity can be very fine; it doesn't alter
- the encoding structure, only the samples used to fit the floor
- approximation */
- f->n=freq/nyq*blocksize;
-
- /* this res may by limited by the maximum pointlimit of the mode,
- not the lowpass. the floor is always lowpass limited. */
- switch(res->limit_type){
- case 1: /* point stereo limited */
- if(ci->hi.managed)
- freq=ci->psy_g_param.coupling_pkHz[PACKETBLOBS-1]*1000.;
- else
- freq=ci->psy_g_param.coupling_pkHz[PACKETBLOBS/2]*1000.;
- if(freq>nyq)freq=nyq;
- break;
- case 2: /* LFE channel; lowpass at ~ 250Hz */
- freq=250;
- break;
- default:
- /* already set */
- break;
- }
-
- /* in the residue, we're constrained, physically, by partition
- boundaries. We still lowpass 'wherever', but we have to round up
- here to next boundary, or the vorbis spec will round it *down* to
- previous boundary in encode/decode */
- if(ci->residue_type[number]==2){
- /* residue 2 bundles together multiple channels; used by stereo
- and surround. Count the channels in use */
- /* Multiple maps/submaps can point to the same residue. In the case
- of residue 2, they all better have the same number of
- channels/samples. */
- int j,k,ch=0;
- for(i=0;i<ci->maps&&ch==0;i++){
- vorbis_info_mapping0 *mi=(vorbis_info_mapping0 *)ci->map_param[i];
- for(j=0;j<mi->submaps && ch==0;j++)
- if(mi->residuesubmap[j]==number) /* we found a submap referencing theis residue backend */
- for(k=0;k<vi->channels;k++)
- if(mi->chmuxlist[k]==j) /* this channel belongs to the submap */
- ch++;
- }
-
- r->end=(int)((freq/nyq*blocksize*ch)/r->grouping+.9)* /* round up only if we're well past */
- r->grouping;
- /* the blocksize and grouping may disagree at the end */
- if(r->end>blocksize*ch)r->end=blocksize*ch/r->grouping*r->grouping;
-
- }else{
-
- r->end=(int)((freq/nyq*blocksize)/r->grouping+.9)* /* round up only if we're well past */
- r->grouping;
- /* the blocksize and grouping may disagree at the end */
- if(r->end>blocksize)r->end=blocksize/r->grouping*r->grouping;
-
- }
-
- if(r->end==0)r->end=r->grouping; /* LFE channel */
-
- }
-}
-
-/* we assume two maps in this encoder */
-static void vorbis_encode_map_n_res_setup(vorbis_info *vi,double s,
- const vorbis_mapping_template *maps){
-
- codec_setup_info *ci=vi->codec_setup;
- int i,j,is=s,modes=2;
- const vorbis_info_mapping0 *map=maps[is].map;
- const vorbis_info_mode *mode=_mode_template;
- const vorbis_residue_template *res=maps[is].res;
-
- if(ci->blocksizes[0]==ci->blocksizes[1])modes=1;
-
- for(i=0;i<modes;i++){
-
- ci->map_param[i]=_ogg_calloc(1,sizeof(*map));
- ci->mode_param[i]=_ogg_calloc(1,sizeof(*mode));
-
- memcpy(ci->mode_param[i],mode+i,sizeof(*_mode_template));
- if(i>=ci->modes)ci->modes=i+1;
-
- ci->map_type[i]=0;
- memcpy(ci->map_param[i],map+i,sizeof(*map));
- if(i>=ci->maps)ci->maps=i+1;
-
- for(j=0;j<map[i].submaps;j++)
- vorbis_encode_residue_setup(vi,map[i].residuesubmap[j],i
- ,res+map[i].residuesubmap[j]);
- }
-}
-
-static double setting_to_approx_bitrate(vorbis_info *vi){
- codec_setup_info *ci=vi->codec_setup;
- highlevel_encode_setup *hi=&ci->hi;
- ve_setup_data_template *setup=(ve_setup_data_template *)hi->setup;
- int is=hi->base_setting;
- double ds=hi->base_setting-is;
- int ch=vi->channels;
- const double *r=setup->rate_mapping;
-
- if(r==NULL)
- return(-1);
-
- return((r[is]*(1.-ds)+r[is+1]*ds)*ch);
-}
-
-static const void *get_setup_template(long ch,long srate,
- double req,int q_or_bitrate,
- double *base_setting){
- int i=0,j;
- if(q_or_bitrate)req/=ch;
-
- while(setup_list[i]){
- if(setup_list[i]->coupling_restriction==-1 ||
- setup_list[i]->coupling_restriction==ch){
- if(srate>=setup_list[i]->samplerate_min_restriction &&
- srate<=setup_list[i]->samplerate_max_restriction){
- int mappings=setup_list[i]->mappings;
- const double *map=(q_or_bitrate?
- setup_list[i]->rate_mapping:
- setup_list[i]->quality_mapping);
-
- /* the template matches. Does the requested quality mode
- fall within this template's modes? */
- if(req<map[0]){++i;continue;}
- if(req>map[setup_list[i]->mappings]){++i;continue;}
- for(j=0;j<mappings;j++)
- if(req>=map[j] && req<map[j+1])break;
- /* an all-points match */
- if(j==mappings)
- *base_setting=j-.001;
- else{
- float low=map[j];
- float high=map[j+1];
- float del=(req-low)/(high-low);
- *base_setting=j+del;
- }
-
- return(setup_list[i]);
- }
- }
- i++;
- }
-
- return NULL;
-}
-
-/* encoders will need to use vorbis_info_init beforehand and call
- vorbis_info clear when all done */
-
-/* two interfaces; this, more detailed one, and later a convenience
- layer on top */
-
-/* the final setup call */
-int vorbis_encode_setup_init(vorbis_info *vi){
- int i,i0=0,singleblock=0;
- codec_setup_info *ci=vi->codec_setup;
- ve_setup_data_template *setup=NULL;
- highlevel_encode_setup *hi=&ci->hi;
-
- if(ci==NULL)return(OV_EINVAL);
- if(!hi->impulse_block_p)i0=1;
-
- /* too low/high an ATH floater is nonsensical, but doesn't break anything */
- if(hi->ath_floating_dB>-80)hi->ath_floating_dB=-80;
- if(hi->ath_floating_dB<-200)hi->ath_floating_dB=-200;
-
- /* again, bound this to avoid the app shooting itself int he foot
- too badly */
- if(hi->amplitude_track_dBpersec>0.)hi->amplitude_track_dBpersec=0.;
- if(hi->amplitude_track_dBpersec<-99999.)hi->amplitude_track_dBpersec=-99999.;
-
- /* get the appropriate setup template; matches the fetch in previous
- stages */
- setup=(ve_setup_data_template *)hi->setup;
- if(setup==NULL)return(OV_EINVAL);
-
- hi->set_in_stone=1;
- /* choose block sizes from configured sizes as well as paying
- attention to long_block_p and short_block_p. If the configured
- short and long blocks are the same length, we set long_block_p
- and unset short_block_p */
- vorbis_encode_blocksize_setup(vi,hi->base_setting,
- setup->blocksize_short,
- setup->blocksize_long);
- if(ci->blocksizes[0]==ci->blocksizes[1])singleblock=1;
-
- /* floor setup; choose proper floor params. Allocated on the floor
- stack in order; if we alloc only a single long floor, it's 0 */
- for(i=0;i<setup->floor_mappings;i++)
- vorbis_encode_floor_setup(vi,hi->base_setting,
- setup->floor_books,
- setup->floor_params,
- setup->floor_mapping_list[i]);
-
- /* setup of [mostly] short block detection and stereo*/
- vorbis_encode_global_psych_setup(vi,hi->trigger_setting,
- setup->global_params,
- setup->global_mapping);
- vorbis_encode_global_stereo(vi,hi,setup->stereo_modes);
-
- /* basic psych setup and noise normalization */
- vorbis_encode_psyset_setup(vi,hi->base_setting,
- setup->psy_noise_normal_start[0],
- setup->psy_noise_normal_partition[0],
- setup->psy_noise_normal_thresh,
- 0);
- vorbis_encode_psyset_setup(vi,hi->base_setting,
- setup->psy_noise_normal_start[0],
- setup->psy_noise_normal_partition[0],
- setup->psy_noise_normal_thresh,
- 1);
- if(!singleblock){
- vorbis_encode_psyset_setup(vi,hi->base_setting,
- setup->psy_noise_normal_start[1],
- setup->psy_noise_normal_partition[1],
- setup->psy_noise_normal_thresh,
- 2);
- vorbis_encode_psyset_setup(vi,hi->base_setting,
- setup->psy_noise_normal_start[1],
- setup->psy_noise_normal_partition[1],
- setup->psy_noise_normal_thresh,
- 3);
- }
-
- /* tone masking setup */
- vorbis_encode_tonemask_setup(vi,hi->block[i0].tone_mask_setting,0,
- setup->psy_tone_masteratt,
- setup->psy_tone_0dB,
- setup->psy_tone_adj_impulse);
- vorbis_encode_tonemask_setup(vi,hi->block[1].tone_mask_setting,1,
- setup->psy_tone_masteratt,
- setup->psy_tone_0dB,
- setup->psy_tone_adj_other);
- if(!singleblock){
- vorbis_encode_tonemask_setup(vi,hi->block[2].tone_mask_setting,2,
- setup->psy_tone_masteratt,
- setup->psy_tone_0dB,
- setup->psy_tone_adj_other);
- vorbis_encode_tonemask_setup(vi,hi->block[3].tone_mask_setting,3,
- setup->psy_tone_masteratt,
- setup->psy_tone_0dB,
- setup->psy_tone_adj_long);
- }
-
- /* noise companding setup */
- vorbis_encode_compand_setup(vi,hi->block[i0].noise_compand_setting,0,
- setup->psy_noise_compand,
- setup->psy_noise_compand_short_mapping);
- vorbis_encode_compand_setup(vi,hi->block[1].noise_compand_setting,1,
- setup->psy_noise_compand,
- setup->psy_noise_compand_short_mapping);
- if(!singleblock){
- vorbis_encode_compand_setup(vi,hi->block[2].noise_compand_setting,2,
- setup->psy_noise_compand,
- setup->psy_noise_compand_long_mapping);
- vorbis_encode_compand_setup(vi,hi->block[3].noise_compand_setting,3,
- setup->psy_noise_compand,
- setup->psy_noise_compand_long_mapping);
- }
-
- /* peak guarding setup */
- vorbis_encode_peak_setup(vi,hi->block[i0].tone_peaklimit_setting,0,
- setup->psy_tone_dBsuppress);
- vorbis_encode_peak_setup(vi,hi->block[1].tone_peaklimit_setting,1,
- setup->psy_tone_dBsuppress);
- if(!singleblock){
- vorbis_encode_peak_setup(vi,hi->block[2].tone_peaklimit_setting,2,
- setup->psy_tone_dBsuppress);
- vorbis_encode_peak_setup(vi,hi->block[3].tone_peaklimit_setting,3,
- setup->psy_tone_dBsuppress);
- }
-
- /* noise bias setup */
- vorbis_encode_noisebias_setup(vi,hi->block[i0].noise_bias_setting,0,
- setup->psy_noise_dBsuppress,
- setup->psy_noise_bias_impulse,
- setup->psy_noiseguards,
- (i0==0?hi->impulse_noisetune:0.));
- vorbis_encode_noisebias_setup(vi,hi->block[1].noise_bias_setting,1,
- setup->psy_noise_dBsuppress,
- setup->psy_noise_bias_padding,
- setup->psy_noiseguards,0.);
- if(!singleblock){
- vorbis_encode_noisebias_setup(vi,hi->block[2].noise_bias_setting,2,
- setup->psy_noise_dBsuppress,
- setup->psy_noise_bias_trans,
- setup->psy_noiseguards,0.);
- vorbis_encode_noisebias_setup(vi,hi->block[3].noise_bias_setting,3,
- setup->psy_noise_dBsuppress,
- setup->psy_noise_bias_long,
- setup->psy_noiseguards,0.);
- }
-
- vorbis_encode_ath_setup(vi,0);
- vorbis_encode_ath_setup(vi,1);
- if(!singleblock){
- vorbis_encode_ath_setup(vi,2);
- vorbis_encode_ath_setup(vi,3);
- }
-
- vorbis_encode_map_n_res_setup(vi,hi->base_setting,setup->maps);
-
- /* set bitrate readonlies and management */
- if(hi->bitrate_av>0)
- vi->bitrate_nominal=hi->bitrate_av;
- else{
- vi->bitrate_nominal=setting_to_approx_bitrate(vi);
- }
-
- vi->bitrate_lower=hi->bitrate_min;
- vi->bitrate_upper=hi->bitrate_max;
- if(hi->bitrate_av)
- vi->bitrate_window=(double)hi->bitrate_reservoir/hi->bitrate_av;
- else
- vi->bitrate_window=0.;
-
- if(hi->managed){
- ci->bi.avg_rate=hi->bitrate_av;
- ci->bi.min_rate=hi->bitrate_min;
- ci->bi.max_rate=hi->bitrate_max;
-
- ci->bi.reservoir_bits=hi->bitrate_reservoir;
- ci->bi.reservoir_bias=
- hi->bitrate_reservoir_bias;
-
- ci->bi.slew_damp=hi->bitrate_av_damp;
-
- }
-
- return(0);
-
-}
-
-static void vorbis_encode_setup_setting(vorbis_info *vi,
- long channels,
- long rate){
- int i,is;
- codec_setup_info *ci=vi->codec_setup;
- highlevel_encode_setup *hi=&ci->hi;
- const ve_setup_data_template *setup=hi->setup;
- double ds;
-
- vi->version=0;
- vi->channels=channels;
- vi->rate=rate;
-
- hi->impulse_block_p=1;
- hi->noise_normalize_p=1;
-
- is=hi->base_setting;
- ds=hi->base_setting-is;
-
- hi->stereo_point_setting=hi->base_setting;
-
- if(!hi->lowpass_altered)
- hi->lowpass_kHz=
- setup->psy_lowpass[is]*(1.-ds)+setup->psy_lowpass[is+1]*ds;
-
- hi->ath_floating_dB=setup->psy_ath_float[is]*(1.-ds)+
- setup->psy_ath_float[is+1]*ds;
- hi->ath_absolute_dB=setup->psy_ath_abs[is]*(1.-ds)+
- setup->psy_ath_abs[is+1]*ds;
-
- hi->amplitude_track_dBpersec=-6.;
- hi->trigger_setting=hi->base_setting;
-
- for(i=0;i<4;i++){
- hi->block[i].tone_mask_setting=hi->base_setting;
- hi->block[i].tone_peaklimit_setting=hi->base_setting;
- hi->block[i].noise_bias_setting=hi->base_setting;
- hi->block[i].noise_compand_setting=hi->base_setting;
- }
-}
-
-int vorbis_encode_setup_vbr(vorbis_info *vi,
- long channels,
- long rate,
- float quality){
- codec_setup_info *ci;
- highlevel_encode_setup *hi;
- if(rate<=0) return OV_EINVAL;
-
- ci=vi->codec_setup;
- hi=&ci->hi;
-
- quality+=.0000001;
- if(quality>=1.)quality=.9999;
-
- hi->req=quality;
- hi->setup=get_setup_template(channels,rate,quality,0,&hi->base_setting);
- if(!hi->setup)return OV_EIMPL;
-
- vorbis_encode_setup_setting(vi,channels,rate);
- hi->managed=0;
- hi->coupling_p=1;
-
- return 0;
-}
-
-int vorbis_encode_init_vbr(vorbis_info *vi,
- long channels,
- long rate,
-
- float base_quality /* 0. to 1. */
- ){
- int ret=0;
-
- ret=vorbis_encode_setup_vbr(vi,channels,rate,base_quality);
-
- if(ret){
- vorbis_info_clear(vi);
- return ret;
- }
- ret=vorbis_encode_setup_init(vi);
- if(ret)
- vorbis_info_clear(vi);
- return(ret);
-}
-
-int vorbis_encode_setup_managed(vorbis_info *vi,
- long channels,
- long rate,
-
- long max_bitrate,
- long nominal_bitrate,
- long min_bitrate){
-
- codec_setup_info *ci;
- highlevel_encode_setup *hi;
- double tnominal;
- if(rate<=0) return OV_EINVAL;
-
- ci=vi->codec_setup;
- hi=&ci->hi;
- tnominal=nominal_bitrate;
-
- if(nominal_bitrate<=0.){
- if(max_bitrate>0.){
- if(min_bitrate>0.)
- nominal_bitrate=(max_bitrate+min_bitrate)*.5;
- else
- nominal_bitrate=max_bitrate*.875;
- }else{
- if(min_bitrate>0.){
- nominal_bitrate=min_bitrate;
- }else{
- return(OV_EINVAL);
- }
- }
- }
-
- hi->req=nominal_bitrate;
- hi->setup=get_setup_template(channels,rate,nominal_bitrate,1,&hi->base_setting);
- if(!hi->setup)return OV_EIMPL;
-
- vorbis_encode_setup_setting(vi,channels,rate);
-
- /* initialize management with sane defaults */
- hi->coupling_p=1;
- hi->managed=1;
- hi->bitrate_min=min_bitrate;
- hi->bitrate_max=max_bitrate;
- hi->bitrate_av=tnominal;
- hi->bitrate_av_damp=1.5f; /* full range in no less than 1.5 second */
- hi->bitrate_reservoir=nominal_bitrate*2;
- hi->bitrate_reservoir_bias=.1; /* bias toward hoarding bits */
-
- return(0);
-
-}
-
-int vorbis_encode_init(vorbis_info *vi,
- long channels,
- long rate,
-
- long max_bitrate,
- long nominal_bitrate,
- long min_bitrate){
-
- int ret=vorbis_encode_setup_managed(vi,channels,rate,
- max_bitrate,
- nominal_bitrate,
- min_bitrate);
- if(ret){
- vorbis_info_clear(vi);
- return(ret);
- }
-
- ret=vorbis_encode_setup_init(vi);
- if(ret)
- vorbis_info_clear(vi);
- return(ret);
-}
-
-int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg){
- if(vi){
- codec_setup_info *ci=vi->codec_setup;
- highlevel_encode_setup *hi=&ci->hi;
- int setp=(number&0xf); /* a read request has a low nibble of 0 */
-
- if(setp && hi->set_in_stone)return(OV_EINVAL);
-
- switch(number){
-
- /* now deprecated *****************/
- case OV_ECTL_RATEMANAGE_GET:
- {
-
- struct ovectl_ratemanage_arg *ai=
- (struct ovectl_ratemanage_arg *)arg;
-
- ai->management_active=hi->managed;
- ai->bitrate_hard_window=ai->bitrate_av_window=
- (double)hi->bitrate_reservoir/vi->rate;
- ai->bitrate_av_window_center=1.;
- ai->bitrate_hard_min=hi->bitrate_min;
- ai->bitrate_hard_max=hi->bitrate_max;
- ai->bitrate_av_lo=hi->bitrate_av;
- ai->bitrate_av_hi=hi->bitrate_av;
-
- }
- return(0);
-
- /* now deprecated *****************/
- case OV_ECTL_RATEMANAGE_SET:
- {
- struct ovectl_ratemanage_arg *ai=
- (struct ovectl_ratemanage_arg *)arg;
- if(ai==NULL){
- hi->managed=0;
- }else{
- hi->managed=ai->management_active;
- vorbis_encode_ctl(vi,OV_ECTL_RATEMANAGE_AVG,arg);
- vorbis_encode_ctl(vi,OV_ECTL_RATEMANAGE_HARD,arg);
- }
- }
- return 0;
-
- /* now deprecated *****************/
- case OV_ECTL_RATEMANAGE_AVG:
- {
- struct ovectl_ratemanage_arg *ai=
- (struct ovectl_ratemanage_arg *)arg;
- if(ai==NULL){
- hi->bitrate_av=0;
- }else{
- hi->bitrate_av=(ai->bitrate_av_lo+ai->bitrate_av_hi)*.5;
- }
- }
- return(0);
- /* now deprecated *****************/
- case OV_ECTL_RATEMANAGE_HARD:
- {
- struct ovectl_ratemanage_arg *ai=
- (struct ovectl_ratemanage_arg *)arg;
- if(ai==NULL){
- hi->bitrate_min=0;
- hi->bitrate_max=0;
- }else{
- hi->bitrate_min=ai->bitrate_hard_min;
- hi->bitrate_max=ai->bitrate_hard_max;
- hi->bitrate_reservoir=ai->bitrate_hard_window*
- (hi->bitrate_max+hi->bitrate_min)*.5;
- }
- if(hi->bitrate_reservoir<128.)
- hi->bitrate_reservoir=128.;
- }
- return(0);
-
- /* replacement ratemanage interface */
- case OV_ECTL_RATEMANAGE2_GET:
- {
- struct ovectl_ratemanage2_arg *ai=
- (struct ovectl_ratemanage2_arg *)arg;
- if(ai==NULL)return OV_EINVAL;
-
- ai->management_active=hi->managed;
- ai->bitrate_limit_min_kbps=hi->bitrate_min/1000;
- ai->bitrate_limit_max_kbps=hi->bitrate_max/1000;
- ai->bitrate_average_kbps=hi->bitrate_av/1000;
- ai->bitrate_average_damping=hi->bitrate_av_damp;
- ai->bitrate_limit_reservoir_bits=hi->bitrate_reservoir;
- ai->bitrate_limit_reservoir_bias=hi->bitrate_reservoir_bias;
- }
- return (0);
- case OV_ECTL_RATEMANAGE2_SET:
- {
- struct ovectl_ratemanage2_arg *ai=
- (struct ovectl_ratemanage2_arg *)arg;
- if(ai==NULL){
- hi->managed=0;
- }else{
- /* sanity check; only catch invariant violations */
- if(ai->bitrate_limit_min_kbps>0 &&
- ai->bitrate_average_kbps>0 &&
- ai->bitrate_limit_min_kbps>ai->bitrate_average_kbps)
- return OV_EINVAL;
-
- if(ai->bitrate_limit_max_kbps>0 &&
- ai->bitrate_average_kbps>0 &&
- ai->bitrate_limit_max_kbps<ai->bitrate_average_kbps)
- return OV_EINVAL;
-
- if(ai->bitrate_limit_min_kbps>0 &&
- ai->bitrate_limit_max_kbps>0 &&
- ai->bitrate_limit_min_kbps>ai->bitrate_limit_max_kbps)
- return OV_EINVAL;
-
- if(ai->bitrate_average_damping <= 0.)
- return OV_EINVAL;
-
- if(ai->bitrate_limit_reservoir_bits < 0)
- return OV_EINVAL;
-
- if(ai->bitrate_limit_reservoir_bias < 0.)
- return OV_EINVAL;
-
- if(ai->bitrate_limit_reservoir_bias > 1.)
- return OV_EINVAL;
-
- hi->managed=ai->management_active;
- hi->bitrate_min=ai->bitrate_limit_min_kbps * 1000;
- hi->bitrate_max=ai->bitrate_limit_max_kbps * 1000;
- hi->bitrate_av=ai->bitrate_average_kbps * 1000;
- hi->bitrate_av_damp=ai->bitrate_average_damping;
- hi->bitrate_reservoir=ai->bitrate_limit_reservoir_bits;
- hi->bitrate_reservoir_bias=ai->bitrate_limit_reservoir_bias;
- }
- }
- return 0;
-
- case OV_ECTL_LOWPASS_GET:
- {
- double *farg=(double *)arg;
- *farg=hi->lowpass_kHz;
- }
- return(0);
- case OV_ECTL_LOWPASS_SET:
- {
- double *farg=(double *)arg;
- hi->lowpass_kHz=*farg;
-
- if(hi->lowpass_kHz<2.)hi->lowpass_kHz=2.;
- if(hi->lowpass_kHz>99.)hi->lowpass_kHz=99.;
- hi->lowpass_altered=1;
- }
- return(0);
- case OV_ECTL_IBLOCK_GET:
- {
- double *farg=(double *)arg;
- *farg=hi->impulse_noisetune;
- }
- return(0);
- case OV_ECTL_IBLOCK_SET:
- {
- double *farg=(double *)arg;
- hi->impulse_noisetune=*farg;
-
- if(hi->impulse_noisetune>0.)hi->impulse_noisetune=0.;
- if(hi->impulse_noisetune<-15.)hi->impulse_noisetune=-15.;
- }
- return(0);
- case OV_ECTL_COUPLING_GET:
- {
- int *iarg=(int *)arg;
- *iarg=hi->coupling_p;
- }
- return(0);
- case OV_ECTL_COUPLING_SET:
- {
- const void *new_template;
- double new_base=0.;
- int *iarg=(int *)arg;
- hi->coupling_p=((*iarg)!=0);
-
- /* Fetching a new template can alter the base_setting, which
- many other parameters are based on. Right now, the only
- parameter drawn from the base_setting that can be altered
- by an encctl is the lowpass, so that is explictly flagged
- to not be overwritten when we fetch a new template and
- recompute the dependant settings */
- new_template = get_setup_template(hi->coupling_p?vi->channels:-1,
- vi->rate,
- hi->req,
- hi->managed,
- &new_base);
- if(!hi->setup)return OV_EIMPL;
- hi->setup=new_template;
- hi->base_setting=new_base;
- vorbis_encode_setup_setting(vi,vi->channels,vi->rate);
- }
- return(0);
- }
- return(OV_EIMPL);
- }
- return(OV_EINVAL);
-}
diff --git a/drivers/vorbis/vorbisenc.h b/drivers/vorbis/vorbisenc.h
deleted file mode 100644
index 02332b50ca..0000000000
--- a/drivers/vorbis/vorbisenc.h
+++ /dev/null
@@ -1,436 +0,0 @@
-/********************************************************************
- * *
- * 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 Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: vorbis encode-engine setup
- last mod: $Id: vorbisenc.h 17021 2010-03-24 09:29:41Z xiphmont $
-
- ********************************************************************/
-
-/** \file
- * Libvorbisenc is a convenient API for setting up an encoding
- * environment using libvorbis. Libvorbisenc encapsulates the
- * actions needed to set up the encoder properly.
- */
-
-#ifndef _OV_ENC_H_
-#define _OV_ENC_H_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#include "codec.h"
-
-/**
- * This is the primary function within libvorbisenc for setting up managed
- * bitrate modes.
- *
- * Before this function is called, the \ref vorbis_info
- * struct should be initialized by using vorbis_info_init() from the libvorbis
- * API. After encoding, vorbis_info_clear() should be called.
- *
- * The max_bitrate, nominal_bitrate, and min_bitrate settings are used to set
- * constraints for the encoded file. This function uses these settings to
- * select the appropriate encoding mode and set it up.
- *
- * \param vi Pointer to an initialized \ref vorbis_info struct.
- * \param channels The number of channels to be encoded.
- * \param rate The sampling rate of the source audio.
- * \param max_bitrate Desired maximum bitrate (limit). -1 indicates unset.
- * \param nominal_bitrate Desired average, or central, bitrate. -1 indicates unset.
- * \param min_bitrate Desired minimum bitrate. -1 indicates unset.
- *
- * \return Zero for success, and negative values for failure.
- *
- * \retval 0 Success.
- * \retval OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption.
- * \retval OV_EINVAL Invalid setup request, eg, out of range argument.
- * \retval OV_EIMPL Unimplemented mode; unable to comply with bitrate request.
- */
-extern int vorbis_encode_init(vorbis_info *vi,
- long channels,
- long rate,
-
- long max_bitrate,
- long nominal_bitrate,
- long min_bitrate);
-
-/**
- * This function performs step-one of a three-step bitrate-managed encode
- * setup. It functions similarly to the one-step setup performed by \ref
- * vorbis_encode_init but allows an application to make further encode setup
- * tweaks using \ref vorbis_encode_ctl before finally calling \ref
- * vorbis_encode_setup_init to complete the setup process.
- *
- * Before this function is called, the \ref vorbis_info struct should be
- * initialized by using vorbis_info_init() from the libvorbis API. After
- * encoding, vorbis_info_clear() should be called.
- *
- * The max_bitrate, nominal_bitrate, and min_bitrate settings are used to set
- * constraints for the encoded file. This function uses these settings to
- * select the appropriate encoding mode and set it up.
- *
- * \param vi Pointer to an initialized vorbis_info struct.
- * \param channels The number of channels to be encoded.
- * \param rate The sampling rate of the source audio.
- * \param max_bitrate Desired maximum bitrate (limit). -1 indicates unset.
- * \param nominal_bitrate Desired average, or central, bitrate. -1 indicates unset.
- * \param min_bitrate Desired minimum bitrate. -1 indicates unset.
- *
- * \return Zero for success, and negative for failure.
- *
- * \retval 0 Success
- * \retval OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption.
- * \retval OV_EINVAL Invalid setup request, eg, out of range argument.
- * \retval OV_EIMPL Unimplemented mode; unable to comply with bitrate request.
- */
-extern int vorbis_encode_setup_managed(vorbis_info *vi,
- long channels,
- long rate,
-
- long max_bitrate,
- long nominal_bitrate,
- long min_bitrate);
-
-/**
- * This function performs step-one of a three-step variable bitrate
- * (quality-based) encode setup. It functions similarly to the one-step setup
- * performed by \ref vorbis_encode_init_vbr() but allows an application to
- * make further encode setup tweaks using \ref vorbis_encode_ctl() before
- * finally calling \ref vorbis_encode_setup_init to complete the setup
- * process.
- *
- * Before this function is called, the \ref vorbis_info struct should be
- * initialized by using \ref vorbis_info_init() from the libvorbis API. After
- * encoding, vorbis_info_clear() should be called.
- *
- * \param vi Pointer to an initialized vorbis_info struct.
- * \param channels The number of channels to be encoded.
- * \param rate The sampling rate of the source audio.
- * \param quality Desired quality level, currently from -0.1 to 1.0 (lo to hi).
- *
- * \return Zero for success, and negative values for failure.
- *
- * \retval 0 Success
- * \retval OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption.
- * \retval OV_EINVAL Invalid setup request, eg, out of range argument.
- * \retval OV_EIMPL Unimplemented mode; unable to comply with quality level request.
- */
-extern int vorbis_encode_setup_vbr(vorbis_info *vi,
- long channels,
- long rate,
-
- float quality
- );
-
-/**
- * This is the primary function within libvorbisenc for setting up variable
- * bitrate ("quality" based) modes.
- *
- *
- * Before this function is called, the vorbis_info struct should be
- * initialized by using vorbis_info_init() from the libvorbis API. After
- * encoding, vorbis_info_clear() should be called.
- *
- * \param vi Pointer to an initialized vorbis_info struct.
- * \param channels The number of channels to be encoded.
- * \param rate The sampling rate of the source audio.
- * \param base_quality Desired quality level, currently from -0.1 to 1.0 (lo to hi).
- *
- *
- * \return Zero for success, or a negative number for failure.
- *
- * \retval 0 Success
- * \retval OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption.
- * \retval OV_EINVAL Invalid setup request, eg, out of range argument.
- * \retval OV_EIMPL Unimplemented mode; unable to comply with quality level request.
- */
-extern int vorbis_encode_init_vbr(vorbis_info *vi,
- long channels,
- long rate,
-
- float base_quality
- );
-
-/**
- * This function performs the last stage of three-step encoding setup, as
- * described in the API overview under managed bitrate modes.
- *
- * Before this function is called, the \ref vorbis_info struct should be
- * initialized by using vorbis_info_init() from the libvorbis API, one of
- * \ref vorbis_encode_setup_managed() or \ref vorbis_encode_setup_vbr() called to
- * initialize the high-level encoding setup, and \ref vorbis_encode_ctl()
- * called if necessary to make encoding setup changes.
- * vorbis_encode_setup_init() finalizes the highlevel encoding structure into
- * a complete encoding setup after which the application may make no further
- * setup changes.
- *
- * After encoding, vorbis_info_clear() should be called.
- *
- * \param vi Pointer to an initialized \ref vorbis_info struct.
- *
- * \return Zero for success, and negative values for failure.
- *
- * \retval 0 Success.
- * \retval OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption.
- *
- * \retval OV_EINVAL Attempt to use vorbis_encode_setup_init() without first
- * calling one of vorbis_encode_setup_managed() or vorbis_encode_setup_vbr() to
- * initialize the high-level encoding setup
- *
- */
-extern int vorbis_encode_setup_init(vorbis_info *vi);
-
-/**
- * This function implements a generic interface to miscellaneous encoder
- * settings similar to the classic UNIX 'ioctl()' system call. Applications
- * may use vorbis_encode_ctl() to query or set bitrate management or quality
- * mode details by using one of several \e request arguments detailed below.
- * vorbis_encode_ctl() must be called after one of
- * vorbis_encode_setup_managed() or vorbis_encode_setup_vbr(). When used
- * to modify settings, \ref vorbis_encode_ctl() must be called before \ref
- * vorbis_encode_setup_init().
- *
- * \param vi Pointer to an initialized vorbis_info struct.
- *
- * \param number Specifies the desired action; See \ref encctlcodes "the list
- * of available requests".
- *
- * \param arg void * pointing to a data structure matching the request
- * argument.
- *
- * \retval 0 Success. Any further return information (such as the result of a
- * query) is placed into the storage pointed to by *arg.
- *
- * \retval OV_EINVAL Invalid argument, or an attempt to modify a setting after
- * calling vorbis_encode_setup_init().
- *
- * \retval OV_EIMPL Unimplemented or unknown request
- */
-extern int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg);
-
-/**
- * \deprecated This is a deprecated interface. Please use vorbis_encode_ctl()
- * with the \ref ovectl_ratemanage2_arg struct and \ref
- * OV_ECTL_RATEMANAGE2_GET and \ref OV_ECTL_RATEMANAGE2_SET calls in new code.
- *
- * The \ref ovectl_ratemanage_arg structure is used with vorbis_encode_ctl()
- * and the \ref OV_ECTL_RATEMANAGE_GET, \ref OV_ECTL_RATEMANAGE_SET, \ref
- * OV_ECTL_RATEMANAGE_AVG, \ref OV_ECTL_RATEMANAGE_HARD calls in order to
- * query and modify specifics of the encoder's bitrate management
- * configuration.
-*/
-struct ovectl_ratemanage_arg {
- int management_active; /**< nonzero if bitrate management is active*/
-/** hard lower limit (in kilobits per second) below which the stream bitrate
- will never be allowed for any given bitrate_hard_window seconds of time.*/
- long bitrate_hard_min;
-/** hard upper limit (in kilobits per second) above which the stream bitrate
- will never be allowed for any given bitrate_hard_window seconds of time.*/
- long bitrate_hard_max;
-/** the window period (in seconds) used to regulate the hard bitrate minimum
- and maximum*/
- double bitrate_hard_window;
-/** soft lower limit (in kilobits per second) below which the average bitrate
- tracker will start nudging the bitrate higher.*/
- long bitrate_av_lo;
-/** soft upper limit (in kilobits per second) above which the average bitrate
- tracker will start nudging the bitrate lower.*/
- long bitrate_av_hi;
-/** the window period (in seconds) used to regulate the average bitrate
- minimum and maximum.*/
- double bitrate_av_window;
-/** Regulates the relative centering of the average and hard windows; in
- libvorbis 1.0 and 1.0.1, the hard window regulation overlapped but
- followed the average window regulation. In libvorbis 1.1 a bit-reservoir
- interface replaces the old windowing interface; the older windowing
- interface is simulated and this field has no effect.*/
- double bitrate_av_window_center;
-};
-
-/**
- * \name struct ovectl_ratemanage2_arg
- *
- * The ovectl_ratemanage2_arg structure is used with vorbis_encode_ctl() and
- * the OV_ECTL_RATEMANAGE2_GET and OV_ECTL_RATEMANAGE2_SET calls in order to
- * query and modify specifics of the encoder's bitrate management
- * configuration.
- *
-*/
-struct ovectl_ratemanage2_arg {
- int management_active; /**< nonzero if bitrate management is active */
-/** Lower allowed bitrate limit in kilobits per second */
- long bitrate_limit_min_kbps;
-/** Upper allowed bitrate limit in kilobits per second */
- long bitrate_limit_max_kbps;
- long bitrate_limit_reservoir_bits; /**<Size of the bitrate reservoir in bits */
-/** Regulates the bitrate reservoir's preferred fill level in a range from 0.0
- * to 1.0; 0.0 tries to bank bits to buffer against future bitrate spikes, 1.0
- * buffers against future sudden drops in instantaneous bitrate. Default is
- * 0.1
- */
- double bitrate_limit_reservoir_bias;
-/** Average bitrate setting in kilobits per second */
- long bitrate_average_kbps;
-/** Slew rate limit setting for average bitrate adjustment; sets the minimum
- * time in seconds the bitrate tracker may swing from one extreme to the
- * other when boosting or damping average bitrate.
- */
- double bitrate_average_damping;
-};
-
-
-/**
- * \name vorbis_encode_ctl() codes
- *
- * \anchor encctlcodes
- *
- * These values are passed as the \c number parameter of vorbis_encode_ctl().
- * The type of the referent of that function's \c arg pointer depends on these
- * codes.
- */
-/*@{*/
-
-/**
- * Query the current encoder bitrate management setting.
- *
- *Argument: <tt>struct ovectl_ratemanage2_arg *</tt>
- *
- * Used to query the current encoder bitrate management setting. Also used to
- * initialize fields of an ovectl_ratemanage2_arg structure for use with
- * \ref OV_ECTL_RATEMANAGE2_SET.
- */
-#define OV_ECTL_RATEMANAGE2_GET 0x14
-
-/**
- * Set the current encoder bitrate management settings.
- *
- * Argument: <tt>struct ovectl_ratemanage2_arg *</tt>
- *
- * Used to set the current encoder bitrate management settings to the values
- * listed in the ovectl_ratemanage2_arg. Passing a NULL pointer will disable
- * bitrate management.
-*/
-#define OV_ECTL_RATEMANAGE2_SET 0x15
-
-/**
- * Returns the current encoder hard-lowpass setting (kHz) in the double
- * pointed to by arg.
- *
- * Argument: <tt>double *</tt>
-*/
-#define OV_ECTL_LOWPASS_GET 0x20
-
-/**
- * Sets the encoder hard-lowpass to the value (kHz) pointed to by arg. Valid
- * lowpass settings range from 2 to 99.
- *
- * Argument: <tt>double *</tt>
-*/
-#define OV_ECTL_LOWPASS_SET 0x21
-
-/**
- * Returns the current encoder impulse block setting in the double pointed
- * to by arg.
- *
- * Argument: <tt>double *</tt>
-*/
-#define OV_ECTL_IBLOCK_GET 0x30
-
-/**
- * Sets the impulse block bias to the the value pointed to by arg.
- *
- * Argument: <tt>double *</tt>
- *
- * Valid range is -15.0 to 0.0 [default]. A negative impulse block bias will
- * direct to encoder to use more bits when incoding short blocks that contain
- * strong impulses, thus improving the accuracy of impulse encoding.
- */
-#define OV_ECTL_IBLOCK_SET 0x31
-
-/**
- * Returns the current encoder coupling setting in the int pointed
- * to by arg.
- *
- * Argument: <tt>int *</tt>
-*/
-#define OV_ECTL_COUPLING_GET 0x40
-
-/**
- * Enables/disables channel coupling in multichannel encoding according to arg.
- *
- * Argument: <tt>int *</tt>
- *
- * Zero disables channel coupling for multichannel inputs, nonzer enables
- * channel coupling. Setting has no effect on monophonic encoding or
- * multichannel counts that do not offer coupling. At present, coupling is
- * available for stereo and 5.1 encoding.
- */
-#define OV_ECTL_COUPLING_SET 0x41
-
- /* deprecated rate management supported only for compatibility */
-
-/**
- * Old interface to querying bitrate management settings.
- *
- * Deprecated after move to bit-reservoir style management in 1.1 rendered
- * this interface partially obsolete.
-
- * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_GET instead.
- *
- * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
- */
-#define OV_ECTL_RATEMANAGE_GET 0x10
-/**
- * Old interface to modifying bitrate management settings.
- *
- * deprecated after move to bit-reservoir style management in 1.1 rendered
- * this interface partially obsolete.
- *
- * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead.
- *
- * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
- */
-#define OV_ECTL_RATEMANAGE_SET 0x11
-/**
- * Old interface to setting average-bitrate encoding mode.
- *
- * Deprecated after move to bit-reservoir style management in 1.1 rendered
- * this interface partially obsolete.
- *
- * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead.
- *
- * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
- */
-#define OV_ECTL_RATEMANAGE_AVG 0x12
-/**
- * Old interface to setting bounded-bitrate encoding modes.
- *
- * deprecated after move to bit-reservoir style management in 1.1 rendered
- * this interface partially obsolete.
- *
- * \deprecated Please use \ref OV_ECTL_RATEMANAGE2_SET instead.
- *
- * Argument: <tt>struct ovectl_ratemanage_arg *</tt>
- */
-#define OV_ECTL_RATEMANAGE_HARD 0x13
-
-/*@}*/
-
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
diff --git a/drivers/vorbis/vorbisfile.c b/drivers/vorbis/vorbisfile.c
deleted file mode 100644
index fc0c86ff11..0000000000
--- a/drivers/vorbis/vorbisfile.c
+++ /dev/null
@@ -1,2425 +0,0 @@
-/********************************************************************
- * *
- * 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-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: stdio-based convenience library for opening/seeking/decoding
- last mod: $Id: vorbisfile.c 19457 2015-03-03 00:15:29Z giles $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>
-#include <math.h>
-
-#include "vorbis/codec.h"
-
-/* we don't need or want the static callback symbols here */
-#define OV_EXCLUDE_STATIC_CALLBACKS
-#include "vorbis/vorbisfile.h"
-
-#include "os.h"
-#include "misc.h"
-
-/* A 'chained bitstream' is a Vorbis bitstream that contains more than
- one logical bitstream arranged end to end (the only form of Ogg
- multiplexing allowed in a Vorbis bitstream; grouping [parallel
- multiplexing] is not allowed in Vorbis) */
-
-/* A Vorbis file can be played beginning to end (streamed) without
- worrying ahead of time about chaining (see decoder_example.c). If
- we have the whole file, however, and want random access
- (seeking/scrubbing) or desire to know the total length/time of a
- file, we need to account for the possibility of chaining. */
-
-/* We can handle things a number of ways; we can determine the entire
- bitstream structure right off the bat, or find pieces on demand.
- This example determines and caches structure for the entire
- bitstream, but builds a virtual decoder on the fly when moving
- between links in the chain. */
-
-/* There are also different ways to implement seeking. Enough
- information exists in an Ogg bitstream to seek to
- sample-granularity positions in the output. Or, one can seek by
- picking some portion of the stream roughly in the desired area if
- we only want coarse navigation through the stream. */
-
-/*************************************************************************
- * Many, many internal helpers. The intention is not to be confusing;
- * rampant duplication and monolithic function implementation would be
- * harder to understand anyway. The high level functions are last. Begin
- * grokking near the end of the file */
-
-/* read a little more data from the file/pipe into the ogg_sync framer
-*/
-#define CHUNKSIZE 65536 /* greater-than-page-size granularity seeking */
-#define READSIZE 2048 /* a smaller read size is needed for low-rate streaming. */
-
-static long _get_data(OggVorbis_File *vf){
- errno=0;
- if(!(vf->callbacks.read_func))return(-1);
- if(vf->datasource){
- char *buffer=ogg_sync_buffer(&vf->oy,READSIZE);
- long bytes=(vf->callbacks.read_func)(buffer,1,READSIZE,vf->datasource);
- if(bytes>0)ogg_sync_wrote(&vf->oy,bytes);
- if(bytes==0 && errno)return(-1);
- return(bytes);
- }else
- return(0);
-}
-
-/* save a tiny smidge of verbosity to make the code more readable */
-static int _seek_helper(OggVorbis_File *vf,ogg_int64_t offset){
- if(vf->datasource){
- /* only seek if the file position isn't already there */
- if(vf->offset != offset){
- if(!(vf->callbacks.seek_func)||
- (vf->callbacks.seek_func)(vf->datasource, offset, SEEK_SET) == -1)
- return OV_EREAD;
- vf->offset=offset;
- ogg_sync_reset(&vf->oy);
- }
- }else{
- /* shouldn't happen unless someone writes a broken callback */
- return OV_EFAULT;
- }
- return 0;
-}
-
-/* The read/seek functions track absolute position within the stream */
-
-/* from the head of the stream, get the next page. boundary specifies
- if the function is allowed to fetch more data from the stream (and
- how much) or only use internally buffered data.
-
- boundary: -1) unbounded search
- 0) read no additional data; use cached only
- n) search for a new page beginning for n bytes
-
- return: <0) did not find a page (OV_FALSE, OV_EOF, OV_EREAD)
- n) found a page at absolute offset n */
-
-static ogg_int64_t _get_next_page(OggVorbis_File *vf,ogg_page *og,
- ogg_int64_t boundary){
- if(boundary>0)boundary+=vf->offset;
- while(1){
- long more;
-
- if(boundary>0 && vf->offset>=boundary)return(OV_FALSE);
- more=ogg_sync_pageseek(&vf->oy,og);
-
- if(more<0){
- /* skipped n bytes */
- vf->offset-=more;
- }else{
- if(more==0){
- /* send more paramedics */
- if(!boundary)return(OV_FALSE);
- {
- long ret=_get_data(vf);
- if(ret==0)return(OV_EOF);
- if(ret<0)return(OV_EREAD);
- }
- }else{
- /* got a page. Return the offset at the page beginning,
- advance the internal offset past the page end */
- ogg_int64_t ret=vf->offset;
- vf->offset+=more;
- return(ret);
-
- }
- }
- }
-}
-
-/* find the latest page beginning before the passed in position. Much
- dirtier than the above as Ogg doesn't have any backward search
- linkage. no 'readp' as it will certainly have to read. */
-/* returns offset or OV_EREAD, OV_FAULT */
-static ogg_int64_t _get_prev_page(OggVorbis_File *vf,ogg_int64_t begin,ogg_page *og){
- ogg_int64_t end = begin;
- ogg_int64_t ret;
- ogg_int64_t offset=-1;
-
- while(offset==-1){
- begin-=CHUNKSIZE;
- if(begin<0)
- begin=0;
-
- ret=_seek_helper(vf,begin);
- if(ret)return(ret);
-
- while(vf->offset<end){
- memset(og,0,sizeof(*og));
- ret=_get_next_page(vf,og,end-vf->offset);
- if(ret==OV_EREAD)return(OV_EREAD);
- if(ret<0){
- break;
- }else{
- offset=ret;
- }
- }
- }
-
- /* In a fully compliant, non-multiplexed stream, we'll still be
- holding the last page. In multiplexed (or noncompliant streams),
- we will probably have to re-read the last page we saw */
- if(og->header_len==0){
- ret=_seek_helper(vf,offset);
- if(ret)return(ret);
-
- ret=_get_next_page(vf,og,CHUNKSIZE);
- if(ret<0)
- /* this shouldn't be possible */
- return(OV_EFAULT);
- }
-
- return(offset);
-}
-
-static void _add_serialno(ogg_page *og,long **serialno_list, int *n){
- long s = ogg_page_serialno(og);
- (*n)++;
-
- if(*serialno_list){
- *serialno_list = _ogg_realloc(*serialno_list, sizeof(**serialno_list)*(*n));
- }else{
- *serialno_list = _ogg_malloc(sizeof(**serialno_list));
- }
-
- (*serialno_list)[(*n)-1] = s;
-}
-
-/* returns nonzero if found */
-static int _lookup_serialno(long s, long *serialno_list, int n){
- if(serialno_list){
- while(n--){
- if(*serialno_list == s) return 1;
- serialno_list++;
- }
- }
- return 0;
-}
-
-static int _lookup_page_serialno(ogg_page *og, long *serialno_list, int n){
- long s = ogg_page_serialno(og);
- return _lookup_serialno(s,serialno_list,n);
-}
-
-/* performs the same search as _get_prev_page, but prefers pages of
- the specified serial number. If a page of the specified serialno is
- spotted during the seek-back-and-read-forward, it will return the
- info of last page of the matching serial number instead of the very
- last page. If no page of the specified serialno is seen, it will
- return the info of last page and alter *serialno. */
-static ogg_int64_t _get_prev_page_serial(OggVorbis_File *vf, ogg_int64_t begin,
- long *serial_list, int serial_n,
- int *serialno, ogg_int64_t *granpos){
- ogg_page og;
- ogg_int64_t end=begin;
- ogg_int64_t ret;
-
- ogg_int64_t prefoffset=-1;
- ogg_int64_t offset=-1;
- ogg_int64_t ret_serialno=-1;
- ogg_int64_t ret_gran=-1;
-
- while(offset==-1){
- begin-=CHUNKSIZE;
- if(begin<0)
- begin=0;
-
- ret=_seek_helper(vf,begin);
- if(ret)return(ret);
-
- while(vf->offset<end){
- ret=_get_next_page(vf,&og,end-vf->offset);
- if(ret==OV_EREAD)return(OV_EREAD);
- if(ret<0){
- break;
- }else{
- ret_serialno=ogg_page_serialno(&og);
- ret_gran=ogg_page_granulepos(&og);
- offset=ret;
-
- if(ret_serialno == *serialno){
- prefoffset=ret;
- *granpos=ret_gran;
- }
-
- if(!_lookup_serialno(ret_serialno,serial_list,serial_n)){
- /* we fell off the end of the link, which means we seeked
- back too far and shouldn't have been looking in that link
- to begin with. If we found the preferred serial number,
- forget that we saw it. */
- prefoffset=-1;
- }
- }
- }
- }
-
- /* we're not interested in the page... just the serialno and granpos. */
- if(prefoffset>=0)return(prefoffset);
-
- *serialno = ret_serialno;
- *granpos = ret_gran;
- return(offset);
-
-}
-
-/* uses the local ogg_stream storage in vf; this is important for
- non-streaming input sources */
-static int _fetch_headers(OggVorbis_File *vf,vorbis_info *vi,vorbis_comment *vc,
- long **serialno_list, int *serialno_n,
- ogg_page *og_ptr){
- ogg_page og;
- ogg_packet op;
- int i,ret;
- int allbos=0;
-
- if(!og_ptr){
- ogg_int64_t llret=_get_next_page(vf,&og,CHUNKSIZE);
- if(llret==OV_EREAD)return(OV_EREAD);
- if(llret<0)return(OV_ENOTVORBIS);
- og_ptr=&og;
- }
-
- vorbis_info_init(vi);
- vorbis_comment_init(vc);
- vf->ready_state=OPENED;
-
- /* extract the serialnos of all BOS pages + the first set of vorbis
- headers we see in the link */
-
- while(ogg_page_bos(og_ptr)){
- if(serialno_list){
- if(_lookup_page_serialno(og_ptr,*serialno_list,*serialno_n)){
- /* a dupe serialnumber in an initial header packet set == invalid stream */
- if(*serialno_list)_ogg_free(*serialno_list);
- *serialno_list=0;
- *serialno_n=0;
- ret=OV_EBADHEADER;
- goto bail_header;
- }
-
- _add_serialno(og_ptr,serialno_list,serialno_n);
- }
-
- if(vf->ready_state<STREAMSET){
- /* we don't have a vorbis stream in this link yet, so begin
- prospective stream setup. We need a stream to get packets */
- ogg_stream_reset_serialno(&vf->os,ogg_page_serialno(og_ptr));
- ogg_stream_pagein(&vf->os,og_ptr);
-
- if(ogg_stream_packetout(&vf->os,&op) > 0 &&
- vorbis_synthesis_idheader(&op)){
- /* vorbis header; continue setup */
- vf->ready_state=STREAMSET;
- if((ret=vorbis_synthesis_headerin(vi,vc,&op))){
- ret=OV_EBADHEADER;
- goto bail_header;
- }
- }
- }
-
- /* get next page */
- {
- ogg_int64_t llret=_get_next_page(vf,og_ptr,CHUNKSIZE);
- if(llret==OV_EREAD){
- ret=OV_EREAD;
- goto bail_header;
- }
- if(llret<0){
- ret=OV_ENOTVORBIS;
- goto bail_header;
- }
-
- /* if this page also belongs to our vorbis stream, submit it and break */
- if(vf->ready_state==STREAMSET &&
- vf->os.serialno == ogg_page_serialno(og_ptr)){
- ogg_stream_pagein(&vf->os,og_ptr);
- break;
- }
- }
- }
-
- if(vf->ready_state!=STREAMSET){
- ret = OV_ENOTVORBIS;
- goto bail_header;
- }
-
- while(1){
-
- i=0;
- while(i<2){ /* get a page loop */
-
- while(i<2){ /* get a packet loop */
-
- int result=ogg_stream_packetout(&vf->os,&op);
- if(result==0)break;
- if(result==-1){
- ret=OV_EBADHEADER;
- goto bail_header;
- }
-
- if((ret=vorbis_synthesis_headerin(vi,vc,&op)))
- goto bail_header;
-
- i++;
- }
-
- while(i<2){
- if(_get_next_page(vf,og_ptr,CHUNKSIZE)<0){
- ret=OV_EBADHEADER;
- goto bail_header;
- }
-
- /* if this page belongs to the correct stream, go parse it */
- if(vf->os.serialno == ogg_page_serialno(og_ptr)){
- ogg_stream_pagein(&vf->os,og_ptr);
- break;
- }
-
- /* if we never see the final vorbis headers before the link
- ends, abort */
- if(ogg_page_bos(og_ptr)){
- if(allbos){
- ret = OV_EBADHEADER;
- goto bail_header;
- }else
- allbos=1;
- }
-
- /* otherwise, keep looking */
- }
- }
-
- return 0;
- }
-
- bail_header:
- vorbis_info_clear(vi);
- vorbis_comment_clear(vc);
- vf->ready_state=OPENED;
-
- return ret;
-}
-
-/* Starting from current cursor position, get initial PCM offset of
- next page. Consumes the page in the process without decoding
- audio, however this is only called during stream parsing upon
- seekable open. */
-static ogg_int64_t _initial_pcmoffset(OggVorbis_File *vf, vorbis_info *vi){
- ogg_page og;
- ogg_int64_t accumulated=0;
- long lastblock=-1;
- int result;
- int serialno = vf->os.serialno;
-
- while(1){
- ogg_packet op;
- if(_get_next_page(vf,&og,-1)<0)
- break; /* should not be possible unless the file is truncated/mangled */
-
- if(ogg_page_bos(&og)) break;
- if(ogg_page_serialno(&og)!=serialno) continue;
-
- /* count blocksizes of all frames in the page */
- ogg_stream_pagein(&vf->os,&og);
- while((result=ogg_stream_packetout(&vf->os,&op))){
- if(result>0){ /* ignore holes */
- long thisblock=vorbis_packet_blocksize(vi,&op);
- if(thisblock>=0){
- if(lastblock!=-1)
- accumulated+=(lastblock+thisblock)>>2;
- lastblock=thisblock;
- }
- }
- }
-
- if(ogg_page_granulepos(&og)!=-1){
- /* pcm offset of last packet on the first audio page */
- accumulated= ogg_page_granulepos(&og)-accumulated;
- break;
- }
- }
-
- /* less than zero? Either a corrupt file or a stream with samples
- trimmed off the beginning, a normal occurrence; in both cases set
- the offset to zero */
- if(accumulated<0)accumulated=0;
-
- return accumulated;
-}
-
-/* finds each bitstream link one at a time using a bisection search
- (has to begin by knowing the offset of the lb's initial page).
- Recurses for each link so it can alloc the link storage after
- finding them all, then unroll and fill the cache at the same time */
-static int _bisect_forward_serialno(OggVorbis_File *vf,
- ogg_int64_t begin,
- ogg_int64_t searched,
- ogg_int64_t end,
- ogg_int64_t endgran,
- int endserial,
- long *currentno_list,
- int currentnos,
- long m){
- ogg_int64_t pcmoffset;
- ogg_int64_t dataoffset=searched;
- ogg_int64_t endsearched=end;
- ogg_int64_t next=end;
- ogg_int64_t searchgran=-1;
- ogg_page og;
- ogg_int64_t ret,last;
- int serialno = vf->os.serialno;
-
- /* invariants:
- we have the headers and serialnos for the link beginning at 'begin'
- we have the offset and granpos of the last page in the file (potentially
- not a page we care about)
- */
-
- /* Is the last page in our list of current serialnumbers? */
- if(_lookup_serialno(endserial,currentno_list,currentnos)){
-
- /* last page is in the starting serialno list, so we've bisected
- down to (or just started with) a single link. Now we need to
- find the last vorbis page belonging to the first vorbis stream
- for this link. */
- searched = end;
- while(endserial != serialno){
- endserial = serialno;
- searched=_get_prev_page_serial(vf,searched,currentno_list,currentnos,&endserial,&endgran);
- }
-
- vf->links=m+1;
- if(vf->offsets)_ogg_free(vf->offsets);
- if(vf->serialnos)_ogg_free(vf->serialnos);
- if(vf->dataoffsets)_ogg_free(vf->dataoffsets);
-
- vf->offsets=_ogg_malloc((vf->links+1)*sizeof(*vf->offsets));
- vf->vi=_ogg_realloc(vf->vi,vf->links*sizeof(*vf->vi));
- vf->vc=_ogg_realloc(vf->vc,vf->links*sizeof(*vf->vc));
- vf->serialnos=_ogg_malloc(vf->links*sizeof(*vf->serialnos));
- vf->dataoffsets=_ogg_malloc(vf->links*sizeof(*vf->dataoffsets));
- vf->pcmlengths=_ogg_malloc(vf->links*2*sizeof(*vf->pcmlengths));
-
- vf->offsets[m+1]=end;
- vf->offsets[m]=begin;
- vf->pcmlengths[m*2+1]=(endgran<0?0:endgran);
-
- }else{
-
- /* last page is not in the starting stream's serial number list,
- so we have multiple links. Find where the stream that begins
- our bisection ends. */
-
- long *next_serialno_list=NULL;
- int next_serialnos=0;
- vorbis_info vi;
- vorbis_comment vc;
- int testserial = serialno+1;
-
- /* the below guards against garbage seperating the last and
- first pages of two links. */
- while(searched<endsearched){
- ogg_int64_t bisect;
-
- if(endsearched-searched<CHUNKSIZE){
- bisect=searched;
- }else{
- bisect=(searched+endsearched)/2;
- }
-
- ret=_seek_helper(vf,bisect);
- if(ret)return(ret);
-
- last=_get_next_page(vf,&og,-1);
- if(last==OV_EREAD)return(OV_EREAD);
- if(last<0 || !_lookup_page_serialno(&og,currentno_list,currentnos)){
- endsearched=bisect;
- if(last>=0)next=last;
- }else{
- searched=vf->offset;
- }
- }
-
- /* Bisection point found */
- /* for the time being, fetch end PCM offset the simple way */
- searched = next;
- while(testserial != serialno){
- testserial = serialno;
- searched = _get_prev_page_serial(vf,searched,currentno_list,currentnos,&testserial,&searchgran);
- }
-
- ret=_seek_helper(vf,next);
- if(ret)return(ret);
-
- ret=_fetch_headers(vf,&vi,&vc,&next_serialno_list,&next_serialnos,NULL);
- if(ret)return(ret);
- serialno = vf->os.serialno;
- dataoffset = vf->offset;
-
- /* this will consume a page, however the next bisection always
- starts with a raw seek */
- pcmoffset = _initial_pcmoffset(vf,&vi);
-
- ret=_bisect_forward_serialno(vf,next,vf->offset,end,endgran,endserial,
- next_serialno_list,next_serialnos,m+1);
- if(ret)return(ret);
-
- if(next_serialno_list)_ogg_free(next_serialno_list);
-
- vf->offsets[m+1]=next;
- vf->serialnos[m+1]=serialno;
- vf->dataoffsets[m+1]=dataoffset;
-
- vf->vi[m+1]=vi;
- vf->vc[m+1]=vc;
-
- vf->pcmlengths[m*2+1]=searchgran;
- vf->pcmlengths[m*2+2]=pcmoffset;
- vf->pcmlengths[m*2+3]-=pcmoffset;
- if(vf->pcmlengths[m*2+3]<0)vf->pcmlengths[m*2+3]=0;
- }
- return(0);
-}
-
-static int _make_decode_ready(OggVorbis_File *vf){
- if(vf->ready_state>STREAMSET)return 0;
- if(vf->ready_state<STREAMSET)return OV_EFAULT;
- if(vf->seekable){
- if(vorbis_synthesis_init(&vf->vd,vf->vi+vf->current_link))
- return OV_EBADLINK;
- }else{
- if(vorbis_synthesis_init(&vf->vd,vf->vi))
- return OV_EBADLINK;
- }
- vorbis_block_init(&vf->vd,&vf->vb);
- vf->ready_state=INITSET;
- vf->bittrack=0.f;
- vf->samptrack=0.f;
- return 0;
-}
-
-static int _open_seekable2(OggVorbis_File *vf){
- ogg_int64_t dataoffset=vf->dataoffsets[0],end,endgran=-1;
- int endserial=vf->os.serialno;
- int serialno=vf->os.serialno;
-
- /* we're partially open and have a first link header state in
- storage in vf */
-
- /* fetch initial PCM offset */
- ogg_int64_t pcmoffset = _initial_pcmoffset(vf,vf->vi);
-
- /* we can seek, so set out learning all about this file */
- if(vf->callbacks.seek_func && vf->callbacks.tell_func){
- (vf->callbacks.seek_func)(vf->datasource,0,SEEK_END);
- vf->offset=vf->end=(vf->callbacks.tell_func)(vf->datasource);
- }else{
- vf->offset=vf->end=-1;
- }
-
- /* If seek_func is implemented, tell_func must also be implemented */
- if(vf->end==-1) return(OV_EINVAL);
-
- /* Get the offset of the last page of the physical bitstream, or, if
- we're lucky the last vorbis page of this link as most OggVorbis
- files will contain a single logical bitstream */
- end=_get_prev_page_serial(vf,vf->end,vf->serialnos+2,vf->serialnos[1],&endserial,&endgran);
- if(end<0)return(end);
-
- /* now determine bitstream structure recursively */
- if(_bisect_forward_serialno(vf,0,dataoffset,end,endgran,endserial,
- vf->serialnos+2,vf->serialnos[1],0)<0)return(OV_EREAD);
-
- vf->offsets[0]=0;
- vf->serialnos[0]=serialno;
- vf->dataoffsets[0]=dataoffset;
- vf->pcmlengths[0]=pcmoffset;
- vf->pcmlengths[1]-=pcmoffset;
- if(vf->pcmlengths[1]<0)vf->pcmlengths[1]=0;
-
- return(ov_raw_seek(vf,dataoffset));
-}
-
-/* clear out the current logical bitstream decoder */
-static void _decode_clear(OggVorbis_File *vf){
- vorbis_dsp_clear(&vf->vd);
- vorbis_block_clear(&vf->vb);
- vf->ready_state=OPENED;
-}
-
-/* fetch and process a packet. Handles the case where we're at a
- bitstream boundary and dumps the decoding machine. If the decoding
- machine is unloaded, it loads it. It also keeps pcm_offset up to
- date (seek and read both use this. seek uses a special hack with
- readp).
-
- return: <0) error, OV_HOLE (lost packet) or OV_EOF
- 0) need more data (only if readp==0)
- 1) got a packet
-*/
-
-static int _fetch_and_process_packet(OggVorbis_File *vf,
- ogg_packet *op_in,
- int readp,
- int spanp){
- ogg_page og;
-
- /* handle one packet. Try to fetch it from current stream state */
- /* extract packets from page */
- while(1){
-
- if(vf->ready_state==STREAMSET){
- int ret=_make_decode_ready(vf);
- if(ret<0)return ret;
- }
-
- /* process a packet if we can. */
-
- if(vf->ready_state==INITSET){
- int hs=vorbis_synthesis_halfrate_p(vf->vi);
-
- while(1) {
- ogg_packet op;
- ogg_packet *op_ptr=(op_in?op_in:&op);
- int result=ogg_stream_packetout(&vf->os,op_ptr);
- ogg_int64_t granulepos;
-
- op_in=NULL;
- if(result==-1)return(OV_HOLE); /* hole in the data. */
- if(result>0){
- /* got a packet. process it */
- granulepos=op_ptr->granulepos;
- if(!vorbis_synthesis(&vf->vb,op_ptr)){ /* lazy check for lazy
- header handling. The
- header packets aren't
- audio, so if/when we
- submit them,
- vorbis_synthesis will
- reject them */
-
- /* suck in the synthesis data and track bitrate */
- {
- int oldsamples=vorbis_synthesis_pcmout(&vf->vd,NULL);
- /* for proper use of libvorbis within libvorbisfile,
- oldsamples will always be zero. */
- if(oldsamples)return(OV_EFAULT);
-
- vorbis_synthesis_blockin(&vf->vd,&vf->vb);
- vf->samptrack+=(vorbis_synthesis_pcmout(&vf->vd,NULL)<<hs);
- vf->bittrack+=op_ptr->bytes*8;
- }
-
- /* update the pcm offset. */
- if(granulepos!=-1 && !op_ptr->e_o_s){
- int link=(vf->seekable?vf->current_link:0);
- int i,samples;
-
- /* this packet has a pcm_offset on it (the last packet
- completed on a page carries the offset) After processing
- (above), we know the pcm position of the *last* sample
- ready to be returned. Find the offset of the *first*
-
- As an aside, this trick is inaccurate if we begin
- reading anew right at the last page; the end-of-stream
- granulepos declares the last frame in the stream, and the
- last packet of the last page may be a partial frame.
- So, we need a previous granulepos from an in-sequence page
- to have a reference point. Thus the !op_ptr->e_o_s clause
- above */
-
- if(vf->seekable && link>0)
- granulepos-=vf->pcmlengths[link*2];
- if(granulepos<0)granulepos=0; /* actually, this
- shouldn't be possible
- here unless the stream
- is very broken */
-
- samples=(vorbis_synthesis_pcmout(&vf->vd,NULL)<<hs);
-
- granulepos-=samples;
- for(i=0;i<link;i++)
- granulepos+=vf->pcmlengths[i*2+1];
- vf->pcm_offset=granulepos;
- }
- return(1);
- }
- }
- else
- break;
- }
- }
-
- if(vf->ready_state>=OPENED){
- ogg_int64_t ret;
-
- while(1){
- /* the loop is not strictly necessary, but there's no sense in
- doing the extra checks of the larger loop for the common
- case in a multiplexed bistream where the page is simply
- part of a different logical bitstream; keep reading until
- we get one with the correct serialno */
-
- if(!readp)return(0);
- if((ret=_get_next_page(vf,&og,-1))<0){
- return(OV_EOF); /* eof. leave unitialized */
- }
-
- /* bitrate tracking; add the header's bytes here, the body bytes
- are done by packet above */
- vf->bittrack+=og.header_len*8;
-
- if(vf->ready_state==INITSET){
- if(vf->current_serialno!=ogg_page_serialno(&og)){
-
- /* two possibilities:
- 1) our decoding just traversed a bitstream boundary
- 2) another stream is multiplexed into this logical section */
-
- if(ogg_page_bos(&og)){
- /* boundary case */
- if(!spanp)
- return(OV_EOF);
-
- _decode_clear(vf);
-
- if(!vf->seekable){
- vorbis_info_clear(vf->vi);
- vorbis_comment_clear(vf->vc);
- }
- break;
-
- }else
- continue; /* possibility #2 */
- }
- }
-
- break;
- }
- }
-
- /* Do we need to load a new machine before submitting the page? */
- /* This is different in the seekable and non-seekable cases.
-
- In the seekable case, we already have all the header
- information loaded and cached; we just initialize the machine
- with it and continue on our merry way.
-
- In the non-seekable (streaming) case, we'll only be at a
- boundary if we just left the previous logical bitstream and
- we're now nominally at the header of the next bitstream
- */
-
- if(vf->ready_state!=INITSET){
- int link;
-
- if(vf->ready_state<STREAMSET){
- if(vf->seekable){
- long serialno = ogg_page_serialno(&og);
-
- /* match the serialno to bitstream section. We use this rather than
- offset positions to avoid problems near logical bitstream
- boundaries */
-
- for(link=0;link<vf->links;link++)
- if(vf->serialnos[link]==serialno)break;
-
- if(link==vf->links) continue; /* not the desired Vorbis
- bitstream section; keep
- trying */
-
- vf->current_serialno=serialno;
- vf->current_link=link;
-
- ogg_stream_reset_serialno(&vf->os,vf->current_serialno);
- vf->ready_state=STREAMSET;
-
- }else{
- /* we're streaming */
- /* fetch the three header packets, build the info struct */
-
- int ret=_fetch_headers(vf,vf->vi,vf->vc,NULL,NULL,&og);
- if(ret)return(ret);
- vf->current_serialno=vf->os.serialno;
- vf->current_link++;
- link=0;
- }
- }
- }
-
- /* the buffered page is the data we want, and we're ready for it;
- add it to the stream state */
- ogg_stream_pagein(&vf->os,&og);
-
- }
-}
-
-/* if, eg, 64 bit stdio is configured by default, this will build with
- fseek64 */
-static int _fseek64_wrap(FILE *f,ogg_int64_t off,int whence){
- if(f==NULL)return(-1);
- return fseek(f,off,whence);
-}
-
-static int _ov_open1(void *f,OggVorbis_File *vf,const char *initial,
- long ibytes, ov_callbacks callbacks){
- int offsettest=((f && callbacks.seek_func)?callbacks.seek_func(f,0,SEEK_CUR):-1);
- long *serialno_list=NULL;
- int serialno_list_size=0;
- int ret;
-
- memset(vf,0,sizeof(*vf));
- vf->datasource=f;
- vf->callbacks = callbacks;
-
- /* init the framing state */
- ogg_sync_init(&vf->oy);
-
- /* perhaps some data was previously read into a buffer for testing
- against other stream types. Allow initialization from this
- previously read data (especially as we may be reading from a
- non-seekable stream) */
- if(initial){
- char *buffer=ogg_sync_buffer(&vf->oy,ibytes);
- memcpy(buffer,initial,ibytes);
- ogg_sync_wrote(&vf->oy,ibytes);
- }
-
- /* can we seek? Stevens suggests the seek test was portable */
- if(offsettest!=-1)vf->seekable=1;
-
- /* No seeking yet; Set up a 'single' (current) logical bitstream
- entry for partial open */
- vf->links=1;
- vf->vi=_ogg_calloc(vf->links,sizeof(*vf->vi));
- vf->vc=_ogg_calloc(vf->links,sizeof(*vf->vc));
- ogg_stream_init(&vf->os,-1); /* fill in the serialno later */
-
- /* Fetch all BOS pages, store the vorbis header and all seen serial
- numbers, load subsequent vorbis setup headers */
- if((ret=_fetch_headers(vf,vf->vi,vf->vc,&serialno_list,&serialno_list_size,NULL))<0){
- vf->datasource=NULL;
- ov_clear(vf);
- }else{
- /* serial number list for first link needs to be held somewhere
- for second stage of seekable stream open; this saves having to
- seek/reread first link's serialnumber data then. */
- vf->serialnos=_ogg_calloc(serialno_list_size+2,sizeof(*vf->serialnos));
- vf->serialnos[0]=vf->current_serialno=vf->os.serialno;
- vf->serialnos[1]=serialno_list_size;
- memcpy(vf->serialnos+2,serialno_list,serialno_list_size*sizeof(*vf->serialnos));
-
- vf->offsets=_ogg_calloc(1,sizeof(*vf->offsets));
- vf->dataoffsets=_ogg_calloc(1,sizeof(*vf->dataoffsets));
- vf->offsets[0]=0;
- vf->dataoffsets[0]=vf->offset;
-
- vf->ready_state=PARTOPEN;
- }
- if(serialno_list)_ogg_free(serialno_list);
- return(ret);
-}
-
-static int _ov_open2(OggVorbis_File *vf){
- if(vf->ready_state != PARTOPEN) return OV_EINVAL;
- vf->ready_state=OPENED;
- if(vf->seekable){
- int ret=_open_seekable2(vf);
- if(ret){
- vf->datasource=NULL;
- ov_clear(vf);
- }
- return(ret);
- }else
- vf->ready_state=STREAMSET;
-
- return 0;
-}
-
-
-/* clear out the OggVorbis_File struct */
-int ov_clear(OggVorbis_File *vf){
- if(vf){
- vorbis_block_clear(&vf->vb);
- vorbis_dsp_clear(&vf->vd);
- ogg_stream_clear(&vf->os);
-
- if(vf->vi && vf->links){
- int i;
- for(i=0;i<vf->links;i++){
- vorbis_info_clear(vf->vi+i);
- vorbis_comment_clear(vf->vc+i);
- }
- _ogg_free(vf->vi);
- _ogg_free(vf->vc);
- }
- if(vf->dataoffsets)_ogg_free(vf->dataoffsets);
- if(vf->pcmlengths)_ogg_free(vf->pcmlengths);
- if(vf->serialnos)_ogg_free(vf->serialnos);
- if(vf->offsets)_ogg_free(vf->offsets);
- ogg_sync_clear(&vf->oy);
- if(vf->datasource && vf->callbacks.close_func)
- (vf->callbacks.close_func)(vf->datasource);
- memset(vf,0,sizeof(*vf));
- }
-#ifdef DEBUG_LEAKS
- _VDBG_dump();
-#endif
- return(0);
-}
-
-/* inspects the OggVorbis file and finds/documents all the logical
- bitstreams contained in it. Tries to be tolerant of logical
- bitstream sections that are truncated/woogie.
-
- return: -1) error
- 0) OK
-*/
-
-int ov_open_callbacks(void *f,OggVorbis_File *vf,
- const char *initial,long ibytes,ov_callbacks callbacks){
- int ret=_ov_open1(f,vf,initial,ibytes,callbacks);
- if(ret)return ret;
- return _ov_open2(vf);
-}
-
-int ov_open(FILE *f,OggVorbis_File *vf,const char *initial,long ibytes){
- ov_callbacks callbacks = {
- (size_t (*)(void *, size_t, size_t, void *)) fread,
- (int (*)(void *, ogg_int64_t, int)) _fseek64_wrap,
- (int (*)(void *)) fclose,
- (long (*)(void *)) ftell
- };
-
- return ov_open_callbacks((void *)f, vf, initial, ibytes, callbacks);
-}
-
-int ov_fopen(const char *path,OggVorbis_File *vf){
- int ret;
- FILE *f = fopen(path,"rb");
- if(!f) return -1;
-
- ret = ov_open(f,vf,NULL,0);
- if(ret) fclose(f);
- return ret;
-}
-
-
-/* cheap hack for game usage where downsampling is desirable; there's
- no need for SRC as we can just do it cheaply in libvorbis. */
-
-int ov_halfrate(OggVorbis_File *vf,int flag){
- int i;
- if(vf->vi==NULL)return OV_EINVAL;
- if(vf->ready_state>STREAMSET){
- /* clear out stream state; dumping the decode machine is needed to
- reinit the MDCT lookups. */
- vorbis_dsp_clear(&vf->vd);
- vorbis_block_clear(&vf->vb);
- vf->ready_state=STREAMSET;
- if(vf->pcm_offset>=0){
- ogg_int64_t pos=vf->pcm_offset;
- vf->pcm_offset=-1; /* make sure the pos is dumped if unseekable */
- ov_pcm_seek(vf,pos);
- }
- }
-
- for(i=0;i<vf->links;i++){
- if(vorbis_synthesis_halfrate(vf->vi+i,flag)){
- if(flag) ov_halfrate(vf,0);
- return OV_EINVAL;
- }
- }
- return 0;
-}
-
-int ov_halfrate_p(OggVorbis_File *vf){
- if(vf->vi==NULL)return OV_EINVAL;
- return vorbis_synthesis_halfrate_p(vf->vi);
-}
-
-/* Only partially open the vorbis file; test for Vorbisness, and load
- the headers for the first chain. Do not seek (although test for
- seekability). Use ov_test_open to finish opening the file, else
- ov_clear to close/free it. Same return codes as open.
-
- Note that vorbisfile does _not_ take ownership of the file if the
- call fails; the calling applicaiton is responsible for closing the file
- if this call returns an error. */
-
-int ov_test_callbacks(void *f,OggVorbis_File *vf,
- const char *initial,long ibytes,ov_callbacks callbacks)
-{
- return _ov_open1(f,vf,initial,ibytes,callbacks);
-}
-
-int ov_test(FILE *f,OggVorbis_File *vf,const char *initial,long ibytes){
- ov_callbacks callbacks = {
- (size_t (*)(void *, size_t, size_t, void *)) fread,
- (int (*)(void *, ogg_int64_t, int)) _fseek64_wrap,
- (int (*)(void *)) fclose,
- (long (*)(void *)) ftell
- };
-
- return ov_test_callbacks((void *)f, vf, initial, ibytes, callbacks);
-}
-
-int ov_test_open(OggVorbis_File *vf){
- if(vf->ready_state!=PARTOPEN)return(OV_EINVAL);
- return _ov_open2(vf);
-}
-
-/* How many logical bitstreams in this physical bitstream? */
-long ov_streams(OggVorbis_File *vf){
- return vf->links;
-}
-
-/* Is the FILE * associated with vf seekable? */
-long ov_seekable(OggVorbis_File *vf){
- return vf->seekable;
-}
-
-/* returns the bitrate for a given logical bitstream or the entire
- physical bitstream. If the file is open for random access, it will
- find the *actual* average bitrate. If the file is streaming, it
- returns the nominal bitrate (if set) else the average of the
- upper/lower bounds (if set) else -1 (unset).
-
- If you want the actual bitrate field settings, get them from the
- vorbis_info structs */
-
-long ov_bitrate(OggVorbis_File *vf,int i){
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- if(i>=vf->links)return(OV_EINVAL);
- if(!vf->seekable && i!=0)return(ov_bitrate(vf,0));
- if(i<0){
- ogg_int64_t bits=0;
- int i;
- float br;
- for(i=0;i<vf->links;i++)
- bits+=(vf->offsets[i+1]-vf->dataoffsets[i])*8;
- /* This once read: return(rint(bits/ov_time_total(vf,-1)));
- * gcc 3.x on x86 miscompiled this at optimisation level 2 and above,
- * so this is slightly transformed to make it work.
- */
- br = bits/ov_time_total(vf,-1);
- return(rint(br));
- }else{
- if(vf->seekable){
- /* return the actual bitrate */
- return(rint((vf->offsets[i+1]-vf->dataoffsets[i])*8/ov_time_total(vf,i)));
- }else{
- /* return nominal if set */
- if(vf->vi[i].bitrate_nominal>0){
- return vf->vi[i].bitrate_nominal;
- }else{
- if(vf->vi[i].bitrate_upper>0){
- if(vf->vi[i].bitrate_lower>0){
- return (vf->vi[i].bitrate_upper+vf->vi[i].bitrate_lower)/2;
- }else{
- return vf->vi[i].bitrate_upper;
- }
- }
- return(OV_FALSE);
- }
- }
- }
-}
-
-/* returns the actual bitrate since last call. returns -1 if no
- additional data to offer since last call (or at beginning of stream),
- EINVAL if stream is only partially open
-*/
-long ov_bitrate_instant(OggVorbis_File *vf){
- int link=(vf->seekable?vf->current_link:0);
- long ret;
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- if(vf->samptrack==0)return(OV_FALSE);
- ret=vf->bittrack/vf->samptrack*vf->vi[link].rate+.5;
- vf->bittrack=0.f;
- vf->samptrack=0.f;
- return(ret);
-}
-
-/* Guess */
-long ov_serialnumber(OggVorbis_File *vf,int i){
- if(i>=vf->links)return(ov_serialnumber(vf,vf->links-1));
- if(!vf->seekable && i>=0)return(ov_serialnumber(vf,-1));
- if(i<0){
- return(vf->current_serialno);
- }else{
- return(vf->serialnos[i]);
- }
-}
-
-/* returns: total raw (compressed) length of content if i==-1
- raw (compressed) length of that logical bitstream for i==0 to n
- OV_EINVAL if the stream is not seekable (we can't know the length)
- or if stream is only partially open
-*/
-ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i){
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
- if(i<0){
- ogg_int64_t acc=0;
- int i;
- for(i=0;i<vf->links;i++)
- acc+=ov_raw_total(vf,i);
- return(acc);
- }else{
- return(vf->offsets[i+1]-vf->offsets[i]);
- }
-}
-
-/* returns: total PCM length (samples) of content if i==-1 PCM length
- (samples) of that logical bitstream for i==0 to n
- OV_EINVAL if the stream is not seekable (we can't know the
- length) or only partially open
-*/
-ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i){
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
- if(i<0){
- ogg_int64_t acc=0;
- int i;
- for(i=0;i<vf->links;i++)
- acc+=ov_pcm_total(vf,i);
- return(acc);
- }else{
- return(vf->pcmlengths[i*2+1]);
- }
-}
-
-/* returns: total seconds of content if i==-1
- seconds in that logical bitstream for i==0 to n
- OV_EINVAL if the stream is not seekable (we can't know the
- length) or only partially open
-*/
-double ov_time_total(OggVorbis_File *vf,int i){
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
- if(i<0){
- double acc=0;
- int i;
- for(i=0;i<vf->links;i++)
- acc+=ov_time_total(vf,i);
- return(acc);
- }else{
- return((double)(vf->pcmlengths[i*2+1])/vf->vi[i].rate);
- }
-}
-
-/* seek to an offset relative to the *compressed* data. This also
- scans packets to update the PCM cursor. It will cross a logical
- bitstream boundary, but only if it can't get any packets out of the
- tail of the bitstream we seek to (so no surprises).
-
- returns zero on success, nonzero on failure */
-
-int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
- ogg_stream_state work_os;
- int ret;
-
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- if(!vf->seekable)
- return(OV_ENOSEEK); /* don't dump machine if we can't seek */
-
- if(pos<0 || pos>vf->end)return(OV_EINVAL);
-
- /* is the seek position outside our current link [if any]? */
- if(vf->ready_state>=STREAMSET){
- if(pos<vf->offsets[vf->current_link] || pos>=vf->offsets[vf->current_link+1])
- _decode_clear(vf); /* clear out stream state */
- }
-
- /* don't yet clear out decoding machine (if it's initialized), in
- the case we're in the same link. Restart the decode lapping, and
- let _fetch_and_process_packet deal with a potential bitstream
- boundary */
- vf->pcm_offset=-1;
- ogg_stream_reset_serialno(&vf->os,
- vf->current_serialno); /* must set serialno */
- vorbis_synthesis_restart(&vf->vd);
-
- ret=_seek_helper(vf,pos);
- if(ret)goto seek_error;
-
- /* we need to make sure the pcm_offset is set, but we don't want to
- advance the raw cursor past good packets just to get to the first
- with a granulepos. That's not equivalent behavior to beginning
- decoding as immediately after the seek position as possible.
-
- So, a hack. We use two stream states; a local scratch state and
- the shared vf->os stream state. We use the local state to
- scan, and the shared state as a buffer for later decode.
-
- Unfortuantely, on the last page we still advance to last packet
- because the granulepos on the last page is not necessarily on a
- packet boundary, and we need to make sure the granpos is
- correct.
- */
-
- {
- ogg_page og;
- ogg_packet op;
- int lastblock=0;
- int accblock=0;
- int thisblock=0;
- int lastflag=0;
- int firstflag=0;
- ogg_int64_t pagepos=-1;
-
- ogg_stream_init(&work_os,vf->current_serialno); /* get the memory ready */
- ogg_stream_reset(&work_os); /* eliminate the spurious OV_HOLE
- return from not necessarily
- starting from the beginning */
-
- while(1){
- if(vf->ready_state>=STREAMSET){
- /* snarf/scan a packet if we can */
- int result=ogg_stream_packetout(&work_os,&op);
-
- if(result>0){
-
- if(vf->vi[vf->current_link].codec_setup){
- thisblock=vorbis_packet_blocksize(vf->vi+vf->current_link,&op);
- if(thisblock<0){
- ogg_stream_packetout(&vf->os,NULL);
- thisblock=0;
- }else{
-
- /* We can't get a guaranteed correct pcm position out of the
- last page in a stream because it might have a 'short'
- granpos, which can only be detected in the presence of a
- preceding page. However, if the last page is also the first
- page, the granpos rules of a first page take precedence. Not
- only that, but for first==last, the EOS page must be treated
- as if its a normal first page for the stream to open/play. */
- if(lastflag && !firstflag)
- ogg_stream_packetout(&vf->os,NULL);
- else
- if(lastblock)accblock+=(lastblock+thisblock)>>2;
- }
-
- if(op.granulepos!=-1){
- int i,link=vf->current_link;
- ogg_int64_t granulepos=op.granulepos-vf->pcmlengths[link*2];
- if(granulepos<0)granulepos=0;
-
- for(i=0;i<link;i++)
- granulepos+=vf->pcmlengths[i*2+1];
- vf->pcm_offset=granulepos-accblock;
- if(vf->pcm_offset<0)vf->pcm_offset=0;
- break;
- }
- lastblock=thisblock;
- continue;
- }else
- ogg_stream_packetout(&vf->os,NULL);
- }
- }
-
- if(!lastblock){
- pagepos=_get_next_page(vf,&og,-1);
- if(pagepos<0){
- vf->pcm_offset=ov_pcm_total(vf,-1);
- break;
- }
- }else{
- /* huh? Bogus stream with packets but no granulepos */
- vf->pcm_offset=-1;
- break;
- }
-
- /* has our decoding just traversed a bitstream boundary? */
- if(vf->ready_state>=STREAMSET){
- if(vf->current_serialno!=ogg_page_serialno(&og)){
-
- /* two possibilities:
- 1) our decoding just traversed a bitstream boundary
- 2) another stream is multiplexed into this logical section? */
-
- if(ogg_page_bos(&og)){
- /* we traversed */
- _decode_clear(vf); /* clear out stream state */
- ogg_stream_clear(&work_os);
- } /* else, do nothing; next loop will scoop another page */
- }
- }
-
- if(vf->ready_state<STREAMSET){
- int link;
- long serialno = ogg_page_serialno(&og);
-
- for(link=0;link<vf->links;link++)
- if(vf->serialnos[link]==serialno)break;
-
- if(link==vf->links) continue; /* not the desired Vorbis
- bitstream section; keep
- trying */
- vf->current_link=link;
- vf->current_serialno=serialno;
- ogg_stream_reset_serialno(&vf->os,serialno);
- ogg_stream_reset_serialno(&work_os,serialno);
- vf->ready_state=STREAMSET;
- firstflag=(pagepos<=vf->dataoffsets[link]);
- }
-
- ogg_stream_pagein(&vf->os,&og);
- ogg_stream_pagein(&work_os,&og);
- lastflag=ogg_page_eos(&og);
-
- }
- }
-
- ogg_stream_clear(&work_os);
- vf->bittrack=0.f;
- vf->samptrack=0.f;
- return(0);
-
- seek_error:
- /* dump the machine so we're in a known state */
- vf->pcm_offset=-1;
- ogg_stream_clear(&work_os);
- _decode_clear(vf);
- return OV_EBADLINK;
-}
-
-/* Page granularity seek (faster than sample granularity because we
- don't do the last bit of decode to find a specific sample).
-
- Seek to the last [granule marked] page preceding the specified pos
- location, such that decoding past the returned point will quickly
- arrive at the requested position. */
-int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
- int link=-1;
- ogg_int64_t result=0;
- ogg_int64_t total=ov_pcm_total(vf,-1);
-
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- if(!vf->seekable)return(OV_ENOSEEK);
-
- if(pos<0 || pos>total)return(OV_EINVAL);
-
- /* which bitstream section does this pcm offset occur in? */
- for(link=vf->links-1;link>=0;link--){
- total-=vf->pcmlengths[link*2+1];
- if(pos>=total)break;
- }
-
- /* Search within the logical bitstream for the page with the highest
- pcm_pos preceding pos. If we're looking for a position on the
- first page, bisection will halt without finding our position as
- it's before the first explicit granulepos fencepost. That case is
- handled separately below.
-
- There is a danger here; missing pages or incorrect frame number
- information in the bitstream could make our task impossible.
- Account for that (it would be an error condition) */
-
- /* new search algorithm originally by HB (Nicholas Vinen) */
-
- {
- ogg_int64_t end=vf->offsets[link+1];
- ogg_int64_t begin=vf->dataoffsets[link];
- ogg_int64_t begintime = vf->pcmlengths[link*2];
- ogg_int64_t endtime = vf->pcmlengths[link*2+1]+begintime;
- ogg_int64_t target=pos-total+begintime;
- ogg_int64_t best=-1;
- int got_page=0;
-
- ogg_page og;
-
- /* if we have only one page, there will be no bisection. Grab the page here */
- if(begin==end){
- result=_seek_helper(vf,begin);
- if(result) goto seek_error;
-
- result=_get_next_page(vf,&og,1);
- if(result<0) goto seek_error;
-
- got_page=1;
- }
-
- /* bisection loop */
- while(begin<end){
- ogg_int64_t bisect;
-
- if(end-begin<CHUNKSIZE){
- bisect=begin;
- }else{
- /* take a (pretty decent) guess. */
- bisect=begin +
- (ogg_int64_t)((double)(target-begintime)*(end-begin)/(endtime-begintime))
- - CHUNKSIZE;
- if(bisect<begin+CHUNKSIZE)
- bisect=begin;
- }
-
- result=_seek_helper(vf,bisect);
- if(result) goto seek_error;
-
- /* read loop within the bisection loop */
- while(begin<end){
- result=_get_next_page(vf,&og,end-vf->offset);
- if(result==OV_EREAD) goto seek_error;
- if(result<0){
- /* there is no next page! */
- if(bisect<=begin+1)
- /* No bisection left to perform. We've either found the
- best candidate already or failed. Exit loop. */
- end=begin;
- else{
- /* We tried to load a fraction of the last page; back up a
- bit and try to get the whole last page */
- if(bisect==0) goto seek_error;
- bisect-=CHUNKSIZE;
-
- /* don't repeat/loop on a read we've already performed */
- if(bisect<=begin)bisect=begin+1;
-
- /* seek and cntinue bisection */
- result=_seek_helper(vf,bisect);
- if(result) goto seek_error;
- }
- }else{
- ogg_int64_t granulepos;
- got_page=1;
-
- /* got a page. analyze it */
- /* only consider pages from primary vorbis stream */
- if(ogg_page_serialno(&og)!=vf->serialnos[link])
- continue;
-
- /* only consider pages with the granulepos set */
- granulepos=ogg_page_granulepos(&og);
- if(granulepos==-1)continue;
-
- if(granulepos<target){
- /* this page is a successful candidate! Set state */
-
- best=result; /* raw offset of packet with granulepos */
- begin=vf->offset; /* raw offset of next page */
- begintime=granulepos;
-
- /* if we're before our target but within a short distance,
- don't bisect; read forward */
- if(target-begintime>44100)break;
-
- bisect=begin; /* *not* begin + 1 as above */
- }else{
-
- /* This is one of our pages, but the granpos is
- post-target; it is not a bisection return
- candidate. (The only way we'd use it is if it's the
- first page in the stream; we handle that case later
- outside the bisection) */
- if(bisect<=begin+1){
- /* No bisection left to perform. We've either found the
- best candidate already or failed. Exit loop. */
- end=begin;
- }else{
- if(end==vf->offset){
- /* bisection read to the end; use the known page
- boundary (result) to update bisection, back up a
- little bit, and try again */
- end=result;
- bisect-=CHUNKSIZE;
- if(bisect<=begin)bisect=begin+1;
- result=_seek_helper(vf,bisect);
- if(result) goto seek_error;
- }else{
- /* Normal bisection */
- end=bisect;
- endtime=granulepos;
- break;
- }
- }
- }
- }
- }
- }
-
- /* Out of bisection: did it 'fail?' */
- if(best == -1){
-
- /* Check the 'looking for data in first page' special case;
- bisection would 'fail' because our search target was before the
- first PCM granule position fencepost. */
-
- if(got_page &&
- begin == vf->dataoffsets[link] &&
- ogg_page_serialno(&og)==vf->serialnos[link]){
-
- /* Yes, this is the beginning-of-stream case. We already have
- our page, right at the beginning of PCM data. Set state
- and return. */
-
- vf->pcm_offset=total;
-
- if(link!=vf->current_link){
- /* Different link; dump entire decode machine */
- _decode_clear(vf);
-
- vf->current_link=link;
- vf->current_serialno=vf->serialnos[link];
- vf->ready_state=STREAMSET;
-
- }else{
- vorbis_synthesis_restart(&vf->vd);
- }
-
- ogg_stream_reset_serialno(&vf->os,vf->current_serialno);
- ogg_stream_pagein(&vf->os,&og);
-
- }else
- goto seek_error;
-
- }else{
-
- /* Bisection found our page. seek to it, update pcm offset. Easier case than
- raw_seek, don't keep packets preceding granulepos. */
-
- ogg_page og;
- ogg_packet op;
-
- /* seek */
- result=_seek_helper(vf,best);
- vf->pcm_offset=-1;
- if(result) goto seek_error;
- result=_get_next_page(vf,&og,-1);
- if(result<0) goto seek_error;
-
- if(link!=vf->current_link){
- /* Different link; dump entire decode machine */
- _decode_clear(vf);
-
- vf->current_link=link;
- vf->current_serialno=vf->serialnos[link];
- vf->ready_state=STREAMSET;
-
- }else{
- vorbis_synthesis_restart(&vf->vd);
- }
-
- ogg_stream_reset_serialno(&vf->os,vf->current_serialno);
- ogg_stream_pagein(&vf->os,&og);
-
- /* pull out all but last packet; the one with granulepos */
- while(1){
- result=ogg_stream_packetpeek(&vf->os,&op);
- if(result==0){
- /* No packet returned; we exited the bisection with 'best'
- pointing to a page with a granule position, so the packet
- finishing this page ('best') originated on a preceding
- page. Keep fetching previous pages until we get one with
- a granulepos or without the 'continued' flag set. Then
- just use raw_seek for simplicity. */
- /* Do not rewind past the beginning of link data; if we do,
- it's either a bug or a broken stream */
- result=best;
- while(result>vf->dataoffsets[link]){
- result=_get_prev_page(vf,result,&og);
- if(result<0) goto seek_error;
- if(ogg_page_serialno(&og)==vf->current_serialno &&
- (ogg_page_granulepos(&og)>-1 ||
- !ogg_page_continued(&og))){
- return ov_raw_seek(vf,result);
- }
- }
- }
- if(result<0){
- result = OV_EBADPACKET;
- goto seek_error;
- }
- if(op.granulepos!=-1){
- vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2];
- if(vf->pcm_offset<0)vf->pcm_offset=0;
- vf->pcm_offset+=total;
- break;
- }else
- result=ogg_stream_packetout(&vf->os,NULL);
- }
- }
- }
-
- /* verify result */
- if(vf->pcm_offset>pos || pos>ov_pcm_total(vf,-1)){
- result=OV_EFAULT;
- goto seek_error;
- }
- vf->bittrack=0.f;
- vf->samptrack=0.f;
- return(0);
-
- seek_error:
- /* dump machine so we're in a known state */
- vf->pcm_offset=-1;
- _decode_clear(vf);
- return (int)result;
-}
-
-/* seek to a sample offset relative to the decompressed pcm stream
- returns zero on success, nonzero on failure */
-
-int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos){
- int thisblock,lastblock=0;
- int ret=ov_pcm_seek_page(vf,pos);
- if(ret<0)return(ret);
- if((ret=_make_decode_ready(vf)))return ret;
-
- /* discard leading packets we don't need for the lapping of the
- position we want; don't decode them */
-
- while(1){
- ogg_packet op;
- ogg_page og;
-
- int ret=ogg_stream_packetpeek(&vf->os,&op);
- if(ret>0){
- thisblock=vorbis_packet_blocksize(vf->vi+vf->current_link,&op);
- if(thisblock<0){
- ogg_stream_packetout(&vf->os,NULL);
- continue; /* non audio packet */
- }
- if(lastblock)vf->pcm_offset+=(lastblock+thisblock)>>2;
-
- if(vf->pcm_offset+((thisblock+
- vorbis_info_blocksize(vf->vi,1))>>2)>=pos)break;
-
- /* remove the packet from packet queue and track its granulepos */
- ogg_stream_packetout(&vf->os,NULL);
- vorbis_synthesis_trackonly(&vf->vb,&op); /* set up a vb with
- only tracking, no
- pcm_decode */
- vorbis_synthesis_blockin(&vf->vd,&vf->vb);
-
- /* end of logical stream case is hard, especially with exact
- length positioning. */
-
- if(op.granulepos>-1){
- int i;
- /* always believe the stream markers */
- vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2];
- if(vf->pcm_offset<0)vf->pcm_offset=0;
- for(i=0;i<vf->current_link;i++)
- vf->pcm_offset+=vf->pcmlengths[i*2+1];
- }
-
- lastblock=thisblock;
-
- }else{
- if(ret<0 && ret!=OV_HOLE)break;
-
- /* suck in a new page */
- if(_get_next_page(vf,&og,-1)<0)break;
- if(ogg_page_bos(&og))_decode_clear(vf);
-
- if(vf->ready_state<STREAMSET){
- long serialno=ogg_page_serialno(&og);
- int link;
-
- for(link=0;link<vf->links;link++)
- if(vf->serialnos[link]==serialno)break;
- if(link==vf->links) continue;
- vf->current_link=link;
-
- vf->ready_state=STREAMSET;
- vf->current_serialno=ogg_page_serialno(&og);
- ogg_stream_reset_serialno(&vf->os,serialno);
- ret=_make_decode_ready(vf);
- if(ret)return ret;
- lastblock=0;
- }
-
- ogg_stream_pagein(&vf->os,&og);
- }
- }
-
- vf->bittrack=0.f;
- vf->samptrack=0.f;
- /* discard samples until we reach the desired position. Crossing a
- logical bitstream boundary with abandon is OK. */
- {
- /* note that halfrate could be set differently in each link, but
- vorbisfile encoforces all links are set or unset */
- int hs=vorbis_synthesis_halfrate_p(vf->vi);
- while(vf->pcm_offset<((pos>>hs)<<hs)){
- ogg_int64_t target=(pos-vf->pcm_offset)>>hs;
- long samples=vorbis_synthesis_pcmout(&vf->vd,NULL);
-
- if(samples>target)samples=target;
- vorbis_synthesis_read(&vf->vd,samples);
- vf->pcm_offset+=samples<<hs;
-
- if(samples<target)
- if(_fetch_and_process_packet(vf,NULL,1,1)<=0)
- vf->pcm_offset=ov_pcm_total(vf,-1); /* eof */
- }
- }
- return 0;
-}
-
-/* seek to a playback time relative to the decompressed pcm stream
- returns zero on success, nonzero on failure */
-int ov_time_seek(OggVorbis_File *vf,double seconds){
- /* translate time to PCM position and call ov_pcm_seek */
-
- int link=-1;
- ogg_int64_t pcm_total=0;
- double time_total=0.;
-
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- if(!vf->seekable)return(OV_ENOSEEK);
- if(seconds<0)return(OV_EINVAL);
-
- /* which bitstream section does this time offset occur in? */
- for(link=0;link<vf->links;link++){
- double addsec = ov_time_total(vf,link);
- if(seconds<time_total+addsec)break;
- time_total+=addsec;
- pcm_total+=vf->pcmlengths[link*2+1];
- }
-
- if(link==vf->links)return(OV_EINVAL);
-
- /* enough information to convert time offset to pcm offset */
- {
- ogg_int64_t target=pcm_total+(seconds-time_total)*vf->vi[link].rate;
- return(ov_pcm_seek(vf,target));
- }
-}
-
-/* page-granularity version of ov_time_seek
- returns zero on success, nonzero on failure */
-int ov_time_seek_page(OggVorbis_File *vf,double seconds){
- /* translate time to PCM position and call ov_pcm_seek */
-
- int link=-1;
- ogg_int64_t pcm_total=0;
- double time_total=0.;
-
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- if(!vf->seekable)return(OV_ENOSEEK);
- if(seconds<0)return(OV_EINVAL);
-
- /* which bitstream section does this time offset occur in? */
- for(link=0;link<vf->links;link++){
- double addsec = ov_time_total(vf,link);
- if(seconds<time_total+addsec)break;
- time_total+=addsec;
- pcm_total+=vf->pcmlengths[link*2+1];
- }
-
- if(link==vf->links)return(OV_EINVAL);
-
- /* enough information to convert time offset to pcm offset */
- {
- ogg_int64_t target=pcm_total+(seconds-time_total)*vf->vi[link].rate;
- return(ov_pcm_seek_page(vf,target));
- }
-}
-
-/* tell the current stream offset cursor. Note that seek followed by
- tell will likely not give the set offset due to caching */
-ogg_int64_t ov_raw_tell(OggVorbis_File *vf){
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- return(vf->offset);
-}
-
-/* return PCM offset (sample) of next PCM sample to be read */
-ogg_int64_t ov_pcm_tell(OggVorbis_File *vf){
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- return(vf->pcm_offset);
-}
-
-/* return time offset (seconds) of next PCM sample to be read */
-double ov_time_tell(OggVorbis_File *vf){
- int link=0;
- ogg_int64_t pcm_total=0;
- double time_total=0.f;
-
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- if(vf->seekable){
- pcm_total=ov_pcm_total(vf,-1);
- time_total=ov_time_total(vf,-1);
-
- /* which bitstream section does this time offset occur in? */
- for(link=vf->links-1;link>=0;link--){
- pcm_total-=vf->pcmlengths[link*2+1];
- time_total-=ov_time_total(vf,link);
- if(vf->pcm_offset>=pcm_total)break;
- }
- }
-
- return((double)time_total+(double)(vf->pcm_offset-pcm_total)/vf->vi[link].rate);
-}
-
-/* link: -1) return the vorbis_info struct for the bitstream section
- currently being decoded
- 0-n) to request information for a specific bitstream section
-
- In the case of a non-seekable bitstream, any call returns the
- current bitstream. NULL in the case that the machine is not
- initialized */
-
-vorbis_info *ov_info(OggVorbis_File *vf,int link){
- if(vf->seekable){
- if(link<0)
- if(vf->ready_state>=STREAMSET)
- return vf->vi+vf->current_link;
- else
- return vf->vi;
- else
- if(link>=vf->links)
- return NULL;
- else
- return vf->vi+link;
- }else{
- return vf->vi;
- }
-}
-
-/* grr, strong typing, grr, no templates/inheritence, grr */
-vorbis_comment *ov_comment(OggVorbis_File *vf,int link){
- if(vf->seekable){
- if(link<0)
- if(vf->ready_state>=STREAMSET)
- return vf->vc+vf->current_link;
- else
- return vf->vc;
- else
- if(link>=vf->links)
- return NULL;
- else
- return vf->vc+link;
- }else{
- return vf->vc;
- }
-}
-
-static int host_is_big_endian() {
- ogg_int32_t pattern = 0xfeedface; /* deadbeef */
- unsigned char *bytewise = (unsigned char *)&pattern;
- if (bytewise[0] == 0xfe) return 1;
- return 0;
-}
-
-/* up to this point, everything could more or less hide the multiple
- logical bitstream nature of chaining from the toplevel application
- if the toplevel application didn't particularly care. However, at
- the point that we actually read audio back, the multiple-section
- nature must surface: Multiple bitstream sections do not necessarily
- have to have the same number of channels or sampling rate.
-
- ov_read returns the sequential logical bitstream number currently
- being decoded along with the PCM data in order that the toplevel
- application can take action on channel/sample rate changes. This
- number will be incremented even for streamed (non-seekable) streams
- (for seekable streams, it represents the actual logical bitstream
- index within the physical bitstream. Note that the accessor
- functions above are aware of this dichotomy).
-
- ov_read_filter is exactly the same as ov_read except that it processes
- the decoded audio data through a filter before packing it into the
- requested format. This gives greater accuracy than applying a filter
- after the audio has been converted into integral PCM.
-
- input values: buffer) a buffer to hold packed PCM data for return
- length) the byte length requested to be placed into buffer
- bigendianp) should the data be packed LSB first (0) or
- MSB first (1)
- word) word size for output. currently 1 (byte) or
- 2 (16 bit short)
-
- return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL)
- 0) EOF
- n) number of bytes of PCM actually returned. The
- below works on a packet-by-packet basis, so the
- return length is not related to the 'length' passed
- in, just guaranteed to fit.
-
- *section) set to the logical bitstream number */
-
-long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
- int bigendianp,int word,int sgned,int *bitstream,
- void (*filter)(float **pcm,long channels,long samples,void *filter_param),void *filter_param){
- int i,j;
- int host_endian = host_is_big_endian();
- int hs;
-
- float **pcm;
- long samples;
-
- if(vf->ready_state<OPENED)return(OV_EINVAL);
-
- while(1){
- if(vf->ready_state==INITSET){
- samples=vorbis_synthesis_pcmout(&vf->vd,&pcm);
- if(samples)break;
- }
-
- /* suck in another packet */
- {
- int ret=_fetch_and_process_packet(vf,NULL,1,1);
- if(ret==OV_EOF)
- return(0);
- if(ret<=0)
- return(ret);
- }
-
- }
-
- if(samples>0){
-
- /* yay! proceed to pack data into the byte buffer */
-
- long channels=ov_info(vf,-1)->channels;
- long bytespersample=word * channels;
- vorbis_fpu_control fpu;
- if(samples>length/bytespersample)samples=length/bytespersample;
-
- if(samples <= 0)
- return OV_EINVAL;
-
- /* Here. */
- if(filter)
- filter(pcm,channels,samples,filter_param);
-
- /* a tight loop to pack each size */
- {
- int val;
- if(word==1){
- int off=(sgned?0:128);
- vorbis_fpu_setround(&fpu);
- for(j=0;j<samples;j++)
- for(i=0;i<channels;i++){
- val=vorbis_ftoi(pcm[i][j]*128.f);
- if(val>127)val=127;
- else if(val<-128)val=-128;
- *buffer++=val+off;
- }
- vorbis_fpu_restore(fpu);
- }else{
- int off=(sgned?0:32768);
-
- if(host_endian==bigendianp){
- if(sgned){
-
- vorbis_fpu_setround(&fpu);
- for(i=0;i<channels;i++) { /* It's faster in this order */
- float *src=pcm[i];
- short *dest=((short *)buffer)+i;
- for(j=0;j<samples;j++) {
- val=vorbis_ftoi(src[j]*32768.f);
- if(val>32767)val=32767;
- else if(val<-32768)val=-32768;
- *dest=val;
- dest+=channels;
- }
- }
- vorbis_fpu_restore(fpu);
-
- }else{
-
- vorbis_fpu_setround(&fpu);
- for(i=0;i<channels;i++) {
- float *src=pcm[i];
- short *dest=((short *)buffer)+i;
- for(j=0;j<samples;j++) {
- val=vorbis_ftoi(src[j]*32768.f);
- if(val>32767)val=32767;
- else if(val<-32768)val=-32768;
- *dest=val+off;
- dest+=channels;
- }
- }
- vorbis_fpu_restore(fpu);
-
- }
- }else if(bigendianp){
-
- vorbis_fpu_setround(&fpu);
- for(j=0;j<samples;j++)
- for(i=0;i<channels;i++){
- val=vorbis_ftoi(pcm[i][j]*32768.f);
- if(val>32767)val=32767;
- else if(val<-32768)val=-32768;
- val+=off;
- *buffer++=(val>>8);
- *buffer++=(val&0xff);
- }
- vorbis_fpu_restore(fpu);
-
- }else{
- int val;
- vorbis_fpu_setround(&fpu);
- for(j=0;j<samples;j++)
- for(i=0;i<channels;i++){
- val=vorbis_ftoi(pcm[i][j]*32768.f);
- if(val>32767)val=32767;
- else if(val<-32768)val=-32768;
- val+=off;
- *buffer++=(val&0xff);
- *buffer++=(val>>8);
- }
- vorbis_fpu_restore(fpu);
-
- }
- }
- }
-
- vorbis_synthesis_read(&vf->vd,samples);
- hs=vorbis_synthesis_halfrate_p(vf->vi);
- vf->pcm_offset+=(samples<<hs);
- if(bitstream)*bitstream=vf->current_link;
- return(samples*bytespersample);
- }else{
- return(samples);
- }
-}
-
-long ov_read(OggVorbis_File *vf,char *buffer,int length,
- int bigendianp,int word,int sgned,int *bitstream){
- return ov_read_filter(vf, buffer, length, bigendianp, word, sgned, bitstream, NULL, NULL);
-}
-
-/* input values: pcm_channels) a float vector per channel of output
- length) the sample length being read by the app
-
- return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL)
- 0) EOF
- n) number of samples of PCM actually returned. The
- below works on a packet-by-packet basis, so the
- return length is not related to the 'length' passed
- in, just guaranteed to fit.
-
- *section) set to the logical bitstream number */
-
-
-
-long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int length,
- int *bitstream){
-
- if(vf->ready_state<OPENED)return(OV_EINVAL);
-
- while(1){
- if(vf->ready_state==INITSET){
- float **pcm;
- long samples=vorbis_synthesis_pcmout(&vf->vd,&pcm);
- if(samples){
- int hs=vorbis_synthesis_halfrate_p(vf->vi);
- if(pcm_channels)*pcm_channels=pcm;
- if(samples>length)samples=length;
- vorbis_synthesis_read(&vf->vd,samples);
- vf->pcm_offset+=samples<<hs;
- if(bitstream)*bitstream=vf->current_link;
- return samples;
-
- }
- }
-
- /* suck in another packet */
- {
- int ret=_fetch_and_process_packet(vf,NULL,1,1);
- if(ret==OV_EOF)return(0);
- if(ret<=0)return(ret);
- }
-
- }
-}
-
-extern const float *vorbis_window(vorbis_dsp_state *v,int W);
-
-static void _ov_splice(float **pcm,float **lappcm,
- int n1, int n2,
- int ch1, int ch2,
- const float *w1, const float *w2){
- int i,j;
- const float *w=w1;
- int n=n1;
-
- if(n1>n2){
- n=n2;
- w=w2;
- }
-
- /* splice */
- for(j=0;j<ch1 && j<ch2;j++){
- float *s=lappcm[j];
- float *d=pcm[j];
-
- for(i=0;i<n;i++){
- float wd=w[i]*w[i];
- float ws=1.-wd;
- d[i]=d[i]*wd + s[i]*ws;
- }
- }
- /* window from zero */
- for(;j<ch2;j++){
- float *d=pcm[j];
- for(i=0;i<n;i++){
- float wd=w[i]*w[i];
- d[i]=d[i]*wd;
- }
- }
-
-}
-
-/* make sure vf is INITSET */
-static int _ov_initset(OggVorbis_File *vf){
- while(1){
- if(vf->ready_state==INITSET)break;
- /* suck in another packet */
- {
- int ret=_fetch_and_process_packet(vf,NULL,1,0);
- if(ret<0 && ret!=OV_HOLE)return(ret);
- }
- }
- return 0;
-}
-
-/* make sure vf is INITSET and that we have a primed buffer; if
- we're crosslapping at a stream section boundary, this also makes
- sure we're sanity checking against the right stream information */
-static int _ov_initprime(OggVorbis_File *vf){
- vorbis_dsp_state *vd=&vf->vd;
- while(1){
- if(vf->ready_state==INITSET)
- if(vorbis_synthesis_pcmout(vd,NULL))break;
-
- /* suck in another packet */
- {
- int ret=_fetch_and_process_packet(vf,NULL,1,0);
- if(ret<0 && ret!=OV_HOLE)return(ret);
- }
- }
- return 0;
-}
-
-/* grab enough data for lapping from vf; this may be in the form of
- unreturned, already-decoded pcm, remaining PCM we will need to
- decode, or synthetic postextrapolation from last packets. */
-static void _ov_getlap(OggVorbis_File *vf,vorbis_info *vi,vorbis_dsp_state *vd,
- float **lappcm,int lapsize){
- int lapcount=0,i;
- float **pcm;
-
- /* try first to decode the lapping data */
- while(lapcount<lapsize){
- int samples=vorbis_synthesis_pcmout(vd,&pcm);
- if(samples){
- if(samples>lapsize-lapcount)samples=lapsize-lapcount;
- for(i=0;i<vi->channels;i++)
- memcpy(lappcm[i]+lapcount,pcm[i],sizeof(**pcm)*samples);
- lapcount+=samples;
- vorbis_synthesis_read(vd,samples);
- }else{
- /* suck in another packet */
- int ret=_fetch_and_process_packet(vf,NULL,1,0); /* do *not* span */
- if(ret==OV_EOF)break;
- }
- }
- if(lapcount<lapsize){
- /* failed to get lapping data from normal decode; pry it from the
- postextrapolation buffering, or the second half of the MDCT
- from the last packet */
- int samples=vorbis_synthesis_lapout(&vf->vd,&pcm);
- if(samples==0){
- for(i=0;i<vi->channels;i++)
- memset(lappcm[i]+lapcount,0,sizeof(**pcm)*lapsize-lapcount);
- lapcount=lapsize;
- }else{
- if(samples>lapsize-lapcount)samples=lapsize-lapcount;
- for(i=0;i<vi->channels;i++)
- memcpy(lappcm[i]+lapcount,pcm[i],sizeof(**pcm)*samples);
- lapcount+=samples;
- }
- }
-}
-
-/* this sets up crosslapping of a sample by using trailing data from
- sample 1 and lapping it into the windowing buffer of sample 2 */
-int ov_crosslap(OggVorbis_File *vf1, OggVorbis_File *vf2){
- vorbis_info *vi1,*vi2;
- float **lappcm;
- float **pcm;
- const float *w1,*w2;
- int n1,n2,i,ret,hs1,hs2;
-
- if(vf1==vf2)return(0); /* degenerate case */
- if(vf1->ready_state<OPENED)return(OV_EINVAL);
- if(vf2->ready_state<OPENED)return(OV_EINVAL);
-
- /* the relevant overlap buffers must be pre-checked and pre-primed
- before looking at settings in the event that priming would cross
- a bitstream boundary. So, do it now */
-
- ret=_ov_initset(vf1);
- if(ret)return(ret);
- ret=_ov_initprime(vf2);
- if(ret)return(ret);
-
- vi1=ov_info(vf1,-1);
- vi2=ov_info(vf2,-1);
- hs1=ov_halfrate_p(vf1);
- hs2=ov_halfrate_p(vf2);
-
- lappcm=alloca(sizeof(*lappcm)*vi1->channels);
- n1=vorbis_info_blocksize(vi1,0)>>(1+hs1);
- n2=vorbis_info_blocksize(vi2,0)>>(1+hs2);
- w1=vorbis_window(&vf1->vd,0);
- w2=vorbis_window(&vf2->vd,0);
-
- for(i=0;i<vi1->channels;i++)
- lappcm[i]=alloca(sizeof(**lappcm)*n1);
-
- _ov_getlap(vf1,vi1,&vf1->vd,lappcm,n1);
-
- /* have a lapping buffer from vf1; now to splice it into the lapping
- buffer of vf2 */
- /* consolidate and expose the buffer. */
- vorbis_synthesis_lapout(&vf2->vd,&pcm);
-
-#if 0
- _analysis_output_always("pcmL",0,pcm[0],n1*2,0,0,0);
- _analysis_output_always("pcmR",0,pcm[1],n1*2,0,0,0);
-#endif
-
- /* splice */
- _ov_splice(pcm,lappcm,n1,n2,vi1->channels,vi2->channels,w1,w2);
-
- /* done */
- return(0);
-}
-
-static int _ov_64_seek_lap(OggVorbis_File *vf,ogg_int64_t pos,
- int (*localseek)(OggVorbis_File *,ogg_int64_t)){
- vorbis_info *vi;
- float **lappcm;
- float **pcm;
- const float *w1,*w2;
- int n1,n2,ch1,ch2,hs;
- int i,ret;
-
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- ret=_ov_initset(vf);
- if(ret)return(ret);
- vi=ov_info(vf,-1);
- hs=ov_halfrate_p(vf);
-
- ch1=vi->channels;
- n1=vorbis_info_blocksize(vi,0)>>(1+hs);
- w1=vorbis_window(&vf->vd,0); /* window arrays from libvorbis are
- persistent; even if the decode state
- from this link gets dumped, this
- window array continues to exist */
-
- lappcm=alloca(sizeof(*lappcm)*ch1);
- for(i=0;i<ch1;i++)
- lappcm[i]=alloca(sizeof(**lappcm)*n1);
- _ov_getlap(vf,vi,&vf->vd,lappcm,n1);
-
- /* have lapping data; seek and prime the buffer */
- ret=localseek(vf,pos);
- if(ret)return ret;
- ret=_ov_initprime(vf);
- if(ret)return(ret);
-
- /* Guard against cross-link changes; they're perfectly legal */
- vi=ov_info(vf,-1);
- ch2=vi->channels;
- n2=vorbis_info_blocksize(vi,0)>>(1+hs);
- w2=vorbis_window(&vf->vd,0);
-
- /* consolidate and expose the buffer. */
- vorbis_synthesis_lapout(&vf->vd,&pcm);
-
- /* splice */
- _ov_splice(pcm,lappcm,n1,n2,ch1,ch2,w1,w2);
-
- /* done */
- return(0);
-}
-
-int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos){
- return _ov_64_seek_lap(vf,pos,ov_raw_seek);
-}
-
-int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos){
- return _ov_64_seek_lap(vf,pos,ov_pcm_seek);
-}
-
-int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos){
- return _ov_64_seek_lap(vf,pos,ov_pcm_seek_page);
-}
-
-static int _ov_d_seek_lap(OggVorbis_File *vf,double pos,
- int (*localseek)(OggVorbis_File *,double)){
- vorbis_info *vi;
- float **lappcm;
- float **pcm;
- const float *w1,*w2;
- int n1,n2,ch1,ch2,hs;
- int i,ret;
-
- if(vf->ready_state<OPENED)return(OV_EINVAL);
- ret=_ov_initset(vf);
- if(ret)return(ret);
- vi=ov_info(vf,-1);
- hs=ov_halfrate_p(vf);
-
- ch1=vi->channels;
- n1=vorbis_info_blocksize(vi,0)>>(1+hs);
- w1=vorbis_window(&vf->vd,0); /* window arrays from libvorbis are
- persistent; even if the decode state
- from this link gets dumped, this
- window array continues to exist */
-
- lappcm=alloca(sizeof(*lappcm)*ch1);
- for(i=0;i<ch1;i++)
- lappcm[i]=alloca(sizeof(**lappcm)*n1);
- _ov_getlap(vf,vi,&vf->vd,lappcm,n1);
-
- /* have lapping data; seek and prime the buffer */
- ret=localseek(vf,pos);
- if(ret)return ret;
- ret=_ov_initprime(vf);
- if(ret)return(ret);
-
- /* Guard against cross-link changes; they're perfectly legal */
- vi=ov_info(vf,-1);
- ch2=vi->channels;
- n2=vorbis_info_blocksize(vi,0)>>(1+hs);
- w2=vorbis_window(&vf->vd,0);
-
- /* consolidate and expose the buffer. */
- vorbis_synthesis_lapout(&vf->vd,&pcm);
-
- /* splice */
- _ov_splice(pcm,lappcm,n1,n2,ch1,ch2,w1,w2);
-
- /* done */
- return(0);
-}
-
-int ov_time_seek_lap(OggVorbis_File *vf,double pos){
- return _ov_d_seek_lap(vf,pos,ov_time_seek);
-}
-
-int ov_time_seek_page_lap(OggVorbis_File *vf,double pos){
- return _ov_d_seek_lap(vf,pos,ov_time_seek_page);
-}
diff --git a/drivers/vorbis/vorbisfile.h b/drivers/vorbis/vorbisfile.h
deleted file mode 100644
index 9271331e72..0000000000
--- a/drivers/vorbis/vorbisfile.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: stdio-based convenience library for opening/seeking/decoding
- last mod: $Id: vorbisfile.h 17182 2010-04-29 03:48:32Z xiphmont $
-
- ********************************************************************/
-
-#ifndef _OV_FILE_H_
-#define _OV_FILE_H_
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif /* __cplusplus */
-
-#include <stdio.h>
-#include "codec.h"
-
-/* The function prototypes for the callbacks are basically the same as for
- * the stdio functions fread, fseek, fclose, ftell.
- * The one difference is that the FILE * arguments have been replaced with
- * a void * - this is to be used as a pointer to whatever internal data these
- * functions might need. In the stdio case, it's just a FILE * cast to a void *
- *
- * If you use other functions, check the docs for these functions and return
- * the right values. For seek_func(), you *MUST* return -1 if the stream is
- * unseekable
- */
-typedef struct {
- size_t (*read_func) (void *ptr, size_t size, size_t nmemb, void *datasource);
- int (*seek_func) (void *datasource, ogg_int64_t offset, int whence);
- int (*close_func) (void *datasource);
- long (*tell_func) (void *datasource);
-} ov_callbacks;
-
-#ifndef OV_EXCLUDE_STATIC_CALLBACKS
-
-/* a few sets of convenient callbacks, especially for use under
- * Windows where ov_open_callbacks() should always be used instead of
- * ov_open() to avoid problems with incompatible crt.o version linking
- * issues. */
-
-static int _ov_header_fseek_wrap(FILE *f,ogg_int64_t off,int whence){
- if(f==NULL)return(-1);
-
-#ifdef __MINGW32__
- return fseeko64(f,off,whence);
-#elif defined (_WIN32)
- return _fseeki64(f,off,whence);
-#else
- return fseek(f,off,whence);
-#endif
-}
-
-/* These structs below (OV_CALLBACKS_DEFAULT etc) are defined here as
- * static data. That means that every file which includes this header
- * will get its own copy of these structs whether it uses them or
- * not unless it #defines OV_EXCLUDE_STATIC_CALLBACKS.
- * These static symbols are essential on platforms such as Windows on
- * which several different versions of stdio support may be linked to
- * by different DLLs, and we need to be certain we know which one
- * we're using (the same one as the main application).
- */
-
-static ov_callbacks OV_CALLBACKS_DEFAULT = {
- (size_t (*)(void *, size_t, size_t, void *)) fread,
- (int (*)(void *, ogg_int64_t, int)) _ov_header_fseek_wrap,
- (int (*)(void *)) fclose,
- (long (*)(void *)) ftell
-};
-
-static ov_callbacks OV_CALLBACKS_NOCLOSE = {
- (size_t (*)(void *, size_t, size_t, void *)) fread,
- (int (*)(void *, ogg_int64_t, int)) _ov_header_fseek_wrap,
- (int (*)(void *)) NULL,
- (long (*)(void *)) ftell
-};
-
-static ov_callbacks OV_CALLBACKS_STREAMONLY = {
- (size_t (*)(void *, size_t, size_t, void *)) fread,
- (int (*)(void *, ogg_int64_t, int)) NULL,
- (int (*)(void *)) fclose,
- (long (*)(void *)) NULL
-};
-
-static ov_callbacks OV_CALLBACKS_STREAMONLY_NOCLOSE = {
- (size_t (*)(void *, size_t, size_t, void *)) fread,
- (int (*)(void *, ogg_int64_t, int)) NULL,
- (int (*)(void *)) NULL,
- (long (*)(void *)) NULL
-};
-
-#endif
-
-#define NOTOPEN 0
-#define PARTOPEN 1
-#define OPENED 2
-#define STREAMSET 3
-#define INITSET 4
-
-typedef struct OggVorbis_File {
- void *datasource; /* Pointer to a FILE *, etc. */
- int seekable;
- ogg_int64_t offset;
- ogg_int64_t end;
- ogg_sync_state oy;
-
- /* If the FILE handle isn't seekable (eg, a pipe), only the current
- stream appears */
- int links;
- ogg_int64_t *offsets;
- ogg_int64_t *dataoffsets;
- long *serialnos;
- ogg_int64_t *pcmlengths; /* overloaded to maintain binary
- compatibility; x2 size, stores both
- beginning and end values */
- vorbis_info *vi;
- vorbis_comment *vc;
-
- /* Decoding working state local storage */
- ogg_int64_t pcm_offset;
- int ready_state;
- long current_serialno;
- int current_link;
-
- double bittrack;
- double samptrack;
-
- ogg_stream_state os; /* take physical pages, weld into a logical
- stream of packets */
- vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
- vorbis_block vb; /* local working space for packet->PCM decode */
-
- ov_callbacks callbacks;
-
-} OggVorbis_File;
-
-
-extern int ov_clear(OggVorbis_File *vf);
-extern int ov_fopen(const char *path,OggVorbis_File *vf);
-extern int ov_open(FILE *f,OggVorbis_File *vf,const char *initial,long ibytes);
-extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf,
- const char *initial, long ibytes, ov_callbacks callbacks);
-
-extern int ov_test(FILE *f,OggVorbis_File *vf,const char *initial,long ibytes);
-extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf,
- const char *initial, long ibytes, ov_callbacks callbacks);
-extern int ov_test_open(OggVorbis_File *vf);
-
-extern long ov_bitrate(OggVorbis_File *vf,int i);
-extern long ov_bitrate_instant(OggVorbis_File *vf);
-extern long ov_streams(OggVorbis_File *vf);
-extern long ov_seekable(OggVorbis_File *vf);
-extern long ov_serialnumber(OggVorbis_File *vf,int i);
-
-extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i);
-extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i);
-extern double ov_time_total(OggVorbis_File *vf,int i);
-
-extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_time_seek(OggVorbis_File *vf,double pos);
-extern int ov_time_seek_page(OggVorbis_File *vf,double pos);
-
-extern int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos);
-extern int ov_time_seek_lap(OggVorbis_File *vf,double pos);
-extern int ov_time_seek_page_lap(OggVorbis_File *vf,double pos);
-
-extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf);
-extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf);
-extern double ov_time_tell(OggVorbis_File *vf);
-
-extern vorbis_info *ov_info(OggVorbis_File *vf,int link);
-extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link);
-
-extern long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int samples,
- int *bitstream);
-extern long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
- int bigendianp,int word,int sgned,int *bitstream,
- void (*filter)(float **pcm,long channels,long samples,void *filter_param),void *filter_param);
-extern long ov_read(OggVorbis_File *vf,char *buffer,int length,
- int bigendianp,int word,int sgned,int *bitstream);
-extern int ov_crosslap(OggVorbis_File *vf1,OggVorbis_File *vf2);
-
-extern int ov_halfrate(OggVorbis_File *vf,int flag);
-extern int ov_halfrate_p(OggVorbis_File *vf);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
-
diff --git a/drivers/vorbis/window.c b/drivers/vorbis/window.c
deleted file mode 100644
index 0305b79297..0000000000
--- a/drivers/vorbis/window.c
+++ /dev/null
@@ -1,2136 +0,0 @@
-/********************************************************************
- * *
- * 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-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: window functions
- last mod: $Id: window.c 19028 2013-12-02 23:23:39Z tterribe $
-
- ********************************************************************/
-
-#include <stdlib.h>
-#include <math.h>
-#include "os.h"
-#include "misc.h"
-#include "window.h"
-
-static const float vwin64[32] = {
- 0.0009460463F, 0.0085006468F, 0.0235352254F, 0.0458950567F,
- 0.0753351908F, 0.1115073077F, 0.1539457973F, 0.2020557475F,
- 0.2551056759F, 0.3122276645F, 0.3724270287F, 0.4346027792F,
- 0.4975789974F, 0.5601459521F, 0.6211085051F, 0.6793382689F,
- 0.7338252629F, 0.7837245849F, 0.8283939355F, 0.8674186656F,
- 0.9006222429F, 0.9280614787F, 0.9500073081F, 0.9669131782F,
- 0.9793740220F, 0.9880792941F, 0.9937636139F, 0.9971582668F,
- 0.9989462667F, 0.9997230082F, 0.9999638688F, 0.9999995525F,
-};
-
-static const float vwin128[64] = {
- 0.0002365472F, 0.0021280687F, 0.0059065254F, 0.0115626550F,
- 0.0190823442F, 0.0284463735F, 0.0396300935F, 0.0526030430F,
- 0.0673285281F, 0.0837631763F, 0.1018564887F, 0.1215504095F,
- 0.1427789367F, 0.1654677960F, 0.1895342001F, 0.2148867160F,
- 0.2414252576F, 0.2690412240F, 0.2976177952F, 0.3270303960F,
- 0.3571473350F, 0.3878306189F, 0.4189369387F, 0.4503188188F,
- 0.4818259135F, 0.5133064334F, 0.5446086751F, 0.5755826278F,
- 0.6060816248F, 0.6359640047F, 0.6650947483F, 0.6933470543F,
- 0.7206038179F, 0.7467589810F, 0.7717187213F, 0.7954024542F,
- 0.8177436264F, 0.8386902831F, 0.8582053981F, 0.8762669622F,
- 0.8928678298F, 0.9080153310F, 0.9217306608F, 0.9340480615F,
- 0.9450138200F, 0.9546851041F, 0.9631286621F, 0.9704194171F,
- 0.9766389810F, 0.9818741197F, 0.9862151938F, 0.9897546035F,
- 0.9925852598F, 0.9947991032F, 0.9964856900F, 0.9977308602F,
- 0.9986155015F, 0.9992144193F, 0.9995953200F, 0.9998179155F,
- 0.9999331503F, 0.9999825563F, 0.9999977357F, 0.9999999720F,
-};
-
-static const float vwin256[128] = {
- 0.0000591390F, 0.0005321979F, 0.0014780301F, 0.0028960636F,
- 0.0047854363F, 0.0071449926F, 0.0099732775F, 0.0132685298F,
- 0.0170286741F, 0.0212513119F, 0.0259337111F, 0.0310727950F,
- 0.0366651302F, 0.0427069140F, 0.0491939614F, 0.0561216907F,
- 0.0634851102F, 0.0712788035F, 0.0794969160F, 0.0881331402F,
- 0.0971807028F, 0.1066323515F, 0.1164803426F, 0.1267164297F,
- 0.1373318534F, 0.1483173323F, 0.1596630553F, 0.1713586755F,
- 0.1833933062F, 0.1957555184F, 0.2084333404F, 0.2214142599F,
- 0.2346852280F, 0.2482326664F, 0.2620424757F, 0.2761000481F,
- 0.2903902813F, 0.3048975959F, 0.3196059553F, 0.3344988887F,
- 0.3495595160F, 0.3647705766F, 0.3801144597F, 0.3955732382F,
- 0.4111287047F, 0.4267624093F, 0.4424557009F, 0.4581897696F,
- 0.4739456913F, 0.4897044744F, 0.5054471075F, 0.5211546088F,
- 0.5368080763F, 0.5523887395F, 0.5678780103F, 0.5832575361F,
- 0.5985092508F, 0.6136154277F, 0.6285587300F, 0.6433222619F,
- 0.6578896175F, 0.6722449294F, 0.6863729144F, 0.7002589187F,
- 0.7138889597F, 0.7272497662F, 0.7403288154F, 0.7531143679F,
- 0.7655954985F, 0.7777621249F, 0.7896050322F, 0.8011158947F,
- 0.8122872932F, 0.8231127294F, 0.8335866365F, 0.8437043850F,
- 0.8534622861F, 0.8628575905F, 0.8718884835F, 0.8805540765F,
- 0.8888543947F, 0.8967903616F, 0.9043637797F, 0.9115773078F,
- 0.9184344360F, 0.9249394562F, 0.9310974312F, 0.9369141608F,
- 0.9423961446F, 0.9475505439F, 0.9523851406F, 0.9569082947F,
- 0.9611289005F, 0.9650563408F, 0.9687004405F, 0.9720714191F,
- 0.9751798427F, 0.9780365753F, 0.9806527301F, 0.9830396204F,
- 0.9852087111F, 0.9871715701F, 0.9889398207F, 0.9905250941F,
- 0.9919389832F, 0.9931929973F, 0.9942985174F, 0.9952667537F,
- 0.9961087037F, 0.9968351119F, 0.9974564312F, 0.9979827858F,
- 0.9984239359F, 0.9987892441F, 0.9990876435F, 0.9993276081F,
- 0.9995171241F, 0.9996636648F, 0.9997741654F, 0.9998550016F,
- 0.9999119692F, 0.9999502656F, 0.9999744742F, 0.9999885497F,
- 0.9999958064F, 0.9999989077F, 0.9999998584F, 0.9999999983F,
-};
-
-static const float vwin512[256] = {
- 0.0000147849F, 0.0001330607F, 0.0003695946F, 0.0007243509F,
- 0.0011972759F, 0.0017882983F, 0.0024973285F, 0.0033242588F,
- 0.0042689632F, 0.0053312973F, 0.0065110982F, 0.0078081841F,
- 0.0092223540F, 0.0107533880F, 0.0124010466F, 0.0141650703F,
- 0.0160451800F, 0.0180410758F, 0.0201524373F, 0.0223789233F,
- 0.0247201710F, 0.0271757958F, 0.0297453914F, 0.0324285286F,
- 0.0352247556F, 0.0381335972F, 0.0411545545F, 0.0442871045F,
- 0.0475306997F, 0.0508847676F, 0.0543487103F, 0.0579219038F,
- 0.0616036982F, 0.0653934164F, 0.0692903546F, 0.0732937809F,
- 0.0774029356F, 0.0816170305F, 0.0859352485F, 0.0903567428F,
- 0.0948806375F, 0.0995060259F, 0.1042319712F, 0.1090575056F,
- 0.1139816300F, 0.1190033137F, 0.1241214941F, 0.1293350764F,
- 0.1346429333F, 0.1400439046F, 0.1455367974F, 0.1511203852F,
- 0.1567934083F, 0.1625545735F, 0.1684025537F, 0.1743359881F,
- 0.1803534820F, 0.1864536069F, 0.1926349000F, 0.1988958650F,
- 0.2052349715F, 0.2116506555F, 0.2181413191F, 0.2247053313F,
- 0.2313410275F, 0.2380467105F, 0.2448206500F, 0.2516610835F,
- 0.2585662164F, 0.2655342226F, 0.2725632448F, 0.2796513950F,
- 0.2867967551F, 0.2939973773F, 0.3012512852F, 0.3085564739F,
- 0.3159109111F, 0.3233125375F, 0.3307592680F, 0.3382489922F,
- 0.3457795756F, 0.3533488602F, 0.3609546657F, 0.3685947904F,
- 0.3762670121F, 0.3839690896F, 0.3916987634F, 0.3994537572F,
- 0.4072317788F, 0.4150305215F, 0.4228476653F, 0.4306808783F,
- 0.4385278181F, 0.4463861329F, 0.4542534630F, 0.4621274424F,
- 0.4700057001F, 0.4778858615F, 0.4857655502F, 0.4936423891F,
- 0.5015140023F, 0.5093780165F, 0.5172320626F, 0.5250737772F,
- 0.5329008043F, 0.5407107971F, 0.5485014192F, 0.5562703465F,
- 0.5640152688F, 0.5717338914F, 0.5794239366F, 0.5870831457F,
- 0.5947092801F, 0.6023001235F, 0.6098534829F, 0.6173671907F,
- 0.6248391059F, 0.6322671161F, 0.6396491384F, 0.6469831217F,
- 0.6542670475F, 0.6614989319F, 0.6686768267F, 0.6757988210F,
- 0.6828630426F, 0.6898676592F, 0.6968108799F, 0.7036909564F,
- 0.7105061843F, 0.7172549043F, 0.7239355032F, 0.7305464154F,
- 0.7370861235F, 0.7435531598F, 0.7499461068F, 0.7562635986F,
- 0.7625043214F, 0.7686670148F, 0.7747504721F, 0.7807535410F,
- 0.7866751247F, 0.7925141825F, 0.7982697296F, 0.8039408387F,
- 0.8095266395F, 0.8150263196F, 0.8204391248F, 0.8257643590F,
- 0.8310013848F, 0.8361496236F, 0.8412085555F, 0.8461777194F,
- 0.8510567129F, 0.8558451924F, 0.8605428730F, 0.8651495278F,
- 0.8696649882F, 0.8740891432F, 0.8784219392F, 0.8826633797F,
- 0.8868135244F, 0.8908724888F, 0.8948404441F, 0.8987176157F,
- 0.9025042831F, 0.9062007791F, 0.9098074886F, 0.9133248482F,
- 0.9167533451F, 0.9200935163F, 0.9233459472F, 0.9265112712F,
- 0.9295901680F, 0.9325833632F, 0.9354916263F, 0.9383157705F,
- 0.9410566504F, 0.9437151618F, 0.9462922398F, 0.9487888576F,
- 0.9512060252F, 0.9535447882F, 0.9558062262F, 0.9579914516F,
- 0.9601016078F, 0.9621378683F, 0.9641014348F, 0.9659935361F,
- 0.9678154261F, 0.9695683830F, 0.9712537071F, 0.9728727198F,
- 0.9744267618F, 0.9759171916F, 0.9773453842F, 0.9787127293F,
- 0.9800206298F, 0.9812705006F, 0.9824637665F, 0.9836018613F,
- 0.9846862258F, 0.9857183066F, 0.9866995544F, 0.9876314227F,
- 0.9885153662F, 0.9893528393F, 0.9901452948F, 0.9908941823F,
- 0.9916009470F, 0.9922670279F, 0.9928938570F, 0.9934828574F,
- 0.9940354423F, 0.9945530133F, 0.9950369595F, 0.9954886562F,
- 0.9959094633F, 0.9963007242F, 0.9966637649F, 0.9969998925F,
- 0.9973103939F, 0.9975965351F, 0.9978595598F, 0.9981006885F,
- 0.9983211172F, 0.9985220166F, 0.9987045311F, 0.9988697776F,
- 0.9990188449F, 0.9991527924F, 0.9992726499F, 0.9993794157F,
- 0.9994740570F, 0.9995575079F, 0.9996306699F, 0.9996944099F,
- 0.9997495605F, 0.9997969190F, 0.9998372465F, 0.9998712678F,
- 0.9998996704F, 0.9999231041F, 0.9999421807F, 0.9999574732F,
- 0.9999695157F, 0.9999788026F, 0.9999857885F, 0.9999908879F,
- 0.9999944746F, 0.9999968817F, 0.9999984010F, 0.9999992833F,
- 0.9999997377F, 0.9999999317F, 0.9999999911F, 0.9999999999F,
-};
-
-static const float vwin1024[512] = {
- 0.0000036962F, 0.0000332659F, 0.0000924041F, 0.0001811086F,
- 0.0002993761F, 0.0004472021F, 0.0006245811F, 0.0008315063F,
- 0.0010679699F, 0.0013339631F, 0.0016294757F, 0.0019544965F,
- 0.0023090133F, 0.0026930125F, 0.0031064797F, 0.0035493989F,
- 0.0040217533F, 0.0045235250F, 0.0050546946F, 0.0056152418F,
- 0.0062051451F, 0.0068243817F, 0.0074729278F, 0.0081507582F,
- 0.0088578466F, 0.0095941655F, 0.0103596863F, 0.0111543789F,
- 0.0119782122F, 0.0128311538F, 0.0137131701F, 0.0146242260F,
- 0.0155642855F, 0.0165333111F, 0.0175312640F, 0.0185581042F,
- 0.0196137903F, 0.0206982797F, 0.0218115284F, 0.0229534910F,
- 0.0241241208F, 0.0253233698F, 0.0265511886F, 0.0278075263F,
- 0.0290923308F, 0.0304055484F, 0.0317471241F, 0.0331170013F,
- 0.0345151222F, 0.0359414274F, 0.0373958560F, 0.0388783456F,
- 0.0403888325F, 0.0419272511F, 0.0434935347F, 0.0450876148F,
- 0.0467094213F, 0.0483588828F, 0.0500359261F, 0.0517404765F,
- 0.0534724575F, 0.0552317913F, 0.0570183983F, 0.0588321971F,
- 0.0606731048F, 0.0625410369F, 0.0644359070F, 0.0663576272F,
- 0.0683061077F, 0.0702812571F, 0.0722829821F, 0.0743111878F,
- 0.0763657775F, 0.0784466526F, 0.0805537129F, 0.0826868561F,
- 0.0848459782F, 0.0870309736F, 0.0892417345F, 0.0914781514F,
- 0.0937401128F, 0.0960275056F, 0.0983402145F, 0.1006781223F,
- 0.1030411101F, 0.1054290568F, 0.1078418397F, 0.1102793336F,
- 0.1127414119F, 0.1152279457F, 0.1177388042F, 0.1202738544F,
- 0.1228329618F, 0.1254159892F, 0.1280227980F, 0.1306532471F,
- 0.1333071937F, 0.1359844927F, 0.1386849970F, 0.1414085575F,
- 0.1441550230F, 0.1469242403F, 0.1497160539F, 0.1525303063F,
- 0.1553668381F, 0.1582254875F, 0.1611060909F, 0.1640084822F,
- 0.1669324936F, 0.1698779549F, 0.1728446939F, 0.1758325362F,
- 0.1788413055F, 0.1818708232F, 0.1849209084F, 0.1879913785F,
- 0.1910820485F, 0.1941927312F, 0.1973232376F, 0.2004733764F,
- 0.2036429541F, 0.2068317752F, 0.2100396421F, 0.2132663552F,
- 0.2165117125F, 0.2197755102F, 0.2230575422F, 0.2263576007F,
- 0.2296754753F, 0.2330109540F, 0.2363638225F, 0.2397338646F,
- 0.2431208619F, 0.2465245941F, 0.2499448389F, 0.2533813719F,
- 0.2568339669F, 0.2603023956F, 0.2637864277F, 0.2672858312F,
- 0.2708003718F, 0.2743298135F, 0.2778739186F, 0.2814324472F,
- 0.2850051576F, 0.2885918065F, 0.2921921485F, 0.2958059366F,
- 0.2994329219F, 0.3030728538F, 0.3067254799F, 0.3103905462F,
- 0.3140677969F, 0.3177569747F, 0.3214578205F, 0.3251700736F,
- 0.3288934718F, 0.3326277513F, 0.3363726468F, 0.3401278914F,
- 0.3438932168F, 0.3476683533F, 0.3514530297F, 0.3552469734F,
- 0.3590499106F, 0.3628615659F, 0.3666816630F, 0.3705099239F,
- 0.3743460698F, 0.3781898204F, 0.3820408945F, 0.3858990095F,
- 0.3897638820F, 0.3936352274F, 0.3975127601F, 0.4013961936F,
- 0.4052852405F, 0.4091796123F, 0.4130790198F, 0.4169831732F,
- 0.4208917815F, 0.4248045534F, 0.4287211965F, 0.4326414181F,
- 0.4365649248F, 0.4404914225F, 0.4444206167F, 0.4483522125F,
- 0.4522859146F, 0.4562214270F, 0.4601584538F, 0.4640966984F,
- 0.4680358644F, 0.4719756548F, 0.4759157726F, 0.4798559209F,
- 0.4837958024F, 0.4877351199F, 0.4916735765F, 0.4956108751F,
- 0.4995467188F, 0.5034808109F, 0.5074128550F, 0.5113425550F,
- 0.5152696149F, 0.5191937395F, 0.5231146336F, 0.5270320028F,
- 0.5309455530F, 0.5348549910F, 0.5387600239F, 0.5426603597F,
- 0.5465557070F, 0.5504457754F, 0.5543302752F, 0.5582089175F,
- 0.5620814145F, 0.5659474793F, 0.5698068262F, 0.5736591704F,
- 0.5775042283F, 0.5813417176F, 0.5851713571F, 0.5889928670F,
- 0.5928059689F, 0.5966103856F, 0.6004058415F, 0.6041920626F,
- 0.6079687761F, 0.6117357113F, 0.6154925986F, 0.6192391705F,
- 0.6229751612F, 0.6267003064F, 0.6304143441F, 0.6341170137F,
- 0.6378080569F, 0.6414872173F, 0.6451542405F, 0.6488088741F,
- 0.6524508681F, 0.6560799742F, 0.6596959469F, 0.6632985424F,
- 0.6668875197F, 0.6704626398F, 0.6740236662F, 0.6775703649F,
- 0.6811025043F, 0.6846198554F, 0.6881221916F, 0.6916092892F,
- 0.6950809269F, 0.6985368861F, 0.7019769510F, 0.7054009085F,
- 0.7088085484F, 0.7121996632F, 0.7155740484F, 0.7189315023F,
- 0.7222718263F, 0.7255948245F, 0.7289003043F, 0.7321880760F,
- 0.7354579530F, 0.7387097518F, 0.7419432921F, 0.7451583966F,
- 0.7483548915F, 0.7515326059F, 0.7546913723F, 0.7578310265F,
- 0.7609514077F, 0.7640523581F, 0.7671337237F, 0.7701953535F,
- 0.7732371001F, 0.7762588195F, 0.7792603711F, 0.7822416178F,
- 0.7852024259F, 0.7881426654F, 0.7910622097F, 0.7939609356F,
- 0.7968387237F, 0.7996954579F, 0.8025310261F, 0.8053453193F,
- 0.8081382324F, 0.8109096638F, 0.8136595156F, 0.8163876936F,
- 0.8190941071F, 0.8217786690F, 0.8244412960F, 0.8270819086F,
- 0.8297004305F, 0.8322967896F, 0.8348709171F, 0.8374227481F,
- 0.8399522213F, 0.8424592789F, 0.8449438672F, 0.8474059356F,
- 0.8498454378F, 0.8522623306F, 0.8546565748F, 0.8570281348F,
- 0.8593769787F, 0.8617030779F, 0.8640064080F, 0.8662869477F,
- 0.8685446796F, 0.8707795899F, 0.8729916682F, 0.8751809079F,
- 0.8773473059F, 0.8794908626F, 0.8816115819F, 0.8837094713F,
- 0.8857845418F, 0.8878368079F, 0.8898662874F, 0.8918730019F,
- 0.8938569760F, 0.8958182380F, 0.8977568194F, 0.8996727552F,
- 0.9015660837F, 0.9034368465F, 0.9052850885F, 0.9071108577F,
- 0.9089142057F, 0.9106951869F, 0.9124538591F, 0.9141902832F,
- 0.9159045233F, 0.9175966464F, 0.9192667228F, 0.9209148257F,
- 0.9225410313F, 0.9241454187F, 0.9257280701F, 0.9272890704F,
- 0.9288285075F, 0.9303464720F, 0.9318430576F, 0.9333183603F,
- 0.9347724792F, 0.9362055158F, 0.9376175745F, 0.9390087622F,
- 0.9403791881F, 0.9417289644F, 0.9430582055F, 0.9443670283F,
- 0.9456555521F, 0.9469238986F, 0.9481721917F, 0.9494005577F,
- 0.9506091252F, 0.9517980248F, 0.9529673894F, 0.9541173540F,
- 0.9552480557F, 0.9563596334F, 0.9574522282F, 0.9585259830F,
- 0.9595810428F, 0.9606175542F, 0.9616356656F, 0.9626355274F,
- 0.9636172915F, 0.9645811114F, 0.9655271425F, 0.9664555414F,
- 0.9673664664F, 0.9682600774F, 0.9691365355F, 0.9699960034F,
- 0.9708386448F, 0.9716646250F, 0.9724741103F, 0.9732672685F,
- 0.9740442683F, 0.9748052795F, 0.9755504729F, 0.9762800205F,
- 0.9769940950F, 0.9776928703F, 0.9783765210F, 0.9790452223F,
- 0.9796991504F, 0.9803384823F, 0.9809633954F, 0.9815740679F,
- 0.9821706784F, 0.9827534063F, 0.9833224312F, 0.9838779332F,
- 0.9844200928F, 0.9849490910F, 0.9854651087F, 0.9859683274F,
- 0.9864589286F, 0.9869370940F, 0.9874030054F, 0.9878568447F,
- 0.9882987937F, 0.9887290343F, 0.9891477481F, 0.9895551169F,
- 0.9899513220F, 0.9903365446F, 0.9907109658F, 0.9910747662F,
- 0.9914281260F, 0.9917712252F, 0.9921042433F, 0.9924273593F,
- 0.9927407516F, 0.9930445982F, 0.9933390763F, 0.9936243626F,
- 0.9939006331F, 0.9941680631F, 0.9944268269F, 0.9946770982F,
- 0.9949190498F, 0.9951528537F, 0.9953786808F, 0.9955967011F,
- 0.9958070836F, 0.9960099963F, 0.9962056061F, 0.9963940787F,
- 0.9965755786F, 0.9967502693F, 0.9969183129F, 0.9970798704F,
- 0.9972351013F, 0.9973841640F, 0.9975272151F, 0.9976644103F,
- 0.9977959036F, 0.9979218476F, 0.9980423932F, 0.9981576901F,
- 0.9982678862F, 0.9983731278F, 0.9984735596F, 0.9985693247F,
- 0.9986605645F, 0.9987474186F, 0.9988300248F, 0.9989085193F,
- 0.9989830364F, 0.9990537085F, 0.9991206662F, 0.9991840382F,
- 0.9992439513F, 0.9993005303F, 0.9993538982F, 0.9994041757F,
- 0.9994514817F, 0.9994959330F, 0.9995376444F, 0.9995767286F,
- 0.9996132960F, 0.9996474550F, 0.9996793121F, 0.9997089710F,
- 0.9997365339F, 0.9997621003F, 0.9997857677F, 0.9998076311F,
- 0.9998277836F, 0.9998463156F, 0.9998633155F, 0.9998788692F,
- 0.9998930603F, 0.9999059701F, 0.9999176774F, 0.9999282586F,
- 0.9999377880F, 0.9999463370F, 0.9999539749F, 0.9999607685F,
- 0.9999667820F, 0.9999720773F, 0.9999767136F, 0.9999807479F,
- 0.9999842344F, 0.9999872249F, 0.9999897688F, 0.9999919127F,
- 0.9999937009F, 0.9999951749F, 0.9999963738F, 0.9999973342F,
- 0.9999980900F, 0.9999986724F, 0.9999991103F, 0.9999994297F,
- 0.9999996543F, 0.9999998049F, 0.9999999000F, 0.9999999552F,
- 0.9999999836F, 0.9999999957F, 0.9999999994F, 1.0000000000F,
-};
-
-static const float vwin2048[1024] = {
- 0.0000009241F, 0.0000083165F, 0.0000231014F, 0.0000452785F,
- 0.0000748476F, 0.0001118085F, 0.0001561608F, 0.0002079041F,
- 0.0002670379F, 0.0003335617F, 0.0004074748F, 0.0004887765F,
- 0.0005774661F, 0.0006735427F, 0.0007770054F, 0.0008878533F,
- 0.0010060853F, 0.0011317002F, 0.0012646969F, 0.0014050742F,
- 0.0015528307F, 0.0017079650F, 0.0018704756F, 0.0020403610F,
- 0.0022176196F, 0.0024022497F, 0.0025942495F, 0.0027936173F,
- 0.0030003511F, 0.0032144490F, 0.0034359088F, 0.0036647286F,
- 0.0039009061F, 0.0041444391F, 0.0043953253F, 0.0046535621F,
- 0.0049191472F, 0.0051920781F, 0.0054723520F, 0.0057599664F,
- 0.0060549184F, 0.0063572052F, 0.0066668239F, 0.0069837715F,
- 0.0073080449F, 0.0076396410F, 0.0079785566F, 0.0083247884F,
- 0.0086783330F, 0.0090391871F, 0.0094073470F, 0.0097828092F,
- 0.0101655700F, 0.0105556258F, 0.0109529726F, 0.0113576065F,
- 0.0117695237F, 0.0121887200F, 0.0126151913F, 0.0130489335F,
- 0.0134899422F, 0.0139382130F, 0.0143937415F, 0.0148565233F,
- 0.0153265536F, 0.0158038279F, 0.0162883413F, 0.0167800889F,
- 0.0172790660F, 0.0177852675F, 0.0182986882F, 0.0188193231F,
- 0.0193471668F, 0.0198822141F, 0.0204244594F, 0.0209738974F,
- 0.0215305225F, 0.0220943289F, 0.0226653109F, 0.0232434627F,
- 0.0238287784F, 0.0244212519F, 0.0250208772F, 0.0256276481F,
- 0.0262415582F, 0.0268626014F, 0.0274907711F, 0.0281260608F,
- 0.0287684638F, 0.0294179736F, 0.0300745833F, 0.0307382859F,
- 0.0314090747F, 0.0320869424F, 0.0327718819F, 0.0334638860F,
- 0.0341629474F, 0.0348690586F, 0.0355822122F, 0.0363024004F,
- 0.0370296157F, 0.0377638502F, 0.0385050960F, 0.0392533451F,
- 0.0400085896F, 0.0407708211F, 0.0415400315F, 0.0423162123F,
- 0.0430993552F, 0.0438894515F, 0.0446864926F, 0.0454904698F,
- 0.0463013742F, 0.0471191969F, 0.0479439288F, 0.0487755607F,
- 0.0496140836F, 0.0504594879F, 0.0513117642F, 0.0521709031F,
- 0.0530368949F, 0.0539097297F, 0.0547893979F, 0.0556758894F,
- 0.0565691941F, 0.0574693019F, 0.0583762026F, 0.0592898858F,
- 0.0602103410F, 0.0611375576F, 0.0620715250F, 0.0630122324F,
- 0.0639596688F, 0.0649138234F, 0.0658746848F, 0.0668422421F,
- 0.0678164838F, 0.0687973985F, 0.0697849746F, 0.0707792005F,
- 0.0717800645F, 0.0727875547F, 0.0738016591F, 0.0748223656F,
- 0.0758496620F, 0.0768835359F, 0.0779239751F, 0.0789709668F,
- 0.0800244985F, 0.0810845574F, 0.0821511306F, 0.0832242052F,
- 0.0843037679F, 0.0853898056F, 0.0864823050F, 0.0875812525F,
- 0.0886866347F, 0.0897984378F, 0.0909166480F, 0.0920412513F,
- 0.0931722338F, 0.0943095813F, 0.0954532795F, 0.0966033140F,
- 0.0977596702F, 0.0989223336F, 0.1000912894F, 0.1012665227F,
- 0.1024480185F, 0.1036357616F, 0.1048297369F, 0.1060299290F,
- 0.1072363224F, 0.1084489014F, 0.1096676504F, 0.1108925534F,
- 0.1121235946F, 0.1133607577F, 0.1146040267F, 0.1158533850F,
- 0.1171088163F, 0.1183703040F, 0.1196378312F, 0.1209113812F,
- 0.1221909370F, 0.1234764815F, 0.1247679974F, 0.1260654674F,
- 0.1273688740F, 0.1286781995F, 0.1299934263F, 0.1313145365F,
- 0.1326415121F, 0.1339743349F, 0.1353129866F, 0.1366574490F,
- 0.1380077035F, 0.1393637315F, 0.1407255141F, 0.1420930325F,
- 0.1434662677F, 0.1448452004F, 0.1462298115F, 0.1476200814F,
- 0.1490159906F, 0.1504175195F, 0.1518246482F, 0.1532373569F,
- 0.1546556253F, 0.1560794333F, 0.1575087606F, 0.1589435866F,
- 0.1603838909F, 0.1618296526F, 0.1632808509F, 0.1647374648F,
- 0.1661994731F, 0.1676668546F, 0.1691395880F, 0.1706176516F,
- 0.1721010238F, 0.1735896829F, 0.1750836068F, 0.1765827736F,
- 0.1780871610F, 0.1795967468F, 0.1811115084F, 0.1826314234F,
- 0.1841564689F, 0.1856866221F, 0.1872218600F, 0.1887621595F,
- 0.1903074974F, 0.1918578503F, 0.1934131947F, 0.1949735068F,
- 0.1965387630F, 0.1981089393F, 0.1996840117F, 0.2012639560F,
- 0.2028487479F, 0.2044383630F, 0.2060327766F, 0.2076319642F,
- 0.2092359007F, 0.2108445614F, 0.2124579211F, 0.2140759545F,
- 0.2156986364F, 0.2173259411F, 0.2189578432F, 0.2205943168F,
- 0.2222353361F, 0.2238808751F, 0.2255309076F, 0.2271854073F,
- 0.2288443480F, 0.2305077030F, 0.2321754457F, 0.2338475493F,
- 0.2355239869F, 0.2372047315F, 0.2388897560F, 0.2405790329F,
- 0.2422725350F, 0.2439702347F, 0.2456721043F, 0.2473781159F,
- 0.2490882418F, 0.2508024539F, 0.2525207240F, 0.2542430237F,
- 0.2559693248F, 0.2576995986F, 0.2594338166F, 0.2611719498F,
- 0.2629139695F, 0.2646598466F, 0.2664095520F, 0.2681630564F,
- 0.2699203304F, 0.2716813445F, 0.2734460691F, 0.2752144744F,
- 0.2769865307F, 0.2787622079F, 0.2805414760F, 0.2823243047F,
- 0.2841106637F, 0.2859005227F, 0.2876938509F, 0.2894906179F,
- 0.2912907928F, 0.2930943447F, 0.2949012426F, 0.2967114554F,
- 0.2985249520F, 0.3003417009F, 0.3021616708F, 0.3039848301F,
- 0.3058111471F, 0.3076405901F, 0.3094731273F, 0.3113087266F,
- 0.3131473560F, 0.3149889833F, 0.3168335762F, 0.3186811024F,
- 0.3205315294F, 0.3223848245F, 0.3242409552F, 0.3260998886F,
- 0.3279615918F, 0.3298260319F, 0.3316931758F, 0.3335629903F,
- 0.3354354423F, 0.3373104982F, 0.3391881247F, 0.3410682882F,
- 0.3429509551F, 0.3448360917F, 0.3467236642F, 0.3486136387F,
- 0.3505059811F, 0.3524006575F, 0.3542976336F, 0.3561968753F,
- 0.3580983482F, 0.3600020179F, 0.3619078499F, 0.3638158096F,
- 0.3657258625F, 0.3676379737F, 0.3695521086F, 0.3714682321F,
- 0.3733863094F, 0.3753063055F, 0.3772281852F, 0.3791519134F,
- 0.3810774548F, 0.3830047742F, 0.3849338362F, 0.3868646053F,
- 0.3887970459F, 0.3907311227F, 0.3926667998F, 0.3946040417F,
- 0.3965428125F, 0.3984830765F, 0.4004247978F, 0.4023679403F,
- 0.4043124683F, 0.4062583455F, 0.4082055359F, 0.4101540034F,
- 0.4121037117F, 0.4140546246F, 0.4160067058F, 0.4179599190F,
- 0.4199142277F, 0.4218695956F, 0.4238259861F, 0.4257833627F,
- 0.4277416888F, 0.4297009279F, 0.4316610433F, 0.4336219983F,
- 0.4355837562F, 0.4375462803F, 0.4395095337F, 0.4414734797F,
- 0.4434380815F, 0.4454033021F, 0.4473691046F, 0.4493354521F,
- 0.4513023078F, 0.4532696345F, 0.4552373954F, 0.4572055533F,
- 0.4591740713F, 0.4611429123F, 0.4631120393F, 0.4650814151F,
- 0.4670510028F, 0.4690207650F, 0.4709906649F, 0.4729606651F,
- 0.4749307287F, 0.4769008185F, 0.4788708972F, 0.4808409279F,
- 0.4828108732F, 0.4847806962F, 0.4867503597F, 0.4887198264F,
- 0.4906890593F, 0.4926580213F, 0.4946266753F, 0.4965949840F,
- 0.4985629105F, 0.5005304176F, 0.5024974683F, 0.5044640255F,
- 0.5064300522F, 0.5083955114F, 0.5103603659F, 0.5123245790F,
- 0.5142881136F, 0.5162509328F, 0.5182129997F, 0.5201742774F,
- 0.5221347290F, 0.5240943178F, 0.5260530070F, 0.5280107598F,
- 0.5299675395F, 0.5319233095F, 0.5338780330F, 0.5358316736F,
- 0.5377841946F, 0.5397355596F, 0.5416857320F, 0.5436346755F,
- 0.5455823538F, 0.5475287304F, 0.5494737691F, 0.5514174337F,
- 0.5533596881F, 0.5553004962F, 0.5572398218F, 0.5591776291F,
- 0.5611138821F, 0.5630485449F, 0.5649815818F, 0.5669129570F,
- 0.5688426349F, 0.5707705799F, 0.5726967564F, 0.5746211290F,
- 0.5765436624F, 0.5784643212F, 0.5803830702F, 0.5822998743F,
- 0.5842146984F, 0.5861275076F, 0.5880382669F, 0.5899469416F,
- 0.5918534968F, 0.5937578981F, 0.5956601107F, 0.5975601004F,
- 0.5994578326F, 0.6013532732F, 0.6032463880F, 0.6051371429F,
- 0.6070255039F, 0.6089114372F, 0.6107949090F, 0.6126758856F,
- 0.6145543334F, 0.6164302191F, 0.6183035092F, 0.6201741706F,
- 0.6220421700F, 0.6239074745F, 0.6257700513F, 0.6276298674F,
- 0.6294868903F, 0.6313410873F, 0.6331924262F, 0.6350408745F,
- 0.6368864001F, 0.6387289710F, 0.6405685552F, 0.6424051209F,
- 0.6442386364F, 0.6460690702F, 0.6478963910F, 0.6497205673F,
- 0.6515415682F, 0.6533593625F, 0.6551739194F, 0.6569852082F,
- 0.6587931984F, 0.6605978593F, 0.6623991609F, 0.6641970728F,
- 0.6659915652F, 0.6677826081F, 0.6695701718F, 0.6713542268F,
- 0.6731347437F, 0.6749116932F, 0.6766850461F, 0.6784547736F,
- 0.6802208469F, 0.6819832374F, 0.6837419164F, 0.6854968559F,
- 0.6872480275F, 0.6889954034F, 0.6907389556F, 0.6924786566F,
- 0.6942144788F, 0.6959463950F, 0.6976743780F, 0.6993984008F,
- 0.7011184365F, 0.7028344587F, 0.7045464407F, 0.7062543564F,
- 0.7079581796F, 0.7096578844F, 0.7113534450F, 0.7130448359F,
- 0.7147320316F, 0.7164150070F, 0.7180937371F, 0.7197681970F,
- 0.7214383620F, 0.7231042077F, 0.7247657098F, 0.7264228443F,
- 0.7280755871F, 0.7297239147F, 0.7313678035F, 0.7330072301F,
- 0.7346421715F, 0.7362726046F, 0.7378985069F, 0.7395198556F,
- 0.7411366285F, 0.7427488034F, 0.7443563584F, 0.7459592717F,
- 0.7475575218F, 0.7491510873F, 0.7507399471F, 0.7523240803F,
- 0.7539034661F, 0.7554780839F, 0.7570479136F, 0.7586129349F,
- 0.7601731279F, 0.7617284730F, 0.7632789506F, 0.7648245416F,
- 0.7663652267F, 0.7679009872F, 0.7694318044F, 0.7709576599F,
- 0.7724785354F, 0.7739944130F, 0.7755052749F, 0.7770111035F,
- 0.7785118815F, 0.7800075916F, 0.7814982170F, 0.7829837410F,
- 0.7844641472F, 0.7859394191F, 0.7874095408F, 0.7888744965F,
- 0.7903342706F, 0.7917888476F, 0.7932382124F, 0.7946823501F,
- 0.7961212460F, 0.7975548855F, 0.7989832544F, 0.8004063386F,
- 0.8018241244F, 0.8032365981F, 0.8046437463F, 0.8060455560F,
- 0.8074420141F, 0.8088331080F, 0.8102188253F, 0.8115991536F,
- 0.8129740810F, 0.8143435957F, 0.8157076861F, 0.8170663409F,
- 0.8184195489F, 0.8197672994F, 0.8211095817F, 0.8224463853F,
- 0.8237777001F, 0.8251035161F, 0.8264238235F, 0.8277386129F,
- 0.8290478750F, 0.8303516008F, 0.8316497814F, 0.8329424083F,
- 0.8342294731F, 0.8355109677F, 0.8367868841F, 0.8380572148F,
- 0.8393219523F, 0.8405810893F, 0.8418346190F, 0.8430825345F,
- 0.8443248294F, 0.8455614974F, 0.8467925323F, 0.8480179285F,
- 0.8492376802F, 0.8504517822F, 0.8516602292F, 0.8528630164F,
- 0.8540601391F, 0.8552515928F, 0.8564373733F, 0.8576174766F,
- 0.8587918990F, 0.8599606368F, 0.8611236868F, 0.8622810460F,
- 0.8634327113F, 0.8645786802F, 0.8657189504F, 0.8668535195F,
- 0.8679823857F, 0.8691055472F, 0.8702230025F, 0.8713347503F,
- 0.8724407896F, 0.8735411194F, 0.8746357394F, 0.8757246489F,
- 0.8768078479F, 0.8778853364F, 0.8789571146F, 0.8800231832F,
- 0.8810835427F, 0.8821381942F, 0.8831871387F, 0.8842303777F,
- 0.8852679127F, 0.8862997456F, 0.8873258784F, 0.8883463132F,
- 0.8893610527F, 0.8903700994F, 0.8913734562F, 0.8923711263F,
- 0.8933631129F, 0.8943494196F, 0.8953300500F, 0.8963050083F,
- 0.8972742985F, 0.8982379249F, 0.8991958922F, 0.9001482052F,
- 0.9010948688F, 0.9020358883F, 0.9029712690F, 0.9039010165F,
- 0.9048251367F, 0.9057436357F, 0.9066565195F, 0.9075637946F,
- 0.9084654678F, 0.9093615456F, 0.9102520353F, 0.9111369440F,
- 0.9120162792F, 0.9128900484F, 0.9137582595F, 0.9146209204F,
- 0.9154780394F, 0.9163296248F, 0.9171756853F, 0.9180162296F,
- 0.9188512667F, 0.9196808057F, 0.9205048559F, 0.9213234270F,
- 0.9221365285F, 0.9229441704F, 0.9237463629F, 0.9245431160F,
- 0.9253344404F, 0.9261203465F, 0.9269008453F, 0.9276759477F,
- 0.9284456648F, 0.9292100080F, 0.9299689889F, 0.9307226190F,
- 0.9314709103F, 0.9322138747F, 0.9329515245F, 0.9336838721F,
- 0.9344109300F, 0.9351327108F, 0.9358492275F, 0.9365604931F,
- 0.9372665208F, 0.9379673239F, 0.9386629160F, 0.9393533107F,
- 0.9400385220F, 0.9407185637F, 0.9413934501F, 0.9420631954F,
- 0.9427278141F, 0.9433873208F, 0.9440417304F, 0.9446910576F,
- 0.9453353176F, 0.9459745255F, 0.9466086968F, 0.9472378469F,
- 0.9478619915F, 0.9484811463F, 0.9490953274F, 0.9497045506F,
- 0.9503088323F, 0.9509081888F, 0.9515026365F, 0.9520921921F,
- 0.9526768723F, 0.9532566940F, 0.9538316742F, 0.9544018300F,
- 0.9549671786F, 0.9555277375F, 0.9560835241F, 0.9566345562F,
- 0.9571808513F, 0.9577224275F, 0.9582593027F, 0.9587914949F,
- 0.9593190225F, 0.9598419038F, 0.9603601571F, 0.9608738012F,
- 0.9613828546F, 0.9618873361F, 0.9623872646F, 0.9628826591F,
- 0.9633735388F, 0.9638599227F, 0.9643418303F, 0.9648192808F,
- 0.9652922939F, 0.9657608890F, 0.9662250860F, 0.9666849046F,
- 0.9671403646F, 0.9675914861F, 0.9680382891F, 0.9684807937F,
- 0.9689190202F, 0.9693529890F, 0.9697827203F, 0.9702082347F,
- 0.9706295529F, 0.9710466953F, 0.9714596828F, 0.9718685362F,
- 0.9722732762F, 0.9726739240F, 0.9730705005F, 0.9734630267F,
- 0.9738515239F, 0.9742360134F, 0.9746165163F, 0.9749930540F,
- 0.9753656481F, 0.9757343198F, 0.9760990909F, 0.9764599829F,
- 0.9768170175F, 0.9771702164F, 0.9775196013F, 0.9778651941F,
- 0.9782070167F, 0.9785450909F, 0.9788794388F, 0.9792100824F,
- 0.9795370437F, 0.9798603449F, 0.9801800080F, 0.9804960554F,
- 0.9808085092F, 0.9811173916F, 0.9814227251F, 0.9817245318F,
- 0.9820228343F, 0.9823176549F, 0.9826090160F, 0.9828969402F,
- 0.9831814498F, 0.9834625674F, 0.9837403156F, 0.9840147169F,
- 0.9842857939F, 0.9845535692F, 0.9848180654F, 0.9850793052F,
- 0.9853373113F, 0.9855921062F, 0.9858437127F, 0.9860921535F,
- 0.9863374512F, 0.9865796287F, 0.9868187085F, 0.9870547136F,
- 0.9872876664F, 0.9875175899F, 0.9877445067F, 0.9879684396F,
- 0.9881894112F, 0.9884074444F, 0.9886225619F, 0.9888347863F,
- 0.9890441404F, 0.9892506468F, 0.9894543284F, 0.9896552077F,
- 0.9898533074F, 0.9900486502F, 0.9902412587F, 0.9904311555F,
- 0.9906183633F, 0.9908029045F, 0.9909848019F, 0.9911640779F,
- 0.9913407550F, 0.9915148557F, 0.9916864025F, 0.9918554179F,
- 0.9920219241F, 0.9921859437F, 0.9923474989F, 0.9925066120F,
- 0.9926633054F, 0.9928176012F, 0.9929695218F, 0.9931190891F,
- 0.9932663254F, 0.9934112527F, 0.9935538932F, 0.9936942686F,
- 0.9938324012F, 0.9939683126F, 0.9941020248F, 0.9942335597F,
- 0.9943629388F, 0.9944901841F, 0.9946153170F, 0.9947383593F,
- 0.9948593325F, 0.9949782579F, 0.9950951572F, 0.9952100516F,
- 0.9953229625F, 0.9954339111F, 0.9955429186F, 0.9956500062F,
- 0.9957551948F, 0.9958585056F, 0.9959599593F, 0.9960595769F,
- 0.9961573792F, 0.9962533869F, 0.9963476206F, 0.9964401009F,
- 0.9965308483F, 0.9966198833F, 0.9967072261F, 0.9967928971F,
- 0.9968769164F, 0.9969593041F, 0.9970400804F, 0.9971192651F,
- 0.9971968781F, 0.9972729391F, 0.9973474680F, 0.9974204842F,
- 0.9974920074F, 0.9975620569F, 0.9976306521F, 0.9976978122F,
- 0.9977635565F, 0.9978279039F, 0.9978908736F, 0.9979524842F,
- 0.9980127547F, 0.9980717037F, 0.9981293499F, 0.9981857116F,
- 0.9982408073F, 0.9982946554F, 0.9983472739F, 0.9983986810F,
- 0.9984488947F, 0.9984979328F, 0.9985458132F, 0.9985925534F,
- 0.9986381711F, 0.9986826838F, 0.9987261086F, 0.9987684630F,
- 0.9988097640F, 0.9988500286F, 0.9988892738F, 0.9989275163F,
- 0.9989647727F, 0.9990010597F, 0.9990363938F, 0.9990707911F,
- 0.9991042679F, 0.9991368404F, 0.9991685244F, 0.9991993358F,
- 0.9992292905F, 0.9992584038F, 0.9992866914F, 0.9993141686F,
- 0.9993408506F, 0.9993667526F, 0.9993918895F, 0.9994162761F,
- 0.9994399273F, 0.9994628576F, 0.9994850815F, 0.9995066133F,
- 0.9995274672F, 0.9995476574F, 0.9995671978F, 0.9995861021F,
- 0.9996043841F, 0.9996220573F, 0.9996391352F, 0.9996556310F,
- 0.9996715579F, 0.9996869288F, 0.9997017568F, 0.9997160543F,
- 0.9997298342F, 0.9997431088F, 0.9997558905F, 0.9997681914F,
- 0.9997800236F, 0.9997913990F, 0.9998023292F, 0.9998128261F,
- 0.9998229009F, 0.9998325650F, 0.9998418296F, 0.9998507058F,
- 0.9998592044F, 0.9998673362F, 0.9998751117F, 0.9998825415F,
- 0.9998896358F, 0.9998964047F, 0.9999028584F, 0.9999090066F,
- 0.9999148590F, 0.9999204253F, 0.9999257148F, 0.9999307368F,
- 0.9999355003F, 0.9999400144F, 0.9999442878F, 0.9999483293F,
- 0.9999521472F, 0.9999557499F, 0.9999591457F, 0.9999623426F,
- 0.9999653483F, 0.9999681708F, 0.9999708175F, 0.9999732959F,
- 0.9999756132F, 0.9999777765F, 0.9999797928F, 0.9999816688F,
- 0.9999834113F, 0.9999850266F, 0.9999865211F, 0.9999879009F,
- 0.9999891721F, 0.9999903405F, 0.9999914118F, 0.9999923914F,
- 0.9999932849F, 0.9999940972F, 0.9999948336F, 0.9999954989F,
- 0.9999960978F, 0.9999966349F, 0.9999971146F, 0.9999975411F,
- 0.9999979185F, 0.9999982507F, 0.9999985414F, 0.9999987944F,
- 0.9999990129F, 0.9999992003F, 0.9999993596F, 0.9999994939F,
- 0.9999996059F, 0.9999996981F, 0.9999997732F, 0.9999998333F,
- 0.9999998805F, 0.9999999170F, 0.9999999444F, 0.9999999643F,
- 0.9999999784F, 0.9999999878F, 0.9999999937F, 0.9999999972F,
- 0.9999999990F, 0.9999999997F, 1.0000000000F, 1.0000000000F,
-};
-
-static const float vwin4096[2048] = {
- 0.0000002310F, 0.0000020791F, 0.0000057754F, 0.0000113197F,
- 0.0000187121F, 0.0000279526F, 0.0000390412F, 0.0000519777F,
- 0.0000667623F, 0.0000833949F, 0.0001018753F, 0.0001222036F,
- 0.0001443798F, 0.0001684037F, 0.0001942754F, 0.0002219947F,
- 0.0002515616F, 0.0002829761F, 0.0003162380F, 0.0003513472F,
- 0.0003883038F, 0.0004271076F, 0.0004677584F, 0.0005102563F,
- 0.0005546011F, 0.0006007928F, 0.0006488311F, 0.0006987160F,
- 0.0007504474F, 0.0008040251F, 0.0008594490F, 0.0009167191F,
- 0.0009758351F, 0.0010367969F, 0.0010996044F, 0.0011642574F,
- 0.0012307558F, 0.0012990994F, 0.0013692880F, 0.0014413216F,
- 0.0015151998F, 0.0015909226F, 0.0016684898F, 0.0017479011F,
- 0.0018291565F, 0.0019122556F, 0.0019971983F, 0.0020839845F,
- 0.0021726138F, 0.0022630861F, 0.0023554012F, 0.0024495588F,
- 0.0025455588F, 0.0026434008F, 0.0027430847F, 0.0028446103F,
- 0.0029479772F, 0.0030531853F, 0.0031602342F, 0.0032691238F,
- 0.0033798538F, 0.0034924239F, 0.0036068338F, 0.0037230833F,
- 0.0038411721F, 0.0039610999F, 0.0040828664F, 0.0042064714F,
- 0.0043319145F, 0.0044591954F, 0.0045883139F, 0.0047192696F,
- 0.0048520622F, 0.0049866914F, 0.0051231569F, 0.0052614583F,
- 0.0054015953F, 0.0055435676F, 0.0056873748F, 0.0058330166F,
- 0.0059804926F, 0.0061298026F, 0.0062809460F, 0.0064339226F,
- 0.0065887320F, 0.0067453738F, 0.0069038476F, 0.0070641531F,
- 0.0072262899F, 0.0073902575F, 0.0075560556F, 0.0077236838F,
- 0.0078931417F, 0.0080644288F, 0.0082375447F, 0.0084124891F,
- 0.0085892615F, 0.0087678614F, 0.0089482885F, 0.0091305422F,
- 0.0093146223F, 0.0095005281F, 0.0096882592F, 0.0098778153F,
- 0.0100691958F, 0.0102624002F, 0.0104574281F, 0.0106542791F,
- 0.0108529525F, 0.0110534480F, 0.0112557651F, 0.0114599032F,
- 0.0116658618F, 0.0118736405F, 0.0120832387F, 0.0122946560F,
- 0.0125078917F, 0.0127229454F, 0.0129398166F, 0.0131585046F,
- 0.0133790090F, 0.0136013292F, 0.0138254647F, 0.0140514149F,
- 0.0142791792F, 0.0145087572F, 0.0147401481F, 0.0149733515F,
- 0.0152083667F, 0.0154451932F, 0.0156838304F, 0.0159242777F,
- 0.0161665345F, 0.0164106001F, 0.0166564741F, 0.0169041557F,
- 0.0171536443F, 0.0174049393F, 0.0176580401F, 0.0179129461F,
- 0.0181696565F, 0.0184281708F, 0.0186884883F, 0.0189506084F,
- 0.0192145303F, 0.0194802535F, 0.0197477772F, 0.0200171008F,
- 0.0202882236F, 0.0205611449F, 0.0208358639F, 0.0211123801F,
- 0.0213906927F, 0.0216708011F, 0.0219527043F, 0.0222364019F,
- 0.0225218930F, 0.0228091769F, 0.0230982529F, 0.0233891203F,
- 0.0236817782F, 0.0239762259F, 0.0242724628F, 0.0245704880F,
- 0.0248703007F, 0.0251719002F, 0.0254752858F, 0.0257804565F,
- 0.0260874117F, 0.0263961506F, 0.0267066722F, 0.0270189760F,
- 0.0273330609F, 0.0276489263F, 0.0279665712F, 0.0282859949F,
- 0.0286071966F, 0.0289301753F, 0.0292549303F, 0.0295814607F,
- 0.0299097656F, 0.0302398442F, 0.0305716957F, 0.0309053191F,
- 0.0312407135F, 0.0315778782F, 0.0319168122F, 0.0322575145F,
- 0.0325999844F, 0.0329442209F, 0.0332902231F, 0.0336379900F,
- 0.0339875208F, 0.0343388146F, 0.0346918703F, 0.0350466871F,
- 0.0354032640F, 0.0357616000F, 0.0361216943F, 0.0364835458F,
- 0.0368471535F, 0.0372125166F, 0.0375796339F, 0.0379485046F,
- 0.0383191276F, 0.0386915020F, 0.0390656267F, 0.0394415008F,
- 0.0398191231F, 0.0401984927F, 0.0405796086F, 0.0409624698F,
- 0.0413470751F, 0.0417334235F, 0.0421215141F, 0.0425113457F,
- 0.0429029172F, 0.0432962277F, 0.0436912760F, 0.0440880610F,
- 0.0444865817F, 0.0448868370F, 0.0452888257F, 0.0456925468F,
- 0.0460979992F, 0.0465051816F, 0.0469140931F, 0.0473247325F,
- 0.0477370986F, 0.0481511902F, 0.0485670064F, 0.0489845458F,
- 0.0494038074F, 0.0498247899F, 0.0502474922F, 0.0506719131F,
- 0.0510980514F, 0.0515259060F, 0.0519554756F, 0.0523867590F,
- 0.0528197550F, 0.0532544624F, 0.0536908800F, 0.0541290066F,
- 0.0545688408F, 0.0550103815F, 0.0554536274F, 0.0558985772F,
- 0.0563452297F, 0.0567935837F, 0.0572436377F, 0.0576953907F,
- 0.0581488412F, 0.0586039880F, 0.0590608297F, 0.0595193651F,
- 0.0599795929F, 0.0604415117F, 0.0609051202F, 0.0613704170F,
- 0.0618374009F, 0.0623060704F, 0.0627764243F, 0.0632484611F,
- 0.0637221795F, 0.0641975781F, 0.0646746555F, 0.0651534104F,
- 0.0656338413F, 0.0661159469F, 0.0665997257F, 0.0670851763F,
- 0.0675722973F, 0.0680610873F, 0.0685515448F, 0.0690436684F,
- 0.0695374567F, 0.0700329081F, 0.0705300213F, 0.0710287947F,
- 0.0715292269F, 0.0720313163F, 0.0725350616F, 0.0730404612F,
- 0.0735475136F, 0.0740562172F, 0.0745665707F, 0.0750785723F,
- 0.0755922207F, 0.0761075143F, 0.0766244515F, 0.0771430307F,
- 0.0776632505F, 0.0781851092F, 0.0787086052F, 0.0792337371F,
- 0.0797605032F, 0.0802889018F, 0.0808189315F, 0.0813505905F,
- 0.0818838773F, 0.0824187903F, 0.0829553277F, 0.0834934881F,
- 0.0840332697F, 0.0845746708F, 0.0851176899F, 0.0856623252F,
- 0.0862085751F, 0.0867564379F, 0.0873059119F, 0.0878569954F,
- 0.0884096867F, 0.0889639840F, 0.0895198858F, 0.0900773902F,
- 0.0906364955F, 0.0911972000F, 0.0917595019F, 0.0923233995F,
- 0.0928888909F, 0.0934559745F, 0.0940246485F, 0.0945949110F,
- 0.0951667604F, 0.0957401946F, 0.0963152121F, 0.0968918109F,
- 0.0974699893F, 0.0980497454F, 0.0986310773F, 0.0992139832F,
- 0.0997984614F, 0.1003845098F, 0.1009721267F, 0.1015613101F,
- 0.1021520582F, 0.1027443692F, 0.1033382410F, 0.1039336718F,
- 0.1045306597F, 0.1051292027F, 0.1057292990F, 0.1063309466F,
- 0.1069341435F, 0.1075388878F, 0.1081451776F, 0.1087530108F,
- 0.1093623856F, 0.1099732998F, 0.1105857516F, 0.1111997389F,
- 0.1118152597F, 0.1124323121F, 0.1130508939F, 0.1136710032F,
- 0.1142926379F, 0.1149157960F, 0.1155404755F, 0.1161666742F,
- 0.1167943901F, 0.1174236211F, 0.1180543652F, 0.1186866202F,
- 0.1193203841F, 0.1199556548F, 0.1205924300F, 0.1212307078F,
- 0.1218704860F, 0.1225117624F, 0.1231545349F, 0.1237988013F,
- 0.1244445596F, 0.1250918074F, 0.1257405427F, 0.1263907632F,
- 0.1270424667F, 0.1276956512F, 0.1283503142F, 0.1290064537F,
- 0.1296640674F, 0.1303231530F, 0.1309837084F, 0.1316457312F,
- 0.1323092193F, 0.1329741703F, 0.1336405820F, 0.1343084520F,
- 0.1349777782F, 0.1356485582F, 0.1363207897F, 0.1369944704F,
- 0.1376695979F, 0.1383461700F, 0.1390241842F, 0.1397036384F,
- 0.1403845300F, 0.1410668567F, 0.1417506162F, 0.1424358061F,
- 0.1431224240F, 0.1438104674F, 0.1444999341F, 0.1451908216F,
- 0.1458831274F, 0.1465768492F, 0.1472719844F, 0.1479685308F,
- 0.1486664857F, 0.1493658468F, 0.1500666115F, 0.1507687775F,
- 0.1514723422F, 0.1521773031F, 0.1528836577F, 0.1535914035F,
- 0.1543005380F, 0.1550110587F, 0.1557229631F, 0.1564362485F,
- 0.1571509124F, 0.1578669524F, 0.1585843657F, 0.1593031499F,
- 0.1600233024F, 0.1607448205F, 0.1614677017F, 0.1621919433F,
- 0.1629175428F, 0.1636444975F, 0.1643728047F, 0.1651024619F,
- 0.1658334665F, 0.1665658156F, 0.1672995067F, 0.1680345371F,
- 0.1687709041F, 0.1695086050F, 0.1702476372F, 0.1709879978F,
- 0.1717296843F, 0.1724726938F, 0.1732170237F, 0.1739626711F,
- 0.1747096335F, 0.1754579079F, 0.1762074916F, 0.1769583819F,
- 0.1777105760F, 0.1784640710F, 0.1792188642F, 0.1799749529F,
- 0.1807323340F, 0.1814910049F, 0.1822509628F, 0.1830122046F,
- 0.1837747277F, 0.1845385292F, 0.1853036062F, 0.1860699558F,
- 0.1868375751F, 0.1876064613F, 0.1883766114F, 0.1891480226F,
- 0.1899206919F, 0.1906946164F, 0.1914697932F, 0.1922462194F,
- 0.1930238919F, 0.1938028079F, 0.1945829643F, 0.1953643583F,
- 0.1961469868F, 0.1969308468F, 0.1977159353F, 0.1985022494F,
- 0.1992897859F, 0.2000785420F, 0.2008685145F, 0.2016597005F,
- 0.2024520968F, 0.2032457005F, 0.2040405084F, 0.2048365175F,
- 0.2056337247F, 0.2064321269F, 0.2072317211F, 0.2080325041F,
- 0.2088344727F, 0.2096376240F, 0.2104419547F, 0.2112474618F,
- 0.2120541420F, 0.2128619923F, 0.2136710094F, 0.2144811902F,
- 0.2152925315F, 0.2161050301F, 0.2169186829F, 0.2177334866F,
- 0.2185494381F, 0.2193665340F, 0.2201847712F, 0.2210041465F,
- 0.2218246565F, 0.2226462981F, 0.2234690680F, 0.2242929629F,
- 0.2251179796F, 0.2259441147F, 0.2267713650F, 0.2275997272F,
- 0.2284291979F, 0.2292597739F, 0.2300914518F, 0.2309242283F,
- 0.2317581001F, 0.2325930638F, 0.2334291160F, 0.2342662534F,
- 0.2351044727F, 0.2359437703F, 0.2367841431F, 0.2376255875F,
- 0.2384681001F, 0.2393116776F, 0.2401563165F, 0.2410020134F,
- 0.2418487649F, 0.2426965675F, 0.2435454178F, 0.2443953122F,
- 0.2452462474F, 0.2460982199F, 0.2469512262F, 0.2478052628F,
- 0.2486603262F, 0.2495164129F, 0.2503735194F, 0.2512316421F,
- 0.2520907776F, 0.2529509222F, 0.2538120726F, 0.2546742250F,
- 0.2555373760F, 0.2564015219F, 0.2572666593F, 0.2581327845F,
- 0.2589998939F, 0.2598679840F, 0.2607370510F, 0.2616070916F,
- 0.2624781019F, 0.2633500783F, 0.2642230173F, 0.2650969152F,
- 0.2659717684F, 0.2668475731F, 0.2677243257F, 0.2686020226F,
- 0.2694806601F, 0.2703602344F, 0.2712407419F, 0.2721221789F,
- 0.2730045417F, 0.2738878265F, 0.2747720297F, 0.2756571474F,
- 0.2765431760F, 0.2774301117F, 0.2783179508F, 0.2792066895F,
- 0.2800963240F, 0.2809868505F, 0.2818782654F, 0.2827705647F,
- 0.2836637447F, 0.2845578016F, 0.2854527315F, 0.2863485307F,
- 0.2872451953F, 0.2881427215F, 0.2890411055F, 0.2899403433F,
- 0.2908404312F, 0.2917413654F, 0.2926431418F, 0.2935457567F,
- 0.2944492061F, 0.2953534863F, 0.2962585932F, 0.2971645230F,
- 0.2980712717F, 0.2989788356F, 0.2998872105F, 0.3007963927F,
- 0.3017063781F, 0.3026171629F, 0.3035287430F, 0.3044411145F,
- 0.3053542736F, 0.3062682161F, 0.3071829381F, 0.3080984356F,
- 0.3090147047F, 0.3099317413F, 0.3108495414F, 0.3117681011F,
- 0.3126874163F, 0.3136074830F, 0.3145282972F, 0.3154498548F,
- 0.3163721517F, 0.3172951841F, 0.3182189477F, 0.3191434385F,
- 0.3200686525F, 0.3209945856F, 0.3219212336F, 0.3228485927F,
- 0.3237766585F, 0.3247054271F, 0.3256348943F, 0.3265650560F,
- 0.3274959081F, 0.3284274465F, 0.3293596671F, 0.3302925657F,
- 0.3312261382F, 0.3321603804F, 0.3330952882F, 0.3340308574F,
- 0.3349670838F, 0.3359039634F, 0.3368414919F, 0.3377796651F,
- 0.3387184789F, 0.3396579290F, 0.3405980113F, 0.3415387216F,
- 0.3424800556F, 0.3434220091F, 0.3443645779F, 0.3453077578F,
- 0.3462515446F, 0.3471959340F, 0.3481409217F, 0.3490865036F,
- 0.3500326754F, 0.3509794328F, 0.3519267715F, 0.3528746873F,
- 0.3538231759F, 0.3547722330F, 0.3557218544F, 0.3566720357F,
- 0.3576227727F, 0.3585740610F, 0.3595258964F, 0.3604782745F,
- 0.3614311910F, 0.3623846417F, 0.3633386221F, 0.3642931280F,
- 0.3652481549F, 0.3662036987F, 0.3671597548F, 0.3681163191F,
- 0.3690733870F, 0.3700309544F, 0.3709890167F, 0.3719475696F,
- 0.3729066089F, 0.3738661299F, 0.3748261285F, 0.3757866002F,
- 0.3767475406F, 0.3777089453F, 0.3786708100F, 0.3796331302F,
- 0.3805959014F, 0.3815591194F, 0.3825227796F, 0.3834868777F,
- 0.3844514093F, 0.3854163698F, 0.3863817549F, 0.3873475601F,
- 0.3883137810F, 0.3892804131F, 0.3902474521F, 0.3912148933F,
- 0.3921827325F, 0.3931509650F, 0.3941195865F, 0.3950885925F,
- 0.3960579785F, 0.3970277400F, 0.3979978725F, 0.3989683716F,
- 0.3999392328F, 0.4009104516F, 0.4018820234F, 0.4028539438F,
- 0.4038262084F, 0.4047988125F, 0.4057717516F, 0.4067450214F,
- 0.4077186172F, 0.4086925345F, 0.4096667688F, 0.4106413155F,
- 0.4116161703F, 0.4125913284F, 0.4135667854F, 0.4145425368F,
- 0.4155185780F, 0.4164949044F, 0.4174715116F, 0.4184483949F,
- 0.4194255498F, 0.4204029718F, 0.4213806563F, 0.4223585987F,
- 0.4233367946F, 0.4243152392F, 0.4252939281F, 0.4262728566F,
- 0.4272520202F, 0.4282314144F, 0.4292110345F, 0.4301908760F,
- 0.4311709343F, 0.4321512047F, 0.4331316828F, 0.4341123639F,
- 0.4350932435F, 0.4360743168F, 0.4370555794F, 0.4380370267F,
- 0.4390186540F, 0.4400004567F, 0.4409824303F, 0.4419645701F,
- 0.4429468716F, 0.4439293300F, 0.4449119409F, 0.4458946996F,
- 0.4468776014F, 0.4478606418F, 0.4488438162F, 0.4498271199F,
- 0.4508105483F, 0.4517940967F, 0.4527777607F, 0.4537615355F,
- 0.4547454165F, 0.4557293991F, 0.4567134786F, 0.4576976505F,
- 0.4586819101F, 0.4596662527F, 0.4606506738F, 0.4616351687F,
- 0.4626197328F, 0.4636043614F, 0.4645890499F, 0.4655737936F,
- 0.4665585880F, 0.4675434284F, 0.4685283101F, 0.4695132286F,
- 0.4704981791F, 0.4714831570F, 0.4724681577F, 0.4734531766F,
- 0.4744382089F, 0.4754232501F, 0.4764082956F, 0.4773933406F,
- 0.4783783806F, 0.4793634108F, 0.4803484267F, 0.4813334237F,
- 0.4823183969F, 0.4833033419F, 0.4842882540F, 0.4852731285F,
- 0.4862579608F, 0.4872427462F, 0.4882274802F, 0.4892121580F,
- 0.4901967751F, 0.4911813267F, 0.4921658083F, 0.4931502151F,
- 0.4941345427F, 0.4951187863F, 0.4961029412F, 0.4970870029F,
- 0.4980709667F, 0.4990548280F, 0.5000385822F, 0.5010222245F,
- 0.5020057505F, 0.5029891553F, 0.5039724345F, 0.5049555834F,
- 0.5059385973F, 0.5069214716F, 0.5079042018F, 0.5088867831F,
- 0.5098692110F, 0.5108514808F, 0.5118335879F, 0.5128155277F,
- 0.5137972956F, 0.5147788869F, 0.5157602971F, 0.5167415215F,
- 0.5177225555F, 0.5187033945F, 0.5196840339F, 0.5206644692F,
- 0.5216446956F, 0.5226247086F, 0.5236045035F, 0.5245840759F,
- 0.5255634211F, 0.5265425344F, 0.5275214114F, 0.5285000474F,
- 0.5294784378F, 0.5304565781F, 0.5314344637F, 0.5324120899F,
- 0.5333894522F, 0.5343665461F, 0.5353433670F, 0.5363199102F,
- 0.5372961713F, 0.5382721457F, 0.5392478287F, 0.5402232159F,
- 0.5411983027F, 0.5421730845F, 0.5431475569F, 0.5441217151F,
- 0.5450955548F, 0.5460690714F, 0.5470422602F, 0.5480151169F,
- 0.5489876368F, 0.5499598155F, 0.5509316484F, 0.5519031310F,
- 0.5528742587F, 0.5538450271F, 0.5548154317F, 0.5557854680F,
- 0.5567551314F, 0.5577244174F, 0.5586933216F, 0.5596618395F,
- 0.5606299665F, 0.5615976983F, 0.5625650302F, 0.5635319580F,
- 0.5644984770F, 0.5654645828F, 0.5664302709F, 0.5673955370F,
- 0.5683603765F, 0.5693247850F, 0.5702887580F, 0.5712522912F,
- 0.5722153800F, 0.5731780200F, 0.5741402069F, 0.5751019362F,
- 0.5760632034F, 0.5770240042F, 0.5779843341F, 0.5789441889F,
- 0.5799035639F, 0.5808624549F, 0.5818208575F, 0.5827787673F,
- 0.5837361800F, 0.5846930910F, 0.5856494961F, 0.5866053910F,
- 0.5875607712F, 0.5885156324F, 0.5894699703F, 0.5904237804F,
- 0.5913770586F, 0.5923298004F, 0.5932820016F, 0.5942336578F,
- 0.5951847646F, 0.5961353179F, 0.5970853132F, 0.5980347464F,
- 0.5989836131F, 0.5999319090F, 0.6008796298F, 0.6018267713F,
- 0.6027733292F, 0.6037192993F, 0.6046646773F, 0.6056094589F,
- 0.6065536400F, 0.6074972162F, 0.6084401833F, 0.6093825372F,
- 0.6103242736F, 0.6112653884F, 0.6122058772F, 0.6131457359F,
- 0.6140849604F, 0.6150235464F, 0.6159614897F, 0.6168987862F,
- 0.6178354318F, 0.6187714223F, 0.6197067535F, 0.6206414213F,
- 0.6215754215F, 0.6225087501F, 0.6234414028F, 0.6243733757F,
- 0.6253046646F, 0.6262352654F, 0.6271651739F, 0.6280943862F,
- 0.6290228982F, 0.6299507057F, 0.6308778048F, 0.6318041913F,
- 0.6327298612F, 0.6336548105F, 0.6345790352F, 0.6355025312F,
- 0.6364252945F, 0.6373473211F, 0.6382686070F, 0.6391891483F,
- 0.6401089409F, 0.6410279808F, 0.6419462642F, 0.6428637869F,
- 0.6437805452F, 0.6446965350F, 0.6456117524F, 0.6465261935F,
- 0.6474398544F, 0.6483527311F, 0.6492648197F, 0.6501761165F,
- 0.6510866174F, 0.6519963186F, 0.6529052162F, 0.6538133064F,
- 0.6547205854F, 0.6556270492F, 0.6565326941F, 0.6574375162F,
- 0.6583415117F, 0.6592446769F, 0.6601470079F, 0.6610485009F,
- 0.6619491521F, 0.6628489578F, 0.6637479143F, 0.6646460177F,
- 0.6655432643F, 0.6664396505F, 0.6673351724F, 0.6682298264F,
- 0.6691236087F, 0.6700165157F, 0.6709085436F, 0.6717996889F,
- 0.6726899478F, 0.6735793167F, 0.6744677918F, 0.6753553697F,
- 0.6762420466F, 0.6771278190F, 0.6780126832F, 0.6788966357F,
- 0.6797796728F, 0.6806617909F, 0.6815429866F, 0.6824232562F,
- 0.6833025961F, 0.6841810030F, 0.6850584731F, 0.6859350031F,
- 0.6868105894F, 0.6876852284F, 0.6885589168F, 0.6894316510F,
- 0.6903034275F, 0.6911742430F, 0.6920440939F, 0.6929129769F,
- 0.6937808884F, 0.6946478251F, 0.6955137837F, 0.6963787606F,
- 0.6972427525F, 0.6981057560F, 0.6989677678F, 0.6998287845F,
- 0.7006888028F, 0.7015478194F, 0.7024058309F, 0.7032628340F,
- 0.7041188254F, 0.7049738019F, 0.7058277601F, 0.7066806969F,
- 0.7075326089F, 0.7083834929F, 0.7092333457F, 0.7100821640F,
- 0.7109299447F, 0.7117766846F, 0.7126223804F, 0.7134670291F,
- 0.7143106273F, 0.7151531721F, 0.7159946602F, 0.7168350885F,
- 0.7176744539F, 0.7185127534F, 0.7193499837F, 0.7201861418F,
- 0.7210212247F, 0.7218552293F, 0.7226881526F, 0.7235199914F,
- 0.7243507428F, 0.7251804039F, 0.7260089715F, 0.7268364426F,
- 0.7276628144F, 0.7284880839F, 0.7293122481F, 0.7301353040F,
- 0.7309572487F, 0.7317780794F, 0.7325977930F, 0.7334163868F,
- 0.7342338579F, 0.7350502033F, 0.7358654202F, 0.7366795059F,
- 0.7374924573F, 0.7383042718F, 0.7391149465F, 0.7399244787F,
- 0.7407328655F, 0.7415401041F, 0.7423461920F, 0.7431511261F,
- 0.7439549040F, 0.7447575227F, 0.7455589797F, 0.7463592723F,
- 0.7471583976F, 0.7479563532F, 0.7487531363F, 0.7495487443F,
- 0.7503431745F, 0.7511364244F, 0.7519284913F, 0.7527193726F,
- 0.7535090658F, 0.7542975683F, 0.7550848776F, 0.7558709910F,
- 0.7566559062F, 0.7574396205F, 0.7582221314F, 0.7590034366F,
- 0.7597835334F, 0.7605624194F, 0.7613400923F, 0.7621165495F,
- 0.7628917886F, 0.7636658072F, 0.7644386030F, 0.7652101735F,
- 0.7659805164F, 0.7667496292F, 0.7675175098F, 0.7682841556F,
- 0.7690495645F, 0.7698137341F, 0.7705766622F, 0.7713383463F,
- 0.7720987844F, 0.7728579741F, 0.7736159132F, 0.7743725994F,
- 0.7751280306F, 0.7758822046F, 0.7766351192F, 0.7773867722F,
- 0.7781371614F, 0.7788862848F, 0.7796341401F, 0.7803807253F,
- 0.7811260383F, 0.7818700769F, 0.7826128392F, 0.7833543230F,
- 0.7840945263F, 0.7848334471F, 0.7855710833F, 0.7863074330F,
- 0.7870424941F, 0.7877762647F, 0.7885087428F, 0.7892399264F,
- 0.7899698137F, 0.7906984026F, 0.7914256914F, 0.7921516780F,
- 0.7928763607F, 0.7935997375F, 0.7943218065F, 0.7950425661F,
- 0.7957620142F, 0.7964801492F, 0.7971969692F, 0.7979124724F,
- 0.7986266570F, 0.7993395214F, 0.8000510638F, 0.8007612823F,
- 0.8014701754F, 0.8021777413F, 0.8028839784F, 0.8035888849F,
- 0.8042924592F, 0.8049946997F, 0.8056956048F, 0.8063951727F,
- 0.8070934020F, 0.8077902910F, 0.8084858381F, 0.8091800419F,
- 0.8098729007F, 0.8105644130F, 0.8112545774F, 0.8119433922F,
- 0.8126308561F, 0.8133169676F, 0.8140017251F, 0.8146851272F,
- 0.8153671726F, 0.8160478598F, 0.8167271874F, 0.8174051539F,
- 0.8180817582F, 0.8187569986F, 0.8194308741F, 0.8201033831F,
- 0.8207745244F, 0.8214442966F, 0.8221126986F, 0.8227797290F,
- 0.8234453865F, 0.8241096700F, 0.8247725781F, 0.8254341097F,
- 0.8260942636F, 0.8267530385F, 0.8274104334F, 0.8280664470F,
- 0.8287210782F, 0.8293743259F, 0.8300261889F, 0.8306766662F,
- 0.8313257566F, 0.8319734591F, 0.8326197727F, 0.8332646963F,
- 0.8339082288F, 0.8345503692F, 0.8351911167F, 0.8358304700F,
- 0.8364684284F, 0.8371049907F, 0.8377401562F, 0.8383739238F,
- 0.8390062927F, 0.8396372618F, 0.8402668305F, 0.8408949977F,
- 0.8415217626F, 0.8421471245F, 0.8427710823F, 0.8433936354F,
- 0.8440147830F, 0.8446345242F, 0.8452528582F, 0.8458697844F,
- 0.8464853020F, 0.8470994102F, 0.8477121084F, 0.8483233958F,
- 0.8489332718F, 0.8495417356F, 0.8501487866F, 0.8507544243F,
- 0.8513586479F, 0.8519614568F, 0.8525628505F, 0.8531628283F,
- 0.8537613897F, 0.8543585341F, 0.8549542611F, 0.8555485699F,
- 0.8561414603F, 0.8567329315F, 0.8573229832F, 0.8579116149F,
- 0.8584988262F, 0.8590846165F, 0.8596689855F, 0.8602519327F,
- 0.8608334577F, 0.8614135603F, 0.8619922399F, 0.8625694962F,
- 0.8631453289F, 0.8637197377F, 0.8642927222F, 0.8648642821F,
- 0.8654344172F, 0.8660031272F, 0.8665704118F, 0.8671362708F,
- 0.8677007039F, 0.8682637109F, 0.8688252917F, 0.8693854460F,
- 0.8699441737F, 0.8705014745F, 0.8710573485F, 0.8716117953F,
- 0.8721648150F, 0.8727164073F, 0.8732665723F, 0.8738153098F,
- 0.8743626197F, 0.8749085021F, 0.8754529569F, 0.8759959840F,
- 0.8765375835F, 0.8770777553F, 0.8776164996F, 0.8781538162F,
- 0.8786897054F, 0.8792241670F, 0.8797572013F, 0.8802888082F,
- 0.8808189880F, 0.8813477407F, 0.8818750664F, 0.8824009653F,
- 0.8829254375F, 0.8834484833F, 0.8839701028F, 0.8844902961F,
- 0.8850090636F, 0.8855264054F, 0.8860423218F, 0.8865568131F,
- 0.8870698794F, 0.8875815212F, 0.8880917386F, 0.8886005319F,
- 0.8891079016F, 0.8896138479F, 0.8901183712F, 0.8906214719F,
- 0.8911231503F, 0.8916234067F, 0.8921222417F, 0.8926196556F,
- 0.8931156489F, 0.8936102219F, 0.8941033752F, 0.8945951092F,
- 0.8950854244F, 0.8955743212F, 0.8960618003F, 0.8965478621F,
- 0.8970325071F, 0.8975157359F, 0.8979975490F, 0.8984779471F,
- 0.8989569307F, 0.8994345004F, 0.8999106568F, 0.9003854005F,
- 0.9008587323F, 0.9013306526F, 0.9018011623F, 0.9022702619F,
- 0.9027379521F, 0.9032042337F, 0.9036691074F, 0.9041325739F,
- 0.9045946339F, 0.9050552882F, 0.9055145376F, 0.9059723828F,
- 0.9064288246F, 0.9068838638F, 0.9073375013F, 0.9077897379F,
- 0.9082405743F, 0.9086900115F, 0.9091380503F, 0.9095846917F,
- 0.9100299364F, 0.9104737854F, 0.9109162397F, 0.9113573001F,
- 0.9117969675F, 0.9122352430F, 0.9126721275F, 0.9131076219F,
- 0.9135417273F, 0.9139744447F, 0.9144057750F, 0.9148357194F,
- 0.9152642787F, 0.9156914542F, 0.9161172468F, 0.9165416576F,
- 0.9169646877F, 0.9173863382F, 0.9178066102F, 0.9182255048F,
- 0.9186430232F, 0.9190591665F, 0.9194739359F, 0.9198873324F,
- 0.9202993574F, 0.9207100120F, 0.9211192973F, 0.9215272147F,
- 0.9219337653F, 0.9223389504F, 0.9227427713F, 0.9231452290F,
- 0.9235463251F, 0.9239460607F, 0.9243444371F, 0.9247414557F,
- 0.9251371177F, 0.9255314245F, 0.9259243774F, 0.9263159778F,
- 0.9267062270F, 0.9270951264F, 0.9274826774F, 0.9278688814F,
- 0.9282537398F, 0.9286372540F, 0.9290194254F, 0.9294002555F,
- 0.9297797458F, 0.9301578976F, 0.9305347125F, 0.9309101919F,
- 0.9312843373F, 0.9316571503F, 0.9320286323F, 0.9323987849F,
- 0.9327676097F, 0.9331351080F, 0.9335012816F, 0.9338661320F,
- 0.9342296607F, 0.9345918694F, 0.9349527596F, 0.9353123330F,
- 0.9356705911F, 0.9360275357F, 0.9363831683F, 0.9367374905F,
- 0.9370905042F, 0.9374422108F, 0.9377926122F, 0.9381417099F,
- 0.9384895057F, 0.9388360014F, 0.9391811985F, 0.9395250989F,
- 0.9398677043F, 0.9402090165F, 0.9405490371F, 0.9408877680F,
- 0.9412252110F, 0.9415613678F, 0.9418962402F, 0.9422298301F,
- 0.9425621392F, 0.9428931695F, 0.9432229226F, 0.9435514005F,
- 0.9438786050F, 0.9442045381F, 0.9445292014F, 0.9448525971F,
- 0.9451747268F, 0.9454955926F, 0.9458151963F, 0.9461335399F,
- 0.9464506253F, 0.9467664545F, 0.9470810293F, 0.9473943517F,
- 0.9477064238F, 0.9480172474F, 0.9483268246F, 0.9486351573F,
- 0.9489422475F, 0.9492480973F, 0.9495527087F, 0.9498560837F,
- 0.9501582243F, 0.9504591325F, 0.9507588105F, 0.9510572603F,
- 0.9513544839F, 0.9516504834F, 0.9519452609F, 0.9522388186F,
- 0.9525311584F, 0.9528222826F, 0.9531121932F, 0.9534008923F,
- 0.9536883821F, 0.9539746647F, 0.9542597424F, 0.9545436171F,
- 0.9548262912F, 0.9551077667F, 0.9553880459F, 0.9556671309F,
- 0.9559450239F, 0.9562217272F, 0.9564972429F, 0.9567715733F,
- 0.9570447206F, 0.9573166871F, 0.9575874749F, 0.9578570863F,
- 0.9581255236F, 0.9583927890F, 0.9586588849F, 0.9589238134F,
- 0.9591875769F, 0.9594501777F, 0.9597116180F, 0.9599719003F,
- 0.9602310267F, 0.9604889995F, 0.9607458213F, 0.9610014942F,
- 0.9612560206F, 0.9615094028F, 0.9617616433F, 0.9620127443F,
- 0.9622627083F, 0.9625115376F, 0.9627592345F, 0.9630058016F,
- 0.9632512411F, 0.9634955555F, 0.9637387471F, 0.9639808185F,
- 0.9642217720F, 0.9644616100F, 0.9647003349F, 0.9649379493F,
- 0.9651744556F, 0.9654098561F, 0.9656441534F, 0.9658773499F,
- 0.9661094480F, 0.9663404504F, 0.9665703593F, 0.9667991774F,
- 0.9670269071F, 0.9672535509F, 0.9674791114F, 0.9677035909F,
- 0.9679269921F, 0.9681493174F, 0.9683705694F, 0.9685907506F,
- 0.9688098636F, 0.9690279108F, 0.9692448948F, 0.9694608182F,
- 0.9696756836F, 0.9698894934F, 0.9701022503F, 0.9703139569F,
- 0.9705246156F, 0.9707342291F, 0.9709428000F, 0.9711503309F,
- 0.9713568243F, 0.9715622829F, 0.9717667093F, 0.9719701060F,
- 0.9721724757F, 0.9723738210F, 0.9725741446F, 0.9727734490F,
- 0.9729717369F, 0.9731690109F, 0.9733652737F, 0.9735605279F,
- 0.9737547762F, 0.9739480212F, 0.9741402656F, 0.9743315120F,
- 0.9745217631F, 0.9747110216F, 0.9748992901F, 0.9750865714F,
- 0.9752728681F, 0.9754581829F, 0.9756425184F, 0.9758258775F,
- 0.9760082627F, 0.9761896768F, 0.9763701224F, 0.9765496024F,
- 0.9767281193F, 0.9769056760F, 0.9770822751F, 0.9772579193F,
- 0.9774326114F, 0.9776063542F, 0.9777791502F, 0.9779510023F,
- 0.9781219133F, 0.9782918858F, 0.9784609226F, 0.9786290264F,
- 0.9787962000F, 0.9789624461F, 0.9791277676F, 0.9792921671F,
- 0.9794556474F, 0.9796182113F, 0.9797798615F, 0.9799406009F,
- 0.9801004321F, 0.9802593580F, 0.9804173813F, 0.9805745049F,
- 0.9807307314F, 0.9808860637F, 0.9810405046F, 0.9811940568F,
- 0.9813467232F, 0.9814985065F, 0.9816494095F, 0.9817994351F,
- 0.9819485860F, 0.9820968650F, 0.9822442750F, 0.9823908186F,
- 0.9825364988F, 0.9826813184F, 0.9828252801F, 0.9829683868F,
- 0.9831106413F, 0.9832520463F, 0.9833926048F, 0.9835323195F,
- 0.9836711932F, 0.9838092288F, 0.9839464291F, 0.9840827969F,
- 0.9842183351F, 0.9843530464F, 0.9844869337F, 0.9846199998F,
- 0.9847522475F, 0.9848836798F, 0.9850142993F, 0.9851441090F,
- 0.9852731117F, 0.9854013101F, 0.9855287073F, 0.9856553058F,
- 0.9857811087F, 0.9859061188F, 0.9860303388F, 0.9861537717F,
- 0.9862764202F, 0.9863982872F, 0.9865193756F, 0.9866396882F,
- 0.9867592277F, 0.9868779972F, 0.9869959993F, 0.9871132370F,
- 0.9872297131F, 0.9873454304F, 0.9874603918F, 0.9875746001F,
- 0.9876880581F, 0.9878007688F, 0.9879127348F, 0.9880239592F,
- 0.9881344447F, 0.9882441941F, 0.9883532104F, 0.9884614962F,
- 0.9885690546F, 0.9886758883F, 0.9887820001F, 0.9888873930F,
- 0.9889920697F, 0.9890960331F, 0.9891992859F, 0.9893018312F,
- 0.9894036716F, 0.9895048100F, 0.9896052493F, 0.9897049923F,
- 0.9898040418F, 0.9899024006F, 0.9900000717F, 0.9900970577F,
- 0.9901933616F, 0.9902889862F, 0.9903839343F, 0.9904782087F,
- 0.9905718122F, 0.9906647477F, 0.9907570180F, 0.9908486259F,
- 0.9909395742F, 0.9910298658F, 0.9911195034F, 0.9912084899F,
- 0.9912968281F, 0.9913845208F, 0.9914715708F, 0.9915579810F,
- 0.9916437540F, 0.9917288928F, 0.9918134001F, 0.9918972788F,
- 0.9919805316F, 0.9920631613F, 0.9921451707F, 0.9922265626F,
- 0.9923073399F, 0.9923875052F, 0.9924670615F, 0.9925460114F,
- 0.9926243577F, 0.9927021033F, 0.9927792508F, 0.9928558032F,
- 0.9929317631F, 0.9930071333F, 0.9930819167F, 0.9931561158F,
- 0.9932297337F, 0.9933027728F, 0.9933752362F, 0.9934471264F,
- 0.9935184462F, 0.9935891985F, 0.9936593859F, 0.9937290112F,
- 0.9937980771F, 0.9938665864F, 0.9939345418F, 0.9940019460F,
- 0.9940688018F, 0.9941351118F, 0.9942008789F, 0.9942661057F,
- 0.9943307950F, 0.9943949494F, 0.9944585717F, 0.9945216645F,
- 0.9945842307F, 0.9946462728F, 0.9947077936F, 0.9947687957F,
- 0.9948292820F, 0.9948892550F, 0.9949487174F, 0.9950076719F,
- 0.9950661212F, 0.9951240679F, 0.9951815148F, 0.9952384645F,
- 0.9952949196F, 0.9953508828F, 0.9954063568F, 0.9954613442F,
- 0.9955158476F, 0.9955698697F, 0.9956234132F, 0.9956764806F,
- 0.9957290746F, 0.9957811978F, 0.9958328528F, 0.9958840423F,
- 0.9959347688F, 0.9959850351F, 0.9960348435F, 0.9960841969F,
- 0.9961330977F, 0.9961815486F, 0.9962295521F, 0.9962771108F,
- 0.9963242274F, 0.9963709043F, 0.9964171441F, 0.9964629494F,
- 0.9965083228F, 0.9965532668F, 0.9965977840F, 0.9966418768F,
- 0.9966855479F, 0.9967287998F, 0.9967716350F, 0.9968140559F,
- 0.9968560653F, 0.9968976655F, 0.9969388591F, 0.9969796485F,
- 0.9970200363F, 0.9970600250F, 0.9970996170F, 0.9971388149F,
- 0.9971776211F, 0.9972160380F, 0.9972540683F, 0.9972917142F,
- 0.9973289783F, 0.9973658631F, 0.9974023709F, 0.9974385042F,
- 0.9974742655F, 0.9975096571F, 0.9975446816F, 0.9975793413F,
- 0.9976136386F, 0.9976475759F, 0.9976811557F, 0.9977143803F,
- 0.9977472521F, 0.9977797736F, 0.9978119470F, 0.9978437748F,
- 0.9978752593F, 0.9979064029F, 0.9979372079F, 0.9979676768F,
- 0.9979978117F, 0.9980276151F, 0.9980570893F, 0.9980862367F,
- 0.9981150595F, 0.9981435600F, 0.9981717406F, 0.9981996035F,
- 0.9982271511F, 0.9982543856F, 0.9982813093F, 0.9983079246F,
- 0.9983342336F, 0.9983602386F, 0.9983859418F, 0.9984113456F,
- 0.9984364522F, 0.9984612638F, 0.9984857825F, 0.9985100108F,
- 0.9985339507F, 0.9985576044F, 0.9985809743F, 0.9986040624F,
- 0.9986268710F, 0.9986494022F, 0.9986716583F, 0.9986936413F,
- 0.9987153535F, 0.9987367969F, 0.9987579738F, 0.9987788864F,
- 0.9987995366F, 0.9988199267F, 0.9988400587F, 0.9988599348F,
- 0.9988795572F, 0.9988989278F, 0.9989180487F, 0.9989369222F,
- 0.9989555501F, 0.9989739347F, 0.9989920780F, 0.9990099820F,
- 0.9990276487F, 0.9990450803F, 0.9990622787F, 0.9990792460F,
- 0.9990959841F, 0.9991124952F, 0.9991287812F, 0.9991448440F,
- 0.9991606858F, 0.9991763084F, 0.9991917139F, 0.9992069042F,
- 0.9992218813F, 0.9992366471F, 0.9992512035F, 0.9992655525F,
- 0.9992796961F, 0.9992936361F, 0.9993073744F, 0.9993209131F,
- 0.9993342538F, 0.9993473987F, 0.9993603494F, 0.9993731080F,
- 0.9993856762F, 0.9993980559F, 0.9994102490F, 0.9994222573F,
- 0.9994340827F, 0.9994457269F, 0.9994571918F, 0.9994684793F,
- 0.9994795910F, 0.9994905288F, 0.9995012945F, 0.9995118898F,
- 0.9995223165F, 0.9995325765F, 0.9995426713F, 0.9995526029F,
- 0.9995623728F, 0.9995719829F, 0.9995814349F, 0.9995907304F,
- 0.9995998712F, 0.9996088590F, 0.9996176954F, 0.9996263821F,
- 0.9996349208F, 0.9996433132F, 0.9996515609F, 0.9996596656F,
- 0.9996676288F, 0.9996754522F, 0.9996831375F, 0.9996906862F,
- 0.9996981000F, 0.9997053804F, 0.9997125290F, 0.9997195474F,
- 0.9997264371F, 0.9997331998F, 0.9997398369F, 0.9997463500F,
- 0.9997527406F, 0.9997590103F, 0.9997651606F, 0.9997711930F,
- 0.9997771089F, 0.9997829098F, 0.9997885973F, 0.9997941728F,
- 0.9997996378F, 0.9998049936F, 0.9998102419F, 0.9998153839F,
- 0.9998204211F, 0.9998253550F, 0.9998301868F, 0.9998349182F,
- 0.9998395503F, 0.9998440847F, 0.9998485226F, 0.9998528654F,
- 0.9998571146F, 0.9998612713F, 0.9998653370F, 0.9998693130F,
- 0.9998732007F, 0.9998770012F, 0.9998807159F, 0.9998843461F,
- 0.9998878931F, 0.9998913581F, 0.9998947424F, 0.9998980473F,
- 0.9999012740F, 0.9999044237F, 0.9999074976F, 0.9999104971F,
- 0.9999134231F, 0.9999162771F, 0.9999190601F, 0.9999217733F,
- 0.9999244179F, 0.9999269950F, 0.9999295058F, 0.9999319515F,
- 0.9999343332F, 0.9999366519F, 0.9999389088F, 0.9999411050F,
- 0.9999432416F, 0.9999453196F, 0.9999473402F, 0.9999493044F,
- 0.9999512132F, 0.9999530677F, 0.9999548690F, 0.9999566180F,
- 0.9999583157F, 0.9999599633F, 0.9999615616F, 0.9999631116F,
- 0.9999646144F, 0.9999660709F, 0.9999674820F, 0.9999688487F,
- 0.9999701719F, 0.9999714526F, 0.9999726917F, 0.9999738900F,
- 0.9999750486F, 0.9999761682F, 0.9999772497F, 0.9999782941F,
- 0.9999793021F, 0.9999802747F, 0.9999812126F, 0.9999821167F,
- 0.9999829878F, 0.9999838268F, 0.9999846343F, 0.9999854113F,
- 0.9999861584F, 0.9999868765F, 0.9999875664F, 0.9999882287F,
- 0.9999888642F, 0.9999894736F, 0.9999900577F, 0.9999906172F,
- 0.9999911528F, 0.9999916651F, 0.9999921548F, 0.9999926227F,
- 0.9999930693F, 0.9999934954F, 0.9999939015F, 0.9999942883F,
- 0.9999946564F, 0.9999950064F, 0.9999953390F, 0.9999956547F,
- 0.9999959541F, 0.9999962377F, 0.9999965062F, 0.9999967601F,
- 0.9999969998F, 0.9999972260F, 0.9999974392F, 0.9999976399F,
- 0.9999978285F, 0.9999980056F, 0.9999981716F, 0.9999983271F,
- 0.9999984724F, 0.9999986081F, 0.9999987345F, 0.9999988521F,
- 0.9999989613F, 0.9999990625F, 0.9999991562F, 0.9999992426F,
- 0.9999993223F, 0.9999993954F, 0.9999994625F, 0.9999995239F,
- 0.9999995798F, 0.9999996307F, 0.9999996768F, 0.9999997184F,
- 0.9999997559F, 0.9999997895F, 0.9999998195F, 0.9999998462F,
- 0.9999998698F, 0.9999998906F, 0.9999999088F, 0.9999999246F,
- 0.9999999383F, 0.9999999500F, 0.9999999600F, 0.9999999684F,
- 0.9999999754F, 0.9999999811F, 0.9999999858F, 0.9999999896F,
- 0.9999999925F, 0.9999999948F, 0.9999999965F, 0.9999999978F,
- 0.9999999986F, 0.9999999992F, 0.9999999996F, 0.9999999998F,
- 0.9999999999F, 1.0000000000F, 1.0000000000F, 1.0000000000F,
-};
-
-static const float vwin8192[4096] = {
- 0.0000000578F, 0.0000005198F, 0.0000014438F, 0.0000028299F,
- 0.0000046780F, 0.0000069882F, 0.0000097604F, 0.0000129945F,
- 0.0000166908F, 0.0000208490F, 0.0000254692F, 0.0000305515F,
- 0.0000360958F, 0.0000421021F, 0.0000485704F, 0.0000555006F,
- 0.0000628929F, 0.0000707472F, 0.0000790635F, 0.0000878417F,
- 0.0000970820F, 0.0001067842F, 0.0001169483F, 0.0001275744F,
- 0.0001386625F, 0.0001502126F, 0.0001622245F, 0.0001746984F,
- 0.0001876343F, 0.0002010320F, 0.0002148917F, 0.0002292132F,
- 0.0002439967F, 0.0002592421F, 0.0002749493F, 0.0002911184F,
- 0.0003077493F, 0.0003248421F, 0.0003423967F, 0.0003604132F,
- 0.0003788915F, 0.0003978316F, 0.0004172335F, 0.0004370971F,
- 0.0004574226F, 0.0004782098F, 0.0004994587F, 0.0005211694F,
- 0.0005433418F, 0.0005659759F, 0.0005890717F, 0.0006126292F,
- 0.0006366484F, 0.0006611292F, 0.0006860716F, 0.0007114757F,
- 0.0007373414F, 0.0007636687F, 0.0007904576F, 0.0008177080F,
- 0.0008454200F, 0.0008735935F, 0.0009022285F, 0.0009313250F,
- 0.0009608830F, 0.0009909025F, 0.0010213834F, 0.0010523257F,
- 0.0010837295F, 0.0011155946F, 0.0011479211F, 0.0011807090F,
- 0.0012139582F, 0.0012476687F, 0.0012818405F, 0.0013164736F,
- 0.0013515679F, 0.0013871235F, 0.0014231402F, 0.0014596182F,
- 0.0014965573F, 0.0015339576F, 0.0015718190F, 0.0016101415F,
- 0.0016489251F, 0.0016881698F, 0.0017278754F, 0.0017680421F,
- 0.0018086698F, 0.0018497584F, 0.0018913080F, 0.0019333185F,
- 0.0019757898F, 0.0020187221F, 0.0020621151F, 0.0021059690F,
- 0.0021502837F, 0.0021950591F, 0.0022402953F, 0.0022859921F,
- 0.0023321497F, 0.0023787679F, 0.0024258467F, 0.0024733861F,
- 0.0025213861F, 0.0025698466F, 0.0026187676F, 0.0026681491F,
- 0.0027179911F, 0.0027682935F, 0.0028190562F, 0.0028702794F,
- 0.0029219628F, 0.0029741066F, 0.0030267107F, 0.0030797749F,
- 0.0031332994F, 0.0031872841F, 0.0032417289F, 0.0032966338F,
- 0.0033519988F, 0.0034078238F, 0.0034641089F, 0.0035208539F,
- 0.0035780589F, 0.0036357237F, 0.0036938485F, 0.0037524331F,
- 0.0038114775F, 0.0038709817F, 0.0039309456F, 0.0039913692F,
- 0.0040522524F, 0.0041135953F, 0.0041753978F, 0.0042376599F,
- 0.0043003814F, 0.0043635624F, 0.0044272029F, 0.0044913028F,
- 0.0045558620F, 0.0046208806F, 0.0046863585F, 0.0047522955F,
- 0.0048186919F, 0.0048855473F, 0.0049528619F, 0.0050206356F,
- 0.0050888684F, 0.0051575601F, 0.0052267108F, 0.0052963204F,
- 0.0053663890F, 0.0054369163F, 0.0055079025F, 0.0055793474F,
- 0.0056512510F, 0.0057236133F, 0.0057964342F, 0.0058697137F,
- 0.0059434517F, 0.0060176482F, 0.0060923032F, 0.0061674166F,
- 0.0062429883F, 0.0063190183F, 0.0063955066F, 0.0064724532F,
- 0.0065498579F, 0.0066277207F, 0.0067060416F, 0.0067848205F,
- 0.0068640575F, 0.0069437523F, 0.0070239051F, 0.0071045157F,
- 0.0071855840F, 0.0072671102F, 0.0073490940F, 0.0074315355F,
- 0.0075144345F, 0.0075977911F, 0.0076816052F, 0.0077658768F,
- 0.0078506057F, 0.0079357920F, 0.0080214355F, 0.0081075363F,
- 0.0081940943F, 0.0082811094F, 0.0083685816F, 0.0084565108F,
- 0.0085448970F, 0.0086337401F, 0.0087230401F, 0.0088127969F,
- 0.0089030104F, 0.0089936807F, 0.0090848076F, 0.0091763911F,
- 0.0092684311F, 0.0093609276F, 0.0094538805F, 0.0095472898F,
- 0.0096411554F, 0.0097354772F, 0.0098302552F, 0.0099254894F,
- 0.0100211796F, 0.0101173259F, 0.0102139281F, 0.0103109863F,
- 0.0104085002F, 0.0105064700F, 0.0106048955F, 0.0107037766F,
- 0.0108031133F, 0.0109029056F, 0.0110031534F, 0.0111038565F,
- 0.0112050151F, 0.0113066289F, 0.0114086980F, 0.0115112222F,
- 0.0116142015F, 0.0117176359F, 0.0118215252F, 0.0119258695F,
- 0.0120306686F, 0.0121359225F, 0.0122416312F, 0.0123477944F,
- 0.0124544123F, 0.0125614847F, 0.0126690116F, 0.0127769928F,
- 0.0128854284F, 0.0129943182F, 0.0131036623F, 0.0132134604F,
- 0.0133237126F, 0.0134344188F, 0.0135455790F, 0.0136571929F,
- 0.0137692607F, 0.0138817821F, 0.0139947572F, 0.0141081859F,
- 0.0142220681F, 0.0143364037F, 0.0144511927F, 0.0145664350F,
- 0.0146821304F, 0.0147982791F, 0.0149148808F, 0.0150319355F,
- 0.0151494431F, 0.0152674036F, 0.0153858168F, 0.0155046828F,
- 0.0156240014F, 0.0157437726F, 0.0158639962F, 0.0159846723F,
- 0.0161058007F, 0.0162273814F, 0.0163494142F, 0.0164718991F,
- 0.0165948361F, 0.0167182250F, 0.0168420658F, 0.0169663584F,
- 0.0170911027F, 0.0172162987F, 0.0173419462F, 0.0174680452F,
- 0.0175945956F, 0.0177215974F, 0.0178490504F, 0.0179769545F,
- 0.0181053098F, 0.0182341160F, 0.0183633732F, 0.0184930812F,
- 0.0186232399F, 0.0187538494F, 0.0188849094F, 0.0190164200F,
- 0.0191483809F, 0.0192807923F, 0.0194136539F, 0.0195469656F,
- 0.0196807275F, 0.0198149394F, 0.0199496012F, 0.0200847128F,
- 0.0202202742F, 0.0203562853F, 0.0204927460F, 0.0206296561F,
- 0.0207670157F, 0.0209048245F, 0.0210430826F, 0.0211817899F,
- 0.0213209462F, 0.0214605515F, 0.0216006057F, 0.0217411086F,
- 0.0218820603F, 0.0220234605F, 0.0221653093F, 0.0223076066F,
- 0.0224503521F, 0.0225935459F, 0.0227371879F, 0.0228812779F,
- 0.0230258160F, 0.0231708018F, 0.0233162355F, 0.0234621169F,
- 0.0236084459F, 0.0237552224F, 0.0239024462F, 0.0240501175F,
- 0.0241982359F, 0.0243468015F, 0.0244958141F, 0.0246452736F,
- 0.0247951800F, 0.0249455331F, 0.0250963329F, 0.0252475792F,
- 0.0253992720F, 0.0255514111F, 0.0257039965F, 0.0258570281F,
- 0.0260105057F, 0.0261644293F, 0.0263187987F, 0.0264736139F,
- 0.0266288747F, 0.0267845811F, 0.0269407330F, 0.0270973302F,
- 0.0272543727F, 0.0274118604F, 0.0275697930F, 0.0277281707F,
- 0.0278869932F, 0.0280462604F, 0.0282059723F, 0.0283661287F,
- 0.0285267295F, 0.0286877747F, 0.0288492641F, 0.0290111976F,
- 0.0291735751F, 0.0293363965F, 0.0294996617F, 0.0296633706F,
- 0.0298275231F, 0.0299921190F, 0.0301571583F, 0.0303226409F,
- 0.0304885667F, 0.0306549354F, 0.0308217472F, 0.0309890017F,
- 0.0311566989F, 0.0313248388F, 0.0314934211F, 0.0316624459F,
- 0.0318319128F, 0.0320018220F, 0.0321721732F, 0.0323429663F,
- 0.0325142013F, 0.0326858779F, 0.0328579962F, 0.0330305559F,
- 0.0332035570F, 0.0333769994F, 0.0335508829F, 0.0337252074F,
- 0.0338999728F, 0.0340751790F, 0.0342508259F, 0.0344269134F,
- 0.0346034412F, 0.0347804094F, 0.0349578178F, 0.0351356663F,
- 0.0353139548F, 0.0354926831F, 0.0356718511F, 0.0358514588F,
- 0.0360315059F, 0.0362119924F, 0.0363929182F, 0.0365742831F,
- 0.0367560870F, 0.0369383297F, 0.0371210113F, 0.0373041315F,
- 0.0374876902F, 0.0376716873F, 0.0378561226F, 0.0380409961F,
- 0.0382263077F, 0.0384120571F, 0.0385982443F, 0.0387848691F,
- 0.0389719315F, 0.0391594313F, 0.0393473683F, 0.0395357425F,
- 0.0397245537F, 0.0399138017F, 0.0401034866F, 0.0402936080F,
- 0.0404841660F, 0.0406751603F, 0.0408665909F, 0.0410584576F,
- 0.0412507603F, 0.0414434988F, 0.0416366731F, 0.0418302829F,
- 0.0420243282F, 0.0422188088F, 0.0424137246F, 0.0426090755F,
- 0.0428048613F, 0.0430010819F, 0.0431977371F, 0.0433948269F,
- 0.0435923511F, 0.0437903095F, 0.0439887020F, 0.0441875285F,
- 0.0443867889F, 0.0445864830F, 0.0447866106F, 0.0449871717F,
- 0.0451881661F, 0.0453895936F, 0.0455914542F, 0.0457937477F,
- 0.0459964738F, 0.0461996326F, 0.0464032239F, 0.0466072475F,
- 0.0468117032F, 0.0470165910F, 0.0472219107F, 0.0474276622F,
- 0.0476338452F, 0.0478404597F, 0.0480475056F, 0.0482549827F,
- 0.0484628907F, 0.0486712297F, 0.0488799994F, 0.0490891998F,
- 0.0492988306F, 0.0495088917F, 0.0497193830F, 0.0499303043F,
- 0.0501416554F, 0.0503534363F, 0.0505656468F, 0.0507782867F,
- 0.0509913559F, 0.0512048542F, 0.0514187815F, 0.0516331376F,
- 0.0518479225F, 0.0520631358F, 0.0522787775F, 0.0524948475F,
- 0.0527113455F, 0.0529282715F, 0.0531456252F, 0.0533634066F,
- 0.0535816154F, 0.0538002515F, 0.0540193148F, 0.0542388051F,
- 0.0544587222F, 0.0546790660F, 0.0548998364F, 0.0551210331F,
- 0.0553426561F, 0.0555647051F, 0.0557871801F, 0.0560100807F,
- 0.0562334070F, 0.0564571587F, 0.0566813357F, 0.0569059378F,
- 0.0571309649F, 0.0573564168F, 0.0575822933F, 0.0578085942F,
- 0.0580353195F, 0.0582624689F, 0.0584900423F, 0.0587180396F,
- 0.0589464605F, 0.0591753049F, 0.0594045726F, 0.0596342635F,
- 0.0598643774F, 0.0600949141F, 0.0603258735F, 0.0605572555F,
- 0.0607890597F, 0.0610212862F, 0.0612539346F, 0.0614870049F,
- 0.0617204968F, 0.0619544103F, 0.0621887451F, 0.0624235010F,
- 0.0626586780F, 0.0628942758F, 0.0631302942F, 0.0633667331F,
- 0.0636035923F, 0.0638408717F, 0.0640785710F, 0.0643166901F,
- 0.0645552288F, 0.0647941870F, 0.0650335645F, 0.0652733610F,
- 0.0655135765F, 0.0657542108F, 0.0659952636F, 0.0662367348F,
- 0.0664786242F, 0.0667209316F, 0.0669636570F, 0.0672068000F,
- 0.0674503605F, 0.0676943384F, 0.0679387334F, 0.0681835454F,
- 0.0684287742F, 0.0686744196F, 0.0689204814F, 0.0691669595F,
- 0.0694138536F, 0.0696611637F, 0.0699088894F, 0.0701570307F,
- 0.0704055873F, 0.0706545590F, 0.0709039458F, 0.0711537473F,
- 0.0714039634F, 0.0716545939F, 0.0719056387F, 0.0721570975F,
- 0.0724089702F, 0.0726612565F, 0.0729139563F, 0.0731670694F,
- 0.0734205956F, 0.0736745347F, 0.0739288866F, 0.0741836510F,
- 0.0744388277F, 0.0746944166F, 0.0749504175F, 0.0752068301F,
- 0.0754636543F, 0.0757208899F, 0.0759785367F, 0.0762365946F,
- 0.0764950632F, 0.0767539424F, 0.0770132320F, 0.0772729319F,
- 0.0775330418F, 0.0777935616F, 0.0780544909F, 0.0783158298F,
- 0.0785775778F, 0.0788397349F, 0.0791023009F, 0.0793652755F,
- 0.0796286585F, 0.0798924498F, 0.0801566492F, 0.0804212564F,
- 0.0806862712F, 0.0809516935F, 0.0812175231F, 0.0814837597F,
- 0.0817504031F, 0.0820174532F, 0.0822849097F, 0.0825527724F,
- 0.0828210412F, 0.0830897158F, 0.0833587960F, 0.0836282816F,
- 0.0838981724F, 0.0841684682F, 0.0844391688F, 0.0847102740F,
- 0.0849817835F, 0.0852536973F, 0.0855260150F, 0.0857987364F,
- 0.0860718614F, 0.0863453897F, 0.0866193211F, 0.0868936554F,
- 0.0871683924F, 0.0874435319F, 0.0877190737F, 0.0879950175F,
- 0.0882713632F, 0.0885481105F, 0.0888252592F, 0.0891028091F,
- 0.0893807600F, 0.0896591117F, 0.0899378639F, 0.0902170165F,
- 0.0904965692F, 0.0907765218F, 0.0910568740F, 0.0913376258F,
- 0.0916187767F, 0.0919003268F, 0.0921822756F, 0.0924646230F,
- 0.0927473687F, 0.0930305126F, 0.0933140545F, 0.0935979940F,
- 0.0938823310F, 0.0941670653F, 0.0944521966F, 0.0947377247F,
- 0.0950236494F, 0.0953099704F, 0.0955966876F, 0.0958838007F,
- 0.0961713094F, 0.0964592136F, 0.0967475131F, 0.0970362075F,
- 0.0973252967F, 0.0976147805F, 0.0979046585F, 0.0981949307F,
- 0.0984855967F, 0.0987766563F, 0.0990681093F, 0.0993599555F,
- 0.0996521945F, 0.0999448263F, 0.1002378506F, 0.1005312671F,
- 0.1008250755F, 0.1011192757F, 0.1014138675F, 0.1017088505F,
- 0.1020042246F, 0.1022999895F, 0.1025961450F, 0.1028926909F,
- 0.1031896268F, 0.1034869526F, 0.1037846680F, 0.1040827729F,
- 0.1043812668F, 0.1046801497F, 0.1049794213F, 0.1052790813F,
- 0.1055791294F, 0.1058795656F, 0.1061803894F, 0.1064816006F,
- 0.1067831991F, 0.1070851846F, 0.1073875568F, 0.1076903155F,
- 0.1079934604F, 0.1082969913F, 0.1086009079F, 0.1089052101F,
- 0.1092098975F, 0.1095149699F, 0.1098204270F, 0.1101262687F,
- 0.1104324946F, 0.1107391045F, 0.1110460982F, 0.1113534754F,
- 0.1116612359F, 0.1119693793F, 0.1122779055F, 0.1125868142F,
- 0.1128961052F, 0.1132057781F, 0.1135158328F, 0.1138262690F,
- 0.1141370863F, 0.1144482847F, 0.1147598638F, 0.1150718233F,
- 0.1153841631F, 0.1156968828F, 0.1160099822F, 0.1163234610F,
- 0.1166373190F, 0.1169515559F, 0.1172661714F, 0.1175811654F,
- 0.1178965374F, 0.1182122874F, 0.1185284149F, 0.1188449198F,
- 0.1191618018F, 0.1194790606F, 0.1197966960F, 0.1201147076F,
- 0.1204330953F, 0.1207518587F, 0.1210709976F, 0.1213905118F,
- 0.1217104009F, 0.1220306647F, 0.1223513029F, 0.1226723153F,
- 0.1229937016F, 0.1233154615F, 0.1236375948F, 0.1239601011F,
- 0.1242829803F, 0.1246062319F, 0.1249298559F, 0.1252538518F,
- 0.1255782195F, 0.1259029586F, 0.1262280689F, 0.1265535501F,
- 0.1268794019F, 0.1272056241F, 0.1275322163F, 0.1278591784F,
- 0.1281865099F, 0.1285142108F, 0.1288422805F, 0.1291707190F,
- 0.1294995259F, 0.1298287009F, 0.1301582437F, 0.1304881542F,
- 0.1308184319F, 0.1311490766F, 0.1314800881F, 0.1318114660F,
- 0.1321432100F, 0.1324753200F, 0.1328077955F, 0.1331406364F,
- 0.1334738422F, 0.1338074129F, 0.1341413479F, 0.1344756472F,
- 0.1348103103F, 0.1351453370F, 0.1354807270F, 0.1358164801F,
- 0.1361525959F, 0.1364890741F, 0.1368259145F, 0.1371631167F,
- 0.1375006805F, 0.1378386056F, 0.1381768917F, 0.1385155384F,
- 0.1388545456F, 0.1391939129F, 0.1395336400F, 0.1398737266F,
- 0.1402141724F, 0.1405549772F, 0.1408961406F, 0.1412376623F,
- 0.1415795421F, 0.1419217797F, 0.1422643746F, 0.1426073268F,
- 0.1429506358F, 0.1432943013F, 0.1436383231F, 0.1439827008F,
- 0.1443274342F, 0.1446725229F, 0.1450179667F, 0.1453637652F,
- 0.1457099181F, 0.1460564252F, 0.1464032861F, 0.1467505006F,
- 0.1470980682F, 0.1474459888F, 0.1477942620F, 0.1481428875F,
- 0.1484918651F, 0.1488411942F, 0.1491908748F, 0.1495409065F,
- 0.1498912889F, 0.1502420218F, 0.1505931048F, 0.1509445376F,
- 0.1512963200F, 0.1516484516F, 0.1520009321F, 0.1523537612F,
- 0.1527069385F, 0.1530604638F, 0.1534143368F, 0.1537685571F,
- 0.1541231244F, 0.1544780384F, 0.1548332987F, 0.1551889052F,
- 0.1555448574F, 0.1559011550F, 0.1562577978F, 0.1566147853F,
- 0.1569721173F, 0.1573297935F, 0.1576878135F, 0.1580461771F,
- 0.1584048838F, 0.1587639334F, 0.1591233255F, 0.1594830599F,
- 0.1598431361F, 0.1602035540F, 0.1605643131F, 0.1609254131F,
- 0.1612868537F, 0.1616486346F, 0.1620107555F, 0.1623732160F,
- 0.1627360158F, 0.1630991545F, 0.1634626319F, 0.1638264476F,
- 0.1641906013F, 0.1645550926F, 0.1649199212F, 0.1652850869F,
- 0.1656505892F, 0.1660164278F, 0.1663826024F, 0.1667491127F,
- 0.1671159583F, 0.1674831388F, 0.1678506541F, 0.1682185036F,
- 0.1685866872F, 0.1689552044F, 0.1693240549F, 0.1696932384F,
- 0.1700627545F, 0.1704326029F, 0.1708027833F, 0.1711732952F,
- 0.1715441385F, 0.1719153127F, 0.1722868175F, 0.1726586526F,
- 0.1730308176F, 0.1734033121F, 0.1737761359F, 0.1741492886F,
- 0.1745227698F, 0.1748965792F, 0.1752707164F, 0.1756451812F,
- 0.1760199731F, 0.1763950918F, 0.1767705370F, 0.1771463083F,
- 0.1775224054F, 0.1778988279F, 0.1782755754F, 0.1786526477F,
- 0.1790300444F, 0.1794077651F, 0.1797858094F, 0.1801641771F,
- 0.1805428677F, 0.1809218810F, 0.1813012165F, 0.1816808739F,
- 0.1820608528F, 0.1824411530F, 0.1828217739F, 0.1832027154F,
- 0.1835839770F, 0.1839655584F, 0.1843474592F, 0.1847296790F,
- 0.1851122175F, 0.1854950744F, 0.1858782492F, 0.1862617417F,
- 0.1866455514F, 0.1870296780F, 0.1874141211F, 0.1877988804F,
- 0.1881839555F, 0.1885693461F, 0.1889550517F, 0.1893410721F,
- 0.1897274068F, 0.1901140555F, 0.1905010178F, 0.1908882933F,
- 0.1912758818F, 0.1916637828F, 0.1920519959F, 0.1924405208F,
- 0.1928293571F, 0.1932185044F, 0.1936079625F, 0.1939977308F,
- 0.1943878091F, 0.1947781969F, 0.1951688939F, 0.1955598998F,
- 0.1959512141F, 0.1963428364F, 0.1967347665F, 0.1971270038F,
- 0.1975195482F, 0.1979123990F, 0.1983055561F, 0.1986990190F,
- 0.1990927873F, 0.1994868607F, 0.1998812388F, 0.2002759212F,
- 0.2006709075F, 0.2010661974F, 0.2014617904F, 0.2018576862F,
- 0.2022538844F, 0.2026503847F, 0.2030471865F, 0.2034442897F,
- 0.2038416937F, 0.2042393982F, 0.2046374028F, 0.2050357071F,
- 0.2054343107F, 0.2058332133F, 0.2062324145F, 0.2066319138F,
- 0.2070317110F, 0.2074318055F, 0.2078321970F, 0.2082328852F,
- 0.2086338696F, 0.2090351498F, 0.2094367255F, 0.2098385962F,
- 0.2102407617F, 0.2106432213F, 0.2110459749F, 0.2114490220F,
- 0.2118523621F, 0.2122559950F, 0.2126599202F, 0.2130641373F,
- 0.2134686459F, 0.2138734456F, 0.2142785361F, 0.2146839168F,
- 0.2150895875F, 0.2154955478F, 0.2159017972F, 0.2163083353F,
- 0.2167151617F, 0.2171222761F, 0.2175296780F, 0.2179373670F,
- 0.2183453428F, 0.2187536049F, 0.2191621529F, 0.2195709864F,
- 0.2199801051F, 0.2203895085F, 0.2207991961F, 0.2212091677F,
- 0.2216194228F, 0.2220299610F, 0.2224407818F, 0.2228518850F,
- 0.2232632699F, 0.2236749364F, 0.2240868839F, 0.2244991121F,
- 0.2249116204F, 0.2253244086F, 0.2257374763F, 0.2261508229F,
- 0.2265644481F, 0.2269783514F, 0.2273925326F, 0.2278069911F,
- 0.2282217265F, 0.2286367384F, 0.2290520265F, 0.2294675902F,
- 0.2298834292F, 0.2302995431F, 0.2307159314F, 0.2311325937F,
- 0.2315495297F, 0.2319667388F, 0.2323842207F, 0.2328019749F,
- 0.2332200011F, 0.2336382988F, 0.2340568675F, 0.2344757070F,
- 0.2348948166F, 0.2353141961F, 0.2357338450F, 0.2361537629F,
- 0.2365739493F, 0.2369944038F, 0.2374151261F, 0.2378361156F,
- 0.2382573720F, 0.2386788948F, 0.2391006836F, 0.2395227380F,
- 0.2399450575F, 0.2403676417F, 0.2407904902F, 0.2412136026F,
- 0.2416369783F, 0.2420606171F, 0.2424845185F, 0.2429086820F,
- 0.2433331072F, 0.2437577936F, 0.2441827409F, 0.2446079486F,
- 0.2450334163F, 0.2454591435F, 0.2458851298F, 0.2463113747F,
- 0.2467378779F, 0.2471646389F, 0.2475916573F, 0.2480189325F,
- 0.2484464643F, 0.2488742521F, 0.2493022955F, 0.2497305940F,
- 0.2501591473F, 0.2505879549F, 0.2510170163F, 0.2514463311F,
- 0.2518758989F, 0.2523057193F, 0.2527357916F, 0.2531661157F,
- 0.2535966909F, 0.2540275169F, 0.2544585931F, 0.2548899193F,
- 0.2553214948F, 0.2557533193F, 0.2561853924F, 0.2566177135F,
- 0.2570502822F, 0.2574830981F, 0.2579161608F, 0.2583494697F,
- 0.2587830245F, 0.2592168246F, 0.2596508697F, 0.2600851593F,
- 0.2605196929F, 0.2609544701F, 0.2613894904F, 0.2618247534F,
- 0.2622602586F, 0.2626960055F, 0.2631319938F, 0.2635682230F,
- 0.2640046925F, 0.2644414021F, 0.2648783511F, 0.2653155391F,
- 0.2657529657F, 0.2661906305F, 0.2666285329F, 0.2670666725F,
- 0.2675050489F, 0.2679436616F, 0.2683825101F, 0.2688215940F,
- 0.2692609127F, 0.2697004660F, 0.2701402532F, 0.2705802739F,
- 0.2710205278F, 0.2714610142F, 0.2719017327F, 0.2723426830F,
- 0.2727838644F, 0.2732252766F, 0.2736669191F, 0.2741087914F,
- 0.2745508930F, 0.2749932235F, 0.2754357824F, 0.2758785693F,
- 0.2763215837F, 0.2767648251F, 0.2772082930F, 0.2776519870F,
- 0.2780959066F, 0.2785400513F, 0.2789844207F, 0.2794290143F,
- 0.2798738316F, 0.2803188722F, 0.2807641355F, 0.2812096211F,
- 0.2816553286F, 0.2821012574F, 0.2825474071F, 0.2829937773F,
- 0.2834403673F, 0.2838871768F, 0.2843342053F, 0.2847814523F,
- 0.2852289174F, 0.2856765999F, 0.2861244996F, 0.2865726159F,
- 0.2870209482F, 0.2874694962F, 0.2879182594F, 0.2883672372F,
- 0.2888164293F, 0.2892658350F, 0.2897154540F, 0.2901652858F,
- 0.2906153298F, 0.2910655856F, 0.2915160527F, 0.2919667306F,
- 0.2924176189F, 0.2928687171F, 0.2933200246F, 0.2937715409F,
- 0.2942232657F, 0.2946751984F, 0.2951273386F, 0.2955796856F,
- 0.2960322391F, 0.2964849986F, 0.2969379636F, 0.2973911335F,
- 0.2978445080F, 0.2982980864F, 0.2987518684F, 0.2992058534F,
- 0.2996600409F, 0.3001144305F, 0.3005690217F, 0.3010238139F,
- 0.3014788067F, 0.3019339995F, 0.3023893920F, 0.3028449835F,
- 0.3033007736F, 0.3037567618F, 0.3042129477F, 0.3046693306F,
- 0.3051259102F, 0.3055826859F, 0.3060396572F, 0.3064968236F,
- 0.3069541847F, 0.3074117399F, 0.3078694887F, 0.3083274307F,
- 0.3087855653F, 0.3092438920F, 0.3097024104F, 0.3101611199F,
- 0.3106200200F, 0.3110791103F, 0.3115383902F, 0.3119978592F,
- 0.3124575169F, 0.3129173627F, 0.3133773961F, 0.3138376166F,
- 0.3142980238F, 0.3147586170F, 0.3152193959F, 0.3156803598F,
- 0.3161415084F, 0.3166028410F, 0.3170643573F, 0.3175260566F,
- 0.3179879384F, 0.3184500023F, 0.3189122478F, 0.3193746743F,
- 0.3198372814F, 0.3203000685F, 0.3207630351F, 0.3212261807F,
- 0.3216895048F, 0.3221530069F, 0.3226166865F, 0.3230805430F,
- 0.3235445760F, 0.3240087849F, 0.3244731693F, 0.3249377285F,
- 0.3254024622F, 0.3258673698F, 0.3263324507F, 0.3267977045F,
- 0.3272631306F, 0.3277287286F, 0.3281944978F, 0.3286604379F,
- 0.3291265482F, 0.3295928284F, 0.3300592777F, 0.3305258958F,
- 0.3309926821F, 0.3314596361F, 0.3319267573F, 0.3323940451F,
- 0.3328614990F, 0.3333291186F, 0.3337969033F, 0.3342648525F,
- 0.3347329658F, 0.3352012427F, 0.3356696825F, 0.3361382849F,
- 0.3366070492F, 0.3370759749F, 0.3375450616F, 0.3380143087F,
- 0.3384837156F, 0.3389532819F, 0.3394230071F, 0.3398928905F,
- 0.3403629317F, 0.3408331302F, 0.3413034854F, 0.3417739967F,
- 0.3422446638F, 0.3427154860F, 0.3431864628F, 0.3436575938F,
- 0.3441288782F, 0.3446003158F, 0.3450719058F, 0.3455436478F,
- 0.3460155412F, 0.3464875856F, 0.3469597804F, 0.3474321250F,
- 0.3479046189F, 0.3483772617F, 0.3488500527F, 0.3493229914F,
- 0.3497960774F, 0.3502693100F, 0.3507426887F, 0.3512162131F,
- 0.3516898825F, 0.3521636965F, 0.3526376545F, 0.3531117559F,
- 0.3535860003F, 0.3540603870F, 0.3545349157F, 0.3550095856F,
- 0.3554843964F, 0.3559593474F, 0.3564344381F, 0.3569096680F,
- 0.3573850366F, 0.3578605432F, 0.3583361875F, 0.3588119687F,
- 0.3592878865F, 0.3597639402F, 0.3602401293F, 0.3607164533F,
- 0.3611929117F, 0.3616695038F, 0.3621462292F, 0.3626230873F,
- 0.3631000776F, 0.3635771995F, 0.3640544525F, 0.3645318360F,
- 0.3650093496F, 0.3654869926F, 0.3659647645F, 0.3664426648F,
- 0.3669206930F, 0.3673988484F, 0.3678771306F, 0.3683555390F,
- 0.3688340731F, 0.3693127322F, 0.3697915160F, 0.3702704237F,
- 0.3707494549F, 0.3712286091F, 0.3717078857F, 0.3721872840F,
- 0.3726668037F, 0.3731464441F, 0.3736262047F, 0.3741060850F,
- 0.3745860843F, 0.3750662023F, 0.3755464382F, 0.3760267915F,
- 0.3765072618F, 0.3769878484F, 0.3774685509F, 0.3779493686F,
- 0.3784303010F, 0.3789113475F, 0.3793925076F, 0.3798737809F,
- 0.3803551666F, 0.3808366642F, 0.3813182733F, 0.3817999932F,
- 0.3822818234F, 0.3827637633F, 0.3832458124F, 0.3837279702F,
- 0.3842102360F, 0.3846926093F, 0.3851750897F, 0.3856576764F,
- 0.3861403690F, 0.3866231670F, 0.3871060696F, 0.3875890765F,
- 0.3880721870F, 0.3885554007F, 0.3890387168F, 0.3895221349F,
- 0.3900056544F, 0.3904892748F, 0.3909729955F, 0.3914568160F,
- 0.3919407356F, 0.3924247539F, 0.3929088702F, 0.3933930841F,
- 0.3938773949F, 0.3943618021F, 0.3948463052F, 0.3953309035F,
- 0.3958155966F, 0.3963003838F, 0.3967852646F, 0.3972702385F,
- 0.3977553048F, 0.3982404631F, 0.3987257127F, 0.3992110531F,
- 0.3996964838F, 0.4001820041F, 0.4006676136F, 0.4011533116F,
- 0.4016390976F, 0.4021249710F, 0.4026109313F, 0.4030969779F,
- 0.4035831102F, 0.4040693277F, 0.4045556299F, 0.4050420160F,
- 0.4055284857F, 0.4060150383F, 0.4065016732F, 0.4069883899F,
- 0.4074751879F, 0.4079620665F, 0.4084490252F, 0.4089360635F,
- 0.4094231807F, 0.4099103763F, 0.4103976498F, 0.4108850005F,
- 0.4113724280F, 0.4118599315F, 0.4123475107F, 0.4128351648F,
- 0.4133228934F, 0.4138106959F, 0.4142985716F, 0.4147865201F,
- 0.4152745408F, 0.4157626330F, 0.4162507963F, 0.4167390301F,
- 0.4172273337F, 0.4177157067F, 0.4182041484F, 0.4186926583F,
- 0.4191812359F, 0.4196698805F, 0.4201585915F, 0.4206473685F,
- 0.4211362108F, 0.4216251179F, 0.4221140892F, 0.4226031241F,
- 0.4230922221F, 0.4235813826F, 0.4240706050F, 0.4245598887F,
- 0.4250492332F, 0.4255386379F, 0.4260281022F, 0.4265176256F,
- 0.4270072075F, 0.4274968473F, 0.4279865445F, 0.4284762984F,
- 0.4289661086F, 0.4294559743F, 0.4299458951F, 0.4304358704F,
- 0.4309258996F, 0.4314159822F, 0.4319061175F, 0.4323963050F,
- 0.4328865441F, 0.4333768342F, 0.4338671749F, 0.4343575654F,
- 0.4348480052F, 0.4353384938F, 0.4358290306F, 0.4363196149F,
- 0.4368102463F, 0.4373009241F, 0.4377916478F, 0.4382824168F,
- 0.4387732305F, 0.4392640884F, 0.4397549899F, 0.4402459343F,
- 0.4407369212F, 0.4412279499F, 0.4417190198F, 0.4422101305F,
- 0.4427012813F, 0.4431924717F, 0.4436837010F, 0.4441749686F,
- 0.4446662742F, 0.4451576169F, 0.4456489963F, 0.4461404118F,
- 0.4466318628F, 0.4471233487F, 0.4476148690F, 0.4481064230F,
- 0.4485980103F, 0.4490896302F, 0.4495812821F, 0.4500729654F,
- 0.4505646797F, 0.4510564243F, 0.4515481986F, 0.4520400021F,
- 0.4525318341F, 0.4530236942F, 0.4535155816F, 0.4540074959F,
- 0.4544994365F, 0.4549914028F, 0.4554833941F, 0.4559754100F,
- 0.4564674499F, 0.4569595131F, 0.4574515991F, 0.4579437074F,
- 0.4584358372F, 0.4589279881F, 0.4594201595F, 0.4599123508F,
- 0.4604045615F, 0.4608967908F, 0.4613890383F, 0.4618813034F,
- 0.4623735855F, 0.4628658841F, 0.4633581984F, 0.4638505281F,
- 0.4643428724F, 0.4648352308F, 0.4653276028F, 0.4658199877F,
- 0.4663123849F, 0.4668047940F, 0.4672972143F, 0.4677896451F,
- 0.4682820861F, 0.4687745365F, 0.4692669958F, 0.4697594634F,
- 0.4702519387F, 0.4707444211F, 0.4712369102F, 0.4717294052F,
- 0.4722219056F, 0.4727144109F, 0.4732069204F, 0.4736994336F,
- 0.4741919498F, 0.4746844686F, 0.4751769893F, 0.4756695113F,
- 0.4761620341F, 0.4766545571F, 0.4771470797F, 0.4776396013F,
- 0.4781321213F, 0.4786246392F, 0.4791171544F, 0.4796096663F,
- 0.4801021744F, 0.4805946779F, 0.4810871765F, 0.4815796694F,
- 0.4820721561F, 0.4825646360F, 0.4830571086F, 0.4835495732F,
- 0.4840420293F, 0.4845344763F, 0.4850269136F, 0.4855193407F,
- 0.4860117569F, 0.4865041617F, 0.4869965545F, 0.4874889347F,
- 0.4879813018F, 0.4884736551F, 0.4889659941F, 0.4894583182F,
- 0.4899506268F, 0.4904429193F, 0.4909351952F, 0.4914274538F,
- 0.4919196947F, 0.4924119172F, 0.4929041207F, 0.4933963046F,
- 0.4938884685F, 0.4943806116F, 0.4948727335F, 0.4953648335F,
- 0.4958569110F, 0.4963489656F, 0.4968409965F, 0.4973330032F,
- 0.4978249852F, 0.4983169419F, 0.4988088726F, 0.4993007768F,
- 0.4997926539F, 0.5002845034F, 0.5007763247F, 0.5012681171F,
- 0.5017598801F, 0.5022516132F, 0.5027433157F, 0.5032349871F,
- 0.5037266268F, 0.5042182341F, 0.5047098086F, 0.5052013497F,
- 0.5056928567F, 0.5061843292F, 0.5066757664F, 0.5071671679F,
- 0.5076585330F, 0.5081498613F, 0.5086411520F, 0.5091324047F,
- 0.5096236187F, 0.5101147934F, 0.5106059284F, 0.5110970230F,
- 0.5115880766F, 0.5120790887F, 0.5125700587F, 0.5130609860F,
- 0.5135518700F, 0.5140427102F, 0.5145335059F, 0.5150242566F,
- 0.5155149618F, 0.5160056208F, 0.5164962331F, 0.5169867980F,
- 0.5174773151F, 0.5179677837F, 0.5184582033F, 0.5189485733F,
- 0.5194388931F, 0.5199291621F, 0.5204193798F, 0.5209095455F,
- 0.5213996588F, 0.5218897190F, 0.5223797256F, 0.5228696779F,
- 0.5233595755F, 0.5238494177F, 0.5243392039F, 0.5248289337F,
- 0.5253186063F, 0.5258082213F, 0.5262977781F, 0.5267872760F,
- 0.5272767146F, 0.5277660932F, 0.5282554112F, 0.5287446682F,
- 0.5292338635F, 0.5297229965F, 0.5302120667F, 0.5307010736F,
- 0.5311900164F, 0.5316788947F, 0.5321677079F, 0.5326564554F,
- 0.5331451366F, 0.5336337511F, 0.5341222981F, 0.5346107771F,
- 0.5350991876F, 0.5355875290F, 0.5360758007F, 0.5365640021F,
- 0.5370521327F, 0.5375401920F, 0.5380281792F, 0.5385160939F,
- 0.5390039355F, 0.5394917034F, 0.5399793971F, 0.5404670159F,
- 0.5409545594F, 0.5414420269F, 0.5419294179F, 0.5424167318F,
- 0.5429039680F, 0.5433911261F, 0.5438782053F, 0.5443652051F,
- 0.5448521250F, 0.5453389644F, 0.5458257228F, 0.5463123995F,
- 0.5467989940F, 0.5472855057F, 0.5477719341F, 0.5482582786F,
- 0.5487445387F, 0.5492307137F, 0.5497168031F, 0.5502028063F,
- 0.5506887228F, 0.5511745520F, 0.5516602934F, 0.5521459463F,
- 0.5526315103F, 0.5531169847F, 0.5536023690F, 0.5540876626F,
- 0.5545728649F, 0.5550579755F, 0.5555429937F, 0.5560279189F,
- 0.5565127507F, 0.5569974884F, 0.5574821315F, 0.5579666794F,
- 0.5584511316F, 0.5589354875F, 0.5594197465F, 0.5599039080F,
- 0.5603879716F, 0.5608719367F, 0.5613558026F, 0.5618395689F,
- 0.5623232350F, 0.5628068002F, 0.5632902642F, 0.5637736262F,
- 0.5642568858F, 0.5647400423F, 0.5652230953F, 0.5657060442F,
- 0.5661888883F, 0.5666716272F, 0.5671542603F, 0.5676367870F,
- 0.5681192069F, 0.5686015192F, 0.5690837235F, 0.5695658192F,
- 0.5700478058F, 0.5705296827F, 0.5710114494F, 0.5714931052F,
- 0.5719746497F, 0.5724560822F, 0.5729374023F, 0.5734186094F,
- 0.5738997029F, 0.5743806823F, 0.5748615470F, 0.5753422965F,
- 0.5758229301F, 0.5763034475F, 0.5767838480F, 0.5772641310F,
- 0.5777442960F, 0.5782243426F, 0.5787042700F, 0.5791840778F,
- 0.5796637654F, 0.5801433322F, 0.5806227778F, 0.5811021016F,
- 0.5815813029F, 0.5820603814F, 0.5825393363F, 0.5830181673F,
- 0.5834968737F, 0.5839754549F, 0.5844539105F, 0.5849322399F,
- 0.5854104425F, 0.5858885179F, 0.5863664653F, 0.5868442844F,
- 0.5873219746F, 0.5877995353F, 0.5882769660F, 0.5887542661F,
- 0.5892314351F, 0.5897084724F, 0.5901853776F, 0.5906621500F,
- 0.5911387892F, 0.5916152945F, 0.5920916655F, 0.5925679016F,
- 0.5930440022F, 0.5935199669F, 0.5939957950F, 0.5944714861F,
- 0.5949470396F, 0.5954224550F, 0.5958977317F, 0.5963728692F,
- 0.5968478669F, 0.5973227244F, 0.5977974411F, 0.5982720163F,
- 0.5987464497F, 0.5992207407F, 0.5996948887F, 0.6001688932F,
- 0.6006427537F, 0.6011164696F, 0.6015900405F, 0.6020634657F,
- 0.6025367447F, 0.6030098770F, 0.6034828621F, 0.6039556995F,
- 0.6044283885F, 0.6049009288F, 0.6053733196F, 0.6058455606F,
- 0.6063176512F, 0.6067895909F, 0.6072613790F, 0.6077330152F,
- 0.6082044989F, 0.6086758295F, 0.6091470065F, 0.6096180294F,
- 0.6100888977F, 0.6105596108F, 0.6110301682F, 0.6115005694F,
- 0.6119708139F, 0.6124409011F, 0.6129108305F, 0.6133806017F,
- 0.6138502139F, 0.6143196669F, 0.6147889599F, 0.6152580926F,
- 0.6157270643F, 0.6161958746F, 0.6166645230F, 0.6171330088F,
- 0.6176013317F, 0.6180694910F, 0.6185374863F, 0.6190053171F,
- 0.6194729827F, 0.6199404828F, 0.6204078167F, 0.6208749841F,
- 0.6213419842F, 0.6218088168F, 0.6222754811F, 0.6227419768F,
- 0.6232083032F, 0.6236744600F, 0.6241404465F, 0.6246062622F,
- 0.6250719067F, 0.6255373795F, 0.6260026799F, 0.6264678076F,
- 0.6269327619F, 0.6273975425F, 0.6278621487F, 0.6283265800F,
- 0.6287908361F, 0.6292549163F, 0.6297188201F, 0.6301825471F,
- 0.6306460966F, 0.6311094683F, 0.6315726617F, 0.6320356761F,
- 0.6324985111F, 0.6329611662F, 0.6334236410F, 0.6338859348F,
- 0.6343480472F, 0.6348099777F, 0.6352717257F, 0.6357332909F,
- 0.6361946726F, 0.6366558704F, 0.6371168837F, 0.6375777122F,
- 0.6380383552F, 0.6384988123F, 0.6389590830F, 0.6394191668F,
- 0.6398790631F, 0.6403387716F, 0.6407982916F, 0.6412576228F,
- 0.6417167645F, 0.6421757163F, 0.6426344778F, 0.6430930483F,
- 0.6435514275F, 0.6440096149F, 0.6444676098F, 0.6449254119F,
- 0.6453830207F, 0.6458404356F, 0.6462976562F, 0.6467546820F,
- 0.6472115125F, 0.6476681472F, 0.6481245856F, 0.6485808273F,
- 0.6490368717F, 0.6494927183F, 0.6499483667F, 0.6504038164F,
- 0.6508590670F, 0.6513141178F, 0.6517689684F, 0.6522236185F,
- 0.6526780673F, 0.6531323146F, 0.6535863598F, 0.6540402024F,
- 0.6544938419F, 0.6549472779F, 0.6554005099F, 0.6558535373F,
- 0.6563063598F, 0.6567589769F, 0.6572113880F, 0.6576635927F,
- 0.6581155906F, 0.6585673810F, 0.6590189637F, 0.6594703380F,
- 0.6599215035F, 0.6603724598F, 0.6608232064F, 0.6612737427F,
- 0.6617240684F, 0.6621741829F, 0.6626240859F, 0.6630737767F,
- 0.6635232550F, 0.6639725202F, 0.6644215720F, 0.6648704098F,
- 0.6653190332F, 0.6657674417F, 0.6662156348F, 0.6666636121F,
- 0.6671113731F, 0.6675589174F, 0.6680062445F, 0.6684533538F,
- 0.6689002450F, 0.6693469177F, 0.6697933712F, 0.6702396052F,
- 0.6706856193F, 0.6711314129F, 0.6715769855F, 0.6720223369F,
- 0.6724674664F, 0.6729123736F, 0.6733570581F, 0.6738015194F,
- 0.6742457570F, 0.6746897706F, 0.6751335596F, 0.6755771236F,
- 0.6760204621F, 0.6764635747F, 0.6769064609F, 0.6773491204F,
- 0.6777915525F, 0.6782337570F, 0.6786757332F, 0.6791174809F,
- 0.6795589995F, 0.6800002886F, 0.6804413477F, 0.6808821765F,
- 0.6813227743F, 0.6817631409F, 0.6822032758F, 0.6826431785F,
- 0.6830828485F, 0.6835222855F, 0.6839614890F, 0.6844004585F,
- 0.6848391936F, 0.6852776939F, 0.6857159589F, 0.6861539883F,
- 0.6865917815F, 0.6870293381F, 0.6874666576F, 0.6879037398F,
- 0.6883405840F, 0.6887771899F, 0.6892135571F, 0.6896496850F,
- 0.6900855733F, 0.6905212216F, 0.6909566294F, 0.6913917963F,
- 0.6918267218F, 0.6922614055F, 0.6926958471F, 0.6931300459F,
- 0.6935640018F, 0.6939977141F, 0.6944311825F, 0.6948644066F,
- 0.6952973859F, 0.6957301200F, 0.6961626085F, 0.6965948510F,
- 0.6970268470F, 0.6974585961F, 0.6978900980F, 0.6983213521F,
- 0.6987523580F, 0.6991831154F, 0.6996136238F, 0.7000438828F,
- 0.7004738921F, 0.7009036510F, 0.7013331594F, 0.7017624166F,
- 0.7021914224F, 0.7026201763F, 0.7030486779F, 0.7034769268F,
- 0.7039049226F, 0.7043326648F, 0.7047601531F, 0.7051873870F,
- 0.7056143662F, 0.7060410902F, 0.7064675586F, 0.7068937711F,
- 0.7073197271F, 0.7077454264F, 0.7081708684F, 0.7085960529F,
- 0.7090209793F, 0.7094456474F, 0.7098700566F, 0.7102942066F,
- 0.7107180970F, 0.7111417274F, 0.7115650974F, 0.7119882066F,
- 0.7124110545F, 0.7128336409F, 0.7132559653F, 0.7136780272F,
- 0.7140998264F, 0.7145213624F, 0.7149426348F, 0.7153636433F,
- 0.7157843874F, 0.7162048668F, 0.7166250810F, 0.7170450296F,
- 0.7174647124F, 0.7178841289F, 0.7183032786F, 0.7187221613F,
- 0.7191407765F, 0.7195591239F, 0.7199772030F, 0.7203950135F,
- 0.7208125550F, 0.7212298271F, 0.7216468294F, 0.7220635616F,
- 0.7224800233F, 0.7228962140F, 0.7233121335F, 0.7237277813F,
- 0.7241431571F, 0.7245582604F, 0.7249730910F, 0.7253876484F,
- 0.7258019322F, 0.7262159422F, 0.7266296778F, 0.7270431388F,
- 0.7274563247F, 0.7278692353F, 0.7282818700F, 0.7286942287F,
- 0.7291063108F, 0.7295181160F, 0.7299296440F, 0.7303408944F,
- 0.7307518669F, 0.7311625609F, 0.7315729763F, 0.7319831126F,
- 0.7323929695F, 0.7328025466F, 0.7332118435F, 0.7336208600F,
- 0.7340295955F, 0.7344380499F, 0.7348462226F, 0.7352541134F,
- 0.7356617220F, 0.7360690478F, 0.7364760907F, 0.7368828502F,
- 0.7372893259F, 0.7376955176F, 0.7381014249F, 0.7385070475F,
- 0.7389123849F, 0.7393174368F, 0.7397222029F, 0.7401266829F,
- 0.7405308763F, 0.7409347829F, 0.7413384023F, 0.7417417341F,
- 0.7421447780F, 0.7425475338F, 0.7429500009F, 0.7433521791F,
- 0.7437540681F, 0.7441556674F, 0.7445569769F, 0.7449579960F,
- 0.7453587245F, 0.7457591621F, 0.7461593084F, 0.7465591631F,
- 0.7469587259F, 0.7473579963F, 0.7477569741F, 0.7481556590F,
- 0.7485540506F, 0.7489521486F, 0.7493499526F, 0.7497474623F,
- 0.7501446775F, 0.7505415977F, 0.7509382227F, 0.7513345521F,
- 0.7517305856F, 0.7521263229F, 0.7525217636F, 0.7529169074F,
- 0.7533117541F, 0.7537063032F, 0.7541005545F, 0.7544945076F,
- 0.7548881623F, 0.7552815182F, 0.7556745749F, 0.7560673323F,
- 0.7564597899F, 0.7568519474F, 0.7572438046F, 0.7576353611F,
- 0.7580266166F, 0.7584175708F, 0.7588082235F, 0.7591985741F,
- 0.7595886226F, 0.7599783685F, 0.7603678116F, 0.7607569515F,
- 0.7611457879F, 0.7615343206F, 0.7619225493F, 0.7623104735F,
- 0.7626980931F, 0.7630854078F, 0.7634724171F, 0.7638591209F,
- 0.7642455188F, 0.7646316106F, 0.7650173959F, 0.7654028744F,
- 0.7657880459F, 0.7661729100F, 0.7665574664F, 0.7669417150F,
- 0.7673256553F, 0.7677092871F, 0.7680926100F, 0.7684756239F,
- 0.7688583284F, 0.7692407232F, 0.7696228080F, 0.7700045826F,
- 0.7703860467F, 0.7707671999F, 0.7711480420F, 0.7715285728F,
- 0.7719087918F, 0.7722886989F, 0.7726682938F, 0.7730475762F,
- 0.7734265458F, 0.7738052023F, 0.7741835454F, 0.7745615750F,
- 0.7749392906F, 0.7753166921F, 0.7756937791F, 0.7760705514F,
- 0.7764470087F, 0.7768231508F, 0.7771989773F, 0.7775744880F,
- 0.7779496827F, 0.7783245610F, 0.7786991227F, 0.7790733676F,
- 0.7794472953F, 0.7798209056F, 0.7801941982F, 0.7805671729F,
- 0.7809398294F, 0.7813121675F, 0.7816841869F, 0.7820558873F,
- 0.7824272684F, 0.7827983301F, 0.7831690720F, 0.7835394940F,
- 0.7839095957F, 0.7842793768F, 0.7846488373F, 0.7850179767F,
- 0.7853867948F, 0.7857552914F, 0.7861234663F, 0.7864913191F,
- 0.7868588497F, 0.7872260578F, 0.7875929431F, 0.7879595055F,
- 0.7883257445F, 0.7886916601F, 0.7890572520F, 0.7894225198F,
- 0.7897874635F, 0.7901520827F, 0.7905163772F, 0.7908803468F,
- 0.7912439912F, 0.7916073102F, 0.7919703035F, 0.7923329710F,
- 0.7926953124F, 0.7930573274F, 0.7934190158F, 0.7937803774F,
- 0.7941414120F, 0.7945021193F, 0.7948624991F, 0.7952225511F,
- 0.7955822752F, 0.7959416711F, 0.7963007387F, 0.7966594775F,
- 0.7970178875F, 0.7973759685F, 0.7977337201F, 0.7980911422F,
- 0.7984482346F, 0.7988049970F, 0.7991614292F, 0.7995175310F,
- 0.7998733022F, 0.8002287426F, 0.8005838519F, 0.8009386299F,
- 0.8012930765F, 0.8016471914F, 0.8020009744F, 0.8023544253F,
- 0.8027075438F, 0.8030603298F, 0.8034127831F, 0.8037649035F,
- 0.8041166906F, 0.8044681445F, 0.8048192647F, 0.8051700512F,
- 0.8055205038F, 0.8058706222F, 0.8062204062F, 0.8065698556F,
- 0.8069189702F, 0.8072677499F, 0.8076161944F, 0.8079643036F,
- 0.8083120772F, 0.8086595151F, 0.8090066170F, 0.8093533827F,
- 0.8096998122F, 0.8100459051F, 0.8103916613F, 0.8107370806F,
- 0.8110821628F, 0.8114269077F, 0.8117713151F, 0.8121153849F,
- 0.8124591169F, 0.8128025108F, 0.8131455666F, 0.8134882839F,
- 0.8138306627F, 0.8141727027F, 0.8145144038F, 0.8148557658F,
- 0.8151967886F, 0.8155374718F, 0.8158778154F, 0.8162178192F,
- 0.8165574830F, 0.8168968067F, 0.8172357900F, 0.8175744328F,
- 0.8179127349F, 0.8182506962F, 0.8185883164F, 0.8189255955F,
- 0.8192625332F, 0.8195991295F, 0.8199353840F, 0.8202712967F,
- 0.8206068673F, 0.8209420958F, 0.8212769820F, 0.8216115256F,
- 0.8219457266F, 0.8222795848F, 0.8226131000F, 0.8229462721F,
- 0.8232791009F, 0.8236115863F, 0.8239437280F, 0.8242755260F,
- 0.8246069801F, 0.8249380901F, 0.8252688559F, 0.8255992774F,
- 0.8259293544F, 0.8262590867F, 0.8265884741F, 0.8269175167F,
- 0.8272462141F, 0.8275745663F, 0.8279025732F, 0.8282302344F,
- 0.8285575501F, 0.8288845199F, 0.8292111437F, 0.8295374215F,
- 0.8298633530F, 0.8301889382F, 0.8305141768F, 0.8308390688F,
- 0.8311636141F, 0.8314878124F, 0.8318116637F, 0.8321351678F,
- 0.8324583246F, 0.8327811340F, 0.8331035957F, 0.8334257098F,
- 0.8337474761F, 0.8340688944F, 0.8343899647F, 0.8347106867F,
- 0.8350310605F, 0.8353510857F, 0.8356707624F, 0.8359900904F,
- 0.8363090696F, 0.8366276999F, 0.8369459811F, 0.8372639131F,
- 0.8375814958F, 0.8378987292F, 0.8382156130F, 0.8385321472F,
- 0.8388483316F, 0.8391641662F, 0.8394796508F, 0.8397947853F,
- 0.8401095697F, 0.8404240037F, 0.8407380873F, 0.8410518204F,
- 0.8413652029F, 0.8416782347F, 0.8419909156F, 0.8423032456F,
- 0.8426152245F, 0.8429268523F, 0.8432381289F, 0.8435490541F,
- 0.8438596279F, 0.8441698502F, 0.8444797208F, 0.8447892396F,
- 0.8450984067F, 0.8454072218F, 0.8457156849F, 0.8460237959F,
- 0.8463315547F, 0.8466389612F, 0.8469460154F, 0.8472527170F,
- 0.8475590661F, 0.8478650625F, 0.8481707063F, 0.8484759971F,
- 0.8487809351F, 0.8490855201F, 0.8493897521F, 0.8496936308F,
- 0.8499971564F, 0.8503003286F, 0.8506031474F, 0.8509056128F,
- 0.8512077246F, 0.8515094828F, 0.8518108872F, 0.8521119379F,
- 0.8524126348F, 0.8527129777F, 0.8530129666F, 0.8533126015F,
- 0.8536118822F, 0.8539108087F, 0.8542093809F, 0.8545075988F,
- 0.8548054623F, 0.8551029712F, 0.8554001257F, 0.8556969255F,
- 0.8559933707F, 0.8562894611F, 0.8565851968F, 0.8568805775F,
- 0.8571756034F, 0.8574702743F, 0.8577645902F, 0.8580585509F,
- 0.8583521566F, 0.8586454070F, 0.8589383021F, 0.8592308420F,
- 0.8595230265F, 0.8598148556F, 0.8601063292F, 0.8603974473F,
- 0.8606882098F, 0.8609786167F, 0.8612686680F, 0.8615583636F,
- 0.8618477034F, 0.8621366874F, 0.8624253156F, 0.8627135878F,
- 0.8630015042F, 0.8632890646F, 0.8635762690F, 0.8638631173F,
- 0.8641496096F, 0.8644357457F, 0.8647215257F, 0.8650069495F,
- 0.8652920171F, 0.8655767283F, 0.8658610833F, 0.8661450820F,
- 0.8664287243F, 0.8667120102F, 0.8669949397F, 0.8672775127F,
- 0.8675597293F, 0.8678415894F, 0.8681230929F, 0.8684042398F,
- 0.8686850302F, 0.8689654640F, 0.8692455412F, 0.8695252617F,
- 0.8698046255F, 0.8700836327F, 0.8703622831F, 0.8706405768F,
- 0.8709185138F, 0.8711960940F, 0.8714733174F, 0.8717501840F,
- 0.8720266939F, 0.8723028469F, 0.8725786430F, 0.8728540824F,
- 0.8731291648F, 0.8734038905F, 0.8736782592F, 0.8739522711F,
- 0.8742259261F, 0.8744992242F, 0.8747721653F, 0.8750447496F,
- 0.8753169770F, 0.8755888475F, 0.8758603611F, 0.8761315177F,
- 0.8764023175F, 0.8766727603F, 0.8769428462F, 0.8772125752F,
- 0.8774819474F, 0.8777509626F, 0.8780196209F, 0.8782879224F,
- 0.8785558669F, 0.8788234546F, 0.8790906854F, 0.8793575594F,
- 0.8796240765F, 0.8798902368F, 0.8801560403F, 0.8804214870F,
- 0.8806865768F, 0.8809513099F, 0.8812156863F, 0.8814797059F,
- 0.8817433687F, 0.8820066749F, 0.8822696243F, 0.8825322171F,
- 0.8827944532F, 0.8830563327F, 0.8833178556F, 0.8835790219F,
- 0.8838398316F, 0.8841002848F, 0.8843603815F, 0.8846201217F,
- 0.8848795054F, 0.8851385327F, 0.8853972036F, 0.8856555182F,
- 0.8859134764F, 0.8861710783F, 0.8864283239F, 0.8866852133F,
- 0.8869417464F, 0.8871979234F, 0.8874537443F, 0.8877092090F,
- 0.8879643177F, 0.8882190704F, 0.8884734671F, 0.8887275078F,
- 0.8889811927F, 0.8892345216F, 0.8894874948F, 0.8897401122F,
- 0.8899923738F, 0.8902442798F, 0.8904958301F, 0.8907470248F,
- 0.8909978640F, 0.8912483477F, 0.8914984759F, 0.8917482487F,
- 0.8919976662F, 0.8922467284F, 0.8924954353F, 0.8927437871F,
- 0.8929917837F, 0.8932394252F, 0.8934867118F, 0.8937336433F,
- 0.8939802199F, 0.8942264417F, 0.8944723087F, 0.8947178210F,
- 0.8949629785F, 0.8952077815F, 0.8954522299F, 0.8956963239F,
- 0.8959400634F, 0.8961834486F, 0.8964264795F, 0.8966691561F,
- 0.8969114786F, 0.8971534470F, 0.8973950614F, 0.8976363219F,
- 0.8978772284F, 0.8981177812F, 0.8983579802F, 0.8985978256F,
- 0.8988373174F, 0.8990764556F, 0.8993152405F, 0.8995536720F,
- 0.8997917502F, 0.9000294751F, 0.9002668470F, 0.9005038658F,
- 0.9007405317F, 0.9009768446F, 0.9012128048F, 0.9014484123F,
- 0.9016836671F, 0.9019185693F, 0.9021531191F, 0.9023873165F,
- 0.9026211616F, 0.9028546546F, 0.9030877954F, 0.9033205841F,
- 0.9035530210F, 0.9037851059F, 0.9040168392F, 0.9042482207F,
- 0.9044792507F, 0.9047099293F, 0.9049402564F, 0.9051702323F,
- 0.9053998569F, 0.9056291305F, 0.9058580531F, 0.9060866248F,
- 0.9063148457F, 0.9065427159F, 0.9067702355F, 0.9069974046F,
- 0.9072242233F, 0.9074506917F, 0.9076768100F, 0.9079025782F,
- 0.9081279964F, 0.9083530647F, 0.9085777833F, 0.9088021523F,
- 0.9090261717F, 0.9092498417F, 0.9094731623F, 0.9096961338F,
- 0.9099187561F, 0.9101410295F, 0.9103629540F, 0.9105845297F,
- 0.9108057568F, 0.9110266354F, 0.9112471656F, 0.9114673475F,
- 0.9116871812F, 0.9119066668F, 0.9121258046F, 0.9123445945F,
- 0.9125630367F, 0.9127811314F, 0.9129988786F, 0.9132162785F,
- 0.9134333312F, 0.9136500368F, 0.9138663954F, 0.9140824073F,
- 0.9142980724F, 0.9145133910F, 0.9147283632F, 0.9149429890F,
- 0.9151572687F, 0.9153712023F, 0.9155847900F, 0.9157980319F,
- 0.9160109282F, 0.9162234790F, 0.9164356844F, 0.9166475445F,
- 0.9168590595F, 0.9170702296F, 0.9172810548F, 0.9174915354F,
- 0.9177016714F, 0.9179114629F, 0.9181209102F, 0.9183300134F,
- 0.9185387726F, 0.9187471879F, 0.9189552595F, 0.9191629876F,
- 0.9193703723F, 0.9195774136F, 0.9197841119F, 0.9199904672F,
- 0.9201964797F, 0.9204021495F, 0.9206074767F, 0.9208124616F,
- 0.9210171043F, 0.9212214049F, 0.9214253636F, 0.9216289805F,
- 0.9218322558F, 0.9220351896F, 0.9222377821F, 0.9224400335F,
- 0.9226419439F, 0.9228435134F, 0.9230447423F, 0.9232456307F,
- 0.9234461787F, 0.9236463865F, 0.9238462543F, 0.9240457822F,
- 0.9242449704F, 0.9244438190F, 0.9246423282F, 0.9248404983F,
- 0.9250383293F, 0.9252358214F, 0.9254329747F, 0.9256297896F,
- 0.9258262660F, 0.9260224042F, 0.9262182044F, 0.9264136667F,
- 0.9266087913F, 0.9268035783F, 0.9269980280F, 0.9271921405F,
- 0.9273859160F, 0.9275793546F, 0.9277724566F, 0.9279652221F,
- 0.9281576513F, 0.9283497443F, 0.9285415014F, 0.9287329227F,
- 0.9289240084F, 0.9291147586F, 0.9293051737F, 0.9294952536F,
- 0.9296849987F, 0.9298744091F, 0.9300634850F, 0.9302522266F,
- 0.9304406340F, 0.9306287074F, 0.9308164471F, 0.9310038532F,
- 0.9311909259F, 0.9313776654F, 0.9315640719F, 0.9317501455F,
- 0.9319358865F, 0.9321212951F, 0.9323063713F, 0.9324911155F,
- 0.9326755279F, 0.9328596085F, 0.9330433577F, 0.9332267756F,
- 0.9334098623F, 0.9335926182F, 0.9337750434F, 0.9339571380F,
- 0.9341389023F, 0.9343203366F, 0.9345014409F, 0.9346822155F,
- 0.9348626606F, 0.9350427763F, 0.9352225630F, 0.9354020207F,
- 0.9355811498F, 0.9357599503F, 0.9359384226F, 0.9361165667F,
- 0.9362943830F, 0.9364718716F, 0.9366490327F, 0.9368258666F,
- 0.9370023733F, 0.9371785533F, 0.9373544066F, 0.9375299335F,
- 0.9377051341F, 0.9378800087F, 0.9380545576F, 0.9382287809F,
- 0.9384026787F, 0.9385762515F, 0.9387494993F, 0.9389224223F,
- 0.9390950209F, 0.9392672951F, 0.9394392453F, 0.9396108716F,
- 0.9397821743F, 0.9399531536F, 0.9401238096F, 0.9402941427F,
- 0.9404641530F, 0.9406338407F, 0.9408032061F, 0.9409722495F,
- 0.9411409709F, 0.9413093707F, 0.9414774491F, 0.9416452062F,
- 0.9418126424F, 0.9419797579F, 0.9421465528F, 0.9423130274F,
- 0.9424791819F, 0.9426450166F, 0.9428105317F, 0.9429757274F,
- 0.9431406039F, 0.9433051616F, 0.9434694005F, 0.9436333209F,
- 0.9437969232F, 0.9439602074F, 0.9441231739F, 0.9442858229F,
- 0.9444481545F, 0.9446101691F, 0.9447718669F, 0.9449332481F,
- 0.9450943129F, 0.9452550617F, 0.9454154945F, 0.9455756118F,
- 0.9457354136F, 0.9458949003F, 0.9460540721F, 0.9462129292F,
- 0.9463714719F, 0.9465297003F, 0.9466876149F, 0.9468452157F,
- 0.9470025031F, 0.9471594772F, 0.9473161384F, 0.9474724869F,
- 0.9476285229F, 0.9477842466F, 0.9479396584F, 0.9480947585F,
- 0.9482495470F, 0.9484040243F, 0.9485581906F, 0.9487120462F,
- 0.9488655913F, 0.9490188262F, 0.9491717511F, 0.9493243662F,
- 0.9494766718F, 0.9496286683F, 0.9497803557F, 0.9499317345F,
- 0.9500828047F, 0.9502335668F, 0.9503840209F, 0.9505341673F,
- 0.9506840062F, 0.9508335380F, 0.9509827629F, 0.9511316810F,
- 0.9512802928F, 0.9514285984F, 0.9515765982F, 0.9517242923F,
- 0.9518716810F, 0.9520187646F, 0.9521655434F, 0.9523120176F,
- 0.9524581875F, 0.9526040534F, 0.9527496154F, 0.9528948739F,
- 0.9530398292F, 0.9531844814F, 0.9533288310F, 0.9534728780F,
- 0.9536166229F, 0.9537600659F, 0.9539032071F, 0.9540460470F,
- 0.9541885858F, 0.9543308237F, 0.9544727611F, 0.9546143981F,
- 0.9547557351F, 0.9548967723F, 0.9550375100F, 0.9551779485F,
- 0.9553180881F, 0.9554579290F, 0.9555974714F, 0.9557367158F,
- 0.9558756623F, 0.9560143112F, 0.9561526628F, 0.9562907174F,
- 0.9564284752F, 0.9565659366F, 0.9567031017F, 0.9568399710F,
- 0.9569765446F, 0.9571128229F, 0.9572488061F, 0.9573844944F,
- 0.9575198883F, 0.9576549879F, 0.9577897936F, 0.9579243056F,
- 0.9580585242F, 0.9581924497F, 0.9583260824F, 0.9584594226F,
- 0.9585924705F, 0.9587252264F, 0.9588576906F, 0.9589898634F,
- 0.9591217452F, 0.9592533360F, 0.9593846364F, 0.9595156465F,
- 0.9596463666F, 0.9597767971F, 0.9599069382F, 0.9600367901F,
- 0.9601663533F, 0.9602956279F, 0.9604246143F, 0.9605533128F,
- 0.9606817236F, 0.9608098471F, 0.9609376835F, 0.9610652332F,
- 0.9611924963F, 0.9613194733F, 0.9614461644F, 0.9615725699F,
- 0.9616986901F, 0.9618245253F, 0.9619500757F, 0.9620753418F,
- 0.9622003238F, 0.9623250219F, 0.9624494365F, 0.9625735679F,
- 0.9626974163F, 0.9628209821F, 0.9629442656F, 0.9630672671F,
- 0.9631899868F, 0.9633124251F, 0.9634345822F, 0.9635564585F,
- 0.9636780543F, 0.9637993699F, 0.9639204056F, 0.9640411616F,
- 0.9641616383F, 0.9642818359F, 0.9644017549F, 0.9645213955F,
- 0.9646407579F, 0.9647598426F, 0.9648786497F, 0.9649971797F,
- 0.9651154328F, 0.9652334092F, 0.9653511095F, 0.9654685337F,
- 0.9655856823F, 0.9657025556F, 0.9658191538F, 0.9659354773F,
- 0.9660515263F, 0.9661673013F, 0.9662828024F, 0.9663980300F,
- 0.9665129845F, 0.9666276660F, 0.9667420750F, 0.9668562118F,
- 0.9669700766F, 0.9670836698F, 0.9671969917F, 0.9673100425F,
- 0.9674228227F, 0.9675353325F, 0.9676475722F, 0.9677595422F,
- 0.9678712428F, 0.9679826742F, 0.9680938368F, 0.9682047309F,
- 0.9683153569F, 0.9684257150F, 0.9685358056F, 0.9686456289F,
- 0.9687551853F, 0.9688644752F, 0.9689734987F, 0.9690822564F,
- 0.9691907483F, 0.9692989750F, 0.9694069367F, 0.9695146337F,
- 0.9696220663F, 0.9697292349F, 0.9698361398F, 0.9699427813F,
- 0.9700491597F, 0.9701552754F, 0.9702611286F, 0.9703667197F,
- 0.9704720490F, 0.9705771169F, 0.9706819236F, 0.9707864695F,
- 0.9708907549F, 0.9709947802F, 0.9710985456F, 0.9712020514F,
- 0.9713052981F, 0.9714082859F, 0.9715110151F, 0.9716134862F,
- 0.9717156993F, 0.9718176549F, 0.9719193532F, 0.9720207946F,
- 0.9721219794F, 0.9722229080F, 0.9723235806F, 0.9724239976F,
- 0.9725241593F, 0.9726240661F, 0.9727237183F, 0.9728231161F,
- 0.9729222601F, 0.9730211503F, 0.9731197873F, 0.9732181713F,
- 0.9733163027F, 0.9734141817F, 0.9735118088F, 0.9736091842F,
- 0.9737063083F, 0.9738031814F, 0.9738998039F, 0.9739961760F,
- 0.9740922981F, 0.9741881706F, 0.9742837938F, 0.9743791680F,
- 0.9744742935F, 0.9745691707F, 0.9746637999F, 0.9747581814F,
- 0.9748523157F, 0.9749462029F, 0.9750398435F, 0.9751332378F,
- 0.9752263861F, 0.9753192887F, 0.9754119461F, 0.9755043585F,
- 0.9755965262F, 0.9756884496F, 0.9757801291F, 0.9758715650F,
- 0.9759627575F, 0.9760537071F, 0.9761444141F, 0.9762348789F,
- 0.9763251016F, 0.9764150828F, 0.9765048228F, 0.9765943218F,
- 0.9766835802F, 0.9767725984F, 0.9768613767F, 0.9769499154F,
- 0.9770382149F, 0.9771262755F, 0.9772140976F, 0.9773016815F,
- 0.9773890275F, 0.9774761360F, 0.9775630073F, 0.9776496418F,
- 0.9777360398F, 0.9778222016F, 0.9779081277F, 0.9779938182F,
- 0.9780792736F, 0.9781644943F, 0.9782494805F, 0.9783342326F,
- 0.9784187509F, 0.9785030359F, 0.9785870877F, 0.9786709069F,
- 0.9787544936F, 0.9788378484F, 0.9789209714F, 0.9790038631F,
- 0.9790865238F, 0.9791689538F, 0.9792511535F, 0.9793331232F,
- 0.9794148633F, 0.9794963742F, 0.9795776561F, 0.9796587094F,
- 0.9797395345F, 0.9798201316F, 0.9799005013F, 0.9799806437F,
- 0.9800605593F, 0.9801402483F, 0.9802197112F, 0.9802989483F,
- 0.9803779600F, 0.9804567465F, 0.9805353082F, 0.9806136455F,
- 0.9806917587F, 0.9807696482F, 0.9808473143F, 0.9809247574F,
- 0.9810019778F, 0.9810789759F, 0.9811557519F, 0.9812323064F,
- 0.9813086395F, 0.9813847517F, 0.9814606433F, 0.9815363147F,
- 0.9816117662F, 0.9816869981F, 0.9817620108F, 0.9818368047F,
- 0.9819113801F, 0.9819857374F, 0.9820598769F, 0.9821337989F,
- 0.9822075038F, 0.9822809920F, 0.9823542638F, 0.9824273195F,
- 0.9825001596F, 0.9825727843F, 0.9826451940F, 0.9827173891F,
- 0.9827893700F, 0.9828611368F, 0.9829326901F, 0.9830040302F,
- 0.9830751574F, 0.9831460720F, 0.9832167745F, 0.9832872652F,
- 0.9833575444F, 0.9834276124F, 0.9834974697F, 0.9835671166F,
- 0.9836365535F, 0.9837057806F, 0.9837747983F, 0.9838436071F,
- 0.9839122072F, 0.9839805990F, 0.9840487829F, 0.9841167591F,
- 0.9841845282F, 0.9842520903F, 0.9843194459F, 0.9843865953F,
- 0.9844535389F, 0.9845202771F, 0.9845868101F, 0.9846531383F,
- 0.9847192622F, 0.9847851820F, 0.9848508980F, 0.9849164108F,
- 0.9849817205F, 0.9850468276F, 0.9851117324F, 0.9851764352F,
- 0.9852409365F, 0.9853052366F, 0.9853693358F, 0.9854332344F,
- 0.9854969330F, 0.9855604317F, 0.9856237309F, 0.9856868310F,
- 0.9857497325F, 0.9858124355F, 0.9858749404F, 0.9859372477F,
- 0.9859993577F, 0.9860612707F, 0.9861229871F, 0.9861845072F,
- 0.9862458315F, 0.9863069601F, 0.9863678936F, 0.9864286322F,
- 0.9864891764F, 0.9865495264F, 0.9866096826F, 0.9866696454F,
- 0.9867294152F, 0.9867889922F, 0.9868483769F, 0.9869075695F,
- 0.9869665706F, 0.9870253803F, 0.9870839991F, 0.9871424273F,
- 0.9872006653F, 0.9872587135F, 0.9873165721F, 0.9873742415F,
- 0.9874317222F, 0.9874890144F, 0.9875461185F, 0.9876030348F,
- 0.9876597638F, 0.9877163057F, 0.9877726610F, 0.9878288300F,
- 0.9878848130F, 0.9879406104F, 0.9879962225F, 0.9880516497F,
- 0.9881068924F, 0.9881619509F, 0.9882168256F, 0.9882715168F,
- 0.9883260249F, 0.9883803502F, 0.9884344931F, 0.9884884539F,
- 0.9885422331F, 0.9885958309F, 0.9886492477F, 0.9887024838F,
- 0.9887555397F, 0.9888084157F, 0.9888611120F, 0.9889136292F,
- 0.9889659675F, 0.9890181273F, 0.9890701089F, 0.9891219128F,
- 0.9891735392F, 0.9892249885F, 0.9892762610F, 0.9893273572F,
- 0.9893782774F, 0.9894290219F, 0.9894795911F, 0.9895299853F,
- 0.9895802049F, 0.9896302502F, 0.9896801217F, 0.9897298196F,
- 0.9897793443F, 0.9898286961F, 0.9898778755F, 0.9899268828F,
- 0.9899757183F, 0.9900243823F, 0.9900728753F, 0.9901211976F,
- 0.9901693495F, 0.9902173314F, 0.9902651436F, 0.9903127865F,
- 0.9903602605F, 0.9904075659F, 0.9904547031F, 0.9905016723F,
- 0.9905484740F, 0.9905951086F, 0.9906415763F, 0.9906878775F,
- 0.9907340126F, 0.9907799819F, 0.9908257858F, 0.9908714247F,
- 0.9909168988F, 0.9909622086F, 0.9910073543F, 0.9910523364F,
- 0.9910971552F, 0.9911418110F, 0.9911863042F, 0.9912306351F,
- 0.9912748042F, 0.9913188117F, 0.9913626580F, 0.9914063435F,
- 0.9914498684F, 0.9914932333F, 0.9915364383F, 0.9915794839F,
- 0.9916223703F, 0.9916650981F, 0.9917076674F, 0.9917500787F,
- 0.9917923323F, 0.9918344286F, 0.9918763679F, 0.9919181505F,
- 0.9919597769F, 0.9920012473F, 0.9920425621F, 0.9920837217F,
- 0.9921247263F, 0.9921655765F, 0.9922062724F, 0.9922468145F,
- 0.9922872030F, 0.9923274385F, 0.9923675211F, 0.9924074513F,
- 0.9924472294F, 0.9924868557F, 0.9925263306F, 0.9925656544F,
- 0.9926048275F, 0.9926438503F, 0.9926827230F, 0.9927214461F,
- 0.9927600199F, 0.9927984446F, 0.9928367208F, 0.9928748486F,
- 0.9929128285F, 0.9929506608F, 0.9929883459F, 0.9930258841F,
- 0.9930632757F, 0.9931005211F, 0.9931376207F, 0.9931745747F,
- 0.9932113836F, 0.9932480476F, 0.9932845671F, 0.9933209425F,
- 0.9933571742F, 0.9933932623F, 0.9934292074F, 0.9934650097F,
- 0.9935006696F, 0.9935361874F, 0.9935715635F, 0.9936067982F,
- 0.9936418919F, 0.9936768448F, 0.9937116574F, 0.9937463300F,
- 0.9937808629F, 0.9938152565F, 0.9938495111F, 0.9938836271F,
- 0.9939176047F, 0.9939514444F, 0.9939851465F, 0.9940187112F,
- 0.9940521391F, 0.9940854303F, 0.9941185853F, 0.9941516044F,
- 0.9941844879F, 0.9942172361F, 0.9942498495F, 0.9942823283F,
- 0.9943146729F, 0.9943468836F, 0.9943789608F, 0.9944109047F,
- 0.9944427158F, 0.9944743944F, 0.9945059408F, 0.9945373553F,
- 0.9945686384F, 0.9945997902F, 0.9946308112F, 0.9946617017F,
- 0.9946924621F, 0.9947230926F, 0.9947535937F, 0.9947839656F,
- 0.9948142086F, 0.9948443232F, 0.9948743097F, 0.9949041683F,
- 0.9949338995F, 0.9949635035F, 0.9949929807F, 0.9950223315F,
- 0.9950515561F, 0.9950806549F, 0.9951096282F, 0.9951384764F,
- 0.9951671998F, 0.9951957987F, 0.9952242735F, 0.9952526245F,
- 0.9952808520F, 0.9953089564F, 0.9953369380F, 0.9953647971F,
- 0.9953925340F, 0.9954201491F, 0.9954476428F, 0.9954750153F,
- 0.9955022670F, 0.9955293981F, 0.9955564092F, 0.9955833003F,
- 0.9956100720F, 0.9956367245F, 0.9956632582F, 0.9956896733F,
- 0.9957159703F, 0.9957421494F, 0.9957682110F, 0.9957941553F,
- 0.9958199828F, 0.9958456937F, 0.9958712884F, 0.9958967672F,
- 0.9959221305F, 0.9959473784F, 0.9959725115F, 0.9959975300F,
- 0.9960224342F, 0.9960472244F, 0.9960719011F, 0.9960964644F,
- 0.9961209148F, 0.9961452525F, 0.9961694779F, 0.9961935913F,
- 0.9962175930F, 0.9962414834F, 0.9962652627F, 0.9962889313F,
- 0.9963124895F, 0.9963359377F, 0.9963592761F, 0.9963825051F,
- 0.9964056250F, 0.9964286361F, 0.9964515387F, 0.9964743332F,
- 0.9964970198F, 0.9965195990F, 0.9965420709F, 0.9965644360F,
- 0.9965866946F, 0.9966088469F, 0.9966308932F, 0.9966528340F,
- 0.9966746695F, 0.9966964001F, 0.9967180260F, 0.9967395475F,
- 0.9967609651F, 0.9967822789F, 0.9968034894F, 0.9968245968F,
- 0.9968456014F, 0.9968665036F, 0.9968873037F, 0.9969080019F,
- 0.9969285987F, 0.9969490942F, 0.9969694889F, 0.9969897830F,
- 0.9970099769F, 0.9970300708F, 0.9970500651F, 0.9970699601F,
- 0.9970897561F, 0.9971094533F, 0.9971290522F, 0.9971485531F,
- 0.9971679561F, 0.9971872617F, 0.9972064702F, 0.9972255818F,
- 0.9972445968F, 0.9972635157F, 0.9972823386F, 0.9973010659F,
- 0.9973196980F, 0.9973382350F, 0.9973566773F, 0.9973750253F,
- 0.9973932791F, 0.9974114392F, 0.9974295059F, 0.9974474793F,
- 0.9974653599F, 0.9974831480F, 0.9975008438F, 0.9975184476F,
- 0.9975359598F, 0.9975533806F, 0.9975707104F, 0.9975879495F,
- 0.9976050981F, 0.9976221566F, 0.9976391252F, 0.9976560043F,
- 0.9976727941F, 0.9976894950F, 0.9977061073F, 0.9977226312F,
- 0.9977390671F, 0.9977554152F, 0.9977716759F, 0.9977878495F,
- 0.9978039361F, 0.9978199363F, 0.9978358501F, 0.9978516780F,
- 0.9978674202F, 0.9978830771F, 0.9978986488F, 0.9979141358F,
- 0.9979295383F, 0.9979448566F, 0.9979600909F, 0.9979752417F,
- 0.9979903091F, 0.9980052936F, 0.9980201952F, 0.9980350145F,
- 0.9980497515F, 0.9980644067F, 0.9980789804F, 0.9980934727F,
- 0.9981078841F, 0.9981222147F, 0.9981364649F, 0.9981506350F,
- 0.9981647253F, 0.9981787360F, 0.9981926674F, 0.9982065199F,
- 0.9982202936F, 0.9982339890F, 0.9982476062F, 0.9982611456F,
- 0.9982746074F, 0.9982879920F, 0.9983012996F, 0.9983145304F,
- 0.9983276849F, 0.9983407632F, 0.9983537657F, 0.9983666926F,
- 0.9983795442F, 0.9983923208F, 0.9984050226F, 0.9984176501F,
- 0.9984302033F, 0.9984426827F, 0.9984550884F, 0.9984674208F,
- 0.9984796802F, 0.9984918667F, 0.9985039808F, 0.9985160227F,
- 0.9985279926F, 0.9985398909F, 0.9985517177F, 0.9985634734F,
- 0.9985751583F, 0.9985867727F, 0.9985983167F, 0.9986097907F,
- 0.9986211949F, 0.9986325297F, 0.9986437953F, 0.9986549919F,
- 0.9986661199F, 0.9986771795F, 0.9986881710F, 0.9986990946F,
- 0.9987099507F, 0.9987207394F, 0.9987314611F, 0.9987421161F,
- 0.9987527045F, 0.9987632267F, 0.9987736829F, 0.9987840734F,
- 0.9987943985F, 0.9988046584F, 0.9988148534F, 0.9988249838F,
- 0.9988350498F, 0.9988450516F, 0.9988549897F, 0.9988648641F,
- 0.9988746753F, 0.9988844233F, 0.9988941086F, 0.9989037313F,
- 0.9989132918F, 0.9989227902F, 0.9989322269F, 0.9989416021F,
- 0.9989509160F, 0.9989601690F, 0.9989693613F, 0.9989784931F,
- 0.9989875647F, 0.9989965763F, 0.9990055283F, 0.9990144208F,
- 0.9990232541F, 0.9990320286F, 0.9990407443F, 0.9990494016F,
- 0.9990580008F, 0.9990665421F, 0.9990750257F, 0.9990834519F,
- 0.9990918209F, 0.9991001331F, 0.9991083886F, 0.9991165877F,
- 0.9991247307F, 0.9991328177F, 0.9991408491F, 0.9991488251F,
- 0.9991567460F, 0.9991646119F, 0.9991724232F, 0.9991801801F,
- 0.9991878828F, 0.9991955316F, 0.9992031267F, 0.9992106684F,
- 0.9992181569F, 0.9992255925F, 0.9992329753F, 0.9992403057F,
- 0.9992475839F, 0.9992548101F, 0.9992619846F, 0.9992691076F,
- 0.9992761793F, 0.9992832001F, 0.9992901701F, 0.9992970895F,
- 0.9993039587F, 0.9993107777F, 0.9993175470F, 0.9993242667F,
- 0.9993309371F, 0.9993375583F, 0.9993441307F, 0.9993506545F,
- 0.9993571298F, 0.9993635570F, 0.9993699362F, 0.9993762678F,
- 0.9993825519F, 0.9993887887F, 0.9993949785F, 0.9994011216F,
- 0.9994072181F, 0.9994132683F, 0.9994192725F, 0.9994252307F,
- 0.9994311434F, 0.9994370107F, 0.9994428327F, 0.9994486099F,
- 0.9994543423F, 0.9994600303F, 0.9994656739F, 0.9994712736F,
- 0.9994768294F, 0.9994823417F, 0.9994878105F, 0.9994932363F,
- 0.9994986191F, 0.9995039592F, 0.9995092568F, 0.9995145122F,
- 0.9995197256F, 0.9995248971F, 0.9995300270F, 0.9995351156F,
- 0.9995401630F, 0.9995451695F, 0.9995501352F, 0.9995550604F,
- 0.9995599454F, 0.9995647903F, 0.9995695953F, 0.9995743607F,
- 0.9995790866F, 0.9995837734F, 0.9995884211F, 0.9995930300F,
- 0.9995976004F, 0.9996021324F, 0.9996066263F, 0.9996110822F,
- 0.9996155004F, 0.9996198810F, 0.9996242244F, 0.9996285306F,
- 0.9996327999F, 0.9996370326F, 0.9996412287F, 0.9996453886F,
- 0.9996495125F, 0.9996536004F, 0.9996576527F, 0.9996616696F,
- 0.9996656512F, 0.9996695977F, 0.9996735094F, 0.9996773865F,
- 0.9996812291F, 0.9996850374F, 0.9996888118F, 0.9996925523F,
- 0.9996962591F, 0.9996999325F, 0.9997035727F, 0.9997071798F,
- 0.9997107541F, 0.9997142957F, 0.9997178049F, 0.9997212818F,
- 0.9997247266F, 0.9997281396F, 0.9997315209F, 0.9997348708F,
- 0.9997381893F, 0.9997414767F, 0.9997447333F, 0.9997479591F,
- 0.9997511544F, 0.9997543194F, 0.9997574542F, 0.9997605591F,
- 0.9997636342F, 0.9997666797F, 0.9997696958F, 0.9997726828F,
- 0.9997756407F, 0.9997785698F, 0.9997814703F, 0.9997843423F,
- 0.9997871860F, 0.9997900016F, 0.9997927894F, 0.9997955494F,
- 0.9997982818F, 0.9998009869F, 0.9998036648F, 0.9998063157F,
- 0.9998089398F, 0.9998115373F, 0.9998141082F, 0.9998166529F,
- 0.9998191715F, 0.9998216642F, 0.9998241311F, 0.9998265724F,
- 0.9998289884F, 0.9998313790F, 0.9998337447F, 0.9998360854F,
- 0.9998384015F, 0.9998406930F, 0.9998429602F, 0.9998452031F,
- 0.9998474221F, 0.9998496171F, 0.9998517885F, 0.9998539364F,
- 0.9998560610F, 0.9998581624F, 0.9998602407F, 0.9998622962F,
- 0.9998643291F, 0.9998663394F, 0.9998683274F, 0.9998702932F,
- 0.9998722370F, 0.9998741589F, 0.9998760591F, 0.9998779378F,
- 0.9998797952F, 0.9998816313F, 0.9998834464F, 0.9998852406F,
- 0.9998870141F, 0.9998887670F, 0.9998904995F, 0.9998922117F,
- 0.9998939039F, 0.9998955761F, 0.9998972285F, 0.9998988613F,
- 0.9999004746F, 0.9999020686F, 0.9999036434F, 0.9999051992F,
- 0.9999067362F, 0.9999082544F, 0.9999097541F, 0.9999112354F,
- 0.9999126984F, 0.9999141433F, 0.9999155703F, 0.9999169794F,
- 0.9999183709F, 0.9999197449F, 0.9999211014F, 0.9999224408F,
- 0.9999237631F, 0.9999250684F, 0.9999263570F, 0.9999276289F,
- 0.9999288843F, 0.9999301233F, 0.9999313461F, 0.9999325529F,
- 0.9999337437F, 0.9999349187F, 0.9999360780F, 0.9999372218F,
- 0.9999383503F, 0.9999394635F, 0.9999405616F, 0.9999416447F,
- 0.9999427129F, 0.9999437665F, 0.9999448055F, 0.9999458301F,
- 0.9999468404F, 0.9999478365F, 0.9999488185F, 0.9999497867F,
- 0.9999507411F, 0.9999516819F, 0.9999526091F, 0.9999535230F,
- 0.9999544236F, 0.9999553111F, 0.9999561856F, 0.9999570472F,
- 0.9999578960F, 0.9999587323F, 0.9999595560F, 0.9999603674F,
- 0.9999611666F, 0.9999619536F, 0.9999627286F, 0.9999634917F,
- 0.9999642431F, 0.9999649828F, 0.9999657110F, 0.9999664278F,
- 0.9999671334F, 0.9999678278F, 0.9999685111F, 0.9999691835F,
- 0.9999698451F, 0.9999704960F, 0.9999711364F, 0.9999717662F,
- 0.9999723858F, 0.9999729950F, 0.9999735942F, 0.9999741834F,
- 0.9999747626F, 0.9999753321F, 0.9999758919F, 0.9999764421F,
- 0.9999769828F, 0.9999775143F, 0.9999780364F, 0.9999785495F,
- 0.9999790535F, 0.9999795485F, 0.9999800348F, 0.9999805124F,
- 0.9999809813F, 0.9999814417F, 0.9999818938F, 0.9999823375F,
- 0.9999827731F, 0.9999832005F, 0.9999836200F, 0.9999840316F,
- 0.9999844353F, 0.9999848314F, 0.9999852199F, 0.9999856008F,
- 0.9999859744F, 0.9999863407F, 0.9999866997F, 0.9999870516F,
- 0.9999873965F, 0.9999877345F, 0.9999880656F, 0.9999883900F,
- 0.9999887078F, 0.9999890190F, 0.9999893237F, 0.9999896220F,
- 0.9999899140F, 0.9999901999F, 0.9999904796F, 0.9999907533F,
- 0.9999910211F, 0.9999912830F, 0.9999915391F, 0.9999917896F,
- 0.9999920345F, 0.9999922738F, 0.9999925077F, 0.9999927363F,
- 0.9999929596F, 0.9999931777F, 0.9999933907F, 0.9999935987F,
- 0.9999938018F, 0.9999940000F, 0.9999941934F, 0.9999943820F,
- 0.9999945661F, 0.9999947456F, 0.9999949206F, 0.9999950912F,
- 0.9999952575F, 0.9999954195F, 0.9999955773F, 0.9999957311F,
- 0.9999958807F, 0.9999960265F, 0.9999961683F, 0.9999963063F,
- 0.9999964405F, 0.9999965710F, 0.9999966979F, 0.9999968213F,
- 0.9999969412F, 0.9999970576F, 0.9999971707F, 0.9999972805F,
- 0.9999973871F, 0.9999974905F, 0.9999975909F, 0.9999976881F,
- 0.9999977824F, 0.9999978738F, 0.9999979624F, 0.9999980481F,
- 0.9999981311F, 0.9999982115F, 0.9999982892F, 0.9999983644F,
- 0.9999984370F, 0.9999985072F, 0.9999985750F, 0.9999986405F,
- 0.9999987037F, 0.9999987647F, 0.9999988235F, 0.9999988802F,
- 0.9999989348F, 0.9999989873F, 0.9999990379F, 0.9999990866F,
- 0.9999991334F, 0.9999991784F, 0.9999992217F, 0.9999992632F,
- 0.9999993030F, 0.9999993411F, 0.9999993777F, 0.9999994128F,
- 0.9999994463F, 0.9999994784F, 0.9999995091F, 0.9999995384F,
- 0.9999995663F, 0.9999995930F, 0.9999996184F, 0.9999996426F,
- 0.9999996657F, 0.9999996876F, 0.9999997084F, 0.9999997282F,
- 0.9999997469F, 0.9999997647F, 0.9999997815F, 0.9999997973F,
- 0.9999998123F, 0.9999998265F, 0.9999998398F, 0.9999998524F,
- 0.9999998642F, 0.9999998753F, 0.9999998857F, 0.9999998954F,
- 0.9999999045F, 0.9999999130F, 0.9999999209F, 0.9999999282F,
- 0.9999999351F, 0.9999999414F, 0.9999999472F, 0.9999999526F,
- 0.9999999576F, 0.9999999622F, 0.9999999664F, 0.9999999702F,
- 0.9999999737F, 0.9999999769F, 0.9999999798F, 0.9999999824F,
- 0.9999999847F, 0.9999999868F, 0.9999999887F, 0.9999999904F,
- 0.9999999919F, 0.9999999932F, 0.9999999943F, 0.9999999953F,
- 0.9999999961F, 0.9999999969F, 0.9999999975F, 0.9999999980F,
- 0.9999999985F, 0.9999999988F, 0.9999999991F, 0.9999999993F,
- 0.9999999995F, 0.9999999997F, 0.9999999998F, 0.9999999999F,
- 0.9999999999F, 1.0000000000F, 1.0000000000F, 1.0000000000F,
- 1.0000000000F, 1.0000000000F, 1.0000000000F, 1.0000000000F,
-};
-
-static const float *const vwin[8] = {
- vwin64,
- vwin128,
- vwin256,
- vwin512,
- vwin1024,
- vwin2048,
- vwin4096,
- vwin8192,
-};
-
-const float *_vorbis_window_get(int n){
- return vwin[n];
-}
-
-void _vorbis_apply_window(float *d,int *winno,long *blocksizes,
- int lW,int W,int nW){
- lW=(W?lW:0);
- nW=(W?nW:0);
-
- {
- const float *windowLW=vwin[winno[lW]];
- const float *windowNW=vwin[winno[nW]];
-
- long n=blocksizes[W];
- long ln=blocksizes[lW];
- long rn=blocksizes[nW];
-
- long leftbegin=n/4-ln/4;
- long leftend=leftbegin+ln/2;
-
- long rightbegin=n/2+n/4-rn/4;
- long rightend=rightbegin+rn/2;
-
- int i,p;
-
- for(i=0;i<leftbegin;i++)
- d[i]=0.f;
-
- for(p=0;i<leftend;i++,p++)
- d[i]*=windowLW[p];
-
- for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--)
- d[i]*=windowNW[p];
-
- for(;i<n;i++)
- d[i]=0.f;
- }
-}
diff --git a/drivers/vorbis/window.h b/drivers/vorbis/window.h
deleted file mode 100644
index 51f97599f5..0000000000
--- a/drivers/vorbis/window.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/********************************************************************
- * *
- * 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-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
- * *
- ********************************************************************
-
- function: window functions
- last mod: $Id: window.h 19028 2013-12-02 23:23:39Z tterribe $
-
- ********************************************************************/
-
-#ifndef _V_WINDOW_
-#define _V_WINDOW_
-
-extern const float *_vorbis_window_get(int n);
-extern void _vorbis_apply_window(float *d,int *winno,long *blocksizes,
- int lW,int W,int nW);
-
-
-#endif