summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--Android.mk1
-rwxr-xr-xamadec/Android.mk282
-rw-r--r--amadec/acodec_lib_50/libstagefright_soft_dcvdec.so80
-rw-r--r--amadec/acodec_lib_50/libstagefright_soft_dtshd.so85
-rw-r--r--amadec/acodec_lib_50/libstagefright_soft_truehddec.so41
-rw-r--r--amadec/acodec_lib_android_n/libstagefright_soft_dcvdec.so109
-rw-r--r--amadec/acodec_lib_android_n/libstagefright_soft_dtshd.so272
-rw-r--r--amadec/acodec_lib_android_n/libstagefright_soft_truehddec.so87
-rwxr-xr-xamadec/acodec_lib_mx/libstagefright_soft_ddpdec.so113
-rwxr-xr-xamadec/acodec_lib_mx/libstagefright_soft_dtshd.so121
-rw-r--r--amadec/adec-armdec-mgt.h57
-rw-r--r--amadec/adec-external-ctrl.c899
-rw-r--r--amadec/adec-ffmpeg-mgt.c1550
-rw-r--r--amadec/adec-internal-mgt.c772
-rw-r--r--amadec/adec-message.c156
-rw-r--r--amadec/adec-message.h61
-rwxr-xr-xamadec/adec-pts-mgt.c1107
-rw-r--r--amadec/adec-pts-mgt.h82
-rw-r--r--amadec/adec-wfd-out.cpp361
-rw-r--r--amadec/adec-wfd.c811
-rw-r--r--amadec/adec_omx_brige.c284
-rw-r--r--amadec/adec_omx_brige.h56
-rw-r--r--amadec/adec_read.c200
-rw-r--r--amadec/adec_reg.h76
-rw-r--r--amadec/adec_write.c189
-rw-r--r--amadec/adec_write.h42
-rw-r--r--amadec/audio-dec.h314
-rw-r--r--amadec/audio_out/alsa-out.c1082
-rw-r--r--amadec/audio_out/aml_resample.c708
-rw-r--r--amadec/audio_out/aml_resample.h86
-rwxr-xr-xamadec/audio_out/android-out.cpp1640
-rw-r--r--amadec/audiodsp_update_format.c188
-rw-r--r--amadec/dsp/audiodsp-ctl.c471
-rw-r--r--amadec/dts_enc.c209
-rw-r--r--amadec/dts_enc.h11
-rw-r--r--amadec/dts_transenc_api.c143
-rw-r--r--amadec/dts_transenc_api.h19
-rw-r--r--amadec/feeder.c231
-rw-r--r--amadec/feeder.h26
-rw-r--r--amadec/include/adec-external-ctrl.h63
-rwxr-xr-xamadec/include/adec-macros.h41
-rw-r--r--amadec/include/adec-types.h53
-rwxr-xr-xamadec/include/alsa-out.h26
-rw-r--r--amadec/include/audio-out.h41
-rw-r--r--amadec/include/audiodsp.h142
-rw-r--r--amadec/include/audiodsp_update_format.h25
-rw-r--r--amadec/include/log-print.h26
-rwxr-xr-xamadec/omx_audio/ALAC_mediasource.cpp205
-rw-r--r--amadec/omx_audio/ALAC_mediasource.h62
-rwxr-xr-xamadec/omx_audio/ASF_mediasource.cpp184
-rw-r--r--amadec/omx_audio/ASF_mediasource.h127
-rwxr-xr-xamadec/omx_audio/Android.mk34
-rwxr-xr-xamadec/omx_audio/DDP_mediasource.cpp528
-rw-r--r--amadec/omx_audio/DDP_mediasource.h141
-rw-r--r--amadec/omx_audio/DTSHD_mediasource.cpp316
-rw-r--r--amadec/omx_audio/DTSHD_mediasource.h74
-rwxr-xr-xamadec/omx_audio/MP3_mediasource.cpp579
-rw-r--r--amadec/omx_audio/MP3_mediasource.h80
-rw-r--r--amadec/omx_audio/THD_mediasource.cpp229
-rw-r--r--amadec/omx_audio/THD_mediasource.h74
-rwxr-xr-xamadec/omx_audio/Vorbis_mediasource.cpp245
-rw-r--r--amadec/omx_audio/Vorbis_mediasource.h58
-rw-r--r--amadec/omx_audio/adec_omx.cpp421
-rw-r--r--amadec/omx_audio/adec_omx.h71
-rwxr-xr-xamadec/omx_audio/audio_mediasource.cpp37
-rw-r--r--amadec/omx_audio/audio_mediasource.h46
-rw-r--r--amadec/omx_audio/audio_medissource.h137
-rw-r--r--amadec/pcmenc_api.c147
-rw-r--r--amadec/pcmenc_api.h25
-rw-r--r--amadec/spdif_api.c306
-rw-r--r--amadec/spdif_api.h26
-rwxr-xr-xaudio_codec/Android.mk1
-rw-r--r--audio_codec/config.mk10
-rwxr-xr-xaudio_codec/libadpcm/Android.mk12
-rw-r--r--audio_codec/libadpcm/adpcm.h346
-rw-r--r--audio_codec/libadpcm/adpcm_decode.c841
-rwxr-xr-xaudio_codec/libamr/Android.mk25
-rwxr-xr-xaudio_codec/libamr/Makefile5
-rw-r--r--audio_codec/libamr/amr_decode.c186
-rw-r--r--audio_codec/libamr/amr_decode.h8
-rwxr-xr-xaudio_codec/libamr/dec.h18
-rw-r--r--audio_codec/libamr/dec_acelp.c620
-rwxr-xr-xaudio_codec/libamr/dec_acelp.h17
-rw-r--r--audio_codec/libamr/dec_dtx.c683
-rw-r--r--audio_codec/libamr/dec_dtx.h49
-rw-r--r--audio_codec/libamr/dec_gain.c853
-rw-r--r--audio_codec/libamr/dec_gain.h28
-rw-r--r--audio_codec/libamr/dec_if.c834
-rwxr-xr-xaudio_codec/libamr/dec_if.h23
-rw-r--r--audio_codec/libamr/dec_lpc.c789
-rw-r--r--audio_codec/libamr/dec_lpc.h25
-rw-r--r--audio_codec/libamr/dec_main.c842
-rw-r--r--audio_codec/libamr/dec_main.h57
-rw-r--r--audio_codec/libamr/dec_rom.c2114
-rw-r--r--audio_codec/libamr/dec_util.c1304
-rw-r--r--audio_codec/libamr/dec_util.h33
-rw-r--r--audio_codec/libamr/if_rom.c1030
-rwxr-xr-xaudio_codec/libamr/if_rom.h70
-rw-r--r--audio_codec/libamr/interf_dec.c906
-rw-r--r--audio_codec/libamr/interf_dec.h56
-rw-r--r--audio_codec/libamr/interf_rom.h1788
-rw-r--r--audio_codec/libamr/rom_dec.h13274
-rw-r--r--audio_codec/libamr/sp_dec.c6078
-rw-r--r--audio_codec/libamr/sp_dec.h83
-rwxr-xr-xaudio_codec/libamr/typedef.h17
-rwxr-xr-xaudio_codec/libape/Android.mk28
-rw-r--r--audio_codec/libape/Ape_decoder.h216
-rw-r--r--audio_codec/libape/amlogic_r30813_audio_ape_lib.c1
-rw-r--r--audio_codec/libape/apedec.c1120
-rw-r--r--audio_codec/libcook/Android.mk28
-rw-r--r--audio_codec/libcook/aac_bitstream.h133
-rw-r--r--audio_codec/libcook/aac_decode.h148
-rw-r--r--audio_codec/libcook/aac_reorder.h53
-rw-r--r--audio_codec/libcook/assembly.h119
-rw-r--r--audio_codec/libcook/challenge.h132
-rw-r--r--audio_codec/libcook/codec_defines.h93
-rw-r--r--audio_codec/libcook/coder.h287
-rw-r--r--audio_codec/libcook/cook_codec.h30
-rw-r--r--audio_codec/libcook/cook_decode.c624
-rw-r--r--audio_codec/libcook/cook_decode.h35
-rw-r--r--audio_codec/libcook/ga_config.h86
-rw-r--r--audio_codec/libcook/gecko2codec.c833
-rw-r--r--audio_codec/libcook/gecko2codec.h60
-rw-r--r--audio_codec/libcook/helix_config.h92
-rw-r--r--audio_codec/libcook/helix_mime_types.h56
-rw-r--r--audio_codec/libcook/helix_result.h107
-rw-r--r--audio_codec/libcook/helix_types.h305
-rw-r--r--audio_codec/libcook/helix_utils.h106
-rw-r--r--audio_codec/libcook/md5.h113
-rw-r--r--audio_codec/libcook/memory_utils.c100
-rw-r--r--audio_codec/libcook/memory_utils.h58
-rw-r--r--audio_codec/libcook/pack_utils.c306
-rw-r--r--audio_codec/libcook/pack_utils.h93
-rw-r--r--audio_codec/libcook/packet_defines.h48
-rw-r--r--audio_codec/libcook/ra8lbr_decode.c378
-rw-r--r--audio_codec/libcook/ra8lbr_decode.h161
-rw-r--r--audio_codec/libcook/ra_backend.h94
-rw-r--r--audio_codec/libcook/ra_bitpack.c197
-rw-r--r--audio_codec/libcook/ra_buffers.c127
-rw-r--r--audio_codec/libcook/ra_category.c298
-rw-r--r--audio_codec/libcook/ra_couple.c224
-rw-r--r--audio_codec/libcook/ra_decode.c321
-rw-r--r--audio_codec/libcook/ra_decode.h183
-rw-r--r--audio_codec/libcook/ra_depack.c230
-rw-r--r--audio_codec/libcook/ra_depack.h177
-rw-r--r--audio_codec/libcook/ra_depack_internal.c1710
-rw-r--r--audio_codec/libcook/ra_depack_internal.h232
-rw-r--r--audio_codec/libcook/ra_envelope.c123
-rw-r--r--audio_codec/libcook/ra_fft.c368
-rw-r--r--audio_codec/libcook/ra_format_info.h60
-rw-r--r--audio_codec/libcook/ra_gainctrl.c584
-rw-r--r--audio_codec/libcook/ra_huffman.c86
-rw-r--r--audio_codec/libcook/ra_hufftabs.c244
-rw-r--r--audio_codec/libcook/ra_mlt.c357
-rw-r--r--audio_codec/libcook/ra_sqvh.c431
-rw-r--r--audio_codec/libcook/ra_trigtabs.c932
-rw-r--r--audio_codec/libcook/rasl.c376
-rw-r--r--audio_codec/libcook/rasl.h71
-rw-r--r--audio_codec/libcook/rdtpck.h153
-rw-r--r--audio_codec/libcook/rm_error.h54
-rw-r--r--audio_codec/libcook/rm_error_default.c58
-rw-r--r--audio_codec/libcook/rm_error_default.h53
-rw-r--r--audio_codec/libcook/rm_io_default.c101
-rw-r--r--audio_codec/libcook/rm_io_default.h49
-rw-r--r--audio_codec/libcook/rm_memory.h54
-rw-r--r--audio_codec/libcook/rm_memory_default.c54
-rw-r--r--audio_codec/libcook/rm_memory_default.h46
-rw-r--r--audio_codec/libcook/rm_packet.c117
-rw-r--r--audio_codec/libcook/rm_packet.h80
-rw-r--r--audio_codec/libcook/rm_parse.h302
-rw-r--r--audio_codec/libcook/rm_parser.c649
-rw-r--r--audio_codec/libcook/rm_parser_internal.c3342
-rw-r--r--audio_codec/libcook/rm_parser_internal.h420
-rw-r--r--audio_codec/libcook/rm_property.c105
-rw-r--r--audio_codec/libcook/rm_property.h107
-rw-r--r--audio_codec/libcook/rm_stream.c356
-rw-r--r--audio_codec/libcook/rm_stream.h115
-rw-r--r--audio_codec/libcook/rm_stream_internal.h77
-rw-r--r--audio_codec/libcook/rv20backend.h69
-rw-r--r--audio_codec/libcook/rv30backend.h68
-rw-r--r--audio_codec/libcook/rv_backend.h84
-rw-r--r--audio_codec/libcook/rv_backend_types.h198
-rw-r--r--audio_codec/libcook/rv_decode.h208
-rw-r--r--audio_codec/libcook/rv_decode_message.h492
-rw-r--r--audio_codec/libcook/rv_depack.c271
-rw-r--r--audio_codec/libcook/rv_depack.h162
-rw-r--r--audio_codec/libcook/rv_depack_internal.c1071
-rw-r--r--audio_codec/libcook/rv_depack_internal.h171
-rw-r--r--audio_codec/libcook/rv_format_info.h91
-rw-r--r--audio_codec/libcook/statname.h118
-rw-r--r--audio_codec/libcook/stream_hdr_structs.h66
-rw-r--r--audio_codec/libcook/stream_hdr_utils.c136
-rw-r--r--audio_codec/libcook/stream_hdr_utils.h77
-rw-r--r--audio_codec/libcook/string_utils.c87
-rw-r--r--audio_codec/libcook/string_utils.h62
-rw-r--r--audio_codec/libcook/tngpkt.h400
-rwxr-xr-xaudio_codec/libfaad/Android.mk101
-rwxr-xr-xaudio_codec/libfaad/Makefile130
-rw-r--r--audio_codec/libfaad/analysis.h52
-rwxr-xr-xaudio_codec/libfaad/audio.d3
-rw-r--r--audio_codec/libfaad/bits.c261
-rwxr-xr-xaudio_codec/libfaad/bits.d18
-rw-r--r--audio_codec/libfaad/bits.h446
-rw-r--r--audio_codec/libfaad/cfft.c988
-rw-r--r--audio_codec/libfaad/cfft.h55
-rw-r--r--audio_codec/libfaad/cfft_tab.h1816
-rw-r--r--audio_codec/libfaad/codebook/hcb.h140
-rw-r--r--audio_codec/libfaad/codebook/hcb_1.h186
-rw-r--r--audio_codec/libfaad/codebook/hcb_10.h312
-rw-r--r--audio_codec/libfaad/codebook/hcb_11.h415
-rw-r--r--audio_codec/libfaad/codebook/hcb_2.h185
-rw-r--r--audio_codec/libfaad/codebook/hcb_3.h196
-rw-r--r--audio_codec/libfaad/codebook/hcb_4.h199
-rw-r--r--audio_codec/libfaad/codebook/hcb_5.h196
-rw-r--r--audio_codec/libfaad/codebook/hcb_6.h182
-rw-r--r--audio_codec/libfaad/codebook/hcb_7.h162
-rw-r--r--audio_codec/libfaad/codebook/hcb_8.h173
-rw-r--r--audio_codec/libfaad/codebook/hcb_9.h372
-rw-r--r--audio_codec/libfaad/codebook/hcb_sf.h276
-rw-r--r--audio_codec/libfaad/common.c558
-rw-r--r--audio_codec/libfaad/common.h453
-rw-r--r--audio_codec/libfaad/decoder.c2266
-rw-r--r--audio_codec/libfaad/drc.c173
-rw-r--r--audio_codec/libfaad/drc.h49
-rw-r--r--audio_codec/libfaad/drm_dec.c912
-rw-r--r--audio_codec/libfaad/drm_dec.h99
-rw-r--r--audio_codec/libfaad/error.c72
-rw-r--r--audio_codec/libfaad/error.h44
-rw-r--r--audio_codec/libfaad/filtbank.c408
-rw-r--r--audio_codec/libfaad/filtbank.h61
-rw-r--r--audio_codec/libfaad/fixed.h287
-rw-r--r--audio_codec/libfaad/hcr.c422
-rw-r--r--audio_codec/libfaad/helixaac/aaccommon.h210
-rw-r--r--audio_codec/libfaad/helixaac/aacdec.c508
-rw-r--r--audio_codec/libfaad/helixaac/aacdec.h206
-rw-r--r--audio_codec/libfaad/helixaac/aactabs.c157
-rw-r--r--audio_codec/libfaad/helixaac/assembly.h631
-rw-r--r--audio_codec/libfaad/helixaac/assembly_mw.h743
-rw-r--r--audio_codec/libfaad/helixaac/bitstream.c261
-rw-r--r--audio_codec/libfaad/helixaac/bitstream.h74
-rw-r--r--audio_codec/libfaad/helixaac/buffers.c140
-rw-r--r--audio_codec/libfaad/helixaac/coder.h369
-rw-r--r--audio_codec/libfaad/helixaac/dct4.c337
-rw-r--r--audio_codec/libfaad/helixaac/decelmnt.c445
-rw-r--r--audio_codec/libfaad/helixaac/dequant.c379
-rw-r--r--audio_codec/libfaad/helixaac/fft.c391
-rw-r--r--audio_codec/libfaad/helixaac/filefmt.c539
-rw-r--r--audio_codec/libfaad/helixaac/huffman_helix.c450
-rw-r--r--audio_codec/libfaad/helixaac/hufftabs.c177
-rw-r--r--audio_codec/libfaad/helixaac/imdct.c596
-rw-r--r--audio_codec/libfaad/helixaac/noiseless.c513
-rw-r--r--audio_codec/libfaad/helixaac/pns_helix.c371
-rw-r--r--audio_codec/libfaad/helixaac/sbr.c433
-rw-r--r--audio_codec/libfaad/helixaac/sbr.h380
-rw-r--r--audio_codec/libfaad/helixaac/sbrfft.c368
-rw-r--r--audio_codec/libfaad/helixaac/sbrfreq.c673
-rw-r--r--audio_codec/libfaad/helixaac/sbrhfadj.c882
-rw-r--r--audio_codec/libfaad/helixaac/sbrhfgen.c655
-rw-r--r--audio_codec/libfaad/helixaac/sbrhuff.c494
-rw-r--r--audio_codec/libfaad/helixaac/sbrimdct.c447
-rw-r--r--audio_codec/libfaad/helixaac/sbrmath.c198
-rw-r--r--audio_codec/libfaad/helixaac/sbrqmf.c648
-rw-r--r--audio_codec/libfaad/helixaac/sbrside.c634
-rw-r--r--audio_codec/libfaad/helixaac/sbrtabs.c400
-rw-r--r--audio_codec/libfaad/helixaac/statname.h115
-rw-r--r--audio_codec/libfaad/helixaac/stproc.c251
-rw-r--r--audio_codec/libfaad/helixaac/tns_helix.c307
-rw-r--r--audio_codec/libfaad/helixaac/trigtabs.c1000
-rw-r--r--audio_codec/libfaad/helixaac/trigtabs_fltgen.c357
-rw-r--r--audio_codec/libfaad/huffman.c582
-rw-r--r--audio_codec/libfaad/huffman.h47
-rw-r--r--audio_codec/libfaad/ic_predict.c258
-rw-r--r--audio_codec/libfaad/ic_predict.h252
-rw-r--r--audio_codec/libfaad/iq_table.h16456
-rw-r--r--audio_codec/libfaad/is.c106
-rw-r--r--audio_codec/libfaad/is.h67
-rw-r--r--audio_codec/libfaad/kbd_win.h2294
-rw-r--r--audio_codec/libfaad/libaacdec.c544
-rw-r--r--audio_codec/libfaad/libaacdec.h64
-rwxr-xr-xaudio_codec/libfaad/libfaad2.def14
-rw-r--r--audio_codec/libfaad/lt_predict.c205
-rw-r--r--audio_codec/libfaad/lt_predict.h66
-rw-r--r--audio_codec/libfaad/mdct.c307
-rw-r--r--audio_codec/libfaad/mdct.h48
-rw-r--r--audio_codec/libfaad/mdct_tab.h3639
-rw-r--r--audio_codec/libfaad/mp4.c307
-rw-r--r--audio_codec/libfaad/mp4.h52
-rw-r--r--audio_codec/libfaad/ms.c71
-rw-r--r--audio_codec/libfaad/ms.h44
-rw-r--r--audio_codec/libfaad/neaacdec.h257
-rw-r--r--audio_codec/libfaad/output.c583
-rw-r--r--audio_codec/libfaad/output.h48
-rw-r--r--audio_codec/libfaad/pns.c273
-rw-r--r--audio_codec/libfaad/pns.h58
-rw-r--r--audio_codec/libfaad/ps_dec.c1905
-rw-r--r--audio_codec/libfaad/ps_dec.h151
-rw-r--r--audio_codec/libfaad/ps_syntax.c532
-rw-r--r--audio_codec/libfaad/ps_tables.h547
-rw-r--r--audio_codec/libfaad/pulse.c59
-rw-r--r--audio_codec/libfaad/pulse.h43
-rw-r--r--audio_codec/libfaad/rvlc.c524
-rw-r--r--audio_codec/libfaad/rvlc.h55
-rw-r--r--audio_codec/libfaad/sbr_dct.c2267
-rw-r--r--audio_codec/libfaad/sbr_dct.h52
-rw-r--r--audio_codec/libfaad/sbr_dec.c679
-rw-r--r--audio_codec/libfaad/sbr_dec.h253
-rw-r--r--audio_codec/libfaad/sbr_e_nf.c475
-rw-r--r--audio_codec/libfaad/sbr_e_nf.h50
-rw-r--r--audio_codec/libfaad/sbr_fbt.c737
-rw-r--r--audio_codec/libfaad/sbr_fbt.h55
-rw-r--r--audio_codec/libfaad/sbr_hfadj.c1644
-rw-r--r--audio_codec/libfaad/sbr_hfadj.h56
-rw-r--r--audio_codec/libfaad/sbr_hfgen.c647
-rw-r--r--audio_codec/libfaad/sbr_hfgen.h49
-rw-r--r--audio_codec/libfaad/sbr_huff.c344
-rw-r--r--audio_codec/libfaad/sbr_huff.h46
-rw-r--r--audio_codec/libfaad/sbr_noise.h564
-rw-r--r--audio_codec/libfaad/sbr_qmf.c614
-rw-r--r--audio_codec/libfaad/sbr_qmf.h55
-rw-r--r--audio_codec/libfaad/sbr_qmf_c.h368
-rw-r--r--audio_codec/libfaad/sbr_syntax.c893
-rw-r--r--audio_codec/libfaad/sbr_syntax.h68
-rw-r--r--audio_codec/libfaad/sbr_tf_grid.c247
-rw-r--r--audio_codec/libfaad/sbr_tf_grid.h47
-rw-r--r--audio_codec/libfaad/sine_win.h4296
-rw-r--r--audio_codec/libfaad/specrec.c1249
-rw-r--r--audio_codec/libfaad/specrec.h49
-rw-r--r--audio_codec/libfaad/ssr.c170
-rw-r--r--audio_codec/libfaad/ssr.h59
-rw-r--r--audio_codec/libfaad/ssr_fb.c191
-rw-r--r--audio_codec/libfaad/ssr_fb.h53
-rw-r--r--audio_codec/libfaad/ssr_ipqf.c171
-rw-r--r--audio_codec/libfaad/ssr_ipqf.h46
-rw-r--r--audio_codec/libfaad/ssr_win.h635
-rw-r--r--audio_codec/libfaad/structs.h513
-rw-r--r--audio_codec/libfaad/syntax.c2539
-rw-r--r--audio_codec/libfaad/syntax.h129
-rw-r--r--audio_codec/libfaad/tns.c304
-rw-r--r--audio_codec/libfaad/tns.h51
-rwxr-xr-xaudio_codec/libflac/Android.mk22
-rw-r--r--audio_codec/libflac/avcodec.h337
-rw-r--r--audio_codec/libflac/bswap.h94
-rw-r--r--audio_codec/libflac/codec.h36
-rw-r--r--audio_codec/libflac/codec_message.h109
-rw-r--r--audio_codec/libflac/common.h356
-rw-r--r--audio_codec/libflac/crc.c146
-rw-r--r--audio_codec/libflac/crc.h46
-rw-r--r--audio_codec/libflac/flac.c43
-rw-r--r--audio_codec/libflac/flac.h124
-rw-r--r--audio_codec/libflac/flac_decode.c943
-rw-r--r--audio_codec/libflac/flacdata.c38
-rw-r--r--audio_codec/libflac/flacdata.h29
-rw-r--r--audio_codec/libflac/get_bits.h564
-rw-r--r--audio_codec/libflac/golomb.h585
-rw-r--r--audio_codec/libflac/internal.h195
-rw-r--r--audio_codec/libflac/intreadwrite.h390
-rw-r--r--audio_codec/libflac/mathops.h78
-rw-r--r--audio_codec/libflac/types.h49
-rwxr-xr-xaudio_codec/liblpcm/Android.mk13
-rw-r--r--audio_codec/liblpcm/lpcm_decode.c437
-rwxr-xr-xaudio_codec/libmad/Android.mk13
-rwxr-xr-xaudio_codec/libmad/D.dat607
-rw-r--r--audio_codec/libmad/bit.c244
-rw-r--r--audio_codec/libmad/bit.h47
-rw-r--r--audio_codec/libmad/config.h133
-rw-r--r--audio_codec/libmad/decoder.c1102
-rw-r--r--audio_codec/libmad/decoder.h91
-rw-r--r--audio_codec/libmad/fixed.c85
-rw-r--r--audio_codec/libmad/fixed.h499
-rw-r--r--audio_codec/libmad/frame.c525
-rw-r--r--audio_codec/libmad/frame.h118
-rw-r--r--audio_codec/libmad/global.h58
-rw-r--r--audio_codec/libmad/huffman.c3109
-rw-r--r--audio_codec/libmad/huffman.h66
-rwxr-xr-xaudio_codec/libmad/imdct_l_arm.S1000
-rwxr-xr-xaudio_codec/libmad/imdct_s.dat62
-rw-r--r--audio_codec/libmad/layer12.c552
-rwxr-xr-xaudio_codec/libmad/layer12.h31
-rw-r--r--audio_codec/libmad/layer3.c2742
-rwxr-xr-xaudio_codec/libmad/layer3.h30
-rw-r--r--audio_codec/libmad/mad.h966
-rwxr-xr-xaudio_codec/libmad/qc_table.dat77
-rwxr-xr-xaudio_codec/libmad/rq_table.dat8747
-rwxr-xr-xaudio_codec/libmad/sf_table.dat106
-rw-r--r--audio_codec/libmad/stream.c185
-rw-r--r--audio_codec/libmad/stream.h111
-rw-r--r--audio_codec/libmad/synth.c921
-rw-r--r--audio_codec/libmad/synth.h69
-rw-r--r--audio_codec/libmad/timer.c493
-rw-r--r--audio_codec/libmad/timer.h100
-rw-r--r--audio_codec/libmad/version.c91
-rw-r--r--audio_codec/libmad/version.h47
-rwxr-xr-xaudio_codec/libpcm/Android.mk11
-rw-r--r--audio_codec/libpcm/intreadwrite.h390
-rw-r--r--audio_codec/libpcm/pcm_decode.c780
-rw-r--r--audio_codec/libraac/Android.mk51
-rw-r--r--audio_codec/libraac/aac_bitstream.c200
-rw-r--r--audio_codec/libraac/aac_bitstream.h133
-rw-r--r--audio_codec/libraac/aac_decode.h148
-rw-r--r--audio_codec/libraac/aac_decode_main.c396
-rw-r--r--audio_codec/libraac/aac_reorder.c85
-rw-r--r--audio_codec/libraac/aac_reorder.h53
-rw-r--r--audio_codec/libraac/aaccommon.h200
-rw-r--r--audio_codec/libraac/aacdec.c607
-rw-r--r--audio_codec/libraac/aacdec.h200
-rw-r--r--audio_codec/libraac/aactabs.c157
-rw-r--r--audio_codec/libraac/assembly.h147
-rw-r--r--audio_codec/libraac/bitstream.c451
-rw-r--r--audio_codec/libraac/bitstream.h76
-rw-r--r--audio_codec/libraac/buffers.c132
-rw-r--r--audio_codec/libraac/coder.h370
-rw-r--r--audio_codec/libraac/dct4.c339
-rw-r--r--audio_codec/libraac/decelmnt.c451
-rw-r--r--audio_codec/libraac/dequant.c382
-rw-r--r--audio_codec/libraac/fft.c393
-rw-r--r--audio_codec/libraac/filefmt.c531
-rw-r--r--audio_codec/libraac/ga_config.c209
-rw-r--r--audio_codec/libraac/ga_config.h86
-rw-r--r--audio_codec/libraac/huffman.c449
-rw-r--r--audio_codec/libraac/hufftabs.c177
-rw-r--r--audio_codec/libraac/imdct.c598
-rw-r--r--audio_codec/libraac/include/challenge.h132
-rw-r--r--audio_codec/libraac/include/codec_defines.h93
-rw-r--r--audio_codec/libraac/include/gecko2codec.h60
-rw-r--r--audio_codec/libraac/include/helix_config.h92
-rw-r--r--audio_codec/libraac/include/helix_mime_types.h56
-rw-r--r--audio_codec/libraac/include/helix_result.h107
-rw-r--r--audio_codec/libraac/include/helix_types.h305
-rw-r--r--audio_codec/libraac/include/helix_utils.h106
-rw-r--r--audio_codec/libraac/include/md5.h113
-rw-r--r--audio_codec/libraac/include/memory_utils.h58
-rw-r--r--audio_codec/libraac/include/pack_utils.h93
-rw-r--r--audio_codec/libraac/include/packet_defines.h48
-rw-r--r--audio_codec/libraac/include/ra8lbr_decode.h161
-rw-r--r--audio_codec/libraac/include/ra_backend.h94
-rw-r--r--audio_codec/libraac/include/ra_decode.h183
-rw-r--r--audio_codec/libraac/include/ra_depack.h177
-rw-r--r--audio_codec/libraac/include/ra_format_info.h60
-rw-r--r--audio_codec/libraac/include/rasl.h71
-rw-r--r--audio_codec/libraac/include/rdtpck.h153
-rw-r--r--audio_codec/libraac/include/rm_error.h54
-rw-r--r--audio_codec/libraac/include/rm_error_default.h53
-rw-r--r--audio_codec/libraac/include/rm_io_default.h49
-rw-r--r--audio_codec/libraac/include/rm_memory.h54
-rw-r--r--audio_codec/libraac/include/rm_memory_default.h46
-rw-r--r--audio_codec/libraac/include/rm_packet.h80
-rw-r--r--audio_codec/libraac/include/rm_parse.h302
-rw-r--r--audio_codec/libraac/include/rm_property.h107
-rw-r--r--audio_codec/libraac/include/rm_stream.h115
-rw-r--r--audio_codec/libraac/include/rm_stream_internal.h77
-rw-r--r--audio_codec/libraac/include/rv20backend.h69
-rw-r--r--audio_codec/libraac/include/rv30backend.h68
-rw-r--r--audio_codec/libraac/include/rv_backend.h84
-rw-r--r--audio_codec/libraac/include/rv_backend_types.h198
-rw-r--r--audio_codec/libraac/include/rv_decode.h208
-rw-r--r--audio_codec/libraac/include/rv_decode_message.h492
-rw-r--r--audio_codec/libraac/include/rv_depack.h162
-rw-r--r--audio_codec/libraac/include/rv_format_info.h91
-rw-r--r--audio_codec/libraac/include/statname.h118
-rw-r--r--audio_codec/libraac/include/stream_hdr_structs.h66
-rw-r--r--audio_codec/libraac/include/stream_hdr_utils.h77
-rw-r--r--audio_codec/libraac/include/string_utils.h62
-rw-r--r--audio_codec/libraac/include/tngpkt.h400
-rw-r--r--audio_codec/libraac/memory_utils.c100
-rw-r--r--audio_codec/libraac/noiseless.c503
-rw-r--r--audio_codec/libraac/pack_utils.c306
-rw-r--r--audio_codec/libraac/pns.c369
-rw-r--r--audio_codec/libraac/ra_depack.c230
-rw-r--r--audio_codec/libraac/ra_depack_internal.c1713
-rw-r--r--audio_codec/libraac/ra_depack_internal.h232
-rw-r--r--audio_codec/libraac/raac_decode.c854
-rw-r--r--audio_codec/libraac/raac_decode.h37
-rw-r--r--audio_codec/libraac/rm_error_default.c60
-rw-r--r--audio_codec/libraac/rm_io_default.c101
-rw-r--r--audio_codec/libraac/rm_memory_default.c54
-rw-r--r--audio_codec/libraac/rm_packet.c117
-rw-r--r--audio_codec/libraac/rm_parser.c649
-rw-r--r--audio_codec/libraac/rm_parser_internal.c3342
-rw-r--r--audio_codec/libraac/rm_parser_internal.h420
-rw-r--r--audio_codec/libraac/rm_property.c105
-rw-r--r--audio_codec/libraac/rm_stream.c356
-rw-r--r--audio_codec/libraac/rv_depack.c271
-rw-r--r--audio_codec/libraac/rv_depack_internal.c1071
-rw-r--r--audio_codec/libraac/rv_depack_internal.h171
-rw-r--r--audio_codec/libraac/sbr.c431
-rw-r--r--audio_codec/libraac/sbr.h381
-rwxr-xr-xaudio_codec/libraac/sbrcov.s164
-rw-r--r--audio_codec/libraac/sbrfft.c368
-rw-r--r--audio_codec/libraac/sbrfreq.c667
-rw-r--r--audio_codec/libraac/sbrhfadj.c877
-rw-r--r--audio_codec/libraac/sbrhfgen.c646
-rw-r--r--audio_codec/libraac/sbrhuff.c492
-rw-r--r--audio_codec/libraac/sbrimdct.c447
-rw-r--r--audio_codec/libraac/sbrmath.c198
-rw-r--r--audio_codec/libraac/sbrqmf.c643
-rwxr-xr-xaudio_codec/libraac/sbrqmfak.s182
-rwxr-xr-xaudio_codec/libraac/sbrqmfsk.s130
-rw-r--r--audio_codec/libraac/sbrside.c615
-rw-r--r--audio_codec/libraac/sbrtabs.c400
-rw-r--r--audio_codec/libraac/statname.h115
-rw-r--r--audio_codec/libraac/stproc.c252
-rw-r--r--audio_codec/libraac/stream_hdr_utils.c136
-rw-r--r--audio_codec/libraac/string_utils.c87
-rw-r--r--audio_codec/libraac/tns.c307
-rw-r--r--audio_codec/libraac/trigtabs.c1000
-rw-r--r--audio_codec/libraac/trigtabs_fltgen.c357
-rwxr-xr-xaudio_codec/wfd_aac_decoder/Android.mk23
-rw-r--r--audio_codec/wfd_aac_decoder/aaccommon.h210
-rw-r--r--audio_codec/wfd_aac_decoder/aacdec.c508
-rw-r--r--audio_codec/wfd_aac_decoder/aacdec.h206
-rw-r--r--audio_codec/wfd_aac_decoder/aactabs.c157
-rw-r--r--audio_codec/wfd_aac_decoder/assembly.h640
-rw-r--r--audio_codec/wfd_aac_decoder/assembly_mw.h743
-rw-r--r--audio_codec/wfd_aac_decoder/bitstream.c261
-rw-r--r--audio_codec/wfd_aac_decoder/bitstream.h74
-rw-r--r--audio_codec/wfd_aac_decoder/buffers.c140
-rw-r--r--audio_codec/wfd_aac_decoder/coder.h369
-rw-r--r--audio_codec/wfd_aac_decoder/dct4.c337
-rw-r--r--audio_codec/wfd_aac_decoder/decelmnt.c445
-rw-r--r--audio_codec/wfd_aac_decoder/dequant.c379
-rw-r--r--audio_codec/wfd_aac_decoder/fft.c391
-rw-r--r--audio_codec/wfd_aac_decoder/filefmt.c539
-rw-r--r--audio_codec/wfd_aac_decoder/helix_aac_decode.c548
-rw-r--r--audio_codec/wfd_aac_decoder/huffman.c450
-rw-r--r--audio_codec/wfd_aac_decoder/hufftabs.c177
-rw-r--r--audio_codec/wfd_aac_decoder/imdct.c596
-rw-r--r--audio_codec/wfd_aac_decoder/noiseless.c513
-rw-r--r--audio_codec/wfd_aac_decoder/pns.c371
-rw-r--r--audio_codec/wfd_aac_decoder/sbr.c434
-rw-r--r--audio_codec/wfd_aac_decoder/sbr.h380
-rw-r--r--audio_codec/wfd_aac_decoder/sbrfft.c368
-rw-r--r--audio_codec/wfd_aac_decoder/sbrfreq.c673
-rw-r--r--audio_codec/wfd_aac_decoder/sbrhfadj.c882
-rw-r--r--audio_codec/wfd_aac_decoder/sbrhfgen.c655
-rw-r--r--audio_codec/wfd_aac_decoder/sbrhuff.c494
-rw-r--r--audio_codec/wfd_aac_decoder/sbrimdct.c447
-rw-r--r--audio_codec/wfd_aac_decoder/sbrmath.c198
-rw-r--r--audio_codec/wfd_aac_decoder/sbrqmf.c648
-rw-r--r--audio_codec/wfd_aac_decoder/sbrside.c634
-rw-r--r--audio_codec/wfd_aac_decoder/sbrtabs.c400
-rw-r--r--audio_codec/wfd_aac_decoder/statname.h115
-rw-r--r--audio_codec/wfd_aac_decoder/stproc.c251
-rw-r--r--audio_codec/wfd_aac_decoder/tns.c307
-rw-r--r--audio_codec/wfd_aac_decoder/trigtabs.c1000
-rw-r--r--audio_codec/wfd_aac_decoder/trigtabs_fltgen.c357
545 files changed, 230976 insertions, 0 deletions
diff --git a/audio_codec/libcook/gecko2codec.c b/audio_codec/libcook/gecko2codec.c
new file mode 100644
index 0000000..df5d077
--- a/dev/null
+++ b/audio_codec/libcook/gecko2codec.c
@@ -0,0 +1,833 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Source last modified: $Id: gecko2codec.c,v 1.8 2005/04/27 19:20:50 hubbe Exp $
+ *
+ * REALNETWORKS CONFIDENTIAL--NOT FOR DISTRIBUTION IN SOURCE CODE FORM
+ * Portions Copyright (c) 1995-2002 RealNetworks, Inc.
+ * All Rights Reserved.
+ *
+ * The contents of this file, and the files included with this file,
+ * are subject to the current version of the Real Format Source Code
+ * Porting and Optimization License, available at
+ * https://helixcommunity.org/2005/license/realformatsource (unless
+ * RealNetworks otherwise expressly agrees in writing that you are
+ * subject to a different license). You may also obtain the license
+ * terms directly from RealNetworks. You may not use this file except
+ * in compliance with the Real Format Source Code Porting and
+ * Optimization License. There are no redistribution rights for the
+ * source code of this file. Please see the Real Format Source Code
+ * Porting and Optimization License for the rights, obligations and
+ * limitations governing use of the contents of the file.
+ *
+ * RealNetworks is the developer of the Original Code and owns the
+ * copyrights in the portions it created.
+ *
+ * This file, and the files included with this file, is distributed and
+ * made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL
+ * SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT
+ * OR NON-INFRINGEMENT.
+ *
+ * Technology Compatibility Kit Test Suite(s) Location:
+ * https://rarvcode-tck.helixcommunity.org
+ *
+ * Contributor(s):
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/**************************************************************************************
+ * Fixed-point RealAudio 8 decoder
+ * Jon Recker (jrecker@real.com), Ken Cooke (kenc@real.com)
+ * October 2003
+ *
+ * gecko2codec.c - public C API for Gecko2 decoder
+ **************************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "coder.h"
+//#include "includes.h"
+//#include <amsysdef.h>
+//#include <Drivers/include/mpeg_reg.h>
+#include "cook_decode.h"
+
+#ifndef USE_C_DECODER
+//#define ENABLE_DUMP
+//#define DBG_AMRISC
+#endif
+//#include <core/dsp.h>
+
+#ifdef ENABLE_DUMP
+#define DUMP_GAIN 0x0001
+#define DUMP_CPL 0x0002
+#define DUMP_ENV 0x0004
+#define DUMP_HUFF 0x0008
+#define DUMP_QUANT 0x0010
+#define DUMP_DECODE_INFO 0x0020
+unsigned int DumpMask = 0;
+extern const int cplband[MAXREGNS];
+#endif
+
+FILE *pDumpFile = NULL;
+unsigned int FrameCount = 0;
+
+#ifdef DBG_AMRISC
+
+// copy from ra.h
+
+#define MAXNCHAN 2
+#define NPARTS 8
+#define MAXNATS 8
+#define MAXBUF 4
+
+/*********************************** variables in lmem16 ***************************/
+#define L_DECODEINFO 0
+#define ADTSHI_OFFSET 0
+#define ADTSLO_OFFSET 1
+#define LOSTFLAG_OFFSET 2
+#define NCHANNELS_OFFSET 3
+#define NSAMPLES_OFFSET 4
+#define SAMPLERATE_OFFSET 5
+#define XFORMIDX_OFFSET 6
+#define GBMIN_OFFSET 7
+//[MAXNCHAN]
+#define XBITS_OFFSET 9
+//[MAXNCHAN][2]
+#define DGAINC_OFFSET 13
+//[MAXNCHAN][CODINGDELAY]*sizeof(L_GAINC) = 2*2*18 = 72
+#define NATS_OFFSET 0
+#define LOC_OFFSET 1
+//MAXNATS
+#define GAIN_OFFSET 9
+//MAXNATS
+#define MAXEXGAIN_OFFSET 17
+#define EXGAIN_OFFSET 85
+// 17
+//13+18*4+17 = 102
+#define L_BITREV 128
+//129
+
+/*********************************** variables in lmem24 ***************************/
+
+#define L_DECMLT 0x400
+#define L_COS4SIN4 0x800
+#define L_COS1SIN1 0x800
+#define L_TWIDTAB 0x800
+
+#define L_DECMLT_W 0x400
+//1024
+#define L_OVERLAP_W 0x800
+//256
+#define L_WINDOW 0xa00
+//256
+#define L_POW2NTAB 0xb00
+//128
+#define L_DECODEINFO_SWAP 0xb80
+//11+18*4+17 = 100
+
+/*********************************** variables in sdram ***************************/
+
+#define M_DECODE_INFO 0
+//128*MAXBUF
+//PreMultiply
+#define M_DECMLT (M_DECODE_INFO+128*MAXBUF)
+//1024*2*MAXBUF
+#define M_OVERLAP (M_DECMLT+(1024*2*MAXBUF)*3/2)
+//1024*2
+
+/*********************************** table in sdram ***************************/
+
+//PreMultiply
+#define M_COS4SIN4_1024 (M_OVERLAP+(1024*2)*3/2)
+#define M_COS4SIN4_512 (M_COS4SIN4_1024+1024*3/2)
+#define M_COS4SIN4_256 (M_COS4SIN4_512+512*3/2)
+
+//BitReverse
+#define M_BITREV_1024 (M_COS4SIN4_256+256*3/2)
+//132
+#define M_BITREV_512 (M_BITREV_1024+132)
+//68
+#define M_BITREV_256 (M_BITREV_512+68)
+//36
+
+//PostMultiply
+#define M_COS1SIN1 (M_BITREV_256+36)
+
+//R4FFT
+#define M_TWIDTABEVEN (M_COS1SIN1+(514+2)*3/2)
+//4*6
+//16*6
+//64*6
+#define M_TWIDTABODD (M_TWIDTABEVEN+((4+16+64)*6)*3/2)
+//8*6
+//32*6
+//128*6
+
+//InterpolatePCM & InterpolateOverlap
+#define M_POW2NTAB (M_TWIDTABODD+((8+32+128)*6)*3/2)
+//128
+#define M_WINDOWS_1024 (M_POW2NTAB+128*3/2)
+//1024
+#define M_WINDOWS_512 (M_WINDOWS_1024+1024*3/2)
+//512
+#define M_WINDOWS_256 (M_WINDOWS_512+512*3/2)
+//256
+
+//PCM swap
+#define M_PCM_SWAP (M_WINDOWS_256+256*3/2)
+//2048
+
+#define M_END (M_PCM_SWAP+2048)
+
+// copy from debug.h
+
+#define BP_NEW_FRAME 0x0001
+#define BP_DECODE_INFO 0x0002
+#define BP_BEFORE_INVERSE_TRANSFORM 0x0004
+#define BP_PREMULTIPLY 0x0008
+#define BP_BITREVERSE 0x0010
+#define BP_R8FIRSTPASS 0x0020
+#define BP_R4CORE 0x0040
+#define BP_POSTMULTIPLY 0x0080
+#define BP_GAIN_CHANGES 0x0100
+#define BP_PCM 0x0200
+#define BP_OVERLAP 0x0400
+#define BP_DEBUG 0x1000
+
+#define DBG_MASK 0x1fff
+
+#define BP_DUMP_LMEM16 0x8000
+#define BP_DUMP_LMEM24_1 0x4000
+#define BP_DUMP_LMEM24_2 0x2000
+
+#define TRACE_CMD 0x51c
+#define TRACE_REG0 0x51d
+#define TRACE_REG1 0x51e
+#define TRACE_REG2 0x51f
+#define TRACE_MASK 0x520
+
+#define M_LMEM16_DUMP (0x50000>>1)
+// 2KB
+#define M_LMEM24_1_DUMP (0x50800>>1)
+// 3KB
+#define M_LMEM24_2_DUMP (0x51400>>1)
+// 3KB
+
+void ra_debug_init(void)
+{
+ WRITE_MPEG_REG(TRACE_CMD, 0x0);
+ WRITE_MPEG_REG(TRACE_REG0, 0x0);
+ WRITE_MPEG_REG(TRACE_REG1, 0x0);
+ WRITE_MPEG_REG(TRACE_REG2, 0x0);
+ WRITE_MPEG_REG(TRACE_MASK, BP_NEW_FRAME);
+}
+
+void ra_debug_dump_decmlt(HGecko2Decoder hGecko2Decoder, int gb)
+{
+ Gecko2Info *gi;
+ unsigned rd;
+ unsigned ch, i;
+
+ gi = (Gecko2Info *)hGecko2Decoder;
+ rd = READ_MPEG_REG(MREG_AUDIO_CTRL_REG5);
+ ch = READ_MPEG_REG(TRACE_REG0);
+ read_from_24bit_linear_format((M_LMEM24_1_DUMP << 1), &gi->block[rd].decmlt[ch][0], 1024);
+ for (i = 0; i < gi->nSamples; i++) {
+ if (!(i & 7)) {
+ fprintf(pDumpFile, "\n\t");
+ }
+ if (gb < 8) {
+ fprintf(pDumpFile, "%06x ", ((gi->block[rd].decmlt[ch][i] + (1 << (7 - gb))) >> (8 - gb)) & 0xffffff);
+ } else {
+ fprintf(pDumpFile, "%06x ", (gi->block[rd].decmlt[ch][i] << (gb - 8)) & 0xffffff);
+ }
+ }
+ fprintf(pDumpFile, "\n");
+}
+
+void ra_debug_dump_overlap(HGecko2Decoder hGecko2Decoder, int gb)
+{
+ Gecko2Info *gi;
+ unsigned rd;
+ unsigned ch, i;
+
+ gi = (Gecko2Info *)hGecko2Decoder;
+ rd = READ_MPEG_REG(MREG_AUDIO_CTRL_REG5);
+ ch = READ_MPEG_REG(TRACE_REG0);
+ read_from_24bit_linear_format((M_OVERLAP << 1), gi->db.overlap[ch], 1024);
+ for (i = 0; i < gi->nSamples; i++) {
+ if (!(i & 7)) {
+ fprintf(pDumpFile, "\n\t");
+ }
+ if (gb < 8) {
+ fprintf(pDumpFile, "%06x ", ((gi->db.overlap[ch][i] + (1 << (7 - gb))) >> (8 - gb)) & 0xffffff);
+ } else {
+ fprintf(pDumpFile, "%06x ", (gi->db.overlap[ch][i] << (gb - 8)) & 0xffffff);
+ }
+ }
+ fprintf(pDumpFile, "\n");
+}
+
+unsigned dbg_frame = 0;
+void ra_debug(HGecko2Decoder hGecko2Decoder)
+{
+ static short cur_breakpoint;
+ Gecko2Info *gi;
+ unsigned rd;
+ DecodeInfo *di;
+ unsigned ch, i, j;
+ short *pcm_output;
+
+ if ((READ_MPEG_REG(TRACE_CMD) & 0x8000) == 0) {
+ return;
+ }
+
+ gi = (Gecko2Info *)hGecko2Decoder;
+ rd = READ_MPEG_REG(MREG_AUDIO_CTRL_REG5);
+ di = &gi->block[rd];
+ ch = READ_MPEG_REG(TRACE_REG0);
+
+ cur_breakpoint = READ_MPEG_REG(TRACE_CMD) & 0x7fff;
+ if (cur_breakpoint) {
+ switch (cur_breakpoint) {
+ case BP_NEW_FRAME:
+ fprintf(pDumpFile, "\n----- Frame %d in %d-----\n", ++FrameCount, rd);
+ printf("Frame %d in %d-----\n", FrameCount, rd);
+ if (FrameCount >= dbg_frame) {
+ WRITE_MPEG_REG(TRACE_MASK, BP_NEW_FRAME | BP_DECODE_INFO/*|BP_BEFORE_INVERSE_TRANSFORM|BP_PREMULTIPLY|BP_BITREVERSE|BP_R8FIRSTPASS|BP_R4CORE*/ | BP_POSTMULTIPLY | BP_GAIN_CHANGES | BP_DEBUG);
+ }
+
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_DECODE_INFO:
+ read_from_16bit_linear_format((M_LMEM16_DUMP << 1), (short*)&gi->block[rd], 128);
+ fprintf(pDumpFile, "decode info: %d\n", rd);
+ fprintf(pDumpFile, "\tlost_flag: %d\n", di->lostflag);
+ fprintf(pDumpFile, "\tChannels: %d\n", di->nChannels);
+ fprintf(pDumpFile, "\tSamples: %d\n", di->nSamples);
+ fprintf(pDumpFile, "\txformIdx: %d\n", di->xformIdx);
+ fprintf(pDumpFile, "\tgbMin: %d %d\n", di->gbMin[0], di->gbMin[1]);
+ fprintf(pDumpFile, "\tgbOverlap: %d %d\n", READ_MPEG_REG(MREG_AUDIO_CTRL_REG2) & 0xff, READ_MPEG_REG(MREG_AUDIO_CTRL_REG2) >> 8);
+ fprintf(pDumpFile, "\txbits: %d %d %d %d\n", di->xbits[0][0], di->xbits[0][1], di->xbits[1][0], di->xbits[1][1]);
+ fprintf(pDumpFile, "\tGain:\n");
+ for (ch = 0; ch < di->nChannels; ch++) {
+ for (j = 0; j < 2; j++) {
+ fprintf(pDumpFile, "\t\tChannel[%d][%d]: nats=%d maxExGain=%d\n", ch, j, di->dgainc[ch][j].nats, di->dgainc[ch][j].maxExGain);
+ if (di->dgainc[ch][j].nats) {
+ fprintf(pDumpFile, "\t\t\tloc: ");
+ for (i = 0; i < di->dgainc[ch][j].nats; i++) {
+ fprintf(pDumpFile, "%04x ", di->dgainc[ch][j].loc[i] & 0xffff);
+ }
+ fprintf(pDumpFile, "\n");
+
+ fprintf(pDumpFile, "\t\t\tgain:");
+ for (i = 0; i < di->dgainc[ch][j].nats; i++) {
+ fprintf(pDumpFile, "%04x ", di->dgainc[ch][j].gain[i] & 0xffff);
+ }
+ fprintf(pDumpFile, "\n");
+ }
+ }
+ }
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_BEFORE_INVERSE_TRANSFORM:
+ fprintf(pDumpFile, "\nBefore Inverse transform:%d", READ_MPEG_REG(TRACE_REG0));
+ ra_debug_dump_decmlt(gi, 0);
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_PREMULTIPLY:
+ fprintf(pDumpFile, "\nAfter PreMultiply:");
+ if (di->gbMin[ch] < 4) {
+ ra_debug_dump_decmlt(gi, -1);
+ } else {
+ ra_debug_dump_decmlt(gi, -1);
+ }
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_BITREVERSE:
+ fprintf(pDumpFile, "\nAfter BitReverse:");
+ if (di->gbMin[ch] < 4) {
+ ra_debug_dump_decmlt(gi, -1);
+ } else {
+ ra_debug_dump_decmlt(gi, -1);
+ }
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_R8FIRSTPASS:
+ fprintf(pDumpFile, "\nAfter R8FirstPass:");
+ if (di->gbMin[ch] < 4) {
+ ra_debug_dump_decmlt(gi, -1);
+ } else {
+ ra_debug_dump_decmlt(gi, -1);
+ }
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_R4CORE:
+ fprintf(pDumpFile, "\nAfter R4Core:");
+ if (di->gbMin[ch] < 4) {
+ ra_debug_dump_decmlt(gi, -4);
+ } else {
+ ra_debug_dump_decmlt(gi, -4);
+ }
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_POSTMULTIPLY:
+ fprintf(pDumpFile, "\nAfter PostMultiply:");
+ ra_debug_dump_decmlt(gi, -7);
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_GAIN_CHANGES:
+ read_from_16bit_linear_format((M_LMEM16_DUMP << 1), (short*)&gi->block[rd], 128);
+ fprintf(pDumpFile, "\nAfter CalcGainChanges:");
+ fprintf(pDumpFile, "\n\tgainc0->maxExGain=%04x, gainc1->maxExGain=%04x", di->dgainc[ch][0].maxExGain & 0xffff, di->dgainc[ch][1].maxExGain & 0xffff);
+ fprintf(pDumpFile, "\n\texgain:");
+ for (i = 0; i < 2 * NPARTS + 1; i++) {
+ if ((i % NPARTS) == 0) {
+ fprintf(pDumpFile, "\n\t\t");
+ }
+ fprintf(pDumpFile, "%04x ", di->exgain[i] & 0xffff);
+ }
+ fprintf(pDumpFile, "\n");
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_PCM:
+ pcm_output = AVMem_calloc(1024, sizeof(short));
+ ch = READ_MPEG_REG(TRACE_REG0);
+ read_from_16bit_linear_format((M_LMEM16_DUMP << 1), (short*)pcm_output, di->nSamples);
+ fprintf(pDumpFile, "PCM:\n");
+ for (i = 0; i < di->nSamples; i++) {
+ if (!(i & 31)) {
+ fprintf(pDumpFile, "\n\t");
+ }
+ fprintf(pDumpFile, "%02x ", (*(pcm_output + i) >> 8) & 0xff);
+ }
+ fprintf(pDumpFile, "\n");
+ AVMem_free(pcm_output);
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_OVERLAP:
+ fprintf(pDumpFile, "\nOverlap:");
+ ra_debug_dump_overlap(gi, READ_MPEG_REG(MREG_AUDIO_CTRL_REG2));
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ case BP_DEBUG:
+ fprintf(pDumpFile, "%06x %06x\n", ((READ_MPEG_REG(TRACE_REG0) << 8) | (READ_MPEG_REG(TRACE_REG1) & 0xff)), (READ_MPEG_REG(TRACE_REG2) << 8) | ((READ_MPEG_REG(TRACE_REG1) >> 8) & 0xff));
+ WRITE_MPEG_REG(TRACE_CMD, 0);
+ break;
+ default:
+ printf("breakpoint not defined\n");
+ break;
+ }
+ }
+}
+#endif
+
+/**************************************************************************************
+ * Function: Gecko2InitDecoder
+ *
+ * Description: initialize the fixed-point Gecko2 audio decoder
+ *
+ * Inputs: number of samples per frame
+ * number of channels
+ * number of frequency regions coded
+ * number of encoded bits per frame
+ * number of samples per second
+ * start region for coupling (joint stereo only)
+ * number of bits for each coupling scalefactor (joint stereo only)
+ * pointer to receive number of frames of coding delay
+ *
+ * Outputs: number of frames of coding delay (i.e. discard the PCM output from
+ * the first *codingDelay calls to Gecko2Decode())
+ *
+ * Return: instance pointer, 0 if error (malloc fails, unsupported mode, etc.)
+ *
+ * Notes: this implementation is fully reentrant and thread-safe - the
+ * HGecko2Decoder instance pointer tracks all the state variables
+ * for each instance
+ **************************************************************************************/
+HGecko2Decoder Gecko2InitDecoder(int nSamples, int nChannels, int nRegions, int nFrameBits, int sampRate,
+ int cplStart, int cplQbits, int *codingDelay)
+{
+ Gecko2Info *gi;
+
+#ifdef ENABLE_DUMP
+ pDumpFile = fopen("ra_dump.txt", "w");
+#endif
+
+ /* check parameters */
+ if (nChannels < 0 || nChannels > MAXNCHAN) {
+ return 0;
+ }
+ if (nRegions < 0 || nRegions > MAXREGNS) {
+ return 0;
+ }
+ if (nFrameBits < 0 || cplStart < 0) {
+ return 0;
+ }
+ if (cplQbits && (cplQbits < 2 || cplQbits > 6)) {
+ return 0;
+ }
+
+ gi = AllocateBuffers();
+ if (!gi) {
+ return 0;
+ }
+
+ /* if stereo, cplQbits == 0 means dual-mono, > 0 means joint stereo */
+ gi->jointStereo = (nChannels == 2) && (cplQbits > 0);
+
+ gi->nSamples = nSamples;
+ gi->nChannels = nChannels;
+ gi->nRegions = nRegions;
+ gi->nFrameBits = nFrameBits;
+ if (gi->nChannels == 2 && !gi->jointStereo) {
+ gi->nFrameBits /= 2;
+ }
+ gi->sampRate = sampRate;
+
+ gi->rd = 0;
+ gi->wr = 0;
+
+ //#ifndef USE_C_DECODER
+ // WRITE_MPEG_REG(MREG_AUDIO_CTRL_REG5, gi->rd);
+ // WRITE_MPEG_REG(MREG_AUDIO_CTRL_REG6, gi->wr);
+ //#endif
+
+ if (gi->jointStereo) {
+ /* joint stereo */
+ gi->cplStart = cplStart;
+ gi->cplQbits = cplQbits;
+ gi->rateBits = 5;
+ if (gi->nSamples > 256) {
+ gi->rateBits++;
+ }
+ if (gi->nSamples > 512) {
+ gi->rateBits++;
+ }
+ } else {
+ /* mono or dual-mono */
+ gi->cplStart = 0;
+ gi->cplQbits = 0;
+ gi->rateBits = 5;
+ }
+
+ gi->cRegions = gi->nRegions + gi->cplStart;
+ gi->nCatzns = (1 << gi->rateBits);
+ gi->lfsr[0] = gi->lfsr[1] = ('k' | 'e' << 8 | 'n' << 16 | 'c' << 24); /* well-chosen seed for dither generator */
+
+ /* validate tranform size */
+ if (gi->nSamples == 256) {
+ gi->xformIdx = 0;
+ } else if (gi->nSamples == 512) {
+ gi->xformIdx = 1;
+ } else if (gi->nSamples == 1024) {
+ gi->xformIdx = 2;
+ } else {
+ Gecko2FreeDecoder(gi);
+ return 0;
+ }
+
+ /* this is now 2, since lookahead MLT has been removed */
+ *codingDelay = CODINGDELAY;
+
+#ifdef DBG_AMRISC
+ ra_debug_init();
+#endif
+
+ return (HGecko2Decoder)gi;
+}
+
+/**************************************************************************************
+ * Function: Gecko2FreeDecoder
+ *
+ * Description: free the fixed-point Gecko2 audio decoder
+ *
+ * Inputs: HGecko2Decoder instance pointer returned by Gecko2InitDecoder()
+ *
+ * Outputs: none
+ *
+ * Return: none
+ **************************************************************************************/
+void Gecko2FreeDecoder(HGecko2Decoder hGecko2Decoder)
+{
+ Gecko2Info *gi = (Gecko2Info *)hGecko2Decoder;
+
+#ifdef ENABLE_DUMP
+ if (pDumpFile) {
+ fclose(pDumpFile);
+ }
+#endif
+
+ if (!gi) {
+ return;
+ }
+
+ FreeBuffers(gi);
+
+ return;
+}
+
+/**************************************************************************************
+ * Function: Gecko2ClearBadFrame
+ *
+ * Description: zero out pcm buffer if error decoding Gecko2 frame
+ *
+ * Inputs: pointer to initialized Gecko2Info struct
+ * pointer to pcm output buffer
+ *
+ * Outputs: zeroed out pcm buffer
+ * zeroed out data buffers (as if codec had been reinitialized)
+ *
+ * Return: none
+ **************************************************************************************/
+static void Gecko2ClearBadFrame(Gecko2Info *gi, short *outbuf)
+{
+ int i, ch;
+
+ if (!gi || gi->nSamples * gi->nChannels > MAXNSAMP * MAXNCHAN || gi->nSamples * gi->nChannels < 0) {
+ return;
+ }
+
+ /* clear PCM buffer */
+ for (i = 0; i < gi->nSamples * gi->nChannels; i++) {
+ outbuf[i] = 0;
+ }
+
+ /* clear internal data buffers */
+ for (ch = 0; ch < gi->nChannels; ch++) {
+ for (i = 0; i < gi->nSamples; i++) {
+ gi->db.decmlt[ch][i] = 0;
+ gi->db.overlap[ch][i] = 0;
+ }
+ gi->xbits[ch][0] = gi->xbits[ch][1] = 0;
+ }
+
+}
+
+void ProduceDecodeInfo(HGecko2Decoder hGecko2Decoder, unsigned timestamp)
+{
+#ifndef USE_C_DECODER
+ Gecko2Info *gi = (Gecko2Info *)hGecko2Decoder;
+ gi->wr = READ_MPEG_REG(MREG_AUDIO_CTRL_REG6);
+ gi->block[gi->wr].adts_hi = timestamp >> 16;
+ gi->block[gi->wr].adts_lo = timestamp & 0xffff;
+ gi->block[gi->wr].lostflag = gi->lostflag;
+ gi->block[gi->wr].jointflag = gi->jointStereo;
+ gi->block[gi->wr].nChannels = gi->nChannels;
+ gi->block[gi->wr].nSamples = gi->nSamples;
+ if (gi->sampRate <= 12000) {
+ gi->block[gi->wr].sampRate = 4;
+ } else if (gi->sampRate <= 24000) {
+ gi->block[gi->wr].sampRate = 2;
+ } else {
+ gi->block[gi->wr].sampRate = 1;
+ }
+ gi->block[gi->wr].xformIdx = gi->xformIdx;
+ memcpy(gi->block[gi->wr].gbMin, gi->gbMin, MAXNCHAN * sizeof(short));
+ memcpy(gi->block[gi->wr].xbits, gi->xbits, 2 * MAXNCHAN * sizeof(short));
+ CopyGainInfo(&gi->block[gi->wr].dgainc[0][0], &gi->dgainc[0][0]);
+ CopyGainInfo(&gi->block[gi->wr].dgainc[0][1], &gi->dgainc[0][1]);
+ CopyGainInfo(&gi->block[gi->wr].dgainc[1][0], &gi->dgainc[1][0]);
+ CopyGainInfo(&gi->block[gi->wr].dgainc[1][1], &gi->dgainc[1][1]);
+ gi->block[gi->wr].overlap = &gi->db.overlap;
+ write_to_16bit_linear_format((gi->wr) * 256, (short*)&gi->block[gi->wr], 128);
+ write_to_24bit_linear_format(MAXDECBUF * 256 + gi->wr * 2 * 1024 * 3, &(gi->db.decmlt[0][0]), 1024, gi->gbMin[0], 1);
+ write_to_24bit_linear_format(MAXDECBUF * 256 + gi->wr * 2 * 1024 * 3 + 1024 * 3, &(gi->db.decmlt[1][0]), 1024, gi->gbMin[1], 1);
+ gi->wr++;
+ gi->wr &= MAXDECBUF - 1;
+ WRITE_MPEG_REG(MREG_AUDIO_CTRL_REG6, gi->wr);
+#endif
+}
+
+int GetDecodeInfo(HGecko2Decoder hGecko2Decoder)
+{
+#ifndef USE_C_DECODER
+ Gecko2Info *gi = (Gecko2Info *)hGecko2Decoder;
+ gi->rd = READ_MPEG_REG(MREG_AUDIO_CTRL_REG5);
+ gi->wr = READ_MPEG_REG(MREG_AUDIO_CTRL_REG6);
+
+ while (((gi->wr + 1) & (MAXDECBUF - 1)) == gi->rd) {
+ gi->rd = READ_MPEG_REG(MREG_AUDIO_CTRL_REG5);
+ AVTimeDly(5);
+ if (AVTaskDelReq(OS_ID_SELF) == OS_TASK_DEL_REQ) {
+ return 0;
+ }
+ }
+#endif
+ return 1;
+}
+
+/**************************************************************************************
+ * Function: Gecko2Decode
+ *
+ * Description: decode one frame of audio data
+ *
+ * Inputs: HGecko2Decoder instance pointer returned by Gecko2InitDecoder()
+ * pointer to one encoded frame
+ * (nFrameBits / 8 bytes of data, byte-aligned)
+ * flag indicating lost frame (lostflag != 0 means lost)
+ * pointer to receive one decoded frame of PCM
+ *
+ * Outputs: one frame (nSamples * nChannels 16-bit samples) of decoded PCM
+ *
+ * Return: 0 if frame decoded okay, error code (< 0) if error
+ *
+ * Notes: to reduce memory and CPU usage, this only implements one-sided
+ * (backwards) interpolation for error concealment (no lookahead)
+ **************************************************************************************/
+int Gecko2Decode(HGecko2Decoder hGecko2Decoder, unsigned char *codebuf, int lostflag, short *outbuf, unsigned timestamp)
+{
+ int i, ch, availbits;
+ Gecko2Info *gi = (Gecko2Info *)hGecko2Decoder;
+
+#ifdef ENABLE_DUMP
+ int j;
+#endif
+
+ if (!gi) {
+ return -1;
+ }
+
+ gi->lostflag = lostflag;
+ if (GetDecodeInfo(hGecko2Decoder)) {
+ if (!gi->lostflag) {
+ /* current frame is valid, decode it */
+ if (gi->jointStereo) {
+ /* decode gain control info, coupling coefficients, and power envlope */
+ availbits = DecodeSideInfo(gi, codebuf, gi->nFrameBits, 0);
+ if (availbits < 0) {
+ Gecko2ClearBadFrame(gi, outbuf);
+ return ERR_GECKO2_INVALID_SIDEINFO;
+ }
+
+ /* reconstruct power envelope */
+ CategorizeAndExpand(gi, availbits);
+
+ /* reconstruct full MLT, including stereo decoupling */
+ gi->gbMin[0] = gi->gbMin[1] = DecodeTransform(gi, gi->db.decmlt[0], availbits, &gi->lfsr[0], 0);
+ JointDecodeMLT(gi, gi->db.decmlt[0], gi->db.decmlt[1]);
+ gi->xbits[1][1] = gi->xbits[0][1];
+ } else {
+ for (ch = 0; ch < gi->nChannels; ch++) {
+ /* decode gain control info and power envlope */
+ availbits = DecodeSideInfo(gi, codebuf + (ch * gi->nFrameBits >> 3), gi->nFrameBits, ch);
+ if (availbits < 0) {
+ Gecko2ClearBadFrame(gi, outbuf);
+ return ERR_GECKO2_INVALID_SIDEINFO;
+ }
+
+ /* reconstruct power envelope */
+ CategorizeAndExpand(gi, availbits);
+
+ /* reconstruct full MLT */
+ gi->gbMin[ch] = DecodeTransform(gi, gi->db.decmlt[ch], availbits, &gi->lfsr[ch], ch);
+
+ /* zero out non-coded regions */
+ for (i = gi->nRegions * NBINS; i < gi->nSamples; i++) {
+ gi->db.decmlt[ch][i] = 0;
+ }
+ }
+ }
+
+#ifdef ENABLE_DUMP
+ if (DumpMask & DUMP_GAIN) {
+ fprintf(pDumpFile, "Gain:\n");
+ for (ch = 0; ch < gi->nChannels; ch++) {
+ for (j = 0; j < 2; j++) {
+ fprintf(pDumpFile, "\tChannel[%d][%d]: nats=%d maxExGain=%d\n", ch, j, gi->dgainc[ch][j].nats, gi->dgainc[ch][j].maxExGain);
+ if (gi->dgainc[ch][j].nats) {
+ fprintf(pDumpFile, "\t\tloc: ");
+ for (i = 0; i < gi->dgainc[ch][j].nats; i++) {
+ fprintf(pDumpFile, "%08x ", gi->dgainc[ch][j].loc[i]);
+ }
+ fprintf(pDumpFile, "\n");
+
+ fprintf(pDumpFile, "\t\tgain:");
+ for (i = 0; i < gi->dgainc[ch][j].nats; i++) {
+ fprintf(pDumpFile, "%08x ", gi->dgainc[ch][j].gain[i]);
+ }
+ fprintf(pDumpFile, "\n");
+ }
+ }
+ }
+ }
+ if ((DumpMask & DUMP_CPL) && (gi->jointStereo)) {
+ fprintf(pDumpFile, "Couple:\n");
+ fprintf(pDumpFile, "\t");
+ for (i = cplband[gi->cplStart]; i <= cplband[gi->nRegions - 1]; i++) {
+ fprintf(pDumpFile, "%08x ", gi->db.cplindex[i]);
+ }
+ fprintf(pDumpFile, "\n");
+ }
+ if (DumpMask & DUMP_ENV) {
+ fprintf(pDumpFile, "Envelope:\n");
+ fprintf(pDumpFile, "\t");
+ for (i = 0; i < gi->cRegions; i++) {
+ fprintf(pDumpFile, "%04x ", gi->db.rmsIndex[i] & 0xffff);
+ if ((i % 10) == 9) {
+ fprintf(pDumpFile, "\n\t");
+ }
+ }
+ fprintf(pDumpFile, "\n");
+
+ for (ch = 0; ch < gi->nChannels; ch++) {
+ fprintf(pDumpFile, "\trmsMax[%d]=%08x\n", ch, gi->rmsMax[ch]);
+ }
+ }
+ if (DumpMask & DUMP_HUFF) {
+ fprintf(pDumpFile, "Huffman:\n");
+ for (ch = 0; ch < gi->nChannels; ch++) {
+ fprintf(pDumpFile, "\tgbMin[%d]=%08x\n", ch, gi->gbMin[ch]);
+ }
+ }
+ if (DumpMask & DUMP_QUANT) {
+ fprintf(pDumpFile, "Dequant:\n");
+ for (ch = 0; ch < gi->nChannels; ch++) {
+ fprintf(pDumpFile, "\tchannel %d:", ch);
+ for (i = 0; i < MAXNSAMP; i++) {
+ if (!(i & 7)) {
+ fprintf(pDumpFile, "\n\t");
+ }
+ fprintf(pDumpFile, "%06x ", ((gi->db.decmlt[ch][i] + 0x80) >> 8) & 0xffffff);
+ }
+ fprintf(pDumpFile, "\n");
+ }
+ }
+#endif // ENABLE_DUMP
+
+#ifdef USE_C_DECODER
+ /* inverse transform, without window or overlap-add */
+ for (ch = 0; ch < gi->nChannels; ch++) {
+ IMLTNoWindow(gi->xformIdx, gi->db.decmlt[ch], gi->gbMin[ch]);
+ }
+#endif
+ }
+
+ ProduceDecodeInfo(hGecko2Decoder, timestamp);
+#ifdef DBG_AMRISC
+ gi->rd = READ_MPEG_REG(MREG_AUDIO_CTRL_REG5);
+ gi->wr = READ_MPEG_REG(MREG_AUDIO_CTRL_REG6);
+ while (gi->rd != gi->wr) {
+ ra_debug(gi);
+ gi->rd = READ_MPEG_REG(MREG_AUDIO_CTRL_REG5);
+ }
+#endif
+#ifdef USE_C_DECODER
+ for (ch = 0; ch < gi->nChannels; ch++) {
+ /* apply synthesis window, gain window, then overlap-add (interleaves stereo PCM LRLR...) */
+ if (gi->dgainc[ch][0].nats || gi->dgainc[ch][1].nats || gi->xbits[ch][0] || gi->xbits[ch][1]) {
+ DecWindowWithAttacks(gi->xformIdx, gi->db.decmlt[ch], gi->db.overlap[ch], outbuf + ch, gi->nChannels, &gi->dgainc[ch][0], &gi->dgainc[ch][1], gi->xbits[ch]);
+ } else {
+ DecWindowNoAttacks(gi->xformIdx, gi->db.decmlt[ch], gi->db.overlap[ch], outbuf + ch, gi->nChannels);
+ }
+
+ /* save gain settings for overlap */
+ CopyGainInfo(&gi->dgainc[ch][0], &gi->dgainc[ch][1]);
+ gi->xbits[ch][0] = gi->xbits[ch][1];
+ }
+#endif
+ }
+
+ return 0;
+}