Full Code of chxuan/CZPlayer for AI

master 4b290c95f718 cached
916 files
7.0 MB
1.9M tokens
1108 symbols
1 requests
Download .txt
Showing preview only (7,652K chars total). Download the full file or copy to clipboard to get everything.
Repository: chxuan/CZPlayer
Branch: master
Commit: 4b290c95f718
Files: 916
Total size: 7.0 MB

Directory structure:
gitextract_c_rmr097/

├── 3rdParty/
│   ├── equalizer/
│   │   ├── eq.cpp
│   │   ├── eq.h
│   │   ├── iir.h
│   │   ├── iir_cfs.cpp
│   │   ├── iir_cfs.h
│   │   ├── iir_fpu.cpp
│   │   └── iir_fpu.h
│   ├── libmad/
│   │   ├── include/
│   │   │   ├── bit.c
│   │   │   ├── bit.h
│   │   │   ├── config.h
│   │   │   ├── decoder.c
│   │   │   ├── decoder.h
│   │   │   ├── fixed.c
│   │   │   ├── fixed.h
│   │   │   ├── frame.c
│   │   │   ├── frame.h
│   │   │   ├── global.h
│   │   │   ├── huffman.c
│   │   │   ├── huffman.h
│   │   │   ├── layer12.c
│   │   │   ├── layer12.h
│   │   │   ├── layer3.c
│   │   │   ├── layer3.h
│   │   │   ├── mad.h
│   │   │   ├── stream.c
│   │   │   ├── stream.h
│   │   │   ├── synth.c
│   │   │   ├── synth.h
│   │   │   ├── timer.c
│   │   │   ├── timer.h
│   │   │   ├── version.c
│   │   │   └── version.h
│   │   └── lib/
│   │       ├── libmad.lib
│   │       └── libmadd.lib
│   ├── libogg/
│   │   ├── include/
│   │   │   ├── ogg.h
│   │   │   └── os_types.h
│   │   └── lib/
│   │       ├── libogg.lib
│   │       └── liboggd.lib
│   ├── libvorbis/
│   │   ├── include/
│   │   │   ├── analysis.c
│   │   │   ├── backends.h
│   │   │   ├── bitrate.c
│   │   │   ├── bitrate.h
│   │   │   ├── block.c
│   │   │   ├── codebook.c
│   │   │   ├── codebook.h
│   │   │   ├── codec.h
│   │   │   ├── codec_internal.h
│   │   │   ├── envelope.c
│   │   │   ├── envelope.h
│   │   │   ├── floor0.c
│   │   │   ├── floor1.c
│   │   │   ├── floor_all.h
│   │   │   ├── highlevel.h
│   │   │   ├── info.c
│   │   │   ├── lookup.c
│   │   │   ├── lookup.h
│   │   │   ├── lookup_data.h
│   │   │   ├── lpc.c
│   │   │   ├── lpc.h
│   │   │   ├── lsp.c
│   │   │   ├── lsp.h
│   │   │   ├── mapping0.c
│   │   │   ├── masking.h
│   │   │   ├── mdct.c
│   │   │   ├── mdct.h
│   │   │   ├── misc.h
│   │   │   ├── os.h
│   │   │   ├── psy.c
│   │   │   ├── psy.h
│   │   │   ├── psych_11.h
│   │   │   ├── psych_16.h
│   │   │   ├── psych_44.h
│   │   │   ├── psych_8.h
│   │   │   ├── psytune.c
│   │   │   ├── registry.c
│   │   │   ├── registry.h
│   │   │   ├── res0.c
│   │   │   ├── residue_16.h
│   │   │   ├── residue_44.h
│   │   │   ├── residue_44u.h
│   │   │   ├── residue_8.h
│   │   │   ├── scales.h
│   │   │   ├── setup_11.h
│   │   │   ├── setup_16.h
│   │   │   ├── setup_22.h
│   │   │   ├── setup_32.h
│   │   │   ├── setup_44.h
│   │   │   ├── setup_44u.h
│   │   │   ├── setup_8.h
│   │   │   ├── setup_X.h
│   │   │   ├── sharedbook.c
│   │   │   ├── smallft.c
│   │   │   ├── smallft.h
│   │   │   ├── synthesis.c
│   │   │   ├── tone.c
│   │   │   ├── vorbisenc.c
│   │   │   ├── vorbisenc.h
│   │   │   ├── vorbisfile.c
│   │   │   ├── vorbisfile.h
│   │   │   ├── window.c
│   │   │   └── window.h
│   │   └── lib/
│   │       ├── libvorbis.lib
│   │       └── libvorbisd.lib
│   ├── qdeviceWatcher/
│   │   ├── include/
│   │   │   ├── qdevicechangeevent.cpp
│   │   │   ├── qdevicechangeevent.h
│   │   │   ├── qdevicewatcher.cpp
│   │   │   ├── qdevicewatcher.h
│   │   │   ├── qdevicewatcher_global.h
│   │   │   ├── qdevicewatcher_linux.cpp
│   │   │   ├── qdevicewatcher_p.h
│   │   │   ├── qdevicewatcher_win32.cpp
│   │   │   └── qdevicewatcher_wince.cpp
│   │   └── lib/
│   │       └── QDeviceWatcherd2.lib
│   ├── qtsingleapplication/
│   │   ├── QtLockedFile
│   │   ├── QtSingleApplication
│   │   ├── qtlocalpeer.cpp
│   │   ├── qtlocalpeer.h
│   │   ├── qtlockedfile.cpp
│   │   ├── qtlockedfile.h
│   │   ├── qtlockedfile_unix.cpp
│   │   ├── qtlockedfile_win.cpp
│   │   ├── qtsingleapplication.cpp
│   │   ├── qtsingleapplication.h
│   │   ├── qtsingleapplication.pri
│   │   ├── qtsinglecoreapplication.cpp
│   │   ├── qtsinglecoreapplication.h
│   │   └── qtsinglecoreapplication.pri
│   └── qxtglobalshortcut/
│       ├── qxtglobal.h
│       ├── qxtglobalshortcut.cpp
│       ├── qxtglobalshortcut.h
│       ├── qxtglobalshortcut.pri
│       ├── qxtglobalshortcut_mac.cpp
│       ├── qxtglobalshortcut_p.h
│       ├── qxtglobalshortcut_win.cpp
│       └── qxtglobalshortcut_x11.cpp
├── AboutPanel/
│   ├── AboutPage.cpp
│   ├── AboutPage.h
│   ├── AboutPanel.cpp
│   ├── AboutPanel.h
│   ├── AboutPanel.pri
│   ├── AuthorPage.cpp
│   ├── AuthorPage.h
│   ├── ThanksPage.cpp
│   └── ThanksPage.h
├── CZPlayer.pro
├── ConfigPanel/
│   ├── ConfigDialog.cpp
│   ├── ConfigDialog.h
│   ├── ConfigPanel.pri
│   ├── DownloadSettingsPage.cpp
│   ├── DownloadSettingsPage.h
│   ├── EditHotkeyDialog.cpp
│   ├── EditHotkeyDialog.h
│   ├── GeneralSettingsPage.cpp
│   ├── GeneralSettingsPage.h
│   ├── Global.cpp
│   ├── Global.h
│   ├── GlobalConfig.cpp
│   ├── GlobalConfig.h
│   ├── HotkeysSettingsPage.cpp
│   ├── HotkeysSettingsPage.h
│   ├── HotkeysTableWidget.cpp
│   ├── HotkeysTableWidget.h
│   ├── LrcDemo.cpp
│   ├── LrcDemo.h
│   ├── LrcSettingsPage.cpp
│   ├── LrcSettingsPage.h
│   ├── UpdatePage.cpp
│   └── UpdatePage.h
├── Copyright
├── Core/
│   ├── AutoStart.cpp
│   ├── AutoStart.h
│   ├── AutoStartHandle.cpp
│   ├── AutoStartHandle.h
│   ├── ChineseToLetter.h
│   ├── Core.pri
│   ├── FileRelation.cpp
│   ├── FileRelation.h
│   ├── FileRelationHandle.cpp
│   ├── FileRelationHandle.h
│   ├── GlobalHotkey.cpp
│   ├── GlobalHotkey.h
│   ├── NoFocusDelegate.cpp
│   ├── NoFocusDelegate.h
│   ├── StatusDefine.h
│   ├── TR.h
│   └── signal_slot.h
├── DB/
│   ├── DB.pri
│   ├── DBModule.cpp
│   └── DBModule.h
├── Doxyfile
├── Engine/
│   ├── AudioStream.cpp
│   ├── AudioStream.h
│   ├── BasicPlayer.cpp
│   ├── BasicPlayer.h
│   ├── CriticalSection.h
│   ├── Engine.pri
│   ├── FastFourierTransform.cpp
│   ├── FastFourierTransform.h
│   ├── IO.cpp
│   ├── IO.h
│   ├── SoundControl.cpp
│   ├── SoundControl.h
│   ├── SpectroGraph.cpp
│   ├── SpectroGraph.h
│   ├── Stream.cpp
│   ├── Stream.h
│   ├── Thread.h
│   ├── Utils.cpp
│   ├── Utils.h
│   └── WMWrapper.cpp
├── Entity/
│   ├── Entity.pri
│   ├── MusicInfoEntity.cpp
│   ├── MusicInfoEntity.h
│   ├── MusicListSaveFormatEntity.cpp
│   ├── MusicListSaveFormatEntity.h
│   ├── RadioInfoEntity.cpp
│   └── RadioInfoEntity.h
├── ExecDir/
│   ├── AutoUpdate/
│   │   └── qt.conf
│   ├── CZPlayer.exe.embed.manifest
│   ├── RadioInfo.xml
│   ├── qt.conf
│   └── update.xml
├── LICENSE
├── LrcLabel/
│   ├── LrcLabel.pri
│   ├── MusicLrc.cpp
│   └── MusicLrc.h
├── MainWidget/
│   ├── MainWidget.cpp
│   ├── MainWidget.h
│   └── MainWidget.pri
├── MediaWidget/
│   ├── CollectionPanel.cpp
│   ├── CollectionPanel.h
│   ├── DownloadListPanel.cpp
│   ├── DownloadListPanel.h
│   ├── LrcPortraitPanel.cpp
│   ├── LrcPortraitPanel.h
│   ├── MediaWidget.cpp
│   ├── MediaWidget.h
│   ├── MediaWidget.pri
│   ├── RadioPanel.cpp
│   ├── RadioPanel.h
│   ├── RankingPanel.cpp
│   ├── RankingPanel.h
│   ├── SearchPanel.cpp
│   └── SearchPanel.h
├── MinWidget/
│   ├── MinMusicWidget.cpp
│   ├── MinMusicWidget.h
│   └── MinWidget.pri
├── MusicList/
│   ├── MusicList.cpp
│   ├── MusicList.h
│   ├── MusicList.pri
│   ├── MusicListWidget.cpp
│   ├── MusicListWidget.h
│   ├── SharedDialog.cpp
│   └── SharedDialog.h
├── README.md
├── Resources/
│   ├── CZPlayer.qrc
│   ├── CZPlayer.rc
│   ├── audio/
│   │   └── README
│   ├── qss/
│   │   └── CZPlayer.qss
│   └── xml/
│       ├── README
│       ├── RadioInfo.xml
│       └── update.xml
├── TODO
├── Thread/
│   ├── AlbumThread.cpp
│   ├── AlbumThread.h
│   ├── DownloadMusicThread.cpp
│   ├── DownloadMusicThread.h
│   ├── LoadMusicThread.cpp
│   ├── LoadMusicThread.h
│   ├── LrcThread.cpp
│   ├── LrcThread.h
│   ├── SearchThread.cpp
│   ├── SearchThread.h
│   └── Thread.pri
├── doc/
│   ├── _about_page_8cpp.html
│   ├── _about_page_8h.html
│   ├── _about_page_8h_source.html
│   ├── _about_panel_8cpp.html
│   ├── _about_panel_8h.html
│   ├── _about_panel_8h_source.html
│   ├── _album_thread_8cpp.html
│   ├── _album_thread_8h.html
│   ├── _album_thread_8h_source.html
│   ├── _audio_stream_8h_source.html
│   ├── _author_page_8cpp.html
│   ├── _author_page_8h.html
│   ├── _author_page_8h_source.html
│   ├── _basic_player_8cpp.html
│   ├── _basic_player_8h.html
│   ├── _basic_player_8h_source.html
│   ├── _collection_panel_8cpp.html
│   ├── _collection_panel_8h.html
│   ├── _collection_panel_8h_source.html
│   ├── _config_dialog_8cpp.html
│   ├── _config_dialog_8h.html
│   ├── _config_dialog_8h_source.html
│   ├── _critical_section_8h_source.html
│   ├── _d_b_module_8cpp.html
│   ├── _d_b_module_8h.html
│   ├── _d_b_module_8h_source.html
│   ├── _download_list_panel_8cpp.html
│   ├── _download_list_panel_8h.html
│   ├── _download_list_panel_8h_source.html
│   ├── _download_settings_page_8cpp.html
│   ├── _download_settings_page_8h.html
│   ├── _download_settings_page_8h_source.html
│   ├── _edit_hotkey_dialog_8cpp.html
│   ├── _edit_hotkey_dialog_8h.html
│   ├── _edit_hotkey_dialog_8h_source.html
│   ├── _fast_fourier_transform_8h_source.html
│   ├── _general_settings_page_8cpp.html
│   ├── _general_settings_page_8h.html
│   ├── _general_settings_page_8h_source.html
│   ├── _global_8h_source.html
│   ├── _global_config_8cpp.html
│   ├── _global_config_8h.html
│   ├── _global_config_8h_source.html
│   ├── _global_hotkey_8cpp.html
│   ├── _global_hotkey_8h.html
│   ├── _global_hotkey_8h_source.html
│   ├── _hotkeys_settings_page_8cpp.html
│   ├── _hotkeys_settings_page_8h.html
│   ├── _hotkeys_settings_page_8h_source.html
│   ├── _hotkeys_table_widget_8cpp.html
│   ├── _hotkeys_table_widget_8h.html
│   ├── _hotkeys_table_widget_8h_source.html
│   ├── _i_o_8h_source.html
│   ├── _load_music_thread_8cpp.html
│   ├── _load_music_thread_8h.html
│   ├── _load_music_thread_8h_source.html
│   ├── _lrc_demo_8cpp.html
│   ├── _lrc_demo_8h.html
│   ├── _lrc_demo_8h_source.html
│   ├── _lrc_portrait_panel_8cpp.html
│   ├── _lrc_portrait_panel_8h.html
│   ├── _lrc_portrait_panel_8h_source.html
│   ├── _lrc_settings_page_8cpp.html
│   ├── _lrc_settings_page_8h.html
│   ├── _lrc_settings_page_8h_source.html
│   ├── _lrc_thread_8cpp.html
│   ├── _lrc_thread_8h.html
│   ├── _lrc_thread_8h_source.html
│   ├── _main_widget_8h.html
│   ├── _main_widget_8h_source.html
│   ├── _media_widget_8cpp.html
│   ├── _media_widget_8h.html
│   ├── _media_widget_8h_source.html
│   ├── _min_music_widget_8cpp.html
│   ├── _min_music_widget_8h.html
│   ├── _min_music_widget_8h_source.html
│   ├── _music_info_entity_8cpp.html
│   ├── _music_info_entity_8h.html
│   ├── _music_info_entity_8h_source.html
│   ├── _music_list_8cpp.html
│   ├── _music_list_8h.html
│   ├── _music_list_8h_source.html
│   ├── _music_list_save_format_entity_8cpp.html
│   ├── _music_list_save_format_entity_8h.html
│   ├── _music_list_save_format_entity_8h_source.html
│   ├── _music_list_widget_8cpp.html
│   ├── _music_list_widget_8h.html
│   ├── _music_list_widget_8h_source.html
│   ├── _music_lrc_8cpp.html
│   ├── _music_lrc_8h.html
│   ├── _music_lrc_8h_source.html
│   ├── _no_focus_delegate_8h_source.html
│   ├── _radio_panel_8cpp.html
│   ├── _radio_panel_8h.html
│   ├── _radio_panel_8h_source.html
│   ├── _ranking_panel_8cpp.html
│   ├── _ranking_panel_8h.html
│   ├── _ranking_panel_8h_source.html
│   ├── _search_panel_8cpp.html
│   ├── _search_panel_8h.html
│   ├── _search_panel_8h_source.html
│   ├── _shared_dialog_8cpp.html
│   ├── _shared_dialog_8h.html
│   ├── _shared_dialog_8h_source.html
│   ├── _sound_control_8cpp.html
│   ├── _sound_control_8h.html
│   ├── _sound_control_8h_source.html
│   ├── _spectro_graph_8cpp.html
│   ├── _spectro_graph_8h.html
│   ├── _spectro_graph_8h_source.html
│   ├── _status_define_8h.html
│   ├── _status_define_8h_source.html
│   ├── _stream_8h_source.html
│   ├── _t_r_8h.html
│   ├── _t_r_8h_source.html
│   ├── _thanks_page_8cpp.html
│   ├── _thanks_page_8h.html
│   ├── _thanks_page_8h_source.html
│   ├── _thread_8h_source.html
│   ├── _update_page_8cpp.html
│   ├── _update_page_8h.html
│   ├── _update_page_8h_source.html
│   ├── _utils_8h_source.html
│   ├── annotated.html
│   ├── class_about_page-members.html
│   ├── class_about_page.html
│   ├── class_about_panel-members.html
│   ├── class_about_panel.html
│   ├── class_album_thread-members.html
│   ├── class_album_thread.html
│   ├── class_author_page-members.html
│   ├── class_author_page.html
│   ├── class_c_audio_stream-members.html
│   ├── class_c_audio_stream.html
│   ├── class_c_basic_player-members.html
│   ├── class_c_basic_player.html
│   ├── class_c_critical_section-members.html
│   ├── class_c_critical_section.html
│   ├── class_c_custom_memory_stream-members.html
│   ├── class_c_custom_memory_stream.html
│   ├── class_c_fast_fourier_transform-members.html
│   ├── class_c_fast_fourier_transform.html
│   ├── class_c_file_input-members.html
│   ├── class_c_file_input.html
│   ├── class_c_file_stream-members.html
│   ├── class_c_file_stream.html
│   ├── class_c_handle_stream-members.html
│   ├── class_c_handle_stream.html
│   ├── class_c_input-members.html
│   ├── class_c_input.html
│   ├── class_c_memory_stream-members.html
│   ├── class_c_memory_stream.html
│   ├── class_c_mp3_input-members.html
│   ├── class_c_mp3_input.html
│   ├── class_c_play_thread-members.html
│   ├── class_c_play_thread.html
│   ├── class_c_spectrum_analyser-members.html
│   ├── class_c_spectrum_analyser.html
│   ├── class_c_spectrum_analyser_thread-members.html
│   ├── class_c_spectrum_analyser_thread.html
│   ├── class_c_stream-members.html
│   ├── class_c_stream.html
│   ├── class_c_streamed_input-members.html
│   ├── class_c_streamed_input.html
│   ├── class_c_system-members.html
│   ├── class_c_system.html
│   ├── class_c_thread-members.html
│   ├── class_c_thread.html
│   ├── class_c_vorbis_input-members.html
│   ├── class_c_vorbis_input.html
│   ├── class_c_wave_converter-members.html
│   ├── class_c_wave_converter.html
│   ├── class_c_wave_input-members.html
│   ├── class_c_wave_input.html
│   ├── class_c_wma_input-members.html
│   ├── class_c_wma_input.html
│   ├── class_collection_panel-members.html
│   ├── class_collection_panel.html
│   ├── class_config_dialog-members.html
│   ├── class_config_dialog.html
│   ├── class_d_b_module-members.html
│   ├── class_d_b_module.html
│   ├── class_d_s___start_buffer_helper-members.html
│   ├── class_d_s___start_buffer_helper.html
│   ├── class_d_s___start_buffer_helper_1_1_data-members.html
│   ├── class_d_s___start_buffer_helper_1_1_data.html
│   ├── class_download_list_panel-members.html
│   ├── class_download_list_panel.html
│   ├── class_download_settings_page-members.html
│   ├── class_download_settings_page.html
│   ├── class_edit_hotkey_dialog-members.html
│   ├── class_edit_hotkey_dialog.html
│   ├── class_general_settings_page-members.html
│   ├── class_general_settings_page.html
│   ├── class_global_config-members.html
│   ├── class_global_config.html
│   ├── class_global_hot_key-members.html
│   ├── class_global_hot_key.html
│   ├── class_hot_keys_settings_page-members.html
│   ├── class_hot_keys_settings_page.html
│   ├── class_hot_keys_table_widget-members.html
│   ├── class_hot_keys_table_widget.html
│   ├── class_load_music_thread-members.html
│   ├── class_load_music_thread.html
│   ├── class_load_music_thread_event-members.html
│   ├── class_load_music_thread_event.html
│   ├── class_lrc_demo-members.html
│   ├── class_lrc_demo.html
│   ├── class_lrc_portrait_panel-members.html
│   ├── class_lrc_portrait_panel.html
│   ├── class_lrc_settings_page-members.html
│   ├── class_lrc_settings_page.html
│   ├── class_lrc_thread-members.html
│   ├── class_lrc_thread.html
│   ├── class_main_widget-members.html
│   ├── class_main_widget.html
│   ├── class_media_widget-members.html
│   ├── class_media_widget.html
│   ├── class_min_music_widget-members.html
│   ├── class_min_music_widget.html
│   ├── class_music_info_entity-members.html
│   ├── class_music_info_entity.html
│   ├── class_music_list-members.html
│   ├── class_music_list.html
│   ├── class_music_list_save_format_entity-members.html
│   ├── class_music_list_save_format_entity.html
│   ├── class_music_list_widget-members.html
│   ├── class_music_list_widget.html
│   ├── class_music_lrc-members.html
│   ├── class_music_lrc.html
│   ├── class_no_focus_delegate-members.html
│   ├── class_no_focus_delegate.html
│   ├── class_radio_panel-members.html
│   ├── class_radio_panel.html
│   ├── class_ranking_panel-members.html
│   ├── class_ranking_panel.html
│   ├── class_search_panel-members.html
│   ├── class_search_panel.html
│   ├── class_shared_dialog-members.html
│   ├── class_shared_dialog.html
│   ├── class_signal-members.html
│   ├── class_signal.html
│   ├── class_signal1-members.html
│   ├── class_signal1.html
│   ├── class_signal2-members.html
│   ├── class_signal2.html
│   ├── class_signal3-members.html
│   ├── class_signal3.html
│   ├── class_signal4-members.html
│   ├── class_signal4.html
│   ├── class_signal5-members.html
│   ├── class_signal5.html
│   ├── class_signal6-members.html
│   ├── class_signal6.html
│   ├── class_signal7-members.html
│   ├── class_signal7.html
│   ├── class_signal8-members.html
│   ├── class_signal8.html
│   ├── class_signal9-members.html
│   ├── class_signal9.html
│   ├── class_slot-members.html
│   ├── class_slot.html
│   ├── class_slot1-members.html
│   ├── class_slot1.html
│   ├── class_slot2-members.html
│   ├── class_slot2.html
│   ├── class_slot3-members.html
│   ├── class_slot3.html
│   ├── class_slot4-members.html
│   ├── class_slot4.html
│   ├── class_slot5-members.html
│   ├── class_slot5.html
│   ├── class_slot6-members.html
│   ├── class_slot6.html
│   ├── class_slot7-members.html
│   ├── class_slot7.html
│   ├── class_slot8-members.html
│   ├── class_slot8.html
│   ├── class_slot9-members.html
│   ├── class_slot9.html
│   ├── class_slot_base-members.html
│   ├── class_slot_base.html
│   ├── class_slot_base1-members.html
│   ├── class_slot_base1.html
│   ├── class_slot_base2-members.html
│   ├── class_slot_base2.html
│   ├── class_slot_base3-members.html
│   ├── class_slot_base3.html
│   ├── class_slot_base4-members.html
│   ├── class_slot_base4.html
│   ├── class_slot_base5-members.html
│   ├── class_slot_base5.html
│   ├── class_slot_base6-members.html
│   ├── class_slot_base6.html
│   ├── class_slot_base7-members.html
│   ├── class_slot_base7.html
│   ├── class_slot_base8-members.html
│   ├── class_slot_base8.html
│   ├── class_slot_base9-members.html
│   ├── class_slot_base9.html
│   ├── class_slot_impl-members.html
│   ├── class_slot_impl.html
│   ├── class_slot_impl1-members.html
│   ├── class_slot_impl1.html
│   ├── class_slot_impl2-members.html
│   ├── class_slot_impl2.html
│   ├── class_slot_impl3-members.html
│   ├── class_slot_impl3.html
│   ├── class_slot_impl4-members.html
│   ├── class_slot_impl4.html
│   ├── class_slot_impl5-members.html
│   ├── class_slot_impl5.html
│   ├── class_slot_impl6-members.html
│   ├── class_slot_impl6.html
│   ├── class_slot_impl7-members.html
│   ├── class_slot_impl7.html
│   ├── class_slot_impl8-members.html
│   ├── class_slot_impl8.html
│   ├── class_slot_impl9-members.html
│   ├── class_slot_impl9.html
│   ├── class_sound_control-members.html
│   ├── class_sound_control.html
│   ├── class_spectrograph-members.html
│   ├── class_spectrograph.html
│   ├── class_thanks_page-members.html
│   ├── class_thanks_page.html
│   ├── class_update_page-members.html
│   ├── class_update_page.html
│   ├── classes.html
│   ├── dir_0b6ee6e7e9547e675db4add2e5de97da.html
│   ├── dir_39ce8d35579d5eb10e41a1450265d156.html
│   ├── dir_4d857fb7e9085ae5b88ad2c12868c8c8.html
│   ├── dir_800159ee4c5072e219532c73d0742501.html
│   ├── dir_8f184a2117dd7a79280d84efd9c8507d.html
│   ├── dir_9ee117705b853058628419415d05a484.html
│   ├── dir_a625c670f828dfaff80322b07e1365a6.html
│   ├── dir_abd33bfc052dc4b28a34b6a77a4d5bc7.html
│   ├── dir_bbfe1637124d83753e4f60ab7a9ad152.html
│   ├── dir_c211989d999a6a303a2b08461c3c22b8.html
│   ├── dir_c6310732a22f63c0c2fc5595561e68f1.html
│   ├── dir_db9980dfd90e37473d4dfba3eb448642.html
│   ├── doxygen.css
│   ├── dynsections.js
│   ├── files.html
│   ├── functions.html
│   ├── functions_a.html
│   ├── functions_c.html
│   ├── functions_d.html
│   ├── functions_e.html
│   ├── functions_f.html
│   ├── functions_func.html
│   ├── functions_func_c.html
│   ├── functions_func_d.html
│   ├── functions_func_e.html
│   ├── functions_func_f.html
│   ├── functions_func_g.html
│   ├── functions_func_h.html
│   ├── functions_func_i.html
│   ├── functions_func_l.html
│   ├── functions_func_m.html
│   ├── functions_func_n.html
│   ├── functions_func_o.html
│   ├── functions_func_p.html
│   ├── functions_func_r.html
│   ├── functions_func_s.html
│   ├── functions_func_t.html
│   ├── functions_func_u.html
│   ├── functions_func_v.html
│   ├── functions_func_~.html
│   ├── functions_g.html
│   ├── functions_h.html
│   ├── functions_i.html
│   ├── functions_l.html
│   ├── functions_m.html
│   ├── functions_n.html
│   ├── functions_o.html
│   ├── functions_p.html
│   ├── functions_r.html
│   ├── functions_s.html
│   ├── functions_t.html
│   ├── functions_u.html
│   ├── functions_v.html
│   ├── functions_vars.html
│   ├── functions_~.html
│   ├── globals.html
│   ├── globals_defs.html
│   ├── globals_enum.html
│   ├── globals_eval.html
│   ├── globals_vars.html
│   ├── hierarchy.html
│   ├── index.html
│   ├── jquery.js
│   ├── main_8cpp.html
│   ├── search/
│   │   ├── all_0.html
│   │   ├── all_0.js
│   │   ├── all_1.html
│   │   ├── all_1.js
│   │   ├── all_10.html
│   │   ├── all_10.js
│   │   ├── all_11.html
│   │   ├── all_11.js
│   │   ├── all_12.html
│   │   ├── all_12.js
│   │   ├── all_13.html
│   │   ├── all_13.js
│   │   ├── all_14.html
│   │   ├── all_14.js
│   │   ├── all_15.html
│   │   ├── all_15.js
│   │   ├── all_16.html
│   │   ├── all_16.js
│   │   ├── all_17.html
│   │   ├── all_17.js
│   │   ├── all_2.html
│   │   ├── all_2.js
│   │   ├── all_3.html
│   │   ├── all_3.js
│   │   ├── all_4.html
│   │   ├── all_4.js
│   │   ├── all_5.html
│   │   ├── all_5.js
│   │   ├── all_6.html
│   │   ├── all_6.js
│   │   ├── all_7.html
│   │   ├── all_7.js
│   │   ├── all_8.html
│   │   ├── all_8.js
│   │   ├── all_9.html
│   │   ├── all_9.js
│   │   ├── all_a.html
│   │   ├── all_a.js
│   │   ├── all_b.html
│   │   ├── all_b.js
│   │   ├── all_c.html
│   │   ├── all_c.js
│   │   ├── all_d.html
│   │   ├── all_d.js
│   │   ├── all_e.html
│   │   ├── all_e.js
│   │   ├── all_f.html
│   │   ├── all_f.js
│   │   ├── classes_0.html
│   │   ├── classes_0.js
│   │   ├── classes_1.html
│   │   ├── classes_1.js
│   │   ├── classes_2.html
│   │   ├── classes_2.js
│   │   ├── classes_3.html
│   │   ├── classes_3.js
│   │   ├── classes_4.html
│   │   ├── classes_4.js
│   │   ├── classes_5.html
│   │   ├── classes_5.js
│   │   ├── classes_6.html
│   │   ├── classes_6.js
│   │   ├── classes_7.html
│   │   ├── classes_7.js
│   │   ├── classes_8.html
│   │   ├── classes_8.js
│   │   ├── classes_9.html
│   │   ├── classes_9.js
│   │   ├── classes_a.html
│   │   ├── classes_a.js
│   │   ├── classes_b.html
│   │   ├── classes_b.js
│   │   ├── classes_c.html
│   │   ├── classes_c.js
│   │   ├── classes_d.html
│   │   ├── classes_d.js
│   │   ├── classes_e.html
│   │   ├── classes_e.js
│   │   ├── classes_f.html
│   │   ├── classes_f.js
│   │   ├── defines_0.html
│   │   ├── defines_0.js
│   │   ├── defines_1.html
│   │   ├── defines_1.js
│   │   ├── defines_2.html
│   │   ├── defines_2.js
│   │   ├── defines_3.html
│   │   ├── defines_3.js
│   │   ├── defines_4.html
│   │   ├── defines_4.js
│   │   ├── defines_5.html
│   │   ├── defines_5.js
│   │   ├── defines_6.html
│   │   ├── defines_6.js
│   │   ├── defines_7.html
│   │   ├── defines_7.js
│   │   ├── defines_8.html
│   │   ├── defines_8.js
│   │   ├── defines_9.html
│   │   ├── defines_9.js
│   │   ├── defines_a.html
│   │   ├── defines_a.js
│   │   ├── defines_b.html
│   │   ├── defines_b.js
│   │   ├── defines_c.html
│   │   ├── defines_c.js
│   │   ├── enums_0.html
│   │   ├── enums_0.js
│   │   ├── enums_1.html
│   │   ├── enums_1.js
│   │   ├── enumvalues_0.html
│   │   ├── enumvalues_0.js
│   │   ├── enumvalues_1.html
│   │   ├── enumvalues_1.js
│   │   ├── files_0.html
│   │   ├── files_0.js
│   │   ├── files_1.html
│   │   ├── files_1.js
│   │   ├── files_2.html
│   │   ├── files_2.js
│   │   ├── files_3.html
│   │   ├── files_3.js
│   │   ├── files_4.html
│   │   ├── files_4.js
│   │   ├── files_5.html
│   │   ├── files_5.js
│   │   ├── files_6.html
│   │   ├── files_6.js
│   │   ├── files_7.html
│   │   ├── files_7.js
│   │   ├── files_8.html
│   │   ├── files_8.js
│   │   ├── files_9.html
│   │   ├── files_9.js
│   │   ├── files_a.html
│   │   ├── files_a.js
│   │   ├── files_b.html
│   │   ├── files_b.js
│   │   ├── files_c.html
│   │   ├── files_c.js
│   │   ├── functions_0.html
│   │   ├── functions_0.js
│   │   ├── functions_1.html
│   │   ├── functions_1.js
│   │   ├── functions_10.html
│   │   ├── functions_10.js
│   │   ├── functions_11.html
│   │   ├── functions_11.js
│   │   ├── functions_12.html
│   │   ├── functions_12.js
│   │   ├── functions_2.html
│   │   ├── functions_2.js
│   │   ├── functions_3.html
│   │   ├── functions_3.js
│   │   ├── functions_4.html
│   │   ├── functions_4.js
│   │   ├── functions_5.html
│   │   ├── functions_5.js
│   │   ├── functions_6.html
│   │   ├── functions_6.js
│   │   ├── functions_7.html
│   │   ├── functions_7.js
│   │   ├── functions_8.html
│   │   ├── functions_8.js
│   │   ├── functions_9.html
│   │   ├── functions_9.js
│   │   ├── functions_a.html
│   │   ├── functions_a.js
│   │   ├── functions_b.html
│   │   ├── functions_b.js
│   │   ├── functions_c.html
│   │   ├── functions_c.js
│   │   ├── functions_d.html
│   │   ├── functions_d.js
│   │   ├── functions_e.html
│   │   ├── functions_e.js
│   │   ├── functions_f.html
│   │   ├── functions_f.js
│   │   ├── nomatches.html
│   │   ├── search.css
│   │   ├── search.js
│   │   ├── variables_0.html
│   │   ├── variables_0.js
│   │   ├── variables_1.html
│   │   ├── variables_1.js
│   │   ├── variables_2.html
│   │   ├── variables_2.js
│   │   ├── variables_3.html
│   │   ├── variables_3.js
│   │   ├── variables_4.html
│   │   ├── variables_4.js
│   │   ├── variables_5.html
│   │   ├── variables_5.js
│   │   ├── variables_6.html
│   │   └── variables_6.js
│   ├── signal__slot_8h_source.html
│   ├── struct___a_c_m_wave_format-members.html
│   ├── struct___a_c_m_wave_format.html
│   ├── struct___d_v_i___a_d_p_c_m___e_n_c_o_d_e___s_t_a_t_e___s_t_e_r_e_o-members.html
│   ├── struct___d_v_i___a_d_p_c_m___e_n_c_o_d_e___s_t_a_t_e___s_t_e_r_e_o.html
│   ├── struct___d_v_i___a_d_p_c_m___i_n_f_o-members.html
│   ├── struct___d_v_i___a_d_p_c_m___i_n_f_o.html
│   ├── struct___d_v_i___a_d_p_c_m___s_t_a_t_e___s_t_e_r_e_o-members.html
│   ├── struct___d_v_i___a_d_p_c_m___s_t_a_t_e___s_t_e_r_e_o.html
│   ├── struct___d_v_i_a_d_p_c_m_block_header-members.html
│   ├── struct___d_v_i_a_d_p_c_m_block_header.html
│   ├── struct___d_v_i_a_d_p_c_m_header-members.html
│   ├── struct___d_v_i_a_d_p_c_m_header.html
│   ├── struct___i_d3_tag-members.html
│   ├── struct___i_d3_tag.html
│   ├── struct___i_d3v2_frame-members.html
│   ├── struct___i_d3v2_frame.html
│   ├── struct___i_d3v2_tag-members.html
│   ├── struct___i_d3v2_tag.html
│   ├── struct___m_s___a_d_p_c_m___c_o_e_f___s_e_t-members.html
│   ├── struct___m_s___a_d_p_c_m___c_o_e_f___s_e_t.html
│   ├── struct___m_s___a_d_p_c_m___i_n_f_o-members.html
│   ├── struct___m_s___a_d_p_c_m___i_n_f_o.html
│   ├── struct___m_s_a_d_p_c_m_block_header_mono-members.html
│   ├── struct___m_s_a_d_p_c_m_block_header_mono.html
│   ├── struct___m_s_a_d_p_c_m_block_header_stereo-members.html
│   ├── struct___m_s_a_d_p_c_m_block_header_stereo.html
│   ├── struct___riff_header-members.html
│   ├── struct___riff_header.html
│   ├── struct___w_m_a___s_y_n_c___r_e_a_d_e_r-members.html
│   ├── struct___w_m_a___s_y_n_c___r_e_a_d_e_r.html
│   ├── struct___w_m_a_format_spec-members.html
│   ├── struct___w_m_a_format_spec.html
│   ├── struct___wave_header-members.html
│   ├── struct___wave_header.html
│   ├── struct___wave_header_ex-members.html
│   ├── struct___wave_header_ex.html
│   ├── struct_d_s___audio_device_cache-members.html
│   ├── struct_d_s___audio_device_cache.html
│   ├── struct_d_s___info-members.html
│   ├── struct_d_s___info.html
│   ├── struct_d_s___refresh_cache_struct-members.html
│   ├── struct_d_s___refresh_cache_struct.html
│   ├── struct_w_a_v_e_f_o_r_m_a_t_e_x_t_e_n_s_i_b_l_e-members.html
│   ├── struct_w_a_v_e_f_o_r_m_a_t_e_x_t_e_n_s_i_b_l_e.html
│   ├── structdither-members.html
│   ├── structdither.html
│   ├── structtag___direct_audio_device_description-members.html
│   ├── structtag___direct_audio_device_description.html
│   ├── structxing-members.html
│   ├── structxing.html
│   └── tabs.css
├── doc.bat
└── main.cpp

================================================
FILE CONTENTS
================================================

================================================
FILE: 3rdParty/equalizer/eq.cpp
================================================
/*
 *   PCM time-domain equalizer
 *
 *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users.sourceforge.net>
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *   $Id: eq.c,v 1.12 2006/01/15 00:13:49 liebremx Exp $
 */
#include "iir.h"
#include <stdio.h>
#include <string.h>

#include <math.h>
#include "eq.h"

static bool on = false;
void   init_equliazer(int nBand)
{
	if(nBand != 0 && nBand < EQ_MAX_BANDS)
	{
		//nBand = nBand;
	}
	else
	{
		nBand = 10;
	}
    init_iir(nBand);
}

void   uninit_equliazer()
{
	clean_history();
}


void set_eq_value(float value, int index, int chn)
{
    /* Map the gain and preamp values */
    if (index >= 0)
	{
        set_gain(index, chn, 2.5220207857061455181125E-01 * exp(8.0178361802353992349168E-02 * value) - 2.5220207852836562523180E-01 , value);
	}
    else
	{
        /* -12dB .. 12dB mapping */
        set_preamp(chn, 9.9999946497217584440165E-01 * exp(6.9314738656671842642609E-02 * value) + 3.7119444716771825623636E-07);
	}
}

/* 
 * The main stuff
 */
int do_equliazer(short * d, int length, int srate, int nch)
{
    return iir(d, length, srate, nch);
}


================================================
FILE: 3rdParty/equalizer/eq.h
================================================
/*
 *   PCM time-domain equalizer
 *
 *   Copyright (C) 2002  Felipe Rivera <liebremx at users.sourceforge.net>
 *
 *   19.08.2002 Initial release for XMMS
 *
 *   
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *   $Id: eq.h,v 1.6 2006/01/15 00:16:08 liebremx Exp $
 */
#ifndef EQ_H
#define EQ_H
void   init_equliazer(int nBand = 0 );
void   uninit_equliazer() ; 
void   set_eq_value(float value, int index, int chn);
int    do_equliazer(short * d, int length, int srate, int nch);
int    get_eq_band_count();
float  get_eq_value(int index , int chn);

#endif


================================================
FILE: 3rdParty/equalizer/iir.h
================================================
/*
 *   PCM time-domain equalizer
 *
 *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users.sourceforge.net>
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *   $Id: iir.h,v 1.13 2006/01/15 00:26:32 liebremx Exp $
 */
#ifndef IIR_H
#define IIR_H

#include "iir_cfs.h"

/*
 * Flush-to-zero to avoid flooding the CPU with underflow exceptions 
 */
#ifdef SSE_MATH
#define FTZ 0x8000
#define FTZ_ON { \
    unsigned int mxcsr; \
  __asm__  __volatile__ ("stmxcsr %0" : "=m" (*&mxcsr)); \
  mxcsr |= FTZ; \
  __asm__  __volatile__ ("ldmxcsr %0" : : "m" (*&mxcsr)); \
}
#define FTZ_OFF { \
    unsigned int mxcsr; \
  __asm__  __volatile__ ("stmxcsr %0" : "=m" (*&mxcsr)); \
  mxcsr &= ~FTZ; \
  __asm__  __volatile__ ("ldmxcsr %0" : : "m" (*&mxcsr)); \
}
#else
#define FTZ_ON
#define FTZ_OFF
#endif



typedef double sample_t;
typedef sample_t level_t;

/* Max bands supported by the code
FIXME: 31 bands processing IS HARD ON THE PROCESSOR
On a PIII@900Mhz I got ~45% of CPU usage
Have to improve the filter implementation
Got it down to ~20% for 31 Bands
Still MMX/3DNow!/SSE whatever, can bring it down */
#define EQ_MAX_BANDS 32
/* Number of channels (Stereo) */
#define EQ_CHANNELS 2

#define  EXTRA_FILTER true

/*
 * Function prototypes
 */
void init_iir(int nBand);
void clean_history();
void set_gain(int index, int chn, double val , float rawValue);
void set_preamp(int chn, double val);
int  iir(short * d, int length, int srate, int nch);
//extern sIIRCoefficients *iir_cf;




#endif /* #define IIR_H */



================================================
FILE: 3rdParty/equalizer/iir_cfs.cpp
================================================
/*
 *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users.sourceforge.net>
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *
 *   Coefficient stuff
 *
 *   $Id: iir_cfs.c,v 1.2 2006/01/15 00:17:46 liebremx Exp $
 */

#include "iir_cfs.h"
#include <stdio.h>
#include <math.h>

/*************************** 
 * IIR filter coefficients *
 ***************************/ 
#pragma pack(push,1)
static sIIRCoefficients iir_cf10_11k_11025[10] ;
static sIIRCoefficients iir_cf10_22k_22050[10] ;
static sIIRCoefficients iir_cforiginal10_44100[10] ;
static sIIRCoefficients iir_cforiginal10_48000[10] ;
static sIIRCoefficients iir_cf10_44100[10] ;
static sIIRCoefficients iir_cf10_48000[10] ;
static sIIRCoefficients iir_cf15_44100[15] ;
static sIIRCoefficients iir_cf15_48000[15] ;
static sIIRCoefficients iir_cf25_44100[25] ;
static sIIRCoefficients iir_cf25_48000[25] ;
static sIIRCoefficients iir_cf31_44100[31] ;
static sIIRCoefficients iir_cf31_48000[31] ;
#pragma pack(pop)
/****************************************************************** 
 * Definitions and data structures to calculate the coefficients
 ******************************************************************/
static const double band_f011k[] =
{ 31, 62, 125, 250, 500, 1000, 2000, 3000, 4000, 5500 
};
static const double band_f022k[] =
{ 31, 62, 125, 250, 500, 1000, 2000, 4000, 8000, 11000 
};
static const double band_f010[] =
{ 31, 62, 125, 250, 500, 1000, 2000, 4000, 8000, 16000 
};
static const double band_original_f010[] =
{ 60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000 
};
static const double band_f015[] =
{ 25,40,63,100,160,250,400,630,1000,1600,2500,4000,6300,10000,16000
};
static const double band_f025[] =
{ 20,31.5,40,50,80,100,125,160,250,315,400,500,800,
  1000,1250,1600,2500,3150,4000,5000,8000,10000,12500,16000,20000
};
static const double band_f031[] =
{ 20,25,31.5,40,50,63,80,100,125,160,200,250,315,400,500,630,800,
  1000,1250,1600,2000,2500,3150,4000,5000,6300,8000,10000,12500,16000,20000
};

#define GAIN_F0 1.0
#define GAIN_F1 GAIN_F0 / M_SQRT2

#define SAMPLING_FREQ 44100.0
#define TETA(f) (2*M_PI*(double)f/bands[n].sfreq)
#define TWOPOWER(value) (value * value)

#define BETA2(tf0, tf) \
(TWOPOWER(GAIN_F1)*TWOPOWER(cos(tf0)) \
 - 2.0 * TWOPOWER(GAIN_F1) * cos(tf) * cos(tf0) \
 + TWOPOWER(GAIN_F1) \
 - TWOPOWER(GAIN_F0) * TWOPOWER(sin(tf)))
#define BETA1(tf0, tf) \
    (2.0 * TWOPOWER(GAIN_F1) * TWOPOWER(cos(tf)) \
     + TWOPOWER(GAIN_F1) * TWOPOWER(cos(tf0)) \
     - 2.0 * TWOPOWER(GAIN_F1) * cos(tf) * cos(tf0) \
     - TWOPOWER(GAIN_F1) + TWOPOWER(GAIN_F0) * TWOPOWER(sin(tf)))
#define BETA0(tf0, tf) \
    (0.25 * TWOPOWER(GAIN_F1) * TWOPOWER(cos(tf0)) \
     - 0.5 * TWOPOWER(GAIN_F1) * cos(tf) * cos(tf0) \
     + 0.25 * TWOPOWER(GAIN_F1) \
     - 0.25 * TWOPOWER(GAIN_F0) * TWOPOWER(sin(tf)))

#define GAMMA(beta, tf0) ((0.5 + beta) * cos(tf0))
#define ALPHA(beta) ((0.5 - beta)/2.0)

struct {
    sIIRCoefficients *coeffs;
    const double *cfs;
    double octave;
    int band_count;
    double sfreq;
} bands[] = {
  { iir_cf10_11k_11025,     band_f011k,         1.0,     10, 11025.0 },
  { iir_cf10_22k_22050,     band_f022k,         1.0,     10, 22050.0 },
  { iir_cforiginal10_44100, band_original_f010, 1.0,     10, 44100.0 },
  { iir_cforiginal10_48000, band_original_f010, 1.0,     10, 48000.0 },
  { iir_cf10_44100,         band_f010,          1.0,     10, 44100.0 },
  { iir_cf10_48000,         band_f010,          1.0,     10, 48000.0 },
  { iir_cf15_44100,         band_f015,          2.0/3.0, 15, 44100.0 },
  { iir_cf15_48000,         band_f015,          2.0/3.0, 15, 48000.0 },
  { iir_cf25_44100,         band_f025,          1.0/3.0, 25, 44100.0 },
  { iir_cf25_48000,         band_f025,          1.0/3.0, 25, 48000.0 },
  { iir_cf31_44100,         band_f031,          1.0/3.0, 31, 44100.0 },
  { iir_cf31_48000,         band_f031,          1.0/3.0, 31, 48000.0 },
  { 0 }
};

/*************
 * Functions *
 *************/

/* Get the coeffs for a given number of bands and sampling frequency */
sIIRCoefficients* get_coeffs(int *bands, int sfreq, bool use_xmms_original_freqs)
{
  sIIRCoefficients *iir_cf = 0;
  switch(sfreq)
  {
    case 11025: iir_cf = iir_cf10_11k_11025;
                *bands = 10;
                break;
    case 22050: iir_cf = iir_cf10_22k_22050;
                *bands = 10;
                break;
    case 48000: 
                switch(*bands)
                {
                  case 31: iir_cf = iir_cf31_48000; break;
                  case 25: iir_cf = iir_cf25_48000; break;
                  case 15: iir_cf = iir_cf15_48000; break;
                  default:
                           iir_cf = use_xmms_original_freqs ? iir_cforiginal10_48000 : iir_cf10_48000;
                           break;
                }
                break;
    default:
                switch(*bands)
                {
                  case 31: iir_cf = iir_cf31_44100; break;
                  case 25: iir_cf = iir_cf25_44100; break;
                  case 15: iir_cf = iir_cf15_44100; break;
                  default:
                           iir_cf = use_xmms_original_freqs ? iir_cforiginal10_44100 : iir_cf10_44100;
                           break;
                }
                break;
  }
  return iir_cf;
}

/* Get the freqs at both sides of F0. These will be cut at -3dB */
static void find_f1_and_f2(double f0, double octave_percent, double *f1, double *f2)
{
    double octave_factor = pow(2.0, octave_percent/2.0);
    *f1 = f0/octave_factor;
    *f2 = f0*octave_factor;
}

/* Find the quadratic root
 * Always return the smallest root */
static int find_root(double a, double b, double c, double *x0) {
  double k = c-((b*b)/(4.*a));
  double h = -(b/(2.*a));
  double x1 = 0.;
  if (-(k/a) < 0.)
    return -1; 
  *x0 = h - sqrt(-(k/a));
  x1 = h + sqrt(-(k/a));
  if (x1 < *x0)
    *x0 = x1;
  return 0;
}

/* Calculate all the coefficients as specified in the bands[] array */
void calc_coeffs()
{
  int i, n;
  double f1, f2;
  double x0;

  n = 0;
  for (; bands[n].cfs; n++) {
    double *freqs = (double *)bands[n].cfs;
    for (i=0; i<bands[n].band_count; i++)
    {

      /* Find -3dB frequencies for the center freq */
      find_f1_and_f2(freqs[i], bands[n].octave, &f1, &f2);
      /* Find Beta */
      if ( find_root(
            BETA2(TETA(freqs[i]), TETA(f1)), 
            BETA1(TETA(freqs[i]), TETA(f1)), 
            BETA0(TETA(freqs[i]), TETA(f1)), 
            &x0) == 0)
      {
        /* Got a solution, now calculate the rest of the factors */
        /* Take the smallest root always (find_root returns the smallest one)
         *
         * NOTE: The IIR equation is
         *	y[n] = 2 * (alpha*(x[n]-x[n-2]) + gamma*y[n-1] - beta*y[n-2])
         *  Now the 2 factor has been distributed in the coefficients
         */
        /* Now store the coefficients */
        bands[n].coeffs[i].beta  = (float)(2.0 * x0);
        bands[n].coeffs[i].alpha = (float)(2.0 * ALPHA(x0));
        bands[n].coeffs[i].gamma = (float)(2.0 * GAMMA(x0, TETA(freqs[i])));
#ifdef DEBUG
        printf("Freq[%d]: %f. Beta: %.10e Alpha: %.10e Gamma %.10e\n",
            i, freqs[i], bands[n].coeffs[i].beta,
            bands[n].coeffs[i].alpha, bands[n].coeffs[i].gamma);
#endif
      } else {
        /* Shouldn't happen */
        bands[n].coeffs[i].beta = 0.;
        bands[n].coeffs[i].alpha = 0.;
        bands[n].coeffs[i].gamma = 0.;
        printf("  **** Where are the roots?\n");
      }
    }// for i
  }//for n
}


================================================
FILE: 3rdParty/equalizer/iir_cfs.h
================================================
/*
 *   PCM time-domain equalizer
 *
 *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users.sourceforge.net>
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *   $Id: iir_cfs.h,v 1.2 2006/01/15 00:17:46 liebremx Exp $
 */
#ifndef IIR_CFS_H
#define IIR_CFS_H
#include <math.h>
#define M_SQRT2 1.41421356237309504880 
#define M_PI    3.1415926
/* Coefficients entry */
typedef struct 
{
    float beta;
    float alpha; 
    float gamma;
    float dummy; // Word alignment
}sIIRCoefficients;

sIIRCoefficients* get_coeffs(int *bands, int sfreq, bool use_xmms_original_freqs);
void calc_coeffs();

#endif


================================================
FILE: 3rdParty/equalizer/iir_fpu.cpp
================================================
/*
 *   PCM time-domain equalizer
 *
 *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users sourceforge net>
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *   $Id: iir_fpu.c,v 1.4 2006/01/15 00:26:32 liebremx Exp $
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "iir.h"
#include "eq.h"
#include "iir_fpu.h"
#include <math.h>
static sXYData data_history[EQ_MAX_BANDS][EQ_CHANNELS];
static sXYData data_history2[EQ_MAX_BANDS][EQ_CHANNELS];
float gain[EQ_MAX_BANDS][EQ_CHANNELS];
float gain_raw_value[EQ_MAX_BANDS][EQ_CHANNELS];
/* random noise */
sample_t dither[256];
int di;




/* Volume gain 
* values should be between 0.0 and 1.0 
* Use the preamp from XMMS for now
* */


#ifdef BENCHMARK
#include "benchmark.h"
double timex = 0.0;
int count = 0;
unsigned int blength = 0;
#endif

/* 
* Global vars
*/
sIIRCoefficients *g_iir_cf;
float             g_preamp[EQ_CHANNELS];
int               g_rate;
int               g_band_count;

int    get_eq_band_count()
{
	return g_band_count;
}
void set_preamp(int chn, double val)
{
	g_preamp[chn] = (float)val;
}

/* Init the filters */
void init_iir(int nBand)
{
	for(int iBand = 0 ; iBand < EQ_MAX_BANDS ; iBand ++)
	{
		set_eq_value(20.0f , -iBand , 0) ;
		set_eq_value(20.0f , -iBand , 1) ;

		set_eq_value(0.0f , iBand , 0) ;
		set_eq_value(0.0f , iBand , 1) ;
	}
	calc_coeffs();
	/* XXX: Take all the eqcfg. stuff out of this file */
	g_band_count = nBand;
	g_rate = 44100;
	g_iir_cf = get_coeffs(&g_band_count, g_rate, false);
	clean_history();
}

void set_gain(int index, int chn, double val, float rawValue)
{
  gain[index][chn] = (float)val;
  gain_raw_value[index][chn] = rawValue;
}

float  get_eq_value(int index , int chn)
{
	return  gain_raw_value[index][chn] ;
}

void clean_history()
{
  int n;
  /* Zero the history arrays */
  memset(data_history , 0,  sizeof(sXYData) * EQ_MAX_BANDS * EQ_CHANNELS);
  memset(data_history2, 0,  sizeof(sXYData) * EQ_MAX_BANDS * EQ_CHANNELS);
  /* this is only needed if we use fpu code and there's no other place for
  the moment to init the dither array*/
  for (n = 0; n < 256; n++) 
  {
      dither[n] = (rand() % 4) - 2;
  }
  di = 0;
}

int iir(short * d, int length, int srate, int nch)
{
//  FTZ_ON;
   short *data = (short*)  d;
  /* Indexes for the history arrays
   * These have to be kept between calls to this function
   * hence they are static */
  static int i = 2, j = 1, k = 0;	

  int index, band, channel;
  int tempgint, halflength;
  sample_t out[EQ_CHANNELS], pcm[EQ_CHANNELS];

  // Load the correct filter table according to the sampling rate if needed
  if (srate != g_rate)
  {
    g_rate = srate;
    g_iir_cf = get_coeffs(&g_band_count, g_rate, false);
    clean_history();
  }

  /**
   * IIR filter equation is
   * y[n] = 2 * (alpha*(x[n]-x[n-2]) + gamma*y[n-1] - beta*y[n-2])
   *
   * NOTE: The 2 factor was introduced in the coefficients to save
   * 			a multiplication
   *
   * This algorithm cascades two filters to get nice filtering
   * at the expense of extra CPU cycles
   */
  /* 16bit, 2 bytes per sample, so divide by two the length of
   * the buffer (length is in bytes)
   */
  halflength = (length >> 1);
  for (index = 0; index < halflength; index+=nch)
  {
    /* For each channel */
    for (channel = 0; channel < nch; channel++)
    {
      pcm[channel] = data[index+channel];
      /* Preamp gain */
      pcm[channel] *= g_preamp[channel];
      
      /* add random noise */
      pcm[channel] += dither[di];

      out[channel] = 0.;
      /* For each band */
      for (band = 0; band < g_band_count; band++)
      {
        /* Store Xi(n) */
        data_history[band][channel].x[i] = pcm[channel];
        /* Calculate and store Yi(n) */
        data_history[band][channel].y[i] = 
          (
           /* 		= alpha * [x(n)-x(n-2)] */
           g_iir_cf[band].alpha * ( data_history[band][channel].x[i]   -  data_history[band][channel].x[k])
           /* 		+ gamma * y(n-1) */                                 /* 		- beta * y(n-2) */
           + g_iir_cf[band].gamma * data_history[band][channel].y[j]   - g_iir_cf[band].beta * data_history[band][channel].y[k]
       
       
          );
        /* 
         * The multiplication by 2.0 was 'moved' into the coefficients to save
         * CPU cycles here */
        /* Apply the gain  */
        out[channel] +=  data_history[band][channel].y[i]*gain[band][channel]; // * 2.0;
      } /* For each band */

      if (EXTRA_FILTER)
      {
        /* Filter the sample again */
        for (band = 0; band < g_band_count; band++)
        {
          /* Store Xi(n) */
          data_history2[band][channel].x[i] = out[channel];
          /* Calculate and store Yi(n) */
          data_history2[band][channel].y[i] = 
            (
             /* y(n) = alpha * [x(n)-x(n-2)] */
             g_iir_cf[band].alpha * (data_history2[band][channel].x[i]  -  data_history2[band][channel].x[k])
             /* 	    + gamma * y(n-1) */                               /* 		- beta * y(n-2) */ 
             + g_iir_cf[band].gamma * data_history2[band][channel].y[j] - g_iir_cf[band].beta * data_history2[band][channel].y[k]
             
             
            );
          /* Apply the gain */
          out[channel] +=  data_history2[band][channel].y[i]*gain[band][channel];
        } /* For each band */
      }

      /* Volume stuff
         Scale down original PCM sample and add it to the filters 
         output. This substitutes the multiplication by 0.25
         Go back to use the floating point multiplication before the
         conversion to give more dynamic range
         */
      out[channel] += pcm[channel]*0.25;
      
      /* remove random noise */
      out[channel] -= dither[di]*0.25;

      /* Round and convert to integer */
#ifdef ARCH_PPC
      tempgint = round_ppc(out[channel]);
#else
#ifdef ARCH_X86
      tempgint = round_trick(out[channel]);
#else
      tempgint = (int)out[channel];
#endif
#endif

      /* Limit the output */
      if (tempgint < -32768)
        data[index+channel] = -32768;
      else if (tempgint > 32767)
        data[index+channel] = 32767;
      else 
        data[index+channel] = tempgint;
    } /* For each channel */
    
    /* Wrap around the indexes */
    i = (i+1)%3;
    j = (j+1)%3;
    k = (k+1)%3;
    /* random noise index */
    di = (di + 1) % 256;

  }/* For each pair of samples */

//  FTZ_OFF;
  return length;
}


================================================
FILE: 3rdParty/equalizer/iir_fpu.h
================================================
/*
 *   PCM time-domain equalizer
 *
 *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users.sourceforge.net>
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *   $Id: iir_fpu.h,v 1.3 2006/01/15 00:26:32 liebremx Exp $$
 */
#ifndef IIR_FPU_H
#define IIR_FPU_H

#define sample_t double

/*
 * Normal FPU implementation data structures
 */
/* Coefficient history for the IIR filter */
typedef struct
{
    sample_t x[3]; /* x[n], x[n-1], x[n-2] */
    sample_t y[3]; /* y[n], y[n-1], y[n-2] */
    sample_t dummy1; // Word alignment
    sample_t dummy2;
}sXYData;

#endif


================================================
FILE: 3rdParty/libmad/include/bit.c
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: bit.c,v 1.12 2004/01/23 09:41:32 rob Exp $
 */

# ifdef HAVE_CONFIG_H
#  include "config.h"
# endif

# include "global.h"

# ifdef HAVE_LIMITS_H
#  include <limits.h>
# else
#  define CHAR_BIT  8
# endif

# include "bit.h"

/*
 * This is the lookup table for computing the CRC-check word.
 * As described in section 2.4.3.1 and depicted in Figure A.9
 * of ISO/IEC 11172-3, the generator polynomial is:
 *
 * G(X) = X^16 + X^15 + X^2 + 1
 */
static
unsigned short const crc_table[256] = {
  0x0000, 0x8005, 0x800f, 0x000a, 0x801b, 0x001e, 0x0014, 0x8011,
  0x8033, 0x0036, 0x003c, 0x8039, 0x0028, 0x802d, 0x8027, 0x0022,
  0x8063, 0x0066, 0x006c, 0x8069, 0x0078, 0x807d, 0x8077, 0x0072,
  0x0050, 0x8055, 0x805f, 0x005a, 0x804b, 0x004e, 0x0044, 0x8041,
  0x80c3, 0x00c6, 0x00cc, 0x80c9, 0x00d8, 0x80dd, 0x80d7, 0x00d2,
  0x00f0, 0x80f5, 0x80ff, 0x00fa, 0x80eb, 0x00ee, 0x00e4, 0x80e1,
  0x00a0, 0x80a5, 0x80af, 0x00aa, 0x80bb, 0x00be, 0x00b4, 0x80b1,
  0x8093, 0x0096, 0x009c, 0x8099, 0x0088, 0x808d, 0x8087, 0x0082,

  0x8183, 0x0186, 0x018c, 0x8189, 0x0198, 0x819d, 0x8197, 0x0192,
  0x01b0, 0x81b5, 0x81bf, 0x01ba, 0x81ab, 0x01ae, 0x01a4, 0x81a1,
  0x01e0, 0x81e5, 0x81ef, 0x01ea, 0x81fb, 0x01fe, 0x01f4, 0x81f1,
  0x81d3, 0x01d6, 0x01dc, 0x81d9, 0x01c8, 0x81cd, 0x81c7, 0x01c2,
  0x0140, 0x8145, 0x814f, 0x014a, 0x815b, 0x015e, 0x0154, 0x8151,
  0x8173, 0x0176, 0x017c, 0x8179, 0x0168, 0x816d, 0x8167, 0x0162,
  0x8123, 0x0126, 0x012c, 0x8129, 0x0138, 0x813d, 0x8137, 0x0132,
  0x0110, 0x8115, 0x811f, 0x011a, 0x810b, 0x010e, 0x0104, 0x8101,

  0x8303, 0x0306, 0x030c, 0x8309, 0x0318, 0x831d, 0x8317, 0x0312,
  0x0330, 0x8335, 0x833f, 0x033a, 0x832b, 0x032e, 0x0324, 0x8321,
  0x0360, 0x8365, 0x836f, 0x036a, 0x837b, 0x037e, 0x0374, 0x8371,
  0x8353, 0x0356, 0x035c, 0x8359, 0x0348, 0x834d, 0x8347, 0x0342,
  0x03c0, 0x83c5, 0x83cf, 0x03ca, 0x83db, 0x03de, 0x03d4, 0x83d1,
  0x83f3, 0x03f6, 0x03fc, 0x83f9, 0x03e8, 0x83ed, 0x83e7, 0x03e2,
  0x83a3, 0x03a6, 0x03ac, 0x83a9, 0x03b8, 0x83bd, 0x83b7, 0x03b2,
  0x0390, 0x8395, 0x839f, 0x039a, 0x838b, 0x038e, 0x0384, 0x8381,

  0x0280, 0x8285, 0x828f, 0x028a, 0x829b, 0x029e, 0x0294, 0x8291,
  0x82b3, 0x02b6, 0x02bc, 0x82b9, 0x02a8, 0x82ad, 0x82a7, 0x02a2,
  0x82e3, 0x02e6, 0x02ec, 0x82e9, 0x02f8, 0x82fd, 0x82f7, 0x02f2,
  0x02d0, 0x82d5, 0x82df, 0x02da, 0x82cb, 0x02ce, 0x02c4, 0x82c1,
  0x8243, 0x0246, 0x024c, 0x8249, 0x0258, 0x825d, 0x8257, 0x0252,
  0x0270, 0x8275, 0x827f, 0x027a, 0x826b, 0x026e, 0x0264, 0x8261,
  0x0220, 0x8225, 0x822f, 0x022a, 0x823b, 0x023e, 0x0234, 0x8231,
  0x8213, 0x0216, 0x021c, 0x8219, 0x0208, 0x820d, 0x8207, 0x0202
};

# define CRC_POLY  0x8005

/*
 * NAME:	bit->init()
 * DESCRIPTION:	initialize bit pointer struct
 */
void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte)
{
  bitptr->byte  = byte;
  bitptr->cache = 0;
  bitptr->left  = CHAR_BIT;
}

/*
 * NAME:	bit->length()
 * DESCRIPTION:	return number of bits between start and end points
 */
unsigned int mad_bit_length(struct mad_bitptr const *begin,
			    struct mad_bitptr const *end)
{
  return begin->left +
    CHAR_BIT * (end->byte - (begin->byte + 1)) + (CHAR_BIT - end->left);
}

/*
 * NAME:	bit->nextbyte()
 * DESCRIPTION:	return pointer to next unprocessed byte
 */
unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *bitptr)
{
  return bitptr->left == CHAR_BIT ? bitptr->byte : bitptr->byte + 1;
}

/*
 * NAME:	bit->skip()
 * DESCRIPTION:	advance bit pointer
 */
void mad_bit_skip(struct mad_bitptr *bitptr, unsigned int len)
{
  bitptr->byte += len / CHAR_BIT;
  bitptr->left -= len % CHAR_BIT;

  if (bitptr->left > CHAR_BIT) {
    bitptr->byte++;
    bitptr->left += CHAR_BIT;
  }

  if (bitptr->left < CHAR_BIT)
    bitptr->cache = *bitptr->byte;
}

/*
 * NAME:	bit->read()
 * DESCRIPTION:	read an arbitrary number of bits and return their UIMSBF value
 */
unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len)
{
  register unsigned long value;

  if (bitptr->left == CHAR_BIT)
    bitptr->cache = *bitptr->byte;

  if (len < bitptr->left) {
    value = (bitptr->cache & ((1 << bitptr->left) - 1)) >>
      (bitptr->left - len);
    bitptr->left -= len;

    return value;
  }

  /* remaining bits in current byte */

  value = bitptr->cache & ((1 << bitptr->left) - 1);
  len  -= bitptr->left;

  bitptr->byte++;
  bitptr->left = CHAR_BIT;

  /* more bytes */

  while (len >= CHAR_BIT) {
    value = (value << CHAR_BIT) | *bitptr->byte++;
    len  -= CHAR_BIT;
  }

  if (len > 0) {
    bitptr->cache = *bitptr->byte;

    value = (value << len) | (bitptr->cache >> (CHAR_BIT - len));
    bitptr->left -= len;
  }

  return value;
}

# if 0
/*
 * NAME:	bit->write()
 * DESCRIPTION:	write an arbitrary number of bits
 */
void mad_bit_write(struct mad_bitptr *bitptr, unsigned int len,
		   unsigned long value)
{
  unsigned char *ptr;

  ptr = (unsigned char *) bitptr->byte;

  /* ... */
}
# endif

/*
 * NAME:	bit->crc()
 * DESCRIPTION:	compute CRC-check word
 */
unsigned short mad_bit_crc(struct mad_bitptr bitptr, unsigned int len,
			   unsigned short init)
{
  register unsigned int crc;

  for (crc = init; len >= 32; len -= 32) {
    register unsigned long data;

    data = mad_bit_read(&bitptr, 32);

    crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 24)) & 0xff];
    crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >> 16)) & 0xff];
    crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >>  8)) & 0xff];
    crc = (crc << 8) ^ crc_table[((crc >> 8) ^ (data >>  0)) & 0xff];
  }

  switch (len / 8) {
  case 3: crc = (crc << 8) ^
	    crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];
  case 2: crc = (crc << 8) ^
	    crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];
  case 1: crc = (crc << 8) ^
	    crc_table[((crc >> 8) ^ mad_bit_read(&bitptr, 8)) & 0xff];

  len %= 8;

  case 0: break;
  }

  while (len--) {
    register unsigned int msb;

    msb = mad_bit_read(&bitptr, 1) ^ (crc >> 15);

    crc <<= 1;
    if (msb & 1)
      crc ^= CRC_POLY;
  }

  return crc & 0xffff;
}


================================================
FILE: 3rdParty/libmad/include/bit.h
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: bit.h,v 1.12 2004/01/23 09:41:32 rob Exp $
 */

# ifndef LIBMAD_BIT_H
# define LIBMAD_BIT_H

struct mad_bitptr {
  unsigned char const *byte;
  unsigned short cache;
  unsigned short left;
};

void mad_bit_init(struct mad_bitptr *, unsigned char const *);

# define mad_bit_finish(bitptr)		/* nothing */

unsigned int mad_bit_length(struct mad_bitptr const *,
			    struct mad_bitptr const *);

# define mad_bit_bitsleft(bitptr)  ((bitptr)->left)
unsigned char const *mad_bit_nextbyte(struct mad_bitptr const *);

void mad_bit_skip(struct mad_bitptr *, unsigned int);
unsigned long mad_bit_read(struct mad_bitptr *, unsigned int);
void mad_bit_write(struct mad_bitptr *, unsigned int, unsigned long);

unsigned short mad_bit_crc(struct mad_bitptr, unsigned int, unsigned short);

# endif


================================================
FILE: 3rdParty/libmad/include/config.h
================================================
/* config.h.  Generated by configure.  */
/* config.h.in.  Generated from configure.ac by autoheader.  */

/* Define to enable diagnostic debugging support. */
/* #undef DEBUG */

/* Define to enable experimental code. */
/* #undef EXPERIMENTAL */

/* Define to 1 if you have the <assert.h> header file. */
#define HAVE_ASSERT_H 1

/* Define to 1 if you have the <dlfcn.h> header file. */
/* #undef HAVE_DLFCN_H */

/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1

/* Define to 1 if you have the `fcntl' function. */
/* #undef HAVE_FCNTL */

/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1

/* Define to 1 if you have the `fork' function. */
/* #undef HAVE_FORK */

/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1

/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1

/* Define if your MIPS CPU supports a 2-operand MADD16 instruction. */
/* #undef HAVE_MADD16_ASM */

/* Define if your MIPS CPU supports a 2-operand MADD instruction. */
/* #undef HAVE_MADD_ASM */

/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1

/* Define to 1 if you have the `pipe' function. */
/* #undef HAVE_PIPE */

/* 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 <sys/wait.h> that is POSIX.1 compatible. */
/* #undef HAVE_SYS_WAIT_H */

/* Define to 1 if you have the <unistd.h> header file. */
/* #undef HAVE_UNISTD_H */

/* Define to 1 if you have the `waitpid' function. */
/* #undef HAVE_WAITPID */

/* Define to disable debugging assertions. */
/* #undef NDEBUG */

/* Define to optimize for accuracy over speed. */
/* #undef OPT_ACCURACY */

/* Define to optimize for speed over accuracy. */
/* #undef OPT_SPEED */

/* Define to enable a fast subband synthesis approximation optimization. */
/* #undef OPT_SSO */

/* Define to influence a strict interpretation of the ISO/IEC standards, even
   if this is in opposition with best accepted practices. */
/* #undef OPT_STRICT */

/* Name of package */
#define PACKAGE "libmad"

/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "support@underbit.com"

/* Define to the full name of this package. */
#define PACKAGE_NAME "MPEG Audio Decoder"

/* Define to the full name and version of this package. */
#define PACKAGE_STRING "MPEG Audio Decoder 0.15.1b"

/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "libmad"

/* Define to the version of this package. */
#define PACKAGE_VERSION "0.15.1b"

/* The size of a `int', as computed by sizeof. */
#define SIZEOF_INT 4

/* The size of a `long', as computed by sizeof. */
#define SIZEOF_LONG 4

/* The size of a `long long', as computed by sizeof. */
#define SIZEOF_LONG_LONG 8

/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1

/* Version number of package */
#define VERSION "0.15.1b"

/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */

/* Define as `__inline' if that's what the C compiler calls it, or to nothing
   if it is not supported. */
#define inline __inline

/* Define to `int' if <sys/types.h> does not define. */
/* #undef pid_t */


================================================
FILE: 3rdParty/libmad/include/decoder.c
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: decoder.c,v 1.22 2004/01/23 09:41:32 rob Exp $
 */

# ifdef HAVE_CONFIG_H
#  include "config.h"
# endif

# include "global.h"

# ifdef HAVE_SYS_TYPES_H
#  include <sys/types.h>
# endif

# ifdef HAVE_SYS_WAIT_H
#  include <sys/wait.h>
# endif

# ifdef HAVE_UNISTD_H
#  include <unistd.h>
# endif

# ifdef HAVE_FCNTL_H
#  include <fcntl.h>
# endif

# include <stdlib.h>

# ifdef HAVE_ERRNO_H
#  include <errno.h>
# endif

# include "stream.h"
# include "frame.h"
# include "synth.h"
# include "decoder.h"

/*
 * NAME:	decoder->init()
 * DESCRIPTION:	initialize a decoder object with callback routines
 */
void mad_decoder_init(struct mad_decoder *decoder, void *data,
		      enum mad_flow (*input_func)(void *,
						  struct mad_stream *),
		      enum mad_flow (*header_func)(void *,
						   struct mad_header const *),
		      enum mad_flow (*filter_func)(void *,
						   struct mad_stream const *,
						   struct mad_frame *),
		      enum mad_flow (*output_func)(void *,
						   struct mad_header const *,
						   struct mad_pcm *),
		      enum mad_flow (*error_func)(void *,
						  struct mad_stream *,
						  struct mad_frame *),
		      enum mad_flow (*message_func)(void *,
						    void *, unsigned int *))
{
  decoder->mode         = -1;

  decoder->options      = 0;

  decoder->async.pid    = 0;
  decoder->async.in     = -1;
  decoder->async.out    = -1;

  decoder->sync         = 0;

  decoder->cb_data      = data;

  decoder->input_func   = input_func;
  decoder->header_func  = header_func;
  decoder->filter_func  = filter_func;
  decoder->output_func  = output_func;
  decoder->error_func   = error_func;
  decoder->message_func = message_func;
}

int mad_decoder_finish(struct mad_decoder *decoder)
{
# if defined(USE_ASYNC)
  if (decoder->mode == MAD_DECODER_MODE_ASYNC && decoder->async.pid) {
    pid_t pid;
    int status;

    close(decoder->async.in);

    do
      pid = waitpid(decoder->async.pid, &status, 0);
    while (pid == -1 && errno == EINTR);

    decoder->mode = -1;

    close(decoder->async.out);

    decoder->async.pid = 0;
    decoder->async.in  = -1;
    decoder->async.out = -1;

    if (pid == -1)
      return -1;

    return (!WIFEXITED(status) || WEXITSTATUS(status)) ? -1 : 0;
  }
# endif

  return 0;
}

# if defined(USE_ASYNC)
static
enum mad_flow send_io(int fd, void const *data, size_t len)
{
  char const *ptr = data;
  ssize_t count;

  while (len) {
    do
      count = write(fd, ptr, len);
    while (count == -1 && errno == EINTR);

    if (count == -1)
      return MAD_FLOW_BREAK;

    len -= count;
    ptr += count;
  }

  return MAD_FLOW_CONTINUE;
}

static
enum mad_flow receive_io(int fd, void *buffer, size_t len)
{
  char *ptr = buffer;
  ssize_t count;

  while (len) {
    do
      count = read(fd, ptr, len);
    while (count == -1 && errno == EINTR);

    if (count == -1)
      return (errno == EAGAIN) ? MAD_FLOW_IGNORE : MAD_FLOW_BREAK;
    else if (count == 0)
      return MAD_FLOW_STOP;

    len -= count;
    ptr += count;
  }

  return MAD_FLOW_CONTINUE;
}

static
enum mad_flow receive_io_blocking(int fd, void *buffer, size_t len)
{
  int flags, blocking;
  enum mad_flow result;

  flags = fcntl(fd, F_GETFL);
  if (flags == -1)
    return MAD_FLOW_BREAK;

  blocking = flags & ~O_NONBLOCK;

  if (blocking != flags &&
      fcntl(fd, F_SETFL, blocking) == -1)
    return MAD_FLOW_BREAK;

  result = receive_io(fd, buffer, len);

  if (flags != blocking &&
      fcntl(fd, F_SETFL, flags) == -1)
    return MAD_FLOW_BREAK;

  return result;
}

static
enum mad_flow send(int fd, void const *message, unsigned int size)
{
  enum mad_flow result;

  /* send size */

  result = send_io(fd, &size, sizeof(size));

  /* send message */

  if (result == MAD_FLOW_CONTINUE)
    result = send_io(fd, message, size);

  return result;
}

static
enum mad_flow receive(int fd, void **message, unsigned int *size)
{
  enum mad_flow result;
  unsigned int actual;

  if (*message == 0)
    *size = 0;

  /* receive size */

  result = receive_io(fd, &actual, sizeof(actual));

  /* receive message */

  if (result == MAD_FLOW_CONTINUE) {
    if (actual > *size)
      actual -= *size;
    else {
      *size  = actual;
      actual = 0;
    }

    if (*size > 0) {
      if (*message == 0) {
	*message = malloc(*size);
	if (*message == 0)
	  return MAD_FLOW_BREAK;
      }

      result = receive_io_blocking(fd, *message, *size);
    }

    /* throw away remainder of message */

    while (actual && result == MAD_FLOW_CONTINUE) {
      char sink[256];
      unsigned int len;

      len = actual > sizeof(sink) ? sizeof(sink) : actual;

      result = receive_io_blocking(fd, sink, len);

      actual -= len;
    }
  }

  return result;
}

static
enum mad_flow check_message(struct mad_decoder *decoder)
{
  enum mad_flow result;
  void *message = 0;
  unsigned int size;

  result = receive(decoder->async.in, &message, &size);

  if (result == MAD_FLOW_CONTINUE) {
    if (decoder->message_func == 0)
      size = 0;
    else {
      result = decoder->message_func(decoder->cb_data, message, &size);

      if (result == MAD_FLOW_IGNORE ||
	  result == MAD_FLOW_BREAK)
	size = 0;
    }

    if (send(decoder->async.out, message, size) != MAD_FLOW_CONTINUE)
      result = MAD_FLOW_BREAK;
  }

  if (message)
    free(message);

  return result;
}
# endif

static
enum mad_flow error_default(void *data, struct mad_stream *stream,
			    struct mad_frame *frame)
{
  int *bad_last_frame = data;

  switch (stream->error) {
  case MAD_ERROR_BADCRC:
    if (*bad_last_frame)
      mad_frame_mute(frame);
    else
      *bad_last_frame = 1;

    return MAD_FLOW_IGNORE;

  default:
    return MAD_FLOW_CONTINUE;
  }
}

static
int run_sync(struct mad_decoder *decoder)
{
  enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
  void *error_data;
  int bad_last_frame = 0;
  struct mad_stream *stream;
  struct mad_frame *frame;
  struct mad_synth *synth;
  int result = 0;

  if (decoder->input_func == 0)
    return 0;

  if (decoder->error_func) {
    error_func = decoder->error_func;
    error_data = decoder->cb_data;
  }
  else {
    error_func = error_default;
    error_data = &bad_last_frame;
  }

  stream = &decoder->sync->stream;
  frame  = &decoder->sync->frame;
  synth  = &decoder->sync->synth;

  mad_stream_init(stream);
  mad_frame_init(frame);
  mad_synth_init(synth);

  mad_stream_options(stream, decoder->options);

  do {
    switch (decoder->input_func(decoder->cb_data, stream)) {
    case MAD_FLOW_STOP:
      goto done;
    case MAD_FLOW_BREAK:
      goto fail;
    case MAD_FLOW_IGNORE:
      continue;
    case MAD_FLOW_CONTINUE:
      break;
    }

    while (1) {
# if defined(USE_ASYNC)
      if (decoder->mode == MAD_DECODER_MODE_ASYNC) {
	switch (check_message(decoder)) {
	case MAD_FLOW_IGNORE:
	case MAD_FLOW_CONTINUE:
	  break;
	case MAD_FLOW_BREAK:
	  goto fail;
	case MAD_FLOW_STOP:
	  goto done;
	}
      }
# endif

      if (decoder->header_func) {
	if (mad_header_decode(&frame->header, stream) == -1) {
	  if (!MAD_RECOVERABLE(stream->error))
	    break;

	  switch (error_func(error_data, stream, frame)) {
	  case MAD_FLOW_STOP:
	    goto done;
	  case MAD_FLOW_BREAK:
	    goto fail;
	  case MAD_FLOW_IGNORE:
	  case MAD_FLOW_CONTINUE:
	  default:
	    continue;
	  }
	}

	switch (decoder->header_func(decoder->cb_data, &frame->header)) {
	case MAD_FLOW_STOP:
	  goto done;
	case MAD_FLOW_BREAK:
	  goto fail;
	case MAD_FLOW_IGNORE:
	  continue;
	case MAD_FLOW_CONTINUE:
	  break;
	}
      }

      if (mad_frame_decode(frame, stream) == -1) {
	if (!MAD_RECOVERABLE(stream->error))
	  break;

	switch (error_func(error_data, stream, frame)) {
	case MAD_FLOW_STOP:
	  goto done;
	case MAD_FLOW_BREAK:
	  goto fail;
	case MAD_FLOW_IGNORE:
	  break;
	case MAD_FLOW_CONTINUE:
	default:
	  continue;
	}
      }
      else
	bad_last_frame = 0;

      if (decoder->filter_func) {
	switch (decoder->filter_func(decoder->cb_data, stream, frame)) {
	case MAD_FLOW_STOP:
	  goto done;
	case MAD_FLOW_BREAK:
	  goto fail;
	case MAD_FLOW_IGNORE:
	  continue;
	case MAD_FLOW_CONTINUE:
	  break;
	}
      }

      mad_synth_frame(synth, frame);

      if (decoder->output_func) {
	switch (decoder->output_func(decoder->cb_data,
				     &frame->header, &synth->pcm)) {
	case MAD_FLOW_STOP:
	  goto done;
	case MAD_FLOW_BREAK:
	  goto fail;
	case MAD_FLOW_IGNORE:
	case MAD_FLOW_CONTINUE:
	  break;
	}
      }
    }
  }
  while (stream->error == MAD_ERROR_BUFLEN);

 fail:
  result = -1;

 done:
  mad_synth_finish(synth);
  mad_frame_finish(frame);
  mad_stream_finish(stream);

  return result;
}

# if defined(USE_ASYNC)
static
int run_async(struct mad_decoder *decoder)
{
  pid_t pid;
  int ptoc[2], ctop[2], flags;

  if (pipe(ptoc) == -1)
    return -1;

  if (pipe(ctop) == -1) {
    close(ptoc[0]);
    close(ptoc[1]);
    return -1;
  }

  flags = fcntl(ptoc[0], F_GETFL);
  if (flags == -1 ||
      fcntl(ptoc[0], F_SETFL, flags | O_NONBLOCK) == -1) {
    close(ctop[0]);
    close(ctop[1]);
    close(ptoc[0]);
    close(ptoc[1]);
    return -1;
  }

  pid = fork();
  if (pid == -1) {
    close(ctop[0]);
    close(ctop[1]);
    close(ptoc[0]);
    close(ptoc[1]);
    return -1;
  }

  decoder->async.pid = pid;

  if (pid) {
    /* parent */

    close(ptoc[0]);
    close(ctop[1]);

    decoder->async.in  = ctop[0];
    decoder->async.out = ptoc[1];

    return 0;
  }

  /* child */

  close(ptoc[1]);
  close(ctop[0]);

  decoder->async.in  = ptoc[0];
  decoder->async.out = ctop[1];

  _exit(run_sync(decoder));

  /* not reached */
  return -1;
}
# endif

/*
 * NAME:	decoder->run()
 * DESCRIPTION:	run the decoder thread either synchronously or asynchronously
 */
int mad_decoder_run(struct mad_decoder *decoder, enum mad_decoder_mode mode)
{
  int result;
  int (*run)(struct mad_decoder *) = 0;

  switch (decoder->mode = mode) {
  case MAD_DECODER_MODE_SYNC:
    run = run_sync;
    break;

  case MAD_DECODER_MODE_ASYNC:
# if defined(USE_ASYNC)
    run = run_async;
# endif
    break;
  }

  if (run == 0)
    return -1;

  decoder->sync = malloc(sizeof(*decoder->sync));
  if (decoder->sync == 0)
    return -1;

  result = run(decoder);

  free(decoder->sync);
  decoder->sync = 0;

  return result;
}

/*
 * NAME:	decoder->message()
 * DESCRIPTION:	send a message to and receive a reply from the decoder process
 */
int mad_decoder_message(struct mad_decoder *decoder,
			void *message, unsigned int *len)
{
# if defined(USE_ASYNC)
  if (decoder->mode != MAD_DECODER_MODE_ASYNC ||
      send(decoder->async.out, message, *len) != MAD_FLOW_CONTINUE ||
      receive(decoder->async.in, &message, len) != MAD_FLOW_CONTINUE)
    return -1;

  return 0;
# else
  return -1;
# endif
}


================================================
FILE: 3rdParty/libmad/include/decoder.h
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: decoder.h,v 1.17 2004/01/23 09:41:32 rob Exp $
 */

# ifndef LIBMAD_DECODER_H
# define LIBMAD_DECODER_H

# include "stream.h"
# include "frame.h"
# include "synth.h"

enum mad_decoder_mode {
  MAD_DECODER_MODE_SYNC  = 0,
  MAD_DECODER_MODE_ASYNC
};

enum mad_flow {
  MAD_FLOW_CONTINUE = 0x0000,	/* continue normally */
  MAD_FLOW_STOP     = 0x0010,	/* stop decoding normally */
  MAD_FLOW_BREAK    = 0x0011,	/* stop decoding and signal an error */
  MAD_FLOW_IGNORE   = 0x0020	/* ignore the current frame */
};

struct mad_decoder {
  enum mad_decoder_mode mode;

  int options;

  struct {
    long pid;
    int in;
    int out;
  } async;

  struct {
    struct mad_stream stream;
    struct mad_frame frame;
    struct mad_synth synth;
  } *sync;

  void *cb_data;

  enum mad_flow (*input_func)(void *, struct mad_stream *);
  enum mad_flow (*header_func)(void *, struct mad_header const *);
  enum mad_flow (*filter_func)(void *,
			       struct mad_stream const *, struct mad_frame *);
  enum mad_flow (*output_func)(void *,
			       struct mad_header const *, struct mad_pcm *);
  enum mad_flow (*error_func)(void *, struct mad_stream *, struct mad_frame *);
  enum mad_flow (*message_func)(void *, void *, unsigned int *);
};

void mad_decoder_init(struct mad_decoder *, void *,
		      enum mad_flow (*)(void *, struct mad_stream *),
		      enum mad_flow (*)(void *, struct mad_header const *),
		      enum mad_flow (*)(void *,
					struct mad_stream const *,
					struct mad_frame *),
		      enum mad_flow (*)(void *,
					struct mad_header const *,
					struct mad_pcm *),
		      enum mad_flow (*)(void *,
					struct mad_stream *,
					struct mad_frame *),
		      enum mad_flow (*)(void *, void *, unsigned int *));
int mad_decoder_finish(struct mad_decoder *);

# define mad_decoder_options(decoder, opts)  \
    ((void) ((decoder)->options = (opts)))

int mad_decoder_run(struct mad_decoder *, enum mad_decoder_mode);
int mad_decoder_message(struct mad_decoder *, void *, unsigned int *);

# endif


================================================
FILE: 3rdParty/libmad/include/fixed.c
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: fixed.c,v 1.13 2004/01/23 09:41:32 rob Exp $
 */

# ifdef HAVE_CONFIG_H
#  include "config.h"
# endif

# include "global.h"

# include "fixed.h"

/*
 * NAME:	fixed->abs()
 * DESCRIPTION:	return absolute value of a fixed-point number
 */
mad_fixed_t mad_f_abs(mad_fixed_t x)
{
  return x < 0 ? -x : x;
}

/*
 * NAME:	fixed->div()
 * DESCRIPTION:	perform division using fixed-point math
 */
mad_fixed_t mad_f_div(mad_fixed_t x, mad_fixed_t y)
{
  mad_fixed_t q, r;
  unsigned int bits;

  q = mad_f_abs(x / y);

  if (x < 0) {
    x = -x;
    y = -y;
  }

  r = x % y;

  if (y < 0) {
    x = -x;
    y = -y;
  }

  if (q > mad_f_intpart(MAD_F_MAX) &&
      !(q == -mad_f_intpart(MAD_F_MIN) && r == 0 && (x < 0) != (y < 0)))
    return 0;

  for (bits = MAD_F_FRACBITS; bits && r; --bits) {
    q <<= 1, r <<= 1;
    if (r >= y)
      r -= y, ++q;
  }

  /* round */
  if (2 * r >= y)
    ++q;

  /* fix sign */
  if ((x < 0) != (y < 0))
    q = -q;

  return q << bits;
}


================================================
FILE: 3rdParty/libmad/include/fixed.h
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: fixed.h,v 1.38 2004/02/17 02:02:03 rob Exp $
 */

# ifndef LIBMAD_FIXED_H
# define LIBMAD_FIXED_H

# if SIZEOF_INT >= 4
typedef   signed int mad_fixed_t;

typedef   signed int mad_fixed64hi_t;
typedef unsigned int mad_fixed64lo_t;
# else
typedef   signed long mad_fixed_t;

typedef   signed long mad_fixed64hi_t;
typedef unsigned long mad_fixed64lo_t;
# endif

# if defined(_MSC_VER)
#  define mad_fixed64_t  signed __int64
# elif 1 || defined(__GNUC__)
#  define mad_fixed64_t  signed long long
# endif

# if defined(FPM_FLOAT)
typedef double mad_sample_t;
# else
typedef mad_fixed_t mad_sample_t;
# endif

/*
 * Fixed-point format: 0xABBBBBBB
 * A == whole part      (sign + 3 bits)
 * B == fractional part (28 bits)
 *
 * Values are signed two's complement, so the effective range is:
 * 0x80000000 to 0x7fffffff
 *       -8.0 to +7.9999999962747097015380859375
 *
 * The smallest representable value is:
 * 0x00000001 == 0.0000000037252902984619140625 (i.e. about 3.725e-9)
 *
 * 28 bits of fractional accuracy represent about
 * 8.6 digits of decimal accuracy.
 *
 * Fixed-point numbers can be added or subtracted as normal
 * integers, but multiplication requires shifting the 64-bit result
 * from 56 fractional bits back to 28 (and rounding.)
 *
 * Changing the definition of MAD_F_FRACBITS is only partially
 * supported, and must be done with care.
 */

# define MAD_F_FRACBITS		28

# if MAD_F_FRACBITS == 28
#  define MAD_F(x)		((mad_fixed_t) (x##L))
# else
#  if MAD_F_FRACBITS < 28
#   warning "MAD_F_FRACBITS < 28"
#   define MAD_F(x)		((mad_fixed_t)  \
				 (((x##L) +  \
				   (1L << (28 - MAD_F_FRACBITS - 1))) >>  \
				  (28 - MAD_F_FRACBITS)))
#  elif MAD_F_FRACBITS > 28
#   error "MAD_F_FRACBITS > 28 not currently supported"
#   define MAD_F(x)		((mad_fixed_t)  \
				 ((x##L) << (MAD_F_FRACBITS - 28)))
#  endif
# endif

# define MAD_F_MIN		((mad_fixed_t) -0x80000000L)
# define MAD_F_MAX		((mad_fixed_t) +0x7fffffffL)

# define MAD_F_ONE		MAD_F(0x10000000)

# define mad_f_tofixed(x)	((mad_fixed_t)  \
				 ((x) * (double) (1L << MAD_F_FRACBITS) + 0.5))
# define mad_f_todouble(x)	((double)  \
				 ((x) / (double) (1L << MAD_F_FRACBITS)))

# define mad_f_intpart(x)	((x) >> MAD_F_FRACBITS)
# define mad_f_fracpart(x)	((x) & ((1L << MAD_F_FRACBITS) - 1))
				/* (x should be positive) */

# define mad_f_fromint(x)	((x) << MAD_F_FRACBITS)

# define mad_f_add(x, y)	((x) + (y))
# define mad_f_sub(x, y)	((x) - (y))

# if defined(FPM_FLOAT)
#  error "FPM_FLOAT not yet supported"

#  undef MAD_F
#  define MAD_F(x)		mad_f_todouble(x)

#  define mad_f_mul(x, y)	((x) * (y))
#  define mad_f_scale64

#  undef ASO_ZEROCHECK

# elif defined(FPM_64BIT)

/*
 * This version should be the most accurate if 64-bit types are supported by
 * the compiler, although it may not be the most efficient.
 */
#  if defined(OPT_ACCURACY)
#   define mad_f_mul(x, y)  \
    ((mad_fixed_t)  \
     ((((mad_fixed64_t) (x) * (y)) +  \
       (1L << (MAD_F_SCALEBITS - 1))) >> MAD_F_SCALEBITS))
#  else
#   define mad_f_mul(x, y)  \
    ((mad_fixed_t) (((mad_fixed64_t) (x) * (y)) >> MAD_F_SCALEBITS))
#  endif

#  define MAD_F_SCALEBITS  MAD_F_FRACBITS

/* --- Intel --------------------------------------------------------------- */

# elif defined(FPM_INTEL)

#  if defined(_MSC_VER)
#   pragma warning(push)
#   pragma warning(disable: 4035)  /* no return value */
static __forceinline
mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y)
{
  enum {
    fracbits = MAD_F_FRACBITS
  };

  __asm {
    mov eax, x
    imul y
    shrd eax, edx, fracbits
  }

  /* implicit return of eax */
}
#   pragma warning(pop)

#   define mad_f_mul		mad_f_mul_inline
#   define mad_f_scale64
#  else
/*
 * This Intel version is fast and accurate; the disposition of the least
 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
 */
#   define MAD_F_MLX(hi, lo, x, y)  \
    asm ("imull %3"  \
	 : "=a" (lo), "=d" (hi)  \
	 : "%a" (x), "rm" (y)  \
	 : "cc")

#   if defined(OPT_ACCURACY)
/*
 * This gives best accuracy but is not very fast.
 */
#    define MAD_F_MLA(hi, lo, x, y)  \
    ({ mad_fixed64hi_t __hi;  \
       mad_fixed64lo_t __lo;  \
       MAD_F_MLX(__hi, __lo, (x), (y));  \
       asm ("addl %2,%0\n\t"  \
	    "adcl %3,%1"  \
	    : "=rm" (lo), "=rm" (hi)  \
	    : "r" (__lo), "r" (__hi), "0" (lo), "1" (hi)  \
	    : "cc");  \
    })
#   endif  /* OPT_ACCURACY */

#   if defined(OPT_ACCURACY)
/*
 * Surprisingly, this is faster than SHRD followed by ADC.
 */
#    define mad_f_scale64(hi, lo)  \
    ({ mad_fixed64hi_t __hi_;  \
       mad_fixed64lo_t __lo_;  \
       mad_fixed_t __result;  \
       asm ("addl %4,%2\n\t"  \
	    "adcl %5,%3"  \
	    : "=rm" (__lo_), "=rm" (__hi_)  \
	    : "0" (lo), "1" (hi),  \
	      "ir" (1L << (MAD_F_SCALEBITS - 1)), "ir" (0)  \
	    : "cc");  \
       asm ("shrdl %3,%2,%1"  \
	    : "=rm" (__result)  \
	    : "0" (__lo_), "r" (__hi_), "I" (MAD_F_SCALEBITS)  \
	    : "cc");  \
       __result;  \
    })
#   elif defined(OPT_INTEL)
/*
 * Alternate Intel scaling that may or may not perform better.
 */
#    define mad_f_scale64(hi, lo)  \
    ({ mad_fixed_t __result;  \
       asm ("shrl %3,%1\n\t"  \
	    "shll %4,%2\n\t"  \
	    "orl %2,%1"  \
	    : "=rm" (__result)  \
	    : "0" (lo), "r" (hi),  \
	      "I" (MAD_F_SCALEBITS), "I" (32 - MAD_F_SCALEBITS)  \
	    : "cc");  \
       __result;  \
    })
#   else
#    define mad_f_scale64(hi, lo)  \
    ({ mad_fixed_t __result;  \
       asm ("shrdl %3,%2,%1"  \
	    : "=rm" (__result)  \
	    : "0" (lo), "r" (hi), "I" (MAD_F_SCALEBITS)  \
	    : "cc");  \
       __result;  \
    })
#   endif  /* OPT_ACCURACY */

#   define MAD_F_SCALEBITS  MAD_F_FRACBITS
#  endif

/* --- ARM ----------------------------------------------------------------- */

# elif defined(FPM_ARM)

/* 
 * This ARM V4 version is as accurate as FPM_64BIT but much faster. The
 * least significant bit is properly rounded at no CPU cycle cost!
 */
# if 1
/*
 * This is faster than the default implementation via MAD_F_MLX() and
 * mad_f_scale64().
 */
#  define mad_f_mul(x, y)  \
    ({ mad_fixed64hi_t __hi;  \
       mad_fixed64lo_t __lo;  \
       mad_fixed_t __result;  \
       asm ("smull	%0, %1, %3, %4\n\t"  \
	    "movs	%0, %0, lsr %5\n\t"  \
	    "adc	%2, %0, %1, lsl %6"  \
	    : "=&r" (__lo), "=&r" (__hi), "=r" (__result)  \
	    : "%r" (x), "r" (y),  \
	      "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS)  \
	    : "cc");  \
       __result;  \
    })
# endif

#  define MAD_F_MLX(hi, lo, x, y)  \
    asm ("smull	%0, %1, %2, %3"  \
	 : "=&r" (lo), "=&r" (hi)  \
	 : "%r" (x), "r" (y))

#  define MAD_F_MLA(hi, lo, x, y)  \
    asm ("smlal	%0, %1, %2, %3"  \
	 : "+r" (lo), "+r" (hi)  \
	 : "%r" (x), "r" (y))

#  define MAD_F_MLN(hi, lo)  \
    asm ("rsbs	%0, %2, #0\n\t"  \
	 "rsc	%1, %3, #0"  \
	 : "=r" (lo), "=r" (hi)  \
	 : "0" (lo), "1" (hi)  \
	 : "cc")

#  define mad_f_scale64(hi, lo)  \
    ({ mad_fixed_t __result;  \
       asm ("movs	%0, %1, lsr %3\n\t"  \
	    "adc	%0, %0, %2, lsl %4"  \
	    : "=&r" (__result)  \
	    : "r" (lo), "r" (hi),  \
	      "M" (MAD_F_SCALEBITS), "M" (32 - MAD_F_SCALEBITS)  \
	    : "cc");  \
       __result;  \
    })

#  define MAD_F_SCALEBITS  MAD_F_FRACBITS

/* --- MIPS ---------------------------------------------------------------- */

# elif defined(FPM_MIPS)

/*
 * This MIPS version is fast and accurate; the disposition of the least
 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
 */
#  define MAD_F_MLX(hi, lo, x, y)  \
    asm ("mult	%2,%3"  \
	 : "=l" (lo), "=h" (hi)  \
	 : "%r" (x), "r" (y))

# if defined(HAVE_MADD_ASM)
#  define MAD_F_MLA(hi, lo, x, y)  \
    asm ("madd	%2,%3"  \
	 : "+l" (lo), "+h" (hi)  \
	 : "%r" (x), "r" (y))
# elif defined(HAVE_MADD16_ASM)
/*
 * This loses significant accuracy due to the 16-bit integer limit in the
 * multiply/accumulate instruction.
 */
#  define MAD_F_ML0(hi, lo, x, y)  \
    asm ("mult	%2,%3"  \
	 : "=l" (lo), "=h" (hi)  \
	 : "%r" ((x) >> 12), "r" ((y) >> 16))
#  define MAD_F_MLA(hi, lo, x, y)  \
    asm ("madd16	%2,%3"  \
	 : "+l" (lo), "+h" (hi)  \
	 : "%r" ((x) >> 12), "r" ((y) >> 16))
#  define MAD_F_MLZ(hi, lo)  ((mad_fixed_t) (lo))
# endif

# if defined(OPT_SPEED)
#  define mad_f_scale64(hi, lo)  \
    ((mad_fixed_t) ((hi) << (32 - MAD_F_SCALEBITS)))
#  define MAD_F_SCALEBITS  MAD_F_FRACBITS
# endif

/* --- SPARC --------------------------------------------------------------- */

# elif defined(FPM_SPARC)

/*
 * This SPARC V8 version is fast and accurate; the disposition of the least
 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
 */
#  define MAD_F_MLX(hi, lo, x, y)  \
    asm ("smul %2, %3, %0\n\t"  \
	 "rd %%y, %1"  \
	 : "=r" (lo), "=r" (hi)  \
	 : "%r" (x), "rI" (y))

/* --- PowerPC ------------------------------------------------------------- */

# elif defined(FPM_PPC)

/*
 * This PowerPC version is fast and accurate; the disposition of the least
 * significant bit depends on OPT_ACCURACY via mad_f_scale64().
 */
#  define MAD_F_MLX(hi, lo, x, y)  \
    do {  \
      asm ("mullw %0,%1,%2"  \
	   : "=r" (lo)  \
	   : "%r" (x), "r" (y));  \
      asm ("mulhw %0,%1,%2"  \
	   : "=r" (hi)  \
	   : "%r" (x), "r" (y));  \
    }  \
    while (0)

#  if defined(OPT_ACCURACY)
/*
 * This gives best accuracy but is not very fast.
 */
#   define MAD_F_MLA(hi, lo, x, y)  \
    ({ mad_fixed64hi_t __hi;  \
       mad_fixed64lo_t __lo;  \
       MAD_F_MLX(__hi, __lo, (x), (y));  \
       asm ("addc %0,%2,%3\n\t"  \
	    "adde %1,%4,%5"  \
	    : "=r" (lo), "=r" (hi)  \
	    : "%r" (lo), "r" (__lo),  \
	      "%r" (hi), "r" (__hi)  \
	    : "xer");  \
    })
#  endif

#  if defined(OPT_ACCURACY)
/*
 * This is slower than the truncating version below it.
 */
#   define mad_f_scale64(hi, lo)  \
    ({ mad_fixed_t __result, __round;  \
       asm ("rotrwi %0,%1,%2"  \
	    : "=r" (__result)  \
	    : "r" (lo), "i" (MAD_F_SCALEBITS));  \
       asm ("extrwi %0,%1,1,0"  \
	    : "=r" (__round)  \
	    : "r" (__result));  \
       asm ("insrwi %0,%1,%2,0"  \
	    : "+r" (__result)  \
	    : "r" (hi), "i" (MAD_F_SCALEBITS));  \
       asm ("add %0,%1,%2"  \
	    : "=r" (__result)  \
	    : "%r" (__result), "r" (__round));  \
       __result;  \
    })
#  else
#   define mad_f_scale64(hi, lo)  \
    ({ mad_fixed_t __result;  \
       asm ("rotrwi %0,%1,%2"  \
	    : "=r" (__result)  \
	    : "r" (lo), "i" (MAD_F_SCALEBITS));  \
       asm ("insrwi %0,%1,%2,0"  \
	    : "+r" (__result)  \
	    : "r" (hi), "i" (MAD_F_SCALEBITS));  \
       __result;  \
    })
#  endif

#  define MAD_F_SCALEBITS  MAD_F_FRACBITS

/* --- Default ------------------------------------------------------------- */

# elif defined(FPM_DEFAULT)

/*
 * This version is the most portable but it loses significant accuracy.
 * Furthermore, accuracy is biased against the second argument, so care
 * should be taken when ordering operands.
 *
 * The scale factors are constant as this is not used with SSO.
 *
 * Pre-rounding is required to stay within the limits of compliance.
 */
#  if defined(OPT_SPEED)
#   define mad_f_mul(x, y)	(((x) >> 12) * ((y) >> 16))
#  else
#   define mad_f_mul(x, y)	((((x) + (1L << 11)) >> 12) *  \
				 (((y) + (1L << 15)) >> 16))
#  endif

/* ------------------------------------------------------------------------- */

# else
#  error "no FPM selected"
# endif

/* default implementations */

# if !defined(mad_f_mul)
#  define mad_f_mul(x, y)  \
    ({ register mad_fixed64hi_t __hi;  \
       register mad_fixed64lo_t __lo;  \
       MAD_F_MLX(__hi, __lo, (x), (y));  \
       mad_f_scale64(__hi, __lo);  \
    })
# endif

# if !defined(MAD_F_MLA)
#  define MAD_F_ML0(hi, lo, x, y)	((lo)  = mad_f_mul((x), (y)))
#  define MAD_F_MLA(hi, lo, x, y)	((lo) += mad_f_mul((x), (y)))
#  define MAD_F_MLN(hi, lo)		((lo)  = -(lo))
#  define MAD_F_MLZ(hi, lo)		((void) (hi), (mad_fixed_t) (lo))
# endif

# if !defined(MAD_F_ML0)
#  define MAD_F_ML0(hi, lo, x, y)	MAD_F_MLX((hi), (lo), (x), (y))
# endif

# if !defined(MAD_F_MLN)
#  define MAD_F_MLN(hi, lo)		((hi) = ((lo) = -(lo)) ? ~(hi) : -(hi))
# endif

# if !defined(MAD_F_MLZ)
#  define MAD_F_MLZ(hi, lo)		mad_f_scale64((hi), (lo))
# endif

# if !defined(mad_f_scale64)
#  if defined(OPT_ACCURACY)
#   define mad_f_scale64(hi, lo)  \
    ((((mad_fixed_t)  \
       (((hi) << (32 - (MAD_F_SCALEBITS - 1))) |  \
	((lo) >> (MAD_F_SCALEBITS - 1)))) + 1) >> 1)
#  else
#   define mad_f_scale64(hi, lo)  \
    ((mad_fixed_t)  \
     (((hi) << (32 - MAD_F_SCALEBITS)) |  \
      ((lo) >> MAD_F_SCALEBITS)))
#  endif
#  define MAD_F_SCALEBITS  MAD_F_FRACBITS
# endif

/* C routines */

mad_fixed_t mad_f_abs(mad_fixed_t);
mad_fixed_t mad_f_div(mad_fixed_t, mad_fixed_t);

# endif


================================================
FILE: 3rdParty/libmad/include/frame.c
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: frame.c,v 1.29 2004/02/04 22:59:19 rob Exp $
 */

# ifdef HAVE_CONFIG_H
#  include "config.h"
# endif

# include "global.h"

# include <stdlib.h>

# include "bit.h"
# include "stream.h"
# include "frame.h"
# include "timer.h"
# include "layer12.h"
# include "layer3.h"

static
unsigned long const bitrate_table[5][15] = {
  /* MPEG-1 */
  { 0,  32000,  64000,  96000, 128000, 160000, 192000, 224000,  /* Layer I   */
       256000, 288000, 320000, 352000, 384000, 416000, 448000 },
  { 0,  32000,  48000,  56000,  64000,  80000,  96000, 112000,  /* Layer II  */
       128000, 160000, 192000, 224000, 256000, 320000, 384000 },
  { 0,  32000,  40000,  48000,  56000,  64000,  80000,  96000,  /* Layer III */
       112000, 128000, 160000, 192000, 224000, 256000, 320000 },

  /* MPEG-2 LSF */
  { 0,  32000,  48000,  56000,  64000,  80000,  96000, 112000,  /* Layer I   */
       128000, 144000, 160000, 176000, 192000, 224000, 256000 },
  { 0,   8000,  16000,  24000,  32000,  40000,  48000,  56000,  /* Layers    */
        64000,  80000,  96000, 112000, 128000, 144000, 160000 } /* II & III  */
};

static
unsigned int const samplerate_table[3] = { 44100, 48000, 32000 };

static
int (*const decoder_table[3])(struct mad_stream *, struct mad_frame *) = {
  mad_layer_I,
  mad_layer_II,
  mad_layer_III
};

/*
 * NAME:	header->init()
 * DESCRIPTION:	initialize header struct
 */
void mad_header_init(struct mad_header *header)
{
  header->layer          = 0;
  header->mode           = 0;
  header->mode_extension = 0;
  header->emphasis       = 0;

  header->bitrate        = 0;
  header->samplerate     = 0;

  header->crc_check      = 0;
  header->crc_target     = 0;

  header->flags          = 0;
  header->private_bits   = 0;

  header->duration       = mad_timer_zero;
}

/*
 * NAME:	frame->init()
 * DESCRIPTION:	initialize frame struct
 */
void mad_frame_init(struct mad_frame *frame)
{
  mad_header_init(&frame->header);

  frame->options = 0;

  frame->overlap = 0;
  mad_frame_mute(frame);
}

/*
 * NAME:	frame->finish()
 * DESCRIPTION:	deallocate any dynamic memory associated with frame
 */
void mad_frame_finish(struct mad_frame *frame)
{
  mad_header_finish(&frame->header);

  if (frame->overlap) {
    free(frame->overlap);
    frame->overlap = 0;
  }
}

/*
 * NAME:	decode_header()
 * DESCRIPTION:	read header data and following CRC word
 */
static
int decode_header(struct mad_header *header, struct mad_stream *stream)
{
  unsigned int index;

  header->flags        = 0;
  header->private_bits = 0;

  /* header() */

  /* syncword */
  mad_bit_skip(&stream->ptr, 11);

  /* MPEG 2.5 indicator (really part of syncword) */
  if (mad_bit_read(&stream->ptr, 1) == 0)
    header->flags |= MAD_FLAG_MPEG_2_5_EXT;

  /* ID */
  if (mad_bit_read(&stream->ptr, 1) == 0)
    header->flags |= MAD_FLAG_LSF_EXT;
  else if (header->flags & MAD_FLAG_MPEG_2_5_EXT) {
    stream->error = MAD_ERROR_LOSTSYNC;
    return -1;
  }

  /* layer */
  header->layer = 4 - mad_bit_read(&stream->ptr, 2);

  if (header->layer == 4) {
    stream->error = MAD_ERROR_BADLAYER;
    return -1;
  }

  /* protection_bit */
  if (mad_bit_read(&stream->ptr, 1) == 0) {
    header->flags    |= MAD_FLAG_PROTECTION;
    header->crc_check = mad_bit_crc(stream->ptr, 16, 0xffff);
  }

  /* bitrate_index */
  index = mad_bit_read(&stream->ptr, 4);

  if (index == 15) {
    stream->error = MAD_ERROR_BADBITRATE;
    return -1;
  }

  if (header->flags & MAD_FLAG_LSF_EXT)
    header->bitrate = bitrate_table[3 + (header->layer >> 1)][index];
  else
    header->bitrate = bitrate_table[header->layer - 1][index];

  /* sampling_frequency */
  index = mad_bit_read(&stream->ptr, 2);

  if (index == 3) {
    stream->error = MAD_ERROR_BADSAMPLERATE;
    return -1;
  }

  header->samplerate = samplerate_table[index];

  if (header->flags & MAD_FLAG_LSF_EXT) {
    header->samplerate /= 2;

    if (header->flags & MAD_FLAG_MPEG_2_5_EXT)
      header->samplerate /= 2;
  }

  /* padding_bit */
  if (mad_bit_read(&stream->ptr, 1))
    header->flags |= MAD_FLAG_PADDING;

  /* private_bit */
  if (mad_bit_read(&stream->ptr, 1))
    header->private_bits |= MAD_PRIVATE_HEADER;

  /* mode */
  header->mode = 3 - mad_bit_read(&stream->ptr, 2);

  /* mode_extension */
  header->mode_extension = mad_bit_read(&stream->ptr, 2);

  /* copyright */
  if (mad_bit_read(&stream->ptr, 1))
    header->flags |= MAD_FLAG_COPYRIGHT;

  /* original/copy */
  if (mad_bit_read(&stream->ptr, 1))
    header->flags |= MAD_FLAG_ORIGINAL;

  /* emphasis */
  header->emphasis = mad_bit_read(&stream->ptr, 2);

# if defined(OPT_STRICT)
  /*
   * ISO/IEC 11172-3 says this is a reserved emphasis value, but
   * streams exist which use it anyway. Since the value is not important
   * to the decoder proper, we allow it unless OPT_STRICT is defined.
   */
  if (header->emphasis == MAD_EMPHASIS_RESERVED) {
    stream->error = MAD_ERROR_BADEMPHASIS;
    return -1;
  }
# endif

  /* error_check() */

  /* crc_check */
  if (header->flags & MAD_FLAG_PROTECTION)
    header->crc_target = mad_bit_read(&stream->ptr, 16);

  return 0;
}

/*
 * NAME:	free_bitrate()
 * DESCRIPTION:	attempt to discover the bitstream's free bitrate
 */
static
int free_bitrate(struct mad_stream *stream, struct mad_header const *header)
{
  struct mad_bitptr keep_ptr;
  unsigned long rate = 0;
  unsigned int pad_slot, slots_per_frame;
  unsigned char const *ptr = 0;

  keep_ptr = stream->ptr;

  pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
  slots_per_frame = (header->layer == MAD_LAYER_III &&
		     (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;

  while (mad_stream_sync(stream) == 0) {
    struct mad_stream peek_stream;
    struct mad_header peek_header;

    peek_stream = *stream;
    peek_header = *header;

    if (decode_header(&peek_header, &peek_stream) == 0 &&
	peek_header.layer == header->layer &&
	peek_header.samplerate == header->samplerate) {
      unsigned int N;

      ptr = mad_bit_nextbyte(&stream->ptr);

      N = ptr - stream->this_frame;

      if (header->layer == MAD_LAYER_I) {
	rate = (unsigned long) header->samplerate *
	  (N - 4 * pad_slot + 4) / 48 / 1000;
      }
      else {
	rate = (unsigned long) header->samplerate *
	  (N - pad_slot + 1) / slots_per_frame / 1000;
      }

      if (rate >= 8)
	break;
    }

    mad_bit_skip(&stream->ptr, 8);
  }

  stream->ptr = keep_ptr;

  if (rate < 8 || (header->layer == MAD_LAYER_III && rate > 640)) {
    stream->error = MAD_ERROR_LOSTSYNC;
    return -1;
  }

  stream->freerate = rate * 1000;

  return 0;
}

/*
 * NAME:	header->decode()
 * DESCRIPTION:	read the next frame header from the stream
 */
int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
{
  register unsigned char const *ptr, *end;
  unsigned int pad_slot, N;

  ptr = stream->next_frame;
  end = stream->bufend;

  if (ptr == 0) {
    stream->error = MAD_ERROR_BUFPTR;
    goto fail;
  }

  /* stream skip */
  if (stream->skiplen) {
    if (!stream->sync)
      ptr = stream->this_frame;

    if (end - ptr < stream->skiplen) {
      stream->skiplen   -= end - ptr;
      stream->next_frame = end;

      stream->error = MAD_ERROR_BUFLEN;
      goto fail;
    }

    ptr += stream->skiplen;
    stream->skiplen = 0;

    stream->sync = 1;
  }

 sync:
  /* synchronize */
  if (stream->sync) {
    if (end - ptr < MAD_BUFFER_GUARD) {
      stream->next_frame = ptr;

      stream->error = MAD_ERROR_BUFLEN;
      goto fail;
    }
    else if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
      /* mark point where frame sync word was expected */
      stream->this_frame = ptr;
      stream->next_frame = ptr + 1;

      stream->error = MAD_ERROR_LOSTSYNC;
      goto fail;
    }
  }
  else {
    mad_bit_init(&stream->ptr, ptr);

    if (mad_stream_sync(stream) == -1) {
      if (end - stream->next_frame >= MAD_BUFFER_GUARD)
	stream->next_frame = end - MAD_BUFFER_GUARD;

      stream->error = MAD_ERROR_BUFLEN;
      goto fail;
    }

    ptr = mad_bit_nextbyte(&stream->ptr);
  }

  /* begin processing */
  stream->this_frame = ptr;
  stream->next_frame = ptr + 1;  /* possibly bogus sync word */

  mad_bit_init(&stream->ptr, stream->this_frame);

  if (decode_header(header, stream) == -1)
    goto fail;

  /* calculate frame duration */
  mad_timer_set(&header->duration, 0,
		32 * MAD_NSBSAMPLES(header), header->samplerate);

  /* calculate free bit rate */
  if (header->bitrate == 0) {
    if ((stream->freerate == 0 || !stream->sync ||
	 (header->layer == MAD_LAYER_III && stream->freerate > 640000)) &&
	free_bitrate(stream, header) == -1)
      goto fail;

    header->bitrate = stream->freerate;
    header->flags  |= MAD_FLAG_FREEFORMAT;
  }

  /* calculate beginning of next frame */
  pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;

  if (header->layer == MAD_LAYER_I)
    N = ((12 * header->bitrate / header->samplerate) + pad_slot) * 4;
  else {
    unsigned int slots_per_frame;

    slots_per_frame = (header->layer == MAD_LAYER_III &&
		       (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;

    N = (slots_per_frame * header->bitrate / header->samplerate) + pad_slot;
  }

  /* verify there is enough data left in buffer to decode this frame */
  if (N + MAD_BUFFER_GUARD > end - stream->this_frame) {
    stream->next_frame = stream->this_frame;

    stream->error = MAD_ERROR_BUFLEN;
    goto fail;
  }

  stream->next_frame = stream->this_frame + N;

  if (!stream->sync) {
    /* check that a valid frame header follows this frame */

    ptr = stream->next_frame;
    if (!(ptr[0] == 0xff && (ptr[1] & 0xe0) == 0xe0)) {
      ptr = stream->next_frame = stream->this_frame + 1;
      goto sync;
    }

    stream->sync = 1;
  }

  header->flags |= MAD_FLAG_INCOMPLETE;

  return 0;

 fail:
  stream->sync = 0;

  return -1;
}

/*
 * NAME:	frame->decode()
 * DESCRIPTION:	decode a single frame from a bitstream
 */
int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
{
  frame->options = stream->options;

  /* header() */
  /* error_check() */

  if (!(frame->header.flags & MAD_FLAG_INCOMPLETE) &&
      mad_header_decode(&frame->header, stream) == -1)
    goto fail;

  /* audio_data() */

  frame->header.flags &= ~MAD_FLAG_INCOMPLETE;

  if (decoder_table[frame->header.layer - 1](stream, frame) == -1) {
    if (!MAD_RECOVERABLE(stream->error))
      stream->next_frame = stream->this_frame;

    goto fail;
  }

  /* ancillary_data() */

  if (frame->header.layer != MAD_LAYER_III) {
    struct mad_bitptr next_frame;

    mad_bit_init(&next_frame, stream->next_frame);

    stream->anc_ptr    = stream->ptr;
    stream->anc_bitlen = mad_bit_length(&stream->ptr, &next_frame);

    mad_bit_finish(&next_frame);
  }

  return 0;

 fail:
  stream->anc_bitlen = 0;
  return -1;
}

/*
 * NAME:	frame->mute()
 * DESCRIPTION:	zero all subband values so the frame becomes silent
 */
void mad_frame_mute(struct mad_frame *frame)
{
  unsigned int s, sb;

  for (s = 0; s < 36; ++s) {
    for (sb = 0; sb < 32; ++sb) {
      frame->sbsample[0][s][sb] =
      frame->sbsample[1][s][sb] = 0;
    }
  }

  if (frame->overlap) {
    for (s = 0; s < 18; ++s) {
      for (sb = 0; sb < 32; ++sb) {
	(*frame->overlap)[0][sb][s] =
	(*frame->overlap)[1][sb][s] = 0;
      }
    }
  }
}


================================================
FILE: 3rdParty/libmad/include/frame.h
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: frame.h,v 1.20 2004/01/23 09:41:32 rob Exp $
 */

# ifndef LIBMAD_FRAME_H
# define LIBMAD_FRAME_H

# include "fixed.h"
# include "timer.h"
# include "stream.h"

enum mad_layer {
  MAD_LAYER_I   = 1,			/* Layer I */
  MAD_LAYER_II  = 2,			/* Layer II */
  MAD_LAYER_III = 3			/* Layer III */
};

enum mad_mode {
  MAD_MODE_SINGLE_CHANNEL = 0,		/* single channel */
  MAD_MODE_DUAL_CHANNEL	  = 1,		/* dual channel */
  MAD_MODE_JOINT_STEREO	  = 2,		/* joint (MS/intensity) stereo */
  MAD_MODE_STEREO	  = 3		/* normal LR stereo */
};

enum mad_emphasis {
  MAD_EMPHASIS_NONE	  = 0,		/* no emphasis */
  MAD_EMPHASIS_50_15_US	  = 1,		/* 50/15 microseconds emphasis */
  MAD_EMPHASIS_CCITT_J_17 = 3,		/* CCITT J.17 emphasis */
  MAD_EMPHASIS_RESERVED   = 2		/* unknown emphasis */
};

struct mad_header {
  enum mad_layer layer;			/* audio layer (1, 2, or 3) */
  enum mad_mode mode;			/* channel mode (see above) */
  int mode_extension;			/* additional mode info */
  enum mad_emphasis emphasis;		/* de-emphasis to use (see above) */

  unsigned long bitrate;		/* stream bitrate (bps) */
  unsigned int samplerate;		/* sampling frequency (Hz) */

  unsigned short crc_check;		/* frame CRC accumulator */
  unsigned short crc_target;		/* final target CRC checksum */

  int flags;				/* flags (see below) */
  int private_bits;			/* private bits (see below) */

  mad_timer_t duration;			/* audio playing time of frame */
};

struct mad_frame {
  struct mad_header header;		/* MPEG audio header */

  int options;				/* decoding options (from stream) */

  mad_fixed_t sbsample[2][36][32];	/* synthesis subband filter samples */
  mad_fixed_t (*overlap)[2][32][18];	/* Layer III block overlap data */
};

# define MAD_NCHANNELS(header)		((header)->mode ? 2 : 1)
# define MAD_NSBSAMPLES(header)  \
  ((header)->layer == MAD_LAYER_I ? 12 :  \
   (((header)->layer == MAD_LAYER_III &&  \
     ((header)->flags & MAD_FLAG_LSF_EXT)) ? 18 : 36))

enum {
  MAD_FLAG_NPRIVATE_III	= 0x0007,	/* number of Layer III private bits */
  MAD_FLAG_INCOMPLETE	= 0x0008,	/* header but not data is decoded */

  MAD_FLAG_PROTECTION	= 0x0010,	/* frame has CRC protection */
  MAD_FLAG_COPYRIGHT	= 0x0020,	/* frame is copyright */
  MAD_FLAG_ORIGINAL	= 0x0040,	/* frame is original (else copy) */
  MAD_FLAG_PADDING	= 0x0080,	/* frame has additional slot */

  MAD_FLAG_I_STEREO	= 0x0100,	/* uses intensity joint stereo */
  MAD_FLAG_MS_STEREO	= 0x0200,	/* uses middle/side joint stereo */
  MAD_FLAG_FREEFORMAT	= 0x0400,	/* uses free format bitrate */

  MAD_FLAG_LSF_EXT	= 0x1000,	/* lower sampling freq. extension */
  MAD_FLAG_MC_EXT	= 0x2000,	/* multichannel audio extension */
  MAD_FLAG_MPEG_2_5_EXT	= 0x4000	/* MPEG 2.5 (unofficial) extension */
};

enum {
  MAD_PRIVATE_HEADER	= 0x0100,	/* header private bit */
  MAD_PRIVATE_III	= 0x001f	/* Layer III private bits (up to 5) */
};

void mad_header_init(struct mad_header *);

# define mad_header_finish(header)  /* nothing */

int mad_header_decode(struct mad_header *, struct mad_stream *);

void mad_frame_init(struct mad_frame *);
void mad_frame_finish(struct mad_frame *);

int mad_frame_decode(struct mad_frame *, struct mad_stream *);

void mad_frame_mute(struct mad_frame *);

# endif


================================================
FILE: 3rdParty/libmad/include/global.h
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: global.h,v 1.11 2004/01/23 09:41:32 rob Exp $
 */

# ifndef LIBMAD_GLOBAL_H
# define LIBMAD_GLOBAL_H

/* conditional debugging */

# if defined(DEBUG) && defined(NDEBUG)
#  error "cannot define both DEBUG and NDEBUG"
# endif

# if defined(DEBUG)
#  include <stdio.h>
# endif

/* conditional features */

# if defined(OPT_SPEED) && defined(OPT_ACCURACY)
#  error "cannot optimize for both speed and accuracy"
# endif

# if defined(OPT_SPEED) && !defined(OPT_SSO)
#  define OPT_SSO
# endif

# if defined(HAVE_UNISTD_H) && defined(HAVE_WAITPID) &&  \
    defined(HAVE_FCNTL) && defined(HAVE_PIPE) && defined(HAVE_FORK)
#  define USE_ASYNC
# endif

# if !defined(HAVE_ASSERT_H)
#  if defined(NDEBUG)
#   define assert(x)	/* nothing */
#  else
#   define assert(x)	do { if (!(x)) abort(); } while (0)
#  endif
# endif

# endif


================================================
FILE: 3rdParty/libmad/include/huffman.c
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: huffman.c,v 1.10 2004/01/23 09:41:32 rob Exp $
 */

# ifdef HAVE_CONFIG_H
#  include "config.h"
# endif

# include "global.h"

# include "huffman.h"

/*
 * These are the Huffman code words for Layer III.
 * The data for these tables are derived from Table B.7 of ISO/IEC 11172-3.
 *
 * These tables support decoding up to 4 Huffman code bits at a time.
 */

# if defined(__GNUC__) ||  \
    (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901)
#  define PTR(offs, bits)	{ .ptr   = { 0, bits, offs       } }
#  define V(v, w, x, y, hlen)	{ .value = { 1, hlen, v, w, x, y } }
# else
#  define PTR(offs, bits)	{ { 0, bits, offs } }
#  if defined(WORDS_BIGENDIAN)
#   define V(v, w, x, y, hlen)	{ { 1, hlen, (v << 11) | (w << 10) |  \
                                             (x <<  9) | (y <<  8) } }
#  else
#   define V(v, w, x, y, hlen)	{ { 1, hlen, (v <<  0) | (w <<  1) |  \
                                             (x <<  2) | (y <<  3) } }
#  endif
# endif

static
union huffquad const hufftabA[] = {
  /* 0000 */ PTR(16, 2),
  /* 0001 */ PTR(20, 2),
  /* 0010 */ PTR(24, 1),
  /* 0011 */ PTR(26, 1),
  /* 0100 */ V(0, 0, 1, 0, 4),
  /* 0101 */ V(0, 0, 0, 1, 4),
  /* 0110 */ V(0, 1, 0, 0, 4),
  /* 0111 */ V(1, 0, 0, 0, 4),
  /* 1000 */ V(0, 0, 0, 0, 1),
  /* 1001 */ V(0, 0, 0, 0, 1),
  /* 1010 */ V(0, 0, 0, 0, 1),
  /* 1011 */ V(0, 0, 0, 0, 1),
  /* 1100 */ V(0, 0, 0, 0, 1),
  /* 1101 */ V(0, 0, 0, 0, 1),
  /* 1110 */ V(0, 0, 0, 0, 1),
  /* 1111 */ V(0, 0, 0, 0, 1),

  /* 0000 ... */
  /* 00   */ V(1, 0, 1, 1, 2),	/* 16 */
  /* 01   */ V(1, 1, 1, 1, 2),
  /* 10   */ V(1, 1, 0, 1, 2),
  /* 11   */ V(1, 1, 1, 0, 2),

  /* 0001 ... */
  /* 00   */ V(0, 1, 1, 1, 2),	/* 20 */
  /* 01   */ V(0, 1, 0, 1, 2),
  /* 10   */ V(1, 0, 0, 1, 1),
  /* 11   */ V(1, 0, 0, 1, 1),

  /* 0010 ... */
  /* 0    */ V(0, 1, 1, 0, 1),	/* 24 */
  /* 1    */ V(0, 0, 1, 1, 1),

  /* 0011 ... */
  /* 0    */ V(1, 0, 1, 0, 1),	/* 26 */
  /* 1    */ V(1, 1, 0, 0, 1)
};

static
union huffquad const hufftabB[] = {
  /* 0000 */ V(1, 1, 1, 1, 4),
  /* 0001 */ V(1, 1, 1, 0, 4),
  /* 0010 */ V(1, 1, 0, 1, 4),
  /* 0011 */ V(1, 1, 0, 0, 4),
  /* 0100 */ V(1, 0, 1, 1, 4),
  /* 0101 */ V(1, 0, 1, 0, 4),
  /* 0110 */ V(1, 0, 0, 1, 4),
  /* 0111 */ V(1, 0, 0, 0, 4),
  /* 1000 */ V(0, 1, 1, 1, 4),
  /* 1001 */ V(0, 1, 1, 0, 4),
  /* 1010 */ V(0, 1, 0, 1, 4),
  /* 1011 */ V(0, 1, 0, 0, 4),
  /* 1100 */ V(0, 0, 1, 1, 4),
  /* 1101 */ V(0, 0, 1, 0, 4),
  /* 1110 */ V(0, 0, 0, 1, 4),
  /* 1111 */ V(0, 0, 0, 0, 4)
};

# undef V
# undef PTR

# if defined(__GNUC__) ||  \
    (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901)
#  define PTR(offs, bits)	{ .ptr   = { 0, bits, offs } }
#  define V(x, y, hlen)		{ .value = { 1, hlen, x, y } }
# else
#  define PTR(offs, bits)	{ { 0, bits, offs } }
#  if defined(WORDS_BIGENDIAN)
#   define V(x, y, hlen)	{ { 1, hlen, (x << 8) | (y << 4) } }
#  else
#   define V(x, y, hlen)	{ { 1, hlen, (x << 0) | (y << 4) } }
#  endif
# endif

static
union huffpair const hufftab0[] = {
  /*      */ V(0, 0, 0)
};

static
union huffpair const hufftab1[] = {
  /* 000  */ V(1, 1, 3),
  /* 001  */ V(0, 1, 3),
  /* 010  */ V(1, 0, 2),
  /* 011  */ V(1, 0, 2),
  /* 100  */ V(0, 0, 1),
  /* 101  */ V(0, 0, 1),
  /* 110  */ V(0, 0, 1),
  /* 111  */ V(0, 0, 1)
};

static
union huffpair const hufftab2[] = {
  /* 000  */ PTR(8, 3),
  /* 001  */ V(1, 1, 3),
  /* 010  */ V(0, 1, 3),
  /* 011  */ V(1, 0, 3),
  /* 100  */ V(0, 0, 1),
  /* 101  */ V(0, 0, 1),
  /* 110  */ V(0, 0, 1),
  /* 111  */ V(0, 0, 1),

  /* 000 ... */
  /* 000  */ V(2, 2, 3),	/* 8 */
  /* 001  */ V(0, 2, 3),
  /* 010  */ V(1, 2, 2),
  /* 011  */ V(1, 2, 2),
  /* 100  */ V(2, 1, 2),
  /* 101  */ V(2, 1, 2),
  /* 110  */ V(2, 0, 2),
  /* 111  */ V(2, 0, 2)
};

static
union huffpair const hufftab3[] = {
  /* 000  */ PTR(8, 3),
  /* 001  */ V(1, 0, 3),
  /* 010  */ V(1, 1, 2),
  /* 011  */ V(1, 1, 2),
  /* 100  */ V(0, 1, 2),
  /* 101  */ V(0, 1, 2),
  /* 110  */ V(0, 0, 2),
  /* 111  */ V(0, 0, 2),

  /* 000 ... */
  /* 000  */ V(2, 2, 3),	/* 8 */
  /* 001  */ V(0, 2, 3),
  /* 010  */ V(1, 2, 2),
  /* 011  */ V(1, 2, 2),
  /* 100  */ V(2, 1, 2),
  /* 101  */ V(2, 1, 2),
  /* 110  */ V(2, 0, 2),
  /* 111  */ V(2, 0, 2)
};

static
union huffpair const hufftab5[] = {
  /* 000  */ PTR(8, 4),
  /* 001  */ V(1, 1, 3),
  /* 010  */ V(0, 1, 3),
  /* 011  */ V(1, 0, 3),
  /* 100  */ V(0, 0, 1),
  /* 101  */ V(0, 0, 1),
  /* 110  */ V(0, 0, 1),
  /* 111  */ V(0, 0, 1),

  /* 000 ... */
  /* 0000 */ PTR(24, 1),	/* 8 */
  /* 0001 */ V(3, 2, 4),
  /* 0010 */ V(3, 1, 3),
  /* 0011 */ V(3, 1, 3),
  /* 0100 */ V(1, 3, 4),
  /* 0101 */ V(0, 3, 4),
  /* 0110 */ V(3, 0, 4),
  /* 0111 */ V(2, 2, 4),
  /* 1000 */ V(1, 2, 3),
  /* 1001 */ V(1, 2, 3),
  /* 1010 */ V(2, 1, 3),
  /* 1011 */ V(2, 1, 3),
  /* 1100 */ V(0, 2, 3),
  /* 1101 */ V(0, 2, 3),
  /* 1110 */ V(2, 0, 3),
  /* 1111 */ V(2, 0, 3),

  /* 000 0000 ... */
  /* 0    */ V(3, 3, 1),	/* 24 */
  /* 1    */ V(2, 3, 1)
};

static
union huffpair const hufftab6[] = {
  /* 0000 */ PTR(16, 3),
  /* 0001 */ PTR(24, 1),
  /* 0010 */ PTR(26, 1),
  /* 0011 */ V(1, 2, 4),
  /* 0100 */ V(2, 1, 4),
  /* 0101 */ V(2, 0, 4),
  /* 0110 */ V(0, 1, 3),
  /* 0111 */ V(0, 1, 3),
  /* 1000 */ V(1, 1, 2),
  /* 1001 */ V(1, 1, 2),
  /* 1010 */ V(1, 1, 2),
  /* 1011 */ V(1, 1, 2),
  /* 1100 */ V(1, 0, 3),
  /* 1101 */ V(1, 0, 3),
  /* 1110 */ V(0, 0, 3),
  /* 1111 */ V(0, 0, 3),

  /* 0000 ... */
  /* 000  */ V(3, 3, 3),	/* 16 */
  /* 001  */ V(0, 3, 3),
  /* 010  */ V(2, 3, 2),
  /* 011  */ V(2, 3, 2),
  /* 100  */ V(3, 2, 2),
  /* 101  */ V(3, 2, 2),
  /* 110  */ V(3, 0, 2),
  /* 111  */ V(3, 0, 2),

  /* 0001 ... */
  /* 0    */ V(1, 3, 1),	/* 24 */
  /* 1    */ V(3, 1, 1),

  /* 0010 ... */
  /* 0    */ V(2, 2, 1),	/* 26 */
  /* 1    */ V(0, 2, 1)
};

static
union huffpair const hufftab7[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 4),
  /* 0010 */ PTR(48, 2),
  /* 0011 */ V(1, 1, 4),
  /* 0100 */ V(0, 1, 3),
  /* 0101 */ V(0, 1, 3),
  /* 0110 */ V(1, 0, 3),
  /* 0111 */ V(1, 0, 3),
  /* 1000 */ V(0, 0, 1),
  /* 1001 */ V(0, 0, 1),
  /* 1010 */ V(0, 0, 1),
  /* 1011 */ V(0, 0, 1),
  /* 1100 */ V(0, 0, 1),
  /* 1101 */ V(0, 0, 1),
  /* 1110 */ V(0, 0, 1),
  /* 1111 */ V(0, 0, 1),

  /* 0000 ... */
  /* 0000 */ PTR(52, 2),	/* 16 */
  /* 0001 */ PTR(56, 1),
  /* 0010 */ PTR(58, 1),
  /* 0011 */ V(1, 5, 4),
  /* 0100 */ V(5, 1, 4),
  /* 0101 */ PTR(60, 1),
  /* 0110 */ V(5, 0, 4),
  /* 0111 */ PTR(62, 1),
  /* 1000 */ V(2, 4, 4),
  /* 1001 */ V(4, 2, 4),
  /* 1010 */ V(1, 4, 3),
  /* 1011 */ V(1, 4, 3),
  /* 1100 */ V(4, 1, 3),
  /* 1101 */ V(4, 1, 3),
  /* 1110 */ V(4, 0, 3),
  /* 1111 */ V(4, 0, 3),

  /* 0001 ... */
  /* 0000 */ V(0, 4, 4),	/* 32 */
  /* 0001 */ V(2, 3, 4),
  /* 0010 */ V(3, 2, 4),
  /* 0011 */ V(0, 3, 4),
  /* 0100 */ V(1, 3, 3),
  /* 0101 */ V(1, 3, 3),
  /* 0110 */ V(3, 1, 3),
  /* 0111 */ V(3, 1, 3),
  /* 1000 */ V(3, 0, 3),
  /* 1001 */ V(3, 0, 3),
  /* 1010 */ V(2, 2, 3),
  /* 1011 */ V(2, 2, 3),
  /* 1100 */ V(1, 2, 2),
  /* 1101 */ V(1, 2, 2),
  /* 1110 */ V(1, 2, 2),
  /* 1111 */ V(1, 2, 2),

  /* 0010 ... */
  /* 00   */ V(2, 1, 1),	/* 48 */
  /* 01   */ V(2, 1, 1),
  /* 10   */ V(0, 2, 2),
  /* 11   */ V(2, 0, 2),

  /* 0000 0000 ... */
  /* 00   */ V(5, 5, 2),	/* 52 */
  /* 01   */ V(4, 5, 2),
  /* 10   */ V(5, 4, 2),
  /* 11   */ V(5, 3, 2),

  /* 0000 0001 ... */
  /* 0    */ V(3, 5, 1),	/* 56 */
  /* 1    */ V(4, 4, 1),

  /* 0000 0010 ... */
  /* 0    */ V(2, 5, 1),	/* 58 */
  /* 1    */ V(5, 2, 1),

  /* 0000 0101 ... */
  /* 0    */ V(0, 5, 1),	/* 60 */
  /* 1    */ V(3, 4, 1),

  /* 0000 0111 ... */
  /* 0    */ V(4, 3, 1),	/* 62 */
  /* 1    */ V(3, 3, 1)
};

# if 0
/* this version saves 8 entries (16 bytes) at the expense of
   an extra lookup in 4 out of 36 cases */
static
union huffpair const hufftab8[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 2),
  /* 0010 */ V(1, 2, 4),
  /* 0011 */ V(2, 1, 4),
  /* 0100 */ V(1, 1, 2),
  /* 0101 */ V(1, 1, 2),
  /* 0110 */ V(1, 1, 2),
  /* 0111 */ V(1, 1, 2),
  /* 1000 */ V(0, 1, 3),
  /* 1001 */ V(0, 1, 3),
  /* 1010 */ V(1, 0, 3),
  /* 1011 */ V(1, 0, 3),
  /* 1100 */ V(0, 0, 2),
  /* 1101 */ V(0, 0, 2),
  /* 1110 */ V(0, 0, 2),
  /* 1111 */ V(0, 0, 2),

  /* 0000 ... */
  /* 0000 */ PTR(36, 3),	/* 16 */
  /* 0001 */ PTR(44, 2),
  /* 0010 */ PTR(48, 1),
  /* 0011 */ V(1, 5, 4),
  /* 0100 */ V(5, 1, 4),
  /* 0101 */ PTR(50, 1),
  /* 0110 */ PTR(52, 1),
  /* 0111 */ V(2, 4, 4),
  /* 1000 */ V(4, 2, 4),
  /* 1001 */ V(1, 4, 4),
  /* 1010 */ V(4, 1, 3),
  /* 1011 */ V(4, 1, 3),
  /* 1100 */ V(0, 4, 4),
  /* 1101 */ V(4, 0, 4),
  /* 1110 */ V(2, 3, 4),
  /* 1111 */ V(3, 2, 4),

  /* 0001 ... */
  /* 00   */ PTR(54, 2),	/* 32 */
  /* 01   */ V(2, 2, 2),
  /* 10   */ V(0, 2, 2),
  /* 11   */ V(2, 0, 2),

  /* 0000 0000 ... */
  /* 000  */ V(5, 5, 3),	/* 36 */
  /* 001  */ V(5, 4, 3),
  /* 010  */ V(4, 5, 2),
  /* 011  */ V(4, 5, 2),
  /* 100  */ V(5, 3, 1),
  /* 101  */ V(5, 3, 1),
  /* 110  */ V(5, 3, 1),
  /* 111  */ V(5, 3, 1),

  /* 0000 0001 ... */
  /* 00   */ V(3, 5, 2),	/* 44 */
  /* 01   */ V(4, 4, 2),
  /* 10   */ V(2, 5, 1),
  /* 11   */ V(2, 5, 1),

  /* 0000 0010 ... */
  /* 0    */ V(5, 2, 1),	/* 48 */
  /* 1    */ V(0, 5, 1),

  /* 0000 0101 ... */
  /* 0    */ V(3, 4, 1),	/* 50 */
  /* 1    */ V(4, 3, 1),

  /* 0000 0110 ... */
  /* 0    */ V(5, 0, 1),	/* 52 */
  /* 1    */ V(3, 3, 1),

  /* 0001 00 ... */
  /* 00   */ V(1, 3, 2),	/* 54 */
  /* 01   */ V(3, 1, 2),
  /* 10   */ V(0, 3, 2),
  /* 11   */ V(3, 0, 2),
};
# else
static
union huffpair const hufftab8[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 4),
  /* 0010 */ V(1, 2, 4),
  /* 0011 */ V(2, 1, 4),
  /* 0100 */ V(1, 1, 2),
  /* 0101 */ V(1, 1, 2),
  /* 0110 */ V(1, 1, 2),
  /* 0111 */ V(1, 1, 2),
  /* 1000 */ V(0, 1, 3),
  /* 1001 */ V(0, 1, 3),
  /* 1010 */ V(1, 0, 3),
  /* 1011 */ V(1, 0, 3),
  /* 1100 */ V(0, 0, 2),
  /* 1101 */ V(0, 0, 2),
  /* 1110 */ V(0, 0, 2),
  /* 1111 */ V(0, 0, 2),

  /* 0000 ... */
  /* 0000 */ PTR(48, 3),	/* 16 */
  /* 0001 */ PTR(56, 2),
  /* 0010 */ PTR(60, 1),
  /* 0011 */ V(1, 5, 4),
  /* 0100 */ V(5, 1, 4),
  /* 0101 */ PTR(62, 1),
  /* 0110 */ PTR(64, 1),
  /* 0111 */ V(2, 4, 4),
  /* 1000 */ V(4, 2, 4),
  /* 1001 */ V(1, 4, 4),
  /* 1010 */ V(4, 1, 3),
  /* 1011 */ V(4, 1, 3),
  /* 1100 */ V(0, 4, 4),
  /* 1101 */ V(4, 0, 4),
  /* 1110 */ V(2, 3, 4),
  /* 1111 */ V(3, 2, 4),

  /* 0001 ... */
  /* 0000 */ V(1, 3, 4),	/* 32 */
  /* 0001 */ V(3, 1, 4),
  /* 0010 */ V(0, 3, 4),
  /* 0011 */ V(3, 0, 4),
  /* 0100 */ V(2, 2, 2),
  /* 0101 */ V(2, 2, 2),
  /* 0110 */ V(2, 2, 2),
  /* 0111 */ V(2, 2, 2),
  /* 1000 */ V(0, 2, 2),
  /* 1001 */ V(0, 2, 2),
  /* 1010 */ V(0, 2, 2),
  /* 1011 */ V(0, 2, 2),
  /* 1100 */ V(2, 0, 2),
  /* 1101 */ V(2, 0, 2),
  /* 1110 */ V(2, 0, 2),
  /* 1111 */ V(2, 0, 2),

  /* 0000 0000 ... */
  /* 000  */ V(5, 5, 3),	/* 48 */
  /* 001  */ V(5, 4, 3),
  /* 010  */ V(4, 5, 2),
  /* 011  */ V(4, 5, 2),
  /* 100  */ V(5, 3, 1),
  /* 101  */ V(5, 3, 1),
  /* 110  */ V(5, 3, 1),
  /* 111  */ V(5, 3, 1),

  /* 0000 0001 ... */
  /* 00   */ V(3, 5, 2),	/* 56 */
  /* 01   */ V(4, 4, 2),
  /* 10   */ V(2, 5, 1),
  /* 11   */ V(2, 5, 1),

  /* 0000 0010 ... */
  /* 0    */ V(5, 2, 1),	/* 60 */
  /* 1    */ V(0, 5, 1),

  /* 0000 0101 ... */
  /* 0    */ V(3, 4, 1),	/* 62 */
  /* 1    */ V(4, 3, 1),

  /* 0000 0110 ... */
  /* 0    */ V(5, 0, 1),	/* 64 */
  /* 1    */ V(3, 3, 1)
};
# endif

static
union huffpair const hufftab9[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 3),
  /* 0010 */ PTR(40, 2),
  /* 0011 */ PTR(44, 2),
  /* 0100 */ PTR(48, 1),
  /* 0101 */ V(1, 2, 4),
  /* 0110 */ V(2, 1, 4),
  /* 0111 */ V(2, 0, 4),
  /* 1000 */ V(1, 1, 3),
  /* 1001 */ V(1, 1, 3),
  /* 1010 */ V(0, 1, 3),
  /* 1011 */ V(0, 1, 3),
  /* 1100 */ V(1, 0, 3),
  /* 1101 */ V(1, 0, 3),
  /* 1110 */ V(0, 0, 3),
  /* 1111 */ V(0, 0, 3),

  /* 0000 ... */
  /* 0000 */ PTR(50, 1),	/* 16 */
  /* 0001 */ V(3, 5, 4),
  /* 0010 */ V(5, 3, 4),
  /* 0011 */ PTR(52, 1),
  /* 0100 */ V(4, 4, 4),
  /* 0101 */ V(2, 5, 4),
  /* 0110 */ V(5, 2, 4),
  /* 0111 */ V(1, 5, 4),
  /* 1000 */ V(5, 1, 3),
  /* 1001 */ V(5, 1, 3),
  /* 1010 */ V(3, 4, 3),
  /* 1011 */ V(3, 4, 3),
  /* 1100 */ V(4, 3, 3),
  /* 1101 */ V(4, 3, 3),
  /* 1110 */ V(5, 0, 4),
  /* 1111 */ V(0, 4, 4),

  /* 0001 ... */
  /* 000  */ V(2, 4, 3),	/* 32 */
  /* 001  */ V(4, 2, 3),
  /* 010  */ V(3, 3, 3),
  /* 011  */ V(4, 0, 3),
  /* 100  */ V(1, 4, 2),
  /* 101  */ V(1, 4, 2),
  /* 110  */ V(4, 1, 2),
  /* 111  */ V(4, 1, 2),

  /* 0010 ... */
  /* 00   */ V(2, 3, 2),	/* 40 */
  /* 01   */ V(3, 2, 2),
  /* 10   */ V(1, 3, 1),
  /* 11   */ V(1, 3, 1),

  /* 0011 ... */
  /* 00   */ V(3, 1, 1),	/* 44 */
  /* 01   */ V(3, 1, 1),
  /* 10   */ V(0, 3, 2),
  /* 11   */ V(3, 0, 2),

  /* 0100 ... */
  /* 0    */ V(2, 2, 1),	/* 48 */
  /* 1    */ V(0, 2, 1),

  /* 0000 0000 ... */
  /* 0    */ V(5, 5, 1),	/* 50 */
  /* 1    */ V(4, 5, 1),

  /* 0000 0011 ... */
  /* 0    */ V(5, 4, 1),	/* 52 */
  /* 1    */ V(0, 5, 1)
};

static
union huffpair const hufftab10[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 4),
  /* 0010 */ PTR(48, 2),
  /* 0011 */ V(1, 1, 4),
  /* 0100 */ V(0, 1, 3),
  /* 0101 */ V(0, 1, 3),
  /* 0110 */ V(1, 0, 3),
  /* 0111 */ V(1, 0, 3),
  /* 1000 */ V(0, 0, 1),
  /* 1001 */ V(0, 0, 1),
  /* 1010 */ V(0, 0, 1),
  /* 1011 */ V(0, 0, 1),
  /* 1100 */ V(0, 0, 1),
  /* 1101 */ V(0, 0, 1),
  /* 1110 */ V(0, 0, 1),
  /* 1111 */ V(0, 0, 1),

  /* 0000 ... */
  /* 0000 */ PTR(52, 3),	/* 16 */
  /* 0001 */ PTR(60, 2),
  /* 0010 */ PTR(64, 3),
  /* 0011 */ PTR(72, 1),
  /* 0100 */ PTR(74, 2),
  /* 0101 */ PTR(78, 2),
  /* 0110 */ PTR(82, 2),
  /* 0111 */ V(1, 7, 4),
  /* 1000 */ V(7, 1, 4),
  /* 1001 */ PTR(86, 1),
  /* 1010 */ PTR(88, 2),
  /* 1011 */ PTR(92, 2),
  /* 1100 */ V(1, 6, 4),
  /* 1101 */ V(6, 1, 4),
  /* 1110 */ V(6, 0, 4),
  /* 1111 */ PTR(96, 1),

  /* 0001 ... */
  /* 0000 */ PTR(98, 1),	/* 32 */
  /* 0001 */ PTR(100, 1),
  /* 0010 */ V(1, 4, 4),
  /* 0011 */ V(4, 1, 4),
  /* 0100 */ V(4, 0, 4),
  /* 0101 */ V(2, 3, 4),
  /* 0110 */ V(3, 2, 4),
  /* 0111 */ V(0, 3, 4),
  /* 1000 */ V(1, 3, 3),
  /* 1001 */ V(1, 3, 3),
  /* 1010 */ V(3, 1, 3),
  /* 1011 */ V(3, 1, 3),
  /* 1100 */ V(3, 0, 3),
  /* 1101 */ V(3, 0, 3),
  /* 1110 */ V(2, 2, 3),
  /* 1111 */ V(2, 2, 3),

  /* 0010 ... */
  /* 00   */ V(1, 2, 2),	/* 48 */
  /* 01   */ V(2, 1, 2),
  /* 10   */ V(0, 2, 2),
  /* 11   */ V(2, 0, 2),

  /* 0000 0000 ... */
  /* 000  */ V(7, 7, 3),	/* 52 */
  /* 001  */ V(6, 7, 3),
  /* 010  */ V(7, 6, 3),
  /* 011  */ V(5, 7, 3),
  /* 100  */ V(7, 5, 3),
  /* 101  */ V(6, 6, 3),
  /* 110  */ V(4, 7, 2),
  /* 111  */ V(4, 7, 2),

  /* 0000 0001 ... */
  /* 00   */ V(7, 4, 2),	/* 60 */
  /* 01   */ V(5, 6, 2),
  /* 10   */ V(6, 5, 2),
  /* 11   */ V(3, 7, 2),

  /* 0000 0010 ... */
  /* 000  */ V(7, 3, 2),	/* 64 */
  /* 001  */ V(7, 3, 2),
  /* 010  */ V(4, 6, 2),
  /* 011  */ V(4, 6, 2),
  /* 100  */ V(5, 5, 3),
  /* 101  */ V(5, 4, 3),
  /* 110  */ V(6, 3, 2),
  /* 111  */ V(6, 3, 2),

  /* 0000 0011 ... */
  /* 0    */ V(2, 7, 1),	/* 72 */
  /* 1    */ V(7, 2, 1),

  /* 0000 0100 ... */
  /* 00   */ V(6, 4, 2),	/* 74 */
  /* 01   */ V(0, 7, 2),
  /* 10   */ V(7, 0, 1),
  /* 11   */ V(7, 0, 1),

  /* 0000 0101 ... */
  /* 00   */ V(6, 2, 1),	/* 78 */
  /* 01   */ V(6, 2, 1),
  /* 10   */ V(4, 5, 2),
  /* 11   */ V(3, 5, 2),

  /* 0000 0110 ... */
  /* 00   */ V(0, 6, 1),	/* 82 */
  /* 01   */ V(0, 6, 1),
  /* 10   */ V(5, 3, 2),
  /* 11   */ V(4, 4, 2),

  /* 0000 1001 ... */
  /* 0    */ V(3, 6, 1),	/* 86 */
  /* 1    */ V(2, 6, 1),

  /* 0000 1010 ... */
  /* 00   */ V(2, 5, 2),	/* 88 */
  /* 01   */ V(5, 2, 2),
  /* 10   */ V(1, 5, 1),
  /* 11   */ V(1, 5, 1),

  /* 0000 1011 ... */
  /* 00   */ V(5, 1, 1),	/* 92 */
  /* 01   */ V(5, 1, 1),
  /* 10   */ V(3, 4, 2),
  /* 11   */ V(4, 3, 2),

  /* 0000 1111 ... */
  /* 0    */ V(0, 5, 1),	/* 96 */
  /* 1    */ V(5, 0, 1),

  /* 0001 0000 ... */
  /* 0    */ V(2, 4, 1),	/* 98 */
  /* 1    */ V(4, 2, 1),

  /* 0001 0001 ... */
  /* 0    */ V(3, 3, 1),	/* 100 */
  /* 1    */ V(0, 4, 1)
};

static
union huffpair const hufftab11[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 4),
  /* 0010 */ PTR(48, 4),
  /* 0011 */ PTR(64, 3),
  /* 0100 */ V(1, 2, 4),
  /* 0101 */ PTR(72, 1),
  /* 0110 */ V(1, 1, 3),
  /* 0111 */ V(1, 1, 3),
  /* 1000 */ V(0, 1, 3),
  /* 1001 */ V(0, 1, 3),
  /* 1010 */ V(1, 0, 3),
  /* 1011 */ V(1, 0, 3),
  /* 1100 */ V(0, 0, 2),
  /* 1101 */ V(0, 0, 2),
  /* 1110 */ V(0, 0, 2),
  /* 1111 */ V(0, 0, 2),

  /* 0000 ... */
  /* 0000 */ PTR(74, 2),	/* 16 */
  /* 0001 */ PTR(78, 3),
  /* 0010 */ PTR(86, 2),
  /* 0011 */ PTR(90, 1),
  /* 0100 */ PTR(92, 2),
  /* 0101 */ V(2, 7, 4),
  /* 0110 */ V(7, 2, 4),
  /* 0111 */ PTR(96, 1),
  /* 1000 */ V(7, 1, 3),
  /* 1001 */ V(7, 1, 3),
  /* 1010 */ V(1, 7, 4),
  /* 1011 */ V(7, 0, 4),
  /* 1100 */ V(3, 6, 4),
  /* 1101 */ V(6, 3, 4),
  /* 1110 */ V(6, 0, 4),
  /* 1111 */ PTR(98, 1),

  /* 0001 ... */
  /* 0000 */ PTR(100, 1),	/* 32 */
  /* 0001 */ V(1, 5, 4),
  /* 0010 */ V(6, 2, 3),
  /* 0011 */ V(6, 2, 3),
  /* 0100 */ V(2, 6, 4),
  /* 0101 */ V(0, 6, 4),
  /* 0110 */ V(1, 6, 3),
  /* 0111 */ V(1, 6, 3),
  /* 1000 */ V(6, 1, 3),
  /* 1001 */ V(6, 1, 3),
  /* 1010 */ V(5, 1, 4),
  /* 1011 */ V(3, 4, 4),
  /* 1100 */ V(5, 0, 4),
  /* 1101 */ PTR(102, 1),
  /* 1110 */ V(2, 4, 4),
  /* 1111 */ V(4, 2, 4),

  /* 0010 ... */
  /* 0000 */ V(1, 4, 4),	/* 48 */
  /* 0001 */ V(4, 1, 4),
  /* 0010 */ V(0, 4, 4),
  /* 0011 */ V(4, 0, 4),
  /* 0100 */ V(2, 3, 3),
  /* 0101 */ V(2, 3, 3),
  /* 0110 */ V(3, 2, 3),
  /* 0111 */ V(3, 2, 3),
  /* 1000 */ V(1, 3, 2),
  /* 1001 */ V(1, 3, 2),
  /* 1010 */ V(1, 3, 2),
  /* 1011 */ V(1, 3, 2),
  /* 1100 */ V(3, 1, 2),
  /* 1101 */ V(3, 1, 2),
  /* 1110 */ V(3, 1, 2),
  /* 1111 */ V(3, 1, 2),

  /* 0011 ... */
  /* 000  */ V(0, 3, 3),	/* 64 */
  /* 001  */ V(3, 0, 3),
  /* 010  */ V(2, 2, 2),
  /* 011  */ V(2, 2, 2),
  /* 100  */ V(2, 1, 1),
  /* 101  */ V(2, 1, 1),
  /* 110  */ V(2, 1, 1),
  /* 111  */ V(2, 1, 1),

  /* 0101 ... */
  /* 0    */ V(0, 2, 1),	/* 72 */
  /* 1    */ V(2, 0, 1),

  /* 0000 0000 ... */
  /* 00   */ V(7, 7, 2),	/* 74 */
  /* 01   */ V(6, 7, 2),
  /* 10   */ V(7, 6, 2),
  /* 11   */ V(7, 5, 2),

  /* 0000 0001 ... */
  /* 000  */ V(6, 6, 2),	/* 78 */
  /* 001  */ V(6, 6, 2),
  /* 010  */ V(4, 7, 2),
  /* 011  */ V(4, 7, 2),
  /* 100  */ V(7, 4, 2),
  /* 101  */ V(7, 4, 2),
  /* 110  */ V(5, 7, 3),
  /* 111  */ V(5, 5, 3),

  /* 0000 0010 ... */
  /* 00   */ V(5, 6, 2),	/* 86 */
  /* 01   */ V(6, 5, 2),
  /* 10   */ V(3, 7, 1),
  /* 11   */ V(3, 7, 1),

  /* 0000 0011 ... */
  /* 0    */ V(7, 3, 1),	/* 90 */
  /* 1    */ V(4, 6, 1),

  /* 0000 0100 ... */
  /* 00   */ V(4, 5, 2),	/* 92 */
  /* 01   */ V(5, 4, 2),
  /* 10   */ V(3, 5, 2),
  /* 11   */ V(5, 3, 2),

  /* 0000 0111 ... */
  /* 0    */ V(6, 4, 1),	/* 96 */
  /* 1    */ V(0, 7, 1),

  /* 0000 1111 ... */
  /* 0    */ V(4, 4, 1),	/* 98 */
  /* 1    */ V(2, 5, 1),

  /* 0001 0000 ... */
  /* 0    */ V(5, 2, 1),	/* 100 */
  /* 1    */ V(0, 5, 1),

  /* 0001 1101 ... */
  /* 0    */ V(4, 3, 1),	/* 102 */
  /* 1    */ V(3, 3, 1)
};

static
union huffpair const hufftab12[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 4),
  /* 0010 */ PTR(48, 4),
  /* 0011 */ PTR(64, 2),
  /* 0100 */ PTR(68, 3),
  /* 0101 */ PTR(76, 1),
  /* 0110 */ V(1, 2, 4),
  /* 0111 */ V(2, 1, 4),
  /* 1000 */ PTR(78, 1),
  /* 1001 */ V(0, 0, 4),
  /* 1010 */ V(1, 1, 3),
  /* 1011 */ V(1, 1, 3),
  /* 1100 */ V(0, 1, 3),
  /* 1101 */ V(0, 1, 3),
  /* 1110 */ V(1, 0, 3),
  /* 1111 */ V(1, 0, 3),

  /* 0000 ... */
  /* 0000 */ PTR(80, 2),	/* 16 */
  /* 0001 */ PTR(84, 1),
  /* 0010 */ PTR(86, 1),
  /* 0011 */ PTR(88, 1),
  /* 0100 */ V(5, 6, 4),
  /* 0101 */ V(3, 7, 4),
  /* 0110 */ PTR(90, 1),
  /* 0111 */ V(2, 7, 4),
  /* 1000 */ V(7, 2, 4),
  /* 1001 */ V(4, 6, 4),
  /* 1010 */ V(6, 4, 4),
  /* 1011 */ V(1, 7, 4),
  /* 1100 */ V(7, 1, 4),
  /* 1101 */ PTR(92, 1),
  /* 1110 */ V(3, 6, 4),
  /* 1111 */ V(6, 3, 4),

  /* 0001 ... */
  /* 0000 */ V(4, 5, 4),	/* 32 */
  /* 0001 */ V(5, 4, 4),
  /* 0010 */ V(4, 4, 4),
  /* 0011 */ PTR(94, 1),
  /* 0100 */ V(2, 6, 3),
  /* 0101 */ V(2, 6, 3),
  /* 0110 */ V(6, 2, 3),
  /* 0111 */ V(6, 2, 3),
  /* 1000 */ V(6, 1, 3),
  /* 1001 */ V(6, 1, 3),
  /* 1010 */ V(1, 6, 4),
  /* 1011 */ V(6, 0, 4),
  /* 1100 */ V(3, 5, 4),
  /* 1101 */ V(5, 3, 4),
  /* 1110 */ V(2, 5, 4),
  /* 1111 */ V(5, 2, 4),

  /* 0010 ... */
  /* 0000 */ V(1, 5, 3),	/* 48 */
  /* 0001 */ V(1, 5, 3),
  /* 0010 */ V(5, 1, 3),
  /* 0011 */ V(5, 1, 3),
  /* 0100 */ V(3, 4, 3),
  /* 0101 */ V(3, 4, 3),
  /* 0110 */ V(4, 3, 3),
  /* 0111 */ V(4, 3, 3),
  /* 1000 */ V(5, 0, 4),
  /* 1001 */ V(0, 4, 4),
  /* 1010 */ V(2, 4, 3),
  /* 1011 */ V(2, 4, 3),
  /* 1100 */ V(4, 2, 3),
  /* 1101 */ V(4, 2, 3),
  /* 1110 */ V(1, 4, 3),
  /* 1111 */ V(1, 4, 3),

  /* 0011 ... */
  /* 00   */ V(3, 3, 2),	/* 64 */
  /* 01   */ V(4, 1, 2),
  /* 10   */ V(2, 3, 2),
  /* 11   */ V(3, 2, 2),

  /* 0100 ... */
  /* 000  */ V(4, 0, 3),	/* 68 */
  /* 001  */ V(0, 3, 3),
  /* 010  */ V(3, 0, 2),
  /* 011  */ V(3, 0, 2),
  /* 100  */ V(1, 3, 1),
  /* 101  */ V(1, 3, 1),
  /* 110  */ V(1, 3, 1),
  /* 111  */ V(1, 3, 1),

  /* 0101 ... */
  /* 0    */ V(3, 1, 1),	/* 76 */
  /* 1    */ V(2, 2, 1),

  /* 1000 ... */
  /* 0    */ V(0, 2, 1),	/* 78 */
  /* 1    */ V(2, 0, 1),

  /* 0000 0000 ... */
  /* 00   */ V(7, 7, 2),	/* 80 */
  /* 01   */ V(6, 7, 2),
  /* 10   */ V(7, 6, 1),
  /* 11   */ V(7, 6, 1),

  /* 0000 0001 ... */
  /* 0    */ V(5, 7, 1),	/* 84 */
  /* 1    */ V(7, 5, 1),

  /* 0000 0010 ... */
  /* 0    */ V(6, 6, 1),	/* 86 */
  /* 1    */ V(4, 7, 1),

  /* 0000 0011 ... */
  /* 0    */ V(7, 4, 1),	/* 88 */
  /* 1    */ V(6, 5, 1),

  /* 0000 0110 ... */
  /* 0    */ V(7, 3, 1),	/* 90 */
  /* 1    */ V(5, 5, 1),

  /* 0000 1101 ... */
  /* 0    */ V(0, 7, 1),	/* 92 */
  /* 1    */ V(7, 0, 1),

  /* 0001 0011 ... */
  /* 0    */ V(0, 6, 1),	/* 94 */
  /* 1    */ V(0, 5, 1)
};

static
union huffpair const hufftab13[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 4),
  /* 0010 */ PTR(48, 4),
  /* 0011 */ PTR(64, 2),
  /* 0100 */ V(1, 1, 4),
  /* 0101 */ V(0, 1, 4),
  /* 0110 */ V(1, 0, 3),
  /* 0111 */ V(1, 0, 3),
  /* 1000 */ V(0, 0, 1),
  /* 1001 */ V(0, 0, 1),
  /* 1010 */ V(0, 0, 1),
  /* 1011 */ V(0, 0, 1),
  /* 1100 */ V(0, 0, 1),
  /* 1101 */ V(0, 0, 1),
  /* 1110 */ V(0, 0, 1),
  /* 1111 */ V(0, 0, 1),

  /* 0000 ... */
  /* 0000 */ PTR(68, 4),	/* 16 */
  /* 0001 */ PTR(84, 4),
  /* 0010 */ PTR(100, 4),
  /* 0011 */ PTR(116, 4),
  /* 0100 */ PTR(132, 4),
  /* 0101 */ PTR(148, 4),
  /* 0110 */ PTR(164, 3),
  /* 0111 */ PTR(172, 3),
  /* 1000 */ PTR(180, 3),
  /* 1001 */ PTR(188, 3),
  /* 1010 */ PTR(196, 3),
  /* 1011 */ PTR(204, 3),
  /* 1100 */ PTR(212, 1),
  /* 1101 */ PTR(214, 2),
  /* 1110 */ PTR(218, 3),
  /* 1111 */ PTR(226, 1),

  /* 0001 ... */
  /* 0000 */ PTR(228, 2),	/* 32 */
  /* 0001 */ PTR(232, 2),
  /* 0010 */ PTR(236, 2),
  /* 0011 */ PTR(240, 2),
  /* 0100 */ V(8, 1, 4),
  /* 0101 */ PTR(244, 1),
  /* 0110 */ PTR(246, 1),
  /* 0111 */ PTR(248, 1),
  /* 1000 */ PTR(250, 2),
  /* 1001 */ PTR(254, 1),
  /* 1010 */ V(1, 5, 4),
  /* 1011 */ V(5, 1, 4),
  /* 1100 */ PTR(256, 1),
  /* 1101 */ PTR(258, 1),
  /* 1110 */ PTR(260, 1),
  /* 1111 */ V(1, 4, 4),

  /* 0010 ... */
  /* 0000 */ V(4, 1, 3),	/* 48 */
  /* 0001 */ V(4, 1, 3),
  /* 0010 */ V(0, 4, 4),
  /* 0011 */ V(4, 0, 4),
  /* 0100 */ V(2, 3, 4),
  /* 0101 */ V(3, 2, 4),
  /* 0110 */ V(1, 3, 3),
  /* 0111 */ V(1, 3, 3),
  /* 1000 */ V(3, 1, 3),
  /* 1001 */ V(3, 1, 3),
  /* 1010 */ V(0, 3, 3),
  /* 1011 */ V(0, 3, 3),
  /* 1100 */ V(3, 0, 3),
  /* 1101 */ V(3, 0, 3),
  /* 1110 */ V(2, 2, 3),
  /* 1111 */ V(2, 2, 3),

  /* 0011 ... */
  /* 00   */ V(1, 2, 2),	/* 64 */
  /* 01   */ V(2, 1, 2),
  /* 10   */ V(0, 2, 2),
  /* 11   */ V(2, 0, 2),

  /* 0000 0000 ... */
  /* 0000 */ PTR(262, 4),	/* 68 */
  /* 0001 */ PTR(278, 4),
  /* 0010 */ PTR(294, 4),
  /* 0011 */ PTR(310, 3),
  /* 0100 */ PTR(318, 2),
  /* 0101 */ PTR(322, 2),
  /* 0110 */ PTR(326, 3),
  /* 0111 */ PTR(334, 2),
  /* 1000 */ PTR(338, 1),
  /* 1001 */ PTR(340, 2),
  /* 1010 */ PTR(344, 2),
  /* 1011 */ PTR(348, 2),
  /* 1100 */ PTR(352, 2),
  /* 1101 */ PTR(356, 2),
  /* 1110 */ V(1, 15, 4),
  /* 1111 */ V(15, 1, 4),

  /* 0000 0001 ... */
  /* 0000 */ V(15, 0, 4),	/* 84 */
  /* 0001 */ PTR(360, 1),
  /* 0010 */ PTR(362, 1),
  /* 0011 */ PTR(364, 1),
  /* 0100 */ V(14, 2, 4),
  /* 0101 */ PTR(366, 1),
  /* 0110 */ V(1, 14, 4),
  /* 0111 */ V(14, 1, 4),
  /* 1000 */ PTR(368, 1),
  /* 1001 */ PTR(370, 1),
  /* 1010 */ PTR(372, 1),
  /* 1011 */ PTR(374, 1),
  /* 1100 */ PTR(376, 1),
  /* 1101 */ PTR(378, 1),
  /* 1110 */ V(12, 6, 4),
  /* 1111 */ V(3, 13, 4),

  /* 0000 0010 ... */
  /* 0000 */ PTR(380, 1),	/* 100 */
  /* 0001 */ V(2, 13, 4),
  /* 0010 */ V(13, 2, 4),
  /* 0011 */ V(1, 13, 4),
  /* 0100 */ V(11, 7, 4),
  /* 0101 */ PTR(382, 1),
  /* 0110 */ PTR(384, 1),
  /* 0111 */ V(12, 3, 4),
  /* 1000 */ PTR(386, 1),
  /* 1001 */ V(4, 11, 4),
  /* 1010 */ V(13, 1, 3),
  /* 1011 */ V(13, 1, 3),
  /* 1100 */ V(0, 13, 4),
  /* 1101 */ V(13, 0, 4),
  /* 1110 */ V(8, 10, 4),
  /* 1111 */ V(10, 8, 4),

  /* 0000 0011 ... */
  /* 0000 */ V(4, 12, 4),	/* 116 */
  /* 0001 */ V(12, 4, 4),
  /* 0010 */ V(6, 11, 4),
  /* 0011 */ V(11, 6, 4),
  /* 0100 */ V(3, 12, 3),
  /* 0101 */ V(3, 12, 3),
  /* 0110 */ V(2, 12, 3),
  /* 0111 */ V(2, 12, 3),
  /* 1000 */ V(12, 2, 3),
  /* 1001 */ V(12, 2, 3),
  /* 1010 */ V(5, 11, 3),
  /* 1011 */ V(5, 11, 3),
  /* 1100 */ V(11, 5, 4),
  /* 1101 */ V(8, 9, 4),
  /* 1110 */ V(1, 12, 3),
  /* 1111 */ V(1, 12, 3),

  /* 0000 0100 ... */
  /* 0000 */ V(12, 1, 3),	/* 132 */
  /* 0001 */ V(12, 1, 3),
  /* 0010 */ V(9, 8, 4),
  /* 0011 */ V(0, 12, 4),
  /* 0100 */ V(12, 0, 3),
  /* 0101 */ V(12, 0, 3),
  /* 0110 */ V(11, 4, 4),
  /* 0111 */ V(6, 10, 4),
  /* 1000 */ V(10, 6, 4),
  /* 1001 */ V(7, 9, 4),
  /* 1010 */ V(3, 11, 3),
  /* 1011 */ V(3, 11, 3),
  /* 1100 */ V(11, 3, 3),
  /* 1101 */ V(11, 3, 3),
  /* 1110 */ V(8, 8, 4),
  /* 1111 */ V(5, 10, 4),

  /* 0000 0101 ... */
  /* 0000 */ V(2, 11, 3),	/* 148 */
  /* 0001 */ V(2, 11, 3),
  /* 0010 */ V(10, 5, 4),
  /* 0011 */ V(6, 9, 4),
  /* 0100 */ V(10, 4, 3),
  /* 0101 */ V(10, 4, 3),
  /* 0110 */ V(7, 8, 4),
  /* 0111 */ V(8, 7, 4),
  /* 1000 */ V(9, 4, 3),
  /* 1001 */ V(9, 4, 3),
  /* 1010 */ V(7, 7, 4),
  /* 1011 */ V(7, 6, 4),
  /* 1100 */ V(11, 2, 2),
  /* 1101 */ V(11, 2, 2),
  /* 1110 */ V(11, 2, 2),
  /* 1111 */ V(11, 2, 2),

  /* 0000 0110 ... */
  /* 000  */ V(1, 11, 2),	/* 164 */
  /* 001  */ V(1, 11, 2),
  /* 010  */ V(11, 1, 2),
  /* 011  */ V(11, 1, 2),
  /* 100  */ V(0, 11, 3),
  /* 101  */ V(11, 0, 3),
  /* 110  */ V(9, 6, 3),
  /* 111  */ V(4, 10, 3),

  /* 0000 0111 ... */
  /* 000  */ V(3, 10, 3),	/* 172 */
  /* 001  */ V(10, 3, 3),
  /* 010  */ V(5, 9, 3),
  /* 011  */ V(9, 5, 3),
  /* 100  */ V(2, 10, 2),
  /* 101  */ V(2, 10, 2),
  /* 110  */ V(10, 2, 2),
  /* 111  */ V(10, 2, 2),

  /* 0000 1000 ... */
  /* 000  */ V(1, 10, 2),	/* 180 */
  /* 001  */ V(1, 10, 2),
  /* 010  */ V(10, 1, 2),
  /* 011  */ V(10, 1, 2),
  /* 100  */ V(0, 10, 3),
  /* 101  */ V(6, 8, 3),
  /* 110  */ V(10, 0, 2),
  /* 111  */ V(10, 0, 2),

  /* 0000 1001 ... */
  /* 000  */ V(8, 6, 3),	/* 188 */
  /* 001  */ V(4, 9, 3),
  /* 010  */ V(9, 3, 2),
  /* 011  */ V(9, 3, 2),
  /* 100  */ V(3, 9, 3),
  /* 101  */ V(5, 8, 3),
  /* 110  */ V(8, 5, 3),
  /* 111  */ V(6, 7, 3),

  /* 0000 1010 ... */
  /* 000  */ V(2, 9, 2),	/* 196 */
  /* 001  */ V(2, 9, 2),
  /* 010  */ V(9, 2, 2),
  /* 011  */ V(9, 2, 2),
  /* 100  */ V(5, 7, 3),
  /* 101  */ V(7, 5, 3),
  /* 110  */ V(3, 8, 2),
  /* 111  */ V(3, 8, 2),

  /* 0000 1011 ... */
  /* 000  */ V(8, 3, 2),	/* 204 */
  /* 001  */ V(8, 3, 2),
  /* 010  */ V(6, 6, 3),
  /* 011  */ V(4, 7, 3),
  /* 100  */ V(7, 4, 3),
  /* 101  */ V(5, 6, 3),
  /* 110  */ V(6, 5, 3),
  /* 111  */ V(7, 3, 3),

  /* 0000 1100 ... */
  /* 0    */ V(1, 9, 1),	/* 212 */
  /* 1    */ V(9, 1, 1),

  /* 0000 1101 ... */
  /* 00   */ V(0, 9, 2),	/* 214 */
  /* 01   */ V(9, 0, 2),
  /* 10   */ V(4, 8, 2),
  /* 11   */ V(8, 4, 2),

  /* 0000 1110 ... */
  /* 000  */ V(7, 2, 2),	/* 218 */
  /* 001  */ V(7, 2, 2),
  /* 010  */ V(4, 6, 3),
  /* 011  */ V(6, 4, 3),
  /* 100  */ V(2, 8, 1),
  /* 101  */ V(2, 8, 1),
  /* 110  */ V(2, 8, 1),
  /* 111  */ V(2, 8, 1),

  /* 0000 1111 ... */
  /* 0    */ V(8, 2, 1),	/* 226 */
  /* 1    */ V(1, 8, 1),

  /* 0001 0000 ... */
  /* 00   */ V(3, 7, 2),	/* 228 */
  /* 01   */ V(2, 7, 2),
  /* 10   */ V(1, 7, 1),
  /* 11   */ V(1, 7, 1),

  /* 0001 0001 ... */
  /* 00   */ V(7, 1, 1),	/* 232 */
  /* 01   */ V(7, 1, 1),
  /* 10   */ V(5, 5, 2),
  /* 11   */ V(0, 7, 2),

  /* 0001 0010 ... */
  /* 00   */ V(7, 0, 2),	/* 236 */
  /* 01   */ V(3, 6, 2),
  /* 10   */ V(6, 3, 2),
  /* 11   */ V(4, 5, 2),

  /* 0001 0011 ... */
  /* 00   */ V(5, 4, 2),	/* 240 */
  /* 01   */ V(2, 6, 2),
  /* 10   */ V(6, 2, 2),
  /* 11   */ V(3, 5, 2),

  /* 0001 0101 ... */
  /* 0    */ V(0, 8, 1),	/* 244 */
  /* 1    */ V(8, 0, 1),

  /* 0001 0110 ... */
  /* 0    */ V(1, 6, 1),	/* 246 */
  /* 1    */ V(6, 1, 1),

  /* 0001 0111 ... */
  /* 0    */ V(0, 6, 1),	/* 248 */
  /* 1    */ V(6, 0, 1),

  /* 0001 1000 ... */
  /* 00   */ V(5, 3, 2),	/* 250 */
  /* 01   */ V(4, 4, 2),
  /* 10   */ V(2, 5, 1),
  /* 11   */ V(2, 5, 1),

  /* 0001 1001 ... */
  /* 0    */ V(5, 2, 1),	/* 254 */
  /* 1    */ V(0, 5, 1),

  /* 0001 1100 ... */
  /* 0    */ V(3, 4, 1),	/* 256 */
  /* 1    */ V(4, 3, 1),

  /* 0001 1101 ... */
  /* 0    */ V(5, 0, 1),	/* 258 */
  /* 1    */ V(2, 4, 1),

  /* 0001 1110 ... */
  /* 0    */ V(4, 2, 1),	/* 260 */
  /* 1    */ V(3, 3, 1),

  /* 0000 0000 0000 ... */
  /* 0000 */ PTR(388, 3),	/* 262 */
  /* 0001 */ V(15, 15, 4),
  /* 0010 */ V(14, 15, 4),
  /* 0011 */ V(13, 15, 4),
  /* 0100 */ V(14, 14, 4),
  /* 0101 */ V(12, 15, 4),
  /* 0110 */ V(13, 14, 4),
  /* 0111 */ V(11, 15, 4),
  /* 1000 */ V(15, 11, 4),
  /* 1001 */ V(12, 14, 4),
  /* 1010 */ V(13, 12, 4),
  /* 1011 */ PTR(396, 1),
  /* 1100 */ V(14, 12, 3),
  /* 1101 */ V(14, 12, 3),
  /* 1110 */ V(13, 13, 3),
  /* 1111 */ V(13, 13, 3),

  /* 0000 0000 0001 ... */
  /* 0000 */ V(15, 10, 4),	/* 278 */
  /* 0001 */ V(12, 13, 4),
  /* 0010 */ V(11, 14, 3),
  /* 0011 */ V(11, 14, 3),
  /* 0100 */ V(14, 11, 3),
  /* 0101 */ V(14, 11, 3),
  /* 0110 */ V(9, 15, 3),
  /* 0111 */ V(9, 15, 3),
  /* 1000 */ V(15, 9, 3),
  /* 1001 */ V(15, 9, 3),
  /* 1010 */ V(14, 10, 3),
  /* 1011 */ V(14, 10, 3),
  /* 1100 */ V(11, 13, 3),
  /* 1101 */ V(11, 13, 3),
  /* 1110 */ V(13, 11, 3),
  /* 1111 */ V(13, 11, 3),

  /* 0000 0000 0010 ... */
  /* 0000 */ V(8, 15, 3),	/* 294 */
  /* 0001 */ V(8, 15, 3),
  /* 0010 */ V(15, 8, 3),
  /* 0011 */ V(15, 8, 3),
  /* 0100 */ V(12, 12, 3),
  /* 0101 */ V(12, 12, 3),
  /* 0110 */ V(10, 14, 4),
  /* 0111 */ V(9, 14, 4),
  /* 1000 */ V(8, 14, 3),
  /* 1001 */ V(8, 14, 3),
  /* 1010 */ V(7, 15, 4),
  /* 1011 */ V(7, 14, 4),
  /* 1100 */ V(15, 7, 2),
  /* 1101 */ V(15, 7, 2),
  /* 1110 */ V(15, 7, 2),
  /* 1111 */ V(15, 7, 2),

  /* 0000 0000 0011 ... */
  /* 000  */ V(13, 10, 2),	/* 310 */
  /* 001  */ V(13, 10, 2),
  /* 010  */ V(10, 13, 3),
  /* 011  */ V(11, 12, 3),
  /* 100  */ V(12, 11, 3),
  /* 101  */ V(15, 6, 3),
  /* 110  */ V(6, 15, 2),
  /* 111  */ V(6, 15, 2),

  /* 0000 0000 0100 ... */
  /* 00   */ V(14, 8, 2),	/* 318 */
  /* 01   */ V(5, 15, 2),
  /* 10   */ V(9, 13, 2),
  /* 11   */ V(13, 9, 2),

  /* 0000 0000 0101 ... */
  /* 00   */ V(15, 5, 2),	/* 322 */
  /* 01   */ V(14, 7, 2),
  /* 10   */ V(10, 12, 2),
  /* 11   */ V(11, 11, 2),

  /* 0000 0000 0110 ... */
  /* 000  */ V(4, 15, 2),	/* 326 */
  /* 001  */ V(4, 15, 2),
  /* 010  */ V(15, 4, 2),
  /* 011  */ V(15, 4, 2),
  /* 100  */ V(12, 10, 3),
  /* 101  */ V(14, 6, 3),
  /* 110  */ V(15, 3, 2),
  /* 111  */ V(15, 3, 2),

  /* 0000 0000 0111 ... */
  /* 00   */ V(3, 15, 1),	/* 334 */
  /* 01   */ V(3, 15, 1),
  /* 10   */ V(8, 13, 2),
  /* 11   */ V(13, 8, 2),

  /* 0000 0000 1000 ... */
  /* 0    */ V(2, 15, 1),	/* 338 */
  /* 1    */ V(15, 2, 1),

  /* 0000 0000 1001 ... */
  /* 00   */ V(6, 14, 2),	/* 340 */
  /* 01   */ V(9, 12, 2),
  /* 10   */ V(0, 15, 1),
  /* 11   */ V(0, 15, 1),

  /* 0000 0000 1010 ... */
  /* 00   */ V(12, 9, 2),	/* 344 */
  /* 01   */ V(5, 14, 2),
  /* 10   */ V(10, 11, 1),
  /* 11   */ V(10, 11, 1),

  /* 0000 0000 1011 ... */
  /* 00   */ V(7, 13, 2),	/* 348 */
  /* 01   */ V(13, 7, 2),
  /* 10   */ V(4, 14, 1),
  /* 11   */ V(4, 14, 1),

  /* 0000 0000 1100 ... */
  /* 00   */ V(12, 8, 2),	/* 352 */
  /* 01   */ V(13, 6, 2),
  /* 10   */ V(3, 14, 1),
  /* 11   */ V(3, 14, 1),

  /* 0000 0000 1101 ... */
  /* 00   */ V(11, 9, 1),	/* 356 */
  /* 01   */ V(11, 9, 1),
  /* 10   */ V(9, 11, 2),
  /* 11   */ V(10, 10, 2),

  /* 0000 0001 0001 ... */
  /* 0    */ V(11, 10, 1),	/* 360 */
  /* 1    */ V(14, 5, 1),

  /* 0000 0001 0010 ... */
  /* 0    */ V(14, 4, 1),	/* 362 */
  /* 1    */ V(8, 12, 1),

  /* 0000 0001 0011 ... */
  /* 0    */ V(6, 13, 1),	/* 364 */
  /* 1    */ V(14, 3, 1),

  /* 0000 0001 0101 ... */
  /* 0    */ V(2, 14, 1),	/* 366 */
  /* 1    */ V(0, 14, 1),

  /* 0000 0001 1000 ... */
  /* 0    */ V(14, 0, 1),	/* 368 */
  /* 1    */ V(5, 13, 1),

  /* 0000 0001 1001 ... */
  /* 0    */ V(13, 5, 1),	/* 370 */
  /* 1    */ V(7, 12, 1),

  /* 0000 0001 1010 ... */
  /* 0    */ V(12, 7, 1),	/* 372 */
  /* 1    */ V(4, 13, 1),

  /* 0000 0001 1011 ... */
  /* 0    */ V(8, 11, 1),	/* 374 */
  /* 1    */ V(11, 8, 1),

  /* 0000 0001 1100 ... */
  /* 0    */ V(13, 4, 1),	/* 376 */
  /* 1    */ V(9, 10, 1),

  /* 0000 0001 1101 ... */
  /* 0    */ V(10, 9, 1),	/* 378 */
  /* 1    */ V(6, 12, 1),

  /* 0000 0010 0000 ... */
  /* 0    */ V(13, 3, 1),	/* 380 */
  /* 1    */ V(7, 11, 1),

  /* 0000 0010 0101 ... */
  /* 0    */ V(5, 12, 1),	/* 382 */
  /* 1    */ V(12, 5, 1),

  /* 0000 0010 0110 ... */
  /* 0    */ V(9, 9, 1),	/* 384 */
  /* 1    */ V(7, 10, 1),

  /* 0000 0010 1000 ... */
  /* 0    */ V(10, 7, 1),	/* 386 */
  /* 1    */ V(9, 7, 1),

  /* 0000 0000 0000 0000 ... */
  /* 000  */ V(15, 14, 3),	/* 388 */
  /* 001  */ V(15, 12, 3),
  /* 010  */ V(15, 13, 2),
  /* 011  */ V(15, 13, 2),
  /* 100  */ V(14, 13, 1),
  /* 101  */ V(14, 13, 1),
  /* 110  */ V(14, 13, 1),
  /* 111  */ V(14, 13, 1),

  /* 0000 0000 0000 1011 ... */
  /* 0    */ V(10, 15, 1),	/* 396 */
  /* 1    */ V(14, 9, 1)
};

static
union huffpair const hufftab15[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 4),
  /* 0010 */ PTR(48, 4),
  /* 0011 */ PTR(64, 4),
  /* 0100 */ PTR(80, 4),
  /* 0101 */ PTR(96, 3),
  /* 0110 */ PTR(104, 3),
  /* 0111 */ PTR(112, 2),
  /* 1000 */ PTR(116, 1),
  /* 1001 */ PTR(118, 1),
  /* 1010 */ V(1, 1, 3),
  /* 1011 */ V(1, 1, 3),
  /* 1100 */ V(0, 1, 4),
  /* 1101 */ V(1, 0, 4),
  /* 1110 */ V(0, 0, 3),
  /* 1111 */ V(0, 0, 3),

  /* 0000 ... */
  /* 0000 */ PTR(120, 4),	/* 16 */
  /* 0001 */ PTR(136, 4),
  /* 0010 */ PTR(152, 4),
  /* 0011 */ PTR(168, 4),
  /* 0100 */ PTR(184, 4),
  /* 0101 */ PTR(200, 3),
  /* 0110 */ PTR(208, 3),
  /* 0111 */ PTR(216, 4),
  /* 1000 */ PTR(232, 3),
  /* 1001 */ PTR(240, 3),
  /* 1010 */ PTR(248, 3),
  /* 1011 */ PTR(256, 3),
  /* 1100 */ PTR(264, 2),
  /* 1101 */ PTR(268, 3),
  /* 1110 */ PTR(276, 3),
  /* 1111 */ PTR(284, 2),

  /* 0001 ... */
  /* 0000 */ PTR(288, 2),	/* 32 */
  /* 0001 */ PTR(292, 2),
  /* 0010 */ PTR(296, 2),
  /* 0011 */ PTR(300, 2),
  /* 0100 */ PTR(304, 2),
  /* 0101 */ PTR(308, 2),
  /* 0110 */ PTR(312, 2),
  /* 0111 */ PTR(316, 2),
  /* 1000 */ PTR(320, 1),
  /* 1001 */ PTR(322, 1),
  /* 1010 */ PTR(324, 1),
  /* 1011 */ PTR(326, 2),
  /* 1100 */ PTR(330, 1),
  /* 1101 */ PTR(332, 1),
  /* 1110 */ PTR(334, 2),
  /* 1111 */ PTR(338, 1),

  /* 0010 ... */
  /* 0000 */ PTR(340, 1),	/* 48 */
  /* 0001 */ PTR(342, 1),
  /* 0010 */ V(9, 1, 4),
  /* 0011 */ PTR(344, 1),
  /* 0100 */ PTR(346, 1),
  /* 0101 */ PTR(348, 1),
  /* 0110 */ PTR(350, 1),
  /* 0111 */ PTR(352, 1),
  /* 1000 */ V(2, 8, 4),
  /* 1001 */ V(8, 2, 4),
  /* 1010 */ V(1, 8, 4),
  /* 1011 */ V(8, 1, 4),
  /* 1100 */ PTR(354, 1),
  /* 1101 */ PTR(356, 1),
  /* 1110 */ PTR(358, 1),
  /* 1111 */ PTR(360, 1),

  /* 0011 ... */
  /* 0000 */ V(2, 7, 4),	/* 64 */
  /* 0001 */ V(7, 2, 4),
  /* 0010 */ V(6, 4, 4),
  /* 0011 */ V(1, 7, 4),
  /* 0100 */ V(5, 5, 4),
  /* 0101 */ V(7, 1, 4),
  /* 0110 */ PTR(362, 1),
  /* 0111 */ V(3, 6, 4),
  /* 1000 */ V(6, 3, 4),
  /* 1001 */ V(4, 5, 4),
  /* 1010 */ V(5, 4, 4),
  /* 1011 */ V(2, 6, 4),
  /* 1100 */ V(6, 2, 4),
  /* 1101 */ V(1, 6, 4),
  /* 1110 */ PTR(364, 1),
  /* 1111 */ V(3, 5, 4),

  /* 0100 ... */
  /* 0000 */ V(6, 1, 3),	/* 80 */
  /* 0001 */ V(6, 1, 3),
  /* 0010 */ V(5, 3, 4),
  /* 0011 */ V(4, 4, 4),
  /* 0100 */ V(2, 5, 3),
  /* 0101 */ V(2, 5, 3),
  /* 0110 */ V(5, 2, 3),
  /* 0111 */ V(5, 2, 3),
  /* 1000 */ V(1, 5, 3),
  /* 1001 */ V(1, 5, 3),
  /* 1010 */ V(5, 1, 3),
  /* 1011 */ V(5, 1, 3),
  /* 1100 */ V(0, 5, 4),
  /* 1101 */ V(5, 0, 4),
  /* 1110 */ V(3, 4, 3),
  /* 1111 */ V(3, 4, 3),

  /* 0101 ... */
  /* 000  */ V(4, 3, 3),	/* 96 */
  /* 001  */ V(2, 4, 3),
  /* 010  */ V(4, 2, 3),
  /* 011  */ V(3, 3, 3),
  /* 100  */ V(4, 1, 2),
  /* 101  */ V(4, 1, 2),
  /* 110  */ V(1, 4, 3),
  /* 111  */ V(0, 4, 3),

  /* 0110 ... */
  /* 000  */ V(2, 3, 2),	/* 104 */
  /* 001  */ V(2, 3, 2),
  /* 010  */ V(3, 2, 2),
  /* 011  */ V(3, 2, 2),
  /* 100  */ V(4, 0, 3),
  /* 101  */ V(0, 3, 3),
  /* 110  */ V(1, 3, 2),
  /* 111  */ V(1, 3, 2),

  /* 0111 ... */
  /* 00   */ V(3, 1, 2),	/* 112 */
  /* 01   */ V(3, 0, 2),
  /* 10   */ V(2, 2, 1),
  /* 11   */ V(2, 2, 1),

  /* 1000 ... */
  /* 0    */ V(1, 2, 1),	/* 116 */
  /* 1    */ V(2, 1, 1),

  /* 1001 ... */
  /* 0    */ V(0, 2, 1),	/* 118 */
  /* 1    */ V(2, 0, 1),

  /* 0000 0000 ... */
  /* 0000 */ PTR(366, 1),	/* 120 */
  /* 0001 */ PTR(368, 1),
  /* 0010 */ V(14, 14, 4),
  /* 0011 */ PTR(370, 1),
  /* 0100 */ PTR(372, 1),
  /* 0101 */ PTR(374, 1),
  /* 0110 */ V(15, 11, 4),
  /* 0111 */ PTR(376, 1),
  /* 1000 */ V(13, 13, 4),
  /* 1001 */ V(10, 15, 4),
  /* 1010 */ V(15, 10, 4),
  /* 1011 */ V(11, 14, 4),
  /* 1100 */ V(14, 11, 4),
  /* 1101 */ V(12, 13, 4),
  /* 1110 */ V(13, 12, 4),
  /* 1111 */ V(9, 15, 4),

  /* 0000 0001 ... */
  /* 0000 */ V(15, 9, 4),	/* 136 */
  /* 0001 */ V(14, 10, 4),
  /* 0010 */ V(11, 13, 4),
  /* 0011 */ V(13, 11, 4),
  /* 0100 */ V(8, 15, 4),
  /* 0101 */ V(15, 8, 4),
  /* 0110 */ V(12, 12, 4),
  /* 0111 */ V(9, 14, 4),
  /* 1000 */ V(14, 9, 4),
  /* 1001 */ V(7, 15, 4),
  /* 1010 */ V(15, 7, 4),
  /* 1011 */ V(10, 13, 4),
  /* 1100 */ V(13, 10, 4),
  /* 1101 */ V(11, 12, 4),
  /* 1110 */ V(6, 15, 4),
  /* 1111 */ PTR(378, 1),

  /* 0000 0010 ... */
  /* 0000 */ V(12, 11, 3),	/* 152 */
  /* 0001 */ V(12, 11, 3),
  /* 0010 */ V(15, 6, 3),
  /* 0011 */ V(15, 6, 3),
  /* 0100 */ V(8, 14, 4),
  /* 0101 */ V(14, 8, 4),
  /* 0110 */ V(5, 15, 4),
  /* 0111 */ V(9, 13, 4),
  /* 1000 */ V(15, 5, 3),
  /* 1001 */ V(15, 5, 3),
  /* 1010 */ V(7, 14, 3),
  /* 1011 */ V(7, 14, 3),
  /* 1100 */ V(14, 7, 3),
  /* 1101 */ V(14, 7, 3),
  /* 1110 */ V(10, 12, 3),
  /* 1111 */ V(10, 12, 3),

  /* 0000 0011 ... */
  /* 0000 */ V(12, 10, 3),	/* 168 */
  /* 0001 */ V(12, 10, 3),
  /* 0010 */ V(11, 11, 3),
  /* 0011 */ V(11, 11, 3),
  /* 0100 */ V(13, 9, 4),
  /* 0101 */ V(8, 13, 4),
  /* 0110 */ V(4, 15, 3),
  /* 0111 */ V(4, 15, 3),
  /* 1000 */ V(15, 4, 3),
  /* 1001 */ V(15, 4, 3),
  /* 1010 */ V(3, 15, 3),
  /* 1011 */ V(3, 15, 3),
  /* 1100 */ V(15, 3, 3),
  /* 1101 */ V(15, 3, 3),
  /* 1110 */ V(13, 8, 3),
  /* 1111 */ V(13, 8, 3),

  /* 0000 0100 ... */
  /* 0000 */ V(14, 6, 3),	/* 184 */
  /* 0001 */ V(14, 6, 3),
  /* 0010 */ V(2, 15, 3),
  /* 0011 */ V(2, 15, 3),
  /* 0100 */ V(15, 2, 3),
  /* 0101 */ V(15, 2, 3),
  /* 0110 */ V(6, 14, 4),
  /* 0111 */ V(15, 0, 4),
  /* 1000 */ V(1, 15, 3),
  /* 1001 */ V(1, 15, 3),
  /* 1010 */ V(15, 1, 3),
  /* 1011 */ V(15, 1, 3),
  /* 1100 */ V(9, 12, 3),
  /* 1101 */ V(9, 12, 3),
  /* 1110 */ V(12, 9, 3),
  /* 1111 */ V(12, 9, 3),

  /* 0000 0101 ... */
  /* 000  */ V(5, 14, 3),	/* 200 */
  /* 001  */ V(10, 11, 3),
  /* 010  */ V(11, 10, 3),
  /* 011  */ V(14, 5, 3),
  /* 100  */ V(7, 13, 3),
  /* 101  */ V(13, 7, 3),
  /* 110  */ V(4, 14, 3),
  /* 111  */ V(14, 4, 3),

  /* 0000 0110 ... */
  /* 000  */ V(8, 12, 3),	/* 208 */
  /* 001  */ V(12, 8, 3),
  /* 010  */ V(3, 14, 3),
  /* 011  */ V(6, 13, 3),
  /* 100  */ V(13, 6, 3),
  /* 101  */ V(14, 3, 3),
  /* 110  */ V(9, 11, 3),
  /* 111  */ V(11, 9, 3),

  /* 0000 0111 ... */
  /* 0000 */ V(2, 14, 3),	/* 216 */
  /* 0001 */ V(2, 14, 3),
  /* 0010 */ V(10, 10, 3),
  /* 0011 */ V(10, 10, 3),
  /* 0100 */ V(14, 2, 3),
  /* 0101 */ V(14, 2, 3),
  /* 0110 */ V(1, 14, 3),
  /* 0111 */ V(1, 14, 3),
  /* 1000 */ V(14, 1, 3),
  /* 1001 */ V(14, 1, 3),
  /* 1010 */ V(0, 14, 4),
  /* 1011 */ V(14, 0, 4),
  /* 1100 */ V(5, 13, 3),
  /* 1101 */ V(5, 13, 3),
  /* 1110 */ V(13, 5, 3),
  /* 1111 */ V(13, 5, 3),

  /* 0000 1000 ... */
  /* 000  */ V(7, 12, 3),	/* 232 */
  /* 001  */ V(12, 7, 3),
  /* 010  */ V(4, 13, 3),
  /* 011  */ V(8, 11, 3),
  /* 100  */ V(13, 4, 2),
  /* 101  */ V(13, 4, 2),
  /* 110  */ V(11, 8, 3),
  /* 111  */ V(9, 10, 3),

  /* 0000 1001 ... */
  /* 000  */ V(10, 9, 3),	/* 240 */
  /* 001  */ V(6, 12, 3),
  /* 010  */ V(12, 6, 3),
  /* 011  */ V(3, 13, 3),
  /* 100  */ V(13, 3, 2),
  /* 101  */ V(13, 3, 2),
  /* 110  */ V(13, 2, 2),
  /* 111  */ V(13, 2, 2),

  /* 0000 1010 ... */
  /* 000  */ V(2, 13, 3),	/* 248 */
  /* 001  */ V(0, 13, 3),
  /* 010  */ V(1, 13, 2),
  /* 011  */ V(1, 13, 2),
  /* 100  */ V(7, 11, 2),
  /* 101  */ V(7, 11, 2),
  /* 110  */ V(11, 7, 2),
  /* 111  */ V(11, 7, 2),

  /* 0000 1011 ... */
  /* 000  */ V(13, 1, 2),	/* 256 */
  /* 001  */ V(13, 1, 2),
  /* 010  */ V(5, 12, 3),
  /* 011  */ V(13, 0, 3),
  /* 100  */ V(12, 5, 2),
  /* 101  */ V(12, 5, 2),
  /* 110  */ V(8, 10, 2),
  /* 111  */ V(8, 10, 2),

  /* 0000 1100 ... */
  /* 00   */ V(10, 8, 2),	/* 264 */
  /* 01   */ V(4, 12, 2),
  /* 10   */ V(12, 4, 2),
  /* 11   */ V(6, 11, 2),

  /* 0000 1101 ... */
  /* 000  */ V(11, 6, 2),	/* 268 */
  /* 001  */ V(11, 6, 2),
  /* 010  */ V(9, 9, 3),
  /* 011  */ V(0, 12, 3),
  /* 100  */ V(3, 12, 2),
  /* 101  */ V(3, 12, 2),
  /* 110  */ V(12, 3, 2),
  /* 111  */ V(12, 3, 2),

  /* 0000 1110 ... */
  /* 000  */ V(7, 10, 2),	/* 276 */
  /* 001  */ V(7, 10, 2),
  /* 010  */ V(10, 7, 2),
  /* 011  */ V(10, 7, 2),
  /* 100  */ V(10, 6, 2),
  /* 101  */ V(10, 6, 2),
  /* 110  */ V(12, 0, 3),
  /* 111  */ V(0, 11, 3),

  /* 0000 1111 ... */
  /* 00   */ V(12, 2, 1),	/* 284 */
  /* 01   */ V(12, 2, 1),
  /* 10   */ V(2, 12, 2),
  /* 11   */ V(5, 11, 2),

  /* 0001 0000 ... */
  /* 00   */ V(11, 5, 2),	/* 288 */
  /* 01   */ V(1, 12, 2),
  /* 10   */ V(8, 9, 2),
  /* 11   */ V(9, 8, 2),

  /* 0001 0001 ... */
  /* 00   */ V(12, 1, 2),	/* 292 */
  /* 01   */ V(4, 11, 2),
  /* 10   */ V(11, 4, 2),
  /* 11   */ V(6, 10, 2),

  /* 0001 0010 ... */
  /* 00   */ V(3, 11, 2),	/* 296 */
  /* 01   */ V(7, 9, 2),
  /* 10   */ V(11, 3, 1),
  /* 11   */ V(11, 3, 1),

  /* 0001 0011 ... */
  /* 00   */ V(9, 7, 2),	/* 300 */
  /* 01   */ V(8, 8, 2),
  /* 10   */ V(2, 11, 2),
  /* 11   */ V(5, 10, 2),

  /* 0001 0100 ... */
  /* 00   */ V(11, 2, 1),	/* 304 */
  /* 01   */ V(11, 2, 1),
  /* 10   */ V(10, 5, 2),
  /* 11   */ V(1, 11, 2),

  /* 0001 0101 ... */
  /* 00   */ V(11, 1, 1),	/* 308 */
  /* 01   */ V(11, 1, 1),
  /* 10   */ V(11, 0, 2),
  /* 11   */ V(6, 9, 2),

  /* 0001 0110 ... */
  /* 00   */ V(9, 6, 2),	/* 312 */
  /* 01   */ V(4, 10, 2),
  /* 10   */ V(10, 4, 2),
  /* 11   */ V(7, 8, 2),

  /* 0001 0111 ... */
  /* 00   */ V(8, 7, 2),	/* 316 */
  /* 01   */ V(3, 10, 2),
  /* 10   */ V(10, 3, 1),
  /* 11   */ V(10, 3, 1),

  /* 0001 1000 ... */
  /* 0    */ V(5, 9, 1),	/* 320 */
  /* 1    */ V(9, 5, 1),

  /* 0001 1001 ... */
  /* 0    */ V(2, 10, 1),	/* 322 */
  /* 1    */ V(10, 2, 1),

  /* 0001 1010 ... */
  /* 0    */ V(1, 10, 1),	/* 324 */
  /* 1    */ V(10, 1, 1),

  /* 0001 1011 ... */
  /* 00   */ V(0, 10, 2),	/* 326 */
  /* 01   */ V(10, 0, 2),
  /* 10   */ V(6, 8, 1),
  /* 11   */ V(6, 8, 1),

  /* 0001 1100 ... */
  /* 0    */ V(8, 6, 1),	/* 330 */
  /* 1    */ V(4, 9, 1),

  /* 0001 1101 ... */
  /* 0    */ V(9, 4, 1),	/* 332 */
  /* 1    */ V(3, 9, 1),

  /* 0001 1110 ... */
  /* 00   */ V(9, 3, 1),	/* 334 */
  /* 01   */ V(9, 3, 1),
  /* 10   */ V(7, 7, 2),
  /* 11   */ V(0, 9, 2),

  /* 0001 1111 ... */
  /* 0    */ V(5, 8, 1),	/* 338 */
  /* 1    */ V(8, 5, 1),

  /* 0010 0000 ... */
  /* 0    */ V(2, 9, 1),	/* 340 */
  /* 1    */ V(6, 7, 1),

  /* 0010 0001 ... */
  /* 0    */ V(7, 6, 1),	/* 342 */
  /* 1    */ V(9, 2, 1),

  /* 0010 0011 ... */
  /* 0    */ V(1, 9, 1),	/* 344 */
  /* 1    */ V(9, 0, 1),

  /* 0010 0100 ... */
  /* 0    */ V(4, 8, 1),	/* 346 */
  /* 1    */ V(8, 4, 1),

  /* 0010 0101 ... */
  /* 0    */ V(5, 7, 1),	/* 348 */
  /* 1    */ V(7, 5, 1),

  /* 0010 0110 ... */
  /* 0    */ V(3, 8, 1),	/* 350 */
  /* 1    */ V(8, 3, 1),

  /* 0010 0111 ... */
  /* 0    */ V(6, 6, 1),	/* 352 */
  /* 1    */ V(4, 7, 1),

  /* 0010 1100 ... */
  /* 0    */ V(7, 4, 1),	/* 354 */
  /* 1    */ V(0, 8, 1),

  /* 0010 1101 ... */
  /* 0    */ V(8, 0, 1),	/* 356 */
  /* 1    */ V(5, 6, 1),

  /* 0010 1110 ... */
  /* 0    */ V(6, 5, 1),	/* 358 */
  /* 1    */ V(3, 7, 1),

  /* 0010 1111 ... */
  /* 0    */ V(7, 3, 1),	/* 360 */
  /* 1    */ V(4, 6, 1),

  /* 0011 0110 ... */
  /* 0    */ V(0, 7, 1),	/* 362 */
  /* 1    */ V(7, 0, 1),

  /* 0011 1110 ... */
  /* 0    */ V(0, 6, 1),	/* 364 */
  /* 1    */ V(6, 0, 1),

  /* 0000 0000 0000 ... */
  /* 0    */ V(15, 15, 1),	/* 366 */
  /* 1    */ V(14, 15, 1),

  /* 0000 0000 0001 ... */
  /* 0    */ V(15, 14, 1),	/* 368 */
  /* 1    */ V(13, 15, 1),

  /* 0000 0000 0011 ... */
  /* 0    */ V(15, 13, 1),	/* 370 */
  /* 1    */ V(12, 15, 1),

  /* 0000 0000 0100 ... */
  /* 0    */ V(15, 12, 1),	/* 372 */
  /* 1    */ V(13, 14, 1),

  /* 0000 0000 0101 ... */
  /* 0    */ V(14, 13, 1),	/* 374 */
  /* 1    */ V(11, 15, 1),

  /* 0000 0000 0111 ... */
  /* 0    */ V(12, 14, 1),	/* 376 */
  /* 1    */ V(14, 12, 1),

  /* 0000 0001 1111 ... */
  /* 0    */ V(10, 14, 1),	/* 378 */
  /* 1    */ V(0, 15, 1)
};

static
union huffpair const hufftab16[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 4),
  /* 0010 */ PTR(48, 4),
  /* 0011 */ PTR(64, 2),
  /* 0100 */ V(1, 1, 4),
  /* 0101 */ V(0, 1, 4),
  /* 0110 */ V(1, 0, 3),
  /* 0111 */ V(1, 0, 3),
  /* 1000 */ V(0, 0, 1),
  /* 1001 */ V(0, 0, 1),
  /* 1010 */ V(0, 0, 1),
  /* 1011 */ V(0, 0, 1),
  /* 1100 */ V(0, 0, 1),
  /* 1101 */ V(0, 0, 1),
  /* 1110 */ V(0, 0, 1),
  /* 1111 */ V(0, 0, 1),

  /* 0000 ... */
  /* 0000 */ PTR(68, 3),	/* 16 */
  /* 0001 */ PTR(76, 3),
  /* 0010 */ PTR(84, 2),
  /* 0011 */ V(15, 15, 4),
  /* 0100 */ PTR(88, 2),
  /* 0101 */ PTR(92, 1),
  /* 0110 */ PTR(94, 4),
  /* 0111 */ V(15, 2, 4),
  /* 1000 */ PTR(110, 1),
  /* 1001 */ V(1, 15, 4),
  /* 1010 */ V(15, 1, 4),
  /* 1011 */ PTR(112, 4),
  /* 1100 */ PTR(128, 4),
  /* 1101 */ PTR(144, 4),
  /* 1110 */ PTR(160, 4),
  /* 1111 */ PTR(176, 4),

  /* 0001 ... */
  /* 0000 */ PTR(192, 4),	/* 32 */
  /* 0001 */ PTR(208, 3),
  /* 0010 */ PTR(216, 3),
  /* 0011 */ PTR(224, 3),
  /* 0100 */ PTR(232, 3),
  /* 0101 */ PTR(240, 3),
  /* 0110 */ PTR(248, 3),
  /* 0111 */ PTR(256, 3),
  /* 1000 */ PTR(264, 2),
  /* 1001 */ PTR(268, 2),
  /* 1010 */ PTR(272, 1),
  /* 1011 */ PTR(274, 2),
  /* 1100 */ PTR(278, 2),
  /* 1101 */ PTR(282, 1),
  /* 1110 */ V(5, 1, 4),
  /* 1111 */ PTR(284, 1),

  /* 0010 ... */
  /* 0000 */ PTR(286, 1),	/* 48 */
  /* 0001 */ PTR(288, 1),
  /* 0010 */ PTR(290, 1),
  /* 0011 */ V(1, 4, 4),
  /* 0100 */ V(4, 1, 4),
  /* 0101 */ PTR(292, 1),
  /* 0110 */ V(2, 3, 4),
  /* 0111 */ V(3, 2, 4),
  /* 1000 */ V(1, 3, 3),
  /* 1001 */ V(1, 3, 3),
  /* 1010 */ V(3, 1, 3),
  /* 1011 */ V(3, 1, 3),
  /* 1100 */ V(0, 3, 4),
  /* 1101 */ V(3, 0, 4),
  /* 1110 */ V(2, 2, 3),
  /* 1111 */ V(2, 2, 3),

  /* 0011 ... */
  /* 00   */ V(1, 2, 2),	/* 64 */
  /* 01   */ V(2, 1, 2),
  /* 10   */ V(0, 2, 2),
  /* 11   */ V(2, 0, 2),

  /* 0000 0000 ... */
  /* 000  */ V(14, 15, 3),	/* 68 */
  /* 001  */ V(15, 14, 3),
  /* 010  */ V(13, 15, 3),
  /* 011  */ V(15, 13, 3),
  /* 100  */ V(12, 15, 3),
  /* 101  */ V(15, 12, 3),
  /* 110  */ V(11, 15, 3),
  /* 111  */ V(15, 11, 3),

  /* 0000 0001 ... */
  /* 000  */ V(10, 15, 2),	/* 76 */
  /* 001  */ V(10, 15, 2),
  /* 010  */ V(15, 10, 3),
  /* 011  */ V(9, 15, 3),
  /* 100  */ V(15, 9, 3),
  /* 101  */ V(15, 8, 3),
  /* 110  */ V(8, 15, 2),
  /* 111  */ V(8, 15, 2),

  /* 0000 0010 ... */
  /* 00   */ V(7, 15, 2),	/* 84 */
  /* 01   */ V(15, 7, 2),
  /* 10   */ V(6, 15, 2),
  /* 11   */ V(15, 6, 2),

  /* 0000 0100 ... */
  /* 00   */ V(5, 15, 2),	/* 88 */
  /* 01   */ V(15, 5, 2),
  /* 10   */ V(4, 15, 1),
  /* 11   */ V(4, 15, 1),

  /* 0000 0101 ... */
  /* 0    */ V(15, 4, 1),	/* 92 */
  /* 1    */ V(15, 3, 1),

  /* 0000 0110 ... */
  /* 0000 */ V(15, 0, 1),	/* 94 */
  /* 0001 */ V(15, 0, 1),
  /* 0010 */ V(15, 0, 1),
  /* 0011 */ V(15, 0, 1),
  /* 0100 */ V(15, 0, 1),
  /* 0101 */ V(15, 0, 1),
  /* 0110 */ V(15, 0, 1),
  /* 0111 */ V(15, 0, 1),
  /* 1000 */ V(3, 15, 2),
  /* 1001 */ V(3, 15, 2),
  /* 1010 */ V(3, 15, 2),
  /* 1011 */ V(3, 15, 2),
  /* 1100 */ PTR(294, 4),
  /* 1101 */ PTR(310, 3),
  /* 1110 */ PTR(318, 3),
  /* 1111 */ PTR(326, 3),

  /* 0000 1000 ... */
  /* 0    */ V(2, 15, 1),	/* 110 */
  /* 1    */ V(0, 15, 1),

  /* 0000 1011 ... */
  /* 0000 */ PTR(334, 2),	/* 112 */
  /* 0001 */ PTR(338, 2),
  /* 0010 */ PTR(342, 2),
  /* 0011 */ PTR(346, 1),
  /* 0100 */ PTR(348, 2),
  /* 0101 */ PTR(352, 2),
  /* 0110 */ PTR(356, 1),
  /* 0111 */ PTR(358, 2),
  /* 1000 */ PTR(362, 2),
  /* 1001 */ PTR(366, 2),
  /* 1010 */ PTR(370, 2),
  /* 1011 */ V(14, 3, 4),
  /* 1100 */ PTR(374, 1),
  /* 1101 */ PTR(376, 1),
  /* 1110 */ PTR(378, 1),
  /* 1111 */ PTR(380, 1),

  /* 0000 1100 ... */
  /* 0000 */ PTR(382, 1),	/* 128 */
  /* 0001 */ PTR(384, 1),
  /* 0010 */ PTR(386, 1),
  /* 0011 */ V(0, 13, 4),
  /* 0100 */ PTR(388, 1),
  /* 0101 */ PTR(390, 1),
  /* 0110 */ PTR(392, 1),
  /* 0111 */ V(3, 12, 4),
  /* 1000 */ PTR(394, 1),
  /* 1001 */ V(1, 12, 4),
  /* 1010 */ V(12, 0, 4),
  /* 1011 */ PTR(396, 1),
  /* 1100 */ V(14, 2, 3),
  /* 1101 */ V(14, 2, 3),
  /* 1110 */ V(2, 14, 4),
  /* 1111 */ V(1, 14, 4),

  /* 0000 1101 ... */
  /* 0000 */ V(13, 3, 4),	/* 144 */
  /* 0001 */ V(2, 13, 4),
  /* 0010 */ V(13, 2, 4),
  /* 0011 */ V(13, 1, 4),
  /* 0100 */ V(3, 11, 4),
  /* 0101 */ PTR(398, 1),
  /* 0110 */ V(1, 13, 3),
  /* 0111 */ V(1, 13, 3),
  /* 1000 */ V(12, 4, 4),
  /* 1001 */ V(6, 11, 4),
  /* 1010 */ V(12, 3, 4),
  /* 1011 */ V(10, 7, 4),
  /* 1100 */ V(2, 12, 3),
  /* 1101 */ V(2, 12, 3),
  /* 1110 */ V(12, 2, 4),
  /* 1111 */ V(11, 5, 4),

  /* 0000 1110 ... */
  /* 0000 */ V(12, 1, 4),	/* 160 */
  /* 0001 */ V(0, 12, 4),
  /* 0010 */ V(4, 11, 4),
  /* 0011 */ V(11, 4, 4),
  /* 0100 */ V(6, 10, 4),
  /* 0101 */ V(10, 6, 4),
  /* 0110 */ V(11, 3, 3),
  /* 0111 */ V(11, 3, 3),
  /* 1000 */ V(5, 10, 4),
  /* 1001 */ V(10, 5, 4),
  /* 1010 */ V(2, 11, 3),
  /* 1011 */ V(2, 11, 3),
  /* 1100 */ V(11, 2, 3),
  /* 1101 */ V(11, 2, 3),
  /* 1110 */ V(1, 11, 3),
  /* 1111 */ V(1, 11, 3),

  /* 0000 1111 ... */
  /* 0000 */ V(11, 1, 3),	/* 176 */
  /* 0001 */ V(11, 1, 3),
  /* 0010 */ V(0, 11, 4),
  /* 0011 */ V(11, 0, 4),
  /* 0100 */ V(6, 9, 4),
  /* 0101 */ V(9, 6, 4),
  /* 0110 */ V(4, 10, 4),
  /* 0111 */ V(10, 4, 4),
  /* 1000 */ V(7, 8, 4),
  /* 1001 */ V(8, 7, 4),
  /* 1010 */ V(10, 3, 3),
  /* 1011 */ V(10, 3, 3),
  /* 1100 */ V(3, 10, 4),
  /* 1101 */ V(5, 9, 4),
  /* 1110 */ V(2, 10, 3),
  /* 1111 */ V(2, 10, 3),

  /* 0001 0000 ... */
  /* 0000 */ V(9, 5, 4),	/* 192 */
  /* 0001 */ V(6, 8, 4),
  /* 0010 */ V(10, 1, 3),
  /* 0011 */ V(10, 1, 3),
  /* 0100 */ V(8, 6, 4),
  /* 0101 */ V(7, 7, 4),
  /* 0110 */ V(9, 4, 3),
  /* 0111 */ V(9, 4, 3),
  /* 1000 */ V(4, 9, 4),
  /* 1001 */ V(5, 7, 4),
  /* 1010 */ V(6, 7, 3),
  /* 1011 */ V(6, 7, 3),
  /* 1100 */ V(10, 2, 2),
  /* 1101 */ V(10, 2, 2),
  /* 1110 */ V(10, 2, 2),
  /* 1111 */ V(10, 2, 2),

  /* 0001 0001 ... */
  /* 000  */ V(1, 10, 2),	/* 208 */
  /* 001  */ V(1, 10, 2),
  /* 010  */ V(0, 10, 3),
  /* 011  */ V(10, 0, 3),
  /* 100  */ V(3, 9, 3),
  /* 101  */ V(9, 3, 3),
  /* 110  */ V(5, 8, 3),
  /* 111  */ V(8, 5, 3),

  /* 0001 0010 ... */
  /* 000  */ V(2, 9, 2),	/* 216 */
  /* 001  */ V(2, 9, 2),
  /* 010  */ V(9, 2, 2),
  /* 011  */ V(9, 2, 2),
  /* 100  */ V(7, 6, 3),
  /* 101  */ V(0, 9, 3),
  /* 110  */ V(1, 9, 2),
  /* 111  */ V(1, 9, 2),

  /* 0001 0011 ... */
  /* 000  */ V(9, 1, 2),	/* 224 */
  /* 001  */ V(9, 1, 2),
  /* 010  */ V(9, 0, 3),
  /* 011  */ V(4, 8, 3),
  /* 100  */ V(8, 4, 3),
  /* 101  */ V(7, 5, 3),
  /* 110  */ V(3, 8, 3),
  /* 111  */ V(8, 3, 3),

  /* 0001 0100 ... */
  /* 000  */ V(6, 6, 3),	/* 232 */
  /* 001  */ V(2, 8, 3),
  /* 010  */ V(8, 2, 2),
  /* 011  */ V(8, 2, 2),
  /* 100  */ V(4, 7, 3),
  /* 101  */ V(7, 4, 3),
  /* 110  */ V(1, 8, 2),
  /* 111  */ V(1, 8, 2),

  /* 0001 0101 ... */
  /* 000  */ V(8, 1, 2),	/* 240 */
  /* 001  */ V(8, 1, 2),
  /* 010  */ V(8, 0, 2),
  /* 011  */ V(8, 0, 2),
  /* 100  */ V(0, 8, 3),
  /* 101  */ V(5, 6, 3),
  /* 110  */ V(3, 7, 2),
  /* 111  */ V(3, 7, 2),

  /* 0001 0110 ... */
  /* 000  */ V(7, 3, 2),	/* 248 */
  /* 001  */ V(7, 3, 2),
  /* 010  */ V(6, 5, 3),
  /* 011  */ V(4, 6, 3),
  /* 100  */ V(2, 7, 2),
  /* 101  */ V(2, 7, 2),
  /* 110  */ V(7, 2, 2),
  /* 111  */ V(7, 2, 2),

  /* 0001 0111 ... */
  /* 000  */ V(6, 4, 3),	/* 256 */
  /* 001  */ V(5, 5, 3),
  /* 010  */ V(0, 7, 2),
  /* 011  */ V(0, 7, 2),
  /* 100  */ V(1, 7, 1),
  /* 101  */ V(1, 7, 1),
  /* 110  */ V(1, 7, 1),
  /* 111  */ V(1, 7, 1),

  /* 0001 1000 ... */
  /* 00   */ V(7, 1, 1),	/* 264  */
  /* 01   */ V(7, 1, 1),
  /* 10   */ V(7, 0, 2),
  /* 11   */ V(3, 6, 2),

  /* 0001 1001 ... */
  /* 00   */ V(6, 3, 2),	/* 268 */
  /* 01   */ V(4, 5, 2),
  /* 10   */ V(5, 4, 2),
  /* 11   */ V(2, 6, 2),

  /* 0001 1010 ... */
  /* 0    */ V(6, 2, 1),	/* 272 */
  /* 1    */ V(1, 6, 1),

  /* 0001 1011 ... */
  /* 00   */ V(6, 1, 1),	/* 274 */
  /* 01   */ V(6, 1, 1),
  /* 10   */ V(0, 6, 2),
  /* 11   */ V(6, 0, 2),

  /* 0001 1100 ... */
  /* 00   */ V(5, 3, 1),	/* 278 */
  /* 01   */ V(5, 3, 1),
  /* 10   */ V(3, 5, 2),
  /* 11   */ V(4, 4, 2),

  /* 0001 1101 ... */
  /* 0    */ V(2, 5, 1),	/* 282 */
  /* 1    */ V(5, 2, 1),

  /* 0001 1111 ... */
  /* 0    */ V(1, 5, 1),	/* 284 */
  /* 1    */ V(0, 5, 1),

  /* 0010 0000 ... */
  /* 0    */ V(3, 4, 1),	/* 286 */
  /* 1    */ V(4, 3, 1),

  /* 0010 0001 ... */
  /* 0    */ V(5, 0, 1),	/* 288 */
  /* 1    */ V(2, 4, 1),

  /* 0010 0010 ... */
  /* 0    */ V(4, 2, 1),	/* 290 */
  /* 1    */ V(3, 3, 1),

  /* 0010 0101 ... */
  /* 0    */ V(0, 4, 1),	/* 292 */
  /* 1    */ V(4, 0, 1),

  /* 0000 0110 1100 ... */
  /* 0000 */ V(12, 14, 4),	/* 294 */
  /* 0001 */ PTR(400, 1),
  /* 0010 */ V(13, 14, 3),
  /* 0011 */ V(13, 14, 3),
  /* 0100 */ V(14, 9, 3),
  /* 0101 */ V(14, 9, 3),
  /* 0110 */ V(14, 10, 4),
  /* 0111 */ V(13, 9, 4),
  /* 1000 */ V(14, 14, 2),
  /* 1001 */ V(14, 14, 2),
  /* 1010 */ V(14, 14, 2),
  /* 1011 */ V(14, 14, 2),
  /* 1100 */ V(14, 13, 3),
  /* 1101 */ V(14, 13, 3),
  /* 1110 */ V(14, 11, 3),
  /* 1111 */ V(14, 11, 3),

  /* 0000 0110 1101 ... */
  /* 000  */ V(11, 14, 2),	/* 310 */
  /* 001  */ V(11, 14, 2),
  /* 010  */ V(12, 13, 2),
  /* 011  */ V(12, 13, 2),
  /* 100  */ V(13, 12, 3),
  /* 101  */ V(13, 11, 3),
  /* 110  */ V(10, 14, 2),
  /* 111  */ V(10, 14, 2),

  /* 0000 0110 1110 ... */
  /* 000  */ V(12, 12, 2),	/* 318 */
  /* 001  */ V(12, 12, 2),
  /* 010  */ V(10, 13, 3),
  /* 011  */ V(13, 10, 3),
  /* 100  */ V(7, 14, 3),
  /* 101  */ V(10, 12, 3),
  /* 110  */ V(12, 10, 2),
  /* 111  */ V(12, 10, 2),

  /* 0000 0110 1111 ... */
  /* 000  */ V(12, 9, 3),	/* 326 */
  /* 001  */ V(7, 13, 3),
  /* 010  */ V(5, 14, 2),
  /* 011  */ V(5, 14, 2),
  /* 100  */ V(11, 13, 1),
  /* 101  */ V(11, 13, 1),
  /* 110  */ V(11, 13, 1),
  /* 111  */ V(11, 13, 1),

  /* 0000 1011 0000 ... */
  /* 00   */ V(9, 14, 1),	/* 334 */
  /* 01   */ V(9, 14, 1),
  /* 10   */ V(11, 12, 2),
  /* 11   */ V(12, 11, 2),

  /* 0000 1011 0001 ... */
  /* 00   */ V(8, 14, 2),	/* 338 */
  /* 01   */ V(14, 8, 2),
  /* 10   */ V(9, 13, 2),
  /* 11   */ V(14, 7, 2),

  /* 0000 1011 0010 ... */
  /* 00   */ V(11, 11, 2),	/* 342 */
  /* 01   */ V(8, 13, 2),
  /* 10   */ V(13, 8, 2),
  /* 11   */ V(6, 14, 2),

  /* 0000 1011 0011 ... */
  /* 0    */ V(14, 6, 1),	/* 346 */
  /* 1    */ V(9, 12, 1),

  /* 0000 1011 0100 ... */
  /* 00   */ V(10, 11, 2),	/* 348 */
  /* 01   */ V(11, 10, 2),
  /* 10   */ V(14, 5, 2),
  /* 11   */ V(13, 7, 2),

  /* 0000 1011 0101 ... */
  /* 00   */ V(4, 14, 1),	/* 352 */
  /* 01   */ V(4, 14, 1),
  /* 10   */ V(14, 4, 2),
  /* 11   */ V(8, 12, 2),

  /* 0000 1011 0110 ... */
  /* 0    */ V(12, 8, 1),	/* 356 */
  /* 1    */ V(3, 14, 1),

  /* 0000 1011 0111 ... */
  /* 00   */ V(6, 13, 1),	/* 358 */
  /* 01   */ V(6, 13, 1),
  /* 10   */ V(13, 6, 2),
  /* 11   */ V(9, 11, 2),

  /* 0000 1011 1000 ... */
  /* 00   */ V(11, 9, 2),	/* 362 */
  /* 01   */ V(10, 10, 2),
  /* 10   */ V(14, 1, 1),
  /* 11   */ V(14, 1, 1),

  /* 0000 1011 1001 ... */
  /* 00   */ V(13, 4, 1),	/* 366 */
  /* 01   */ V(13, 4, 1),
  /* 10   */ V(11, 8, 2),
  /* 11   */ V(10, 9, 2),

  /* 0000 1011 1010 ... */
  /* 00   */ V(7, 11, 1),	/* 370 */
  /* 01   */ V(7, 11, 1),
  /* 10   */ V(11, 7, 2),
  /* 11   */ V(13, 0, 2),

  /* 0000 1011 1100 ... */
  /* 0    */ V(0, 14, 1),	/* 374 */
  /* 1    */ V(14, 0, 1),

  /* 0000 1011 1101 ... */
  /* 0    */ V(5, 13, 1),	/* 376 */
  /* 1    */ V(13, 5, 1),

  /* 0000 1011 1110 ... */
  /* 0    */ V(7, 12, 1),	/* 378 */
  /* 1    */ V(12, 7, 1),

  /* 0000 1011 1111 ... */
  /* 0    */ V(4, 13, 1),	/* 380 */
  /* 1    */ V(8, 11, 1),

  /* 0000 1100 0000 ... */
  /* 0    */ V(9, 10, 1),	/* 382 */
  /* 1    */ V(6, 12, 1),

  /* 0000 1100 0001 ... */
  /* 0    */ V(12, 6, 1),	/* 384 */
  /* 1    */ V(3, 13, 1),

  /* 0000 1100 0010 ... */
  /* 0    */ V(5, 12, 1),	/* 386 */
  /* 1    */ V(12, 5, 1),

  /* 0000 1100 0100 ... */
  /* 0    */ V(8, 10, 1),	/* 388 */
  /* 1    */ V(10, 8, 1),

  /* 0000 1100 0101 ... */
  /* 0    */ V(9, 9, 1),	/* 390 */
  /* 1    */ V(4, 12, 1),

  /* 0000 1100 0110 ... */
  /* 0    */ V(11, 6, 1),	/* 392 */
  /* 1    */ V(7, 10, 1),

  /* 0000 1100 1000 ... */
  /* 0    */ V(5, 11, 1),	/* 394 */
  /* 1    */ V(8, 9, 1),

  /* 0000 1100 1011 ... */
  /* 0    */ V(9, 8, 1),	/* 396 */
  /* 1    */ V(7, 9, 1),

  /* 0000 1101 0101 ... */
  /* 0    */ V(9, 7, 1),	/* 398 */
  /* 1    */ V(8, 8, 1),

  /* 0000 0110 1100 0001 ... */
  /* 0    */ V(14, 12, 1),	/* 400 */
  /* 1    */ V(13, 13, 1)
};

static
union huffpair const hufftab24[] = {
  /* 0000 */ PTR(16, 4),
  /* 0001 */ PTR(32, 4),
  /* 0010 */ PTR(48, 4),
  /* 0011 */ V(15, 15, 4),
  /* 0100 */ PTR(64, 4),
  /* 0101 */ PTR(80, 4),
  /* 0110 */ PTR(96, 4),
  /* 0111 */ PTR(112, 4),
  /* 1000 */ PTR(128, 4),
  /* 1001 */ PTR(144, 4),
  /* 1010 */ PTR(160, 3),
  /* 1011 */ PTR(168, 2),
  /* 1100 */ V(1, 1, 4),
  /* 1101 */ V(0, 1, 4),
  /* 1110 */ V(1, 0, 4),
  /* 1111 */ V(0, 0, 4),

  /* 0000 ... */
  /* 0000 */ V(14, 15, 4),	/* 16 */
  /* 0001 */ V(15, 14, 4),
  /* 0010 */ V(13, 15, 4),
  /* 0011 */ V(15, 13, 4),
  /* 0100 */ V(12, 15, 4),
  /* 0101 */ V(15, 12, 4),
  /* 0110 */ V(11, 15, 4),
  /* 0111 */ V(15, 11, 4),
  /* 1000 */ V(15, 10, 3),
  /* 1001 */ V(15, 10, 3),
  /* 1010 */ V(10, 15, 4),
  /* 1011 */ V(9, 15, 4),
  /* 1100 */ V(15, 9, 3),
  /* 1101 */ V(15, 9, 3),
  /* 1110 */ V(15, 8, 3),
  /* 1111 */ V(15, 8, 3),

  /* 0001 ... */
  /* 0000 */ V(8, 15, 4),	/* 32 */
  /* 0001 */ V(7, 15, 4),
  /* 0010 */ V(15, 7, 3),
  /* 0011 */ V(15, 7, 3),
  /* 0100 */ V(6, 15, 3),
  /* 0101 */ V(6, 15, 3),
  /* 0110 */ V(15, 6, 3),
  /* 0111 */ V(15, 6, 3),
  /* 1000 */ V(5, 15, 3),
  /* 1001 */ V(5, 15, 3),
  /* 1010 */ V(15, 5, 3),
  /* 1011 */ V(15, 5, 3),
  /* 1100 */ V(4, 15, 3),
  /* 1101 */ V(4, 15, 3),
  /* 1110 */ V(15, 4, 3),
  /* 1111 */ V(15, 4, 3),

  /* 0010 ... */
  /* 0000 */ V(3, 15, 3),	/* 48 */
  /* 0001 */ V(3, 15, 3),
  /* 0010 */ V(15, 3, 3),
  /* 0011 */ V(15, 3, 3),
  /* 0100 */ V(2, 15, 3),
  /* 0101 */ V(2, 15, 3),
  /* 0110 */ V(15, 2, 3),
  /* 0111 */ V(15, 2, 3),
  /* 1000 */ V(15, 1, 3),
  /* 1001 */ V(15, 1, 3),
  /* 1010 */ V(1, 15, 4),
  /* 1011 */ V(15, 0, 4),
  /* 1100 */ PTR(172, 3),
  /* 1101 */ PTR(180, 3),
  /* 1110 */ PTR(188, 3),
  /* 1111 */ PTR(196, 3),

  /* 0100 ... */
  /* 0000 */ PTR(204, 4),	/* 64 */
  /* 0001 */ PTR(220, 3),
  /* 0010 */ PTR(228, 3),
  /* 0011 */ PTR(236, 3),
  /* 0100 */ PTR(244, 2),
  /* 0101 */ PTR(248, 2),
  /* 0110 */ PTR(252, 2),
  /* 0111 */ PTR(256, 2),
  /* 1000 */ PTR(260, 2),
  /* 1001 */ PTR(264, 2),
  /* 1010 */ PTR(268, 2),
  /* 1011 */ PTR(272, 2),
  /* 1100 */ PTR(276, 2),
  /* 1101 */ PTR(280, 3),
  /* 1110 */ PTR(288, 2),
  /* 1111 */ PTR(292, 2),

  /* 0101 ... */
  /* 0000 */ PTR(296, 2),	/* 80 */
  /* 0001 */ PTR(300, 3),
  /* 0010 */ PTR(308, 2),
  /* 0011 */ PTR(312, 3),
  /* 0100 */ PTR(320, 1),
  /* 0101 */ PTR(322, 2),
  /* 0110 */ PTR(326, 2),
  /* 0111 */ PTR(330, 1),
  /* 1000 */ PTR(332, 2),
  /* 1001 */ PTR(336, 1),
  /* 1010 */ PTR(338, 1),
  /* 1011 */ PTR(340, 1),
  /* 1100 */ PTR(342, 1),
  /* 1101 */ PTR(344, 1),
  /* 1110 */ PTR(346, 1),
  /* 1111 */ PTR(348, 1),

  /* 0110 ... */
  /* 0000 */ PTR(350, 1),	/* 96 */
  /* 0001 */ PTR(352, 1),
  /* 0010 */ PTR(354, 1),
  /* 0011 */ PTR(356, 1),
  /* 0100 */ PTR(358, 1),
  /* 0101 */ PTR(360, 1),
  /* 0110 */ PTR(362, 1),
  /* 0111 */ PTR(364, 1),
  /* 1000 */ PTR(366, 1),
  /* 1001 */ PTR(368, 1),
  /* 1010 */ PTR(370, 2),
  /* 1011 */ PTR(374, 1),
  /* 1100 */ PTR(376, 2),
  /* 1101 */ V(7, 3, 4),
  /* 1110 */ PTR(380, 1),
  /* 1111 */ V(7, 2, 4),

  /* 0111 ... */
  /* 0000 */ V(4, 6, 4),	/* 112 */
  /* 0001 */ V(6, 4, 4),
  /* 0010 */ V(5, 5, 4),
  /* 0011 */ V(7, 1, 4),
  /* 0100 */ V(3, 6, 4),
  /* 0101 */ V(6, 3, 4),
  /* 0110 */ V(4, 5, 4),
  /* 0111 */ V(5, 4, 4),
  /* 1000 */ V(2, 6, 4),
  /* 1001 */ V(6, 2, 4),
  /* 1010 */ V(1, 6, 4),
  /* 1011 */ V(6, 1, 4),
  /* 1100 */ PTR(382, 1),
  /* 1101 */ V(3, 5, 4),
  /* 1110 */ V(5, 3, 4),
  /* 1111 */ V(4, 4, 4),

  /* 1000 ... */
  /* 0000 */ V(2, 5, 4),	/* 128 */
  /* 0001 */ V(5, 2, 4),
  /* 0010 */ V(1, 5, 4),
  /* 0011 */ PTR(384, 1),
  /* 0100 */ V(5, 1, 3),
  /* 0101 */ V(5, 1, 3),
  /* 0110 */ V(3, 4, 4),
  /* 0111 */ V(4, 3, 4),
  /* 1000 */ V(2, 4, 3),
  /* 1001 */ V(2, 4, 3),
  /* 1010 */ V(4, 2, 3),
  /* 1011 */ V(4, 2, 3),
  /* 1100 */ V(3, 3, 3),
  /* 1101 */ V(3, 3, 3),
  /* 1110 */ V(1, 4, 3),
  /* 1111 */ V(1, 4, 3),

  /* 1001 ... */
  /* 0000 */ V(4, 1, 3),	/* 144 */
  /* 0001 */ V(4, 1, 3),
  /* 0010 */ V(0, 4, 4),
  /* 0011 */ V(4, 0, 4),
  /* 0100 */ V(2, 3, 3),
  /* 0101 */ V(2, 3, 3),
  /* 0110 */ V(3, 2, 3),
  /* 0111 */ V(3, 2, 3),
  /* 1000 */ V(1, 3, 2),
  /* 1001 */ V(1, 3, 2),
  /* 1010 */ V(1, 3, 2),
  /* 1011 */ V(1, 3, 2),
  /* 1100 */ V(3, 1, 2),
  /* 1101 */ V(3, 1, 2),
  /* 1110 */ V(3, 1, 2),
  /* 1111 */ V(3, 1, 2),

  /* 1010 ... */
  /* 000  */ V(0, 3, 3),	/* 160 */
  /* 001  */ V(3, 0, 3),
  /* 010  */ V(2, 2, 2),
  /* 011  */ V(2, 2, 2),
  /* 100  */ V(1, 2, 1),
  /* 101  */ V(1, 2, 1),
  /* 110  */ V(1, 2, 1),
  /* 111  */ V(1, 2, 1),

  /* 1011 ... */
  /* 00   */ V(2, 1, 1),	/* 168 */
  /* 01   */ V(2, 1, 1),
  /* 10   */ V(0, 2, 2),
  /* 11   */ V(2, 0, 2),

  /* 0010 1100 ... */
  /* 000  */ V(0, 15, 1),	/* 172 */
  /* 001  */ V(0, 15, 1),
  /* 010  */ V(0, 15, 1),
  /* 011  */ V(0, 15, 1),
  /* 100  */ V(14, 14, 3),
  /* 101  */ V(13, 14, 3),
  /* 110  */ V(14, 13, 3),
  /* 111  */ V(12, 14, 3),

  /* 0010 1101 ... */
  /* 000  */ V(14, 12, 3),	/* 180 */
  /* 001  */ V(13, 13, 3),
  /* 010  */ V(11, 14, 3),
  /* 011  */ V(14, 11, 3),
  /* 100  */ V(12, 13, 3),
  /* 101  */ V(13, 12, 3),
  /* 110  */ V(10, 14, 3),
  /* 111  */ V(14, 10, 3),

  /* 0010 1110 ... */
  /* 000  */ V(11, 13, 3),	/* 188 */
  /* 001  */ V(13, 11, 3),
  /* 010  */ V(12, 12, 3),
  /* 011  */ V(9, 14, 3),
  /* 100  */ V(14, 9, 3),
  /* 101  */ V(10, 13, 3),
  /* 110  */ V(13, 10, 3),
  /* 111  */ V(11, 12, 3),

  /* 0010 1111 ... */
  /* 000  */ V(12, 11, 3),	/* 196 */
  /* 001  */ V(8, 14, 3),
  /* 010  */ V(14, 8, 3),
  /* 011  */ V(9, 13, 3),
  /* 100  */ V(13, 9, 3),
  /* 101  */ V(7, 14, 3),
  /* 110  */ V(14, 7, 3),
  /* 111  */ V(10, 12, 3),

  /* 0100 0000 ... */
  /* 0000 */ V(12, 10, 3),	/* 204 */
  /* 0001 */ V(12, 10, 3),
  /* 0010 */ V(11, 11, 3),
  /* 0011 */ V(11, 11, 3),
  /* 0100 */ V(8, 13, 3),
  /* 0101 */ V(8, 13, 3),
  /* 0110 */ V(13, 8, 3),
  /* 0111 */ V(13, 8, 3),
  /* 1000 */ V(0, 14, 4),
  /* 1001 */ V(14, 0, 4),
  /* 1010 */ V(0, 13, 3),
  /* 1011 */ V(0, 13, 3),
  /* 1100 */ V(14, 6, 2),
  /* 1101 */ V(14, 6, 2),
  /* 1110 */ V(14, 6, 2),
  /* 1111 */ V(14, 6, 2),

  /* 0100 0001 ... */
  /* 000  */ V(6, 14, 3),	/* 220 */
  /* 001  */ V(9, 12, 3),
  /* 010  */ V(12, 9, 2),
  /* 011  */ V(12, 9, 2),
  /* 100  */ V(5, 14, 2),
  /* 101  */ V(5, 14, 2),
  /* 110  */ V(11, 10, 2),
  /* 111  */ V(11, 10, 2),

  /* 0100 0010 ... */
  /* 000  */ V(14, 5, 2),	/* 228 */
  /* 001  */ V(14, 5, 2),
  /* 010  */ V(10, 11, 3),
  /* 011  */ V(7, 13, 3),
  /* 100  */ V(13, 7, 2),
  /* 101  */ V(13, 7, 2),
  /* 110  */ V(14, 4, 2),
  /* 111  */ V(14, 4, 2),

  /* 0100 0011 ... */
  /* 000  */ V(8, 12, 2),	/* 236 */
  /* 001  */ V(8, 12, 2),
  /* 010  */ V(12, 8, 2),
  /* 011  */ V(12, 8, 2),
  /* 100  */ V(4, 14, 3),
  /* 101  */ V(2, 14, 3),
  /* 110  */ V(3, 14, 2),
  /* 111  */ V(3, 14, 2),

  /* 0100 0100 ... */
  /* 00   */ V(6, 13, 2),	/* 244 */
  /* 01   */ V(13, 6, 2),
  /* 10   */ V(14, 3, 2),
  /* 11   */ V(9, 11, 2),

  /* 0100 0101 ... */
  /* 00   */ V(11, 9, 2),	/* 248 */
  /* 01   */ V(10, 10, 2),
  /* 10   */ V(14, 2, 2),
  /* 11   */ V(1, 14, 2),

  /* 0100 0110 ... */
  /* 00   */ V(14, 1, 2),	/* 252 */
  /* 01   */ V(5, 13, 2),
  /* 10   */ V(13, 5, 2),
  /* 11   */ V(7, 12, 2),

  /* 0100 0111 ... */
  /* 00   */ V(12, 7, 2),	/* 256 */
  /* 01   */ V(4, 13, 2),
  /* 10   */ V(8, 11, 2),
  /* 11   */ V(11, 8, 2),

  /* 0100 1000 ... */
  /* 00   */ V(13, 4, 2),	/* 260 */
  /* 01   */ V(9, 10, 2),
  /* 10   */ V(10, 9, 2),
  /* 11   */ V(6, 12, 2),

  /* 0100 1001 ... */
  /* 00   */ V(12, 6, 2),	/* 264 */
  /* 01   */ V(3, 13, 2),
  /* 10   */ V(13, 3, 2),
  /* 11   */ V(2, 13, 2),

  /* 0100 1010 ... */
  /* 00   */ V(13, 2, 2),	/* 268 */
  /* 01   */ V(1, 13, 2),
  /* 10   */ V(7, 11, 2),
  /* 11   */ V(11, 7, 2),

  /* 0100 1011 ... */
  /* 00   */ V(13, 1, 2),	/* 272 */
  /* 01   */ V(5, 12, 2),
  /* 10   */ V(12, 5, 2),
  /* 11   */ V(8, 10, 2),

  /* 0100 1100 ... */
  /* 00   */ V(10, 8, 2),	/* 276 */
  /* 01   */ V(9, 9, 2),
  /* 10   */ V(4, 12, 2),
  /* 11   */ V(12, 4, 2),

  /* 0100 1101 ... */
  /* 000  */ V(6, 11, 2),	/* 280 */
  /* 001  */ V(6, 11, 2),
  /* 010  */ V(11, 6, 2),
  /* 011  */ V(11, 6, 2),
  /* 100  */ V(13, 0, 3),
  /* 101  */ V(0, 12, 3),
  /* 110  */ V(3, 12, 2),
  /* 111  */ V(3, 12, 2),

  /* 0100 1110 ... */
  /* 00   */ V(12, 3, 2),	/* 288 */
  /* 01   */ V(7, 10, 2),
  /* 10   */ V(10, 7, 2),
  /* 11   */ V(2, 12, 2),

  /* 0100 1111 ... */
  /* 00   */ V(12, 2, 2),	/* 292 */
  /* 01   */ V(5, 11, 2),
  /* 10   */ V(11, 5, 2),
  /* 11   */ V(1, 12, 2),

  /* 0101 0000 ... */
  /* 00   */ V(8, 9, 2),	/* 296 */
  /* 01   */ V(9, 8, 2),
  /* 10   */ V(12, 1, 2),
  /* 11   */ V(4, 11, 2),

  /* 0101 0001 ... */
  /* 000  */ V(12, 0, 3),	/* 300 */
  /* 001  */ V(0, 11, 3),
  /* 010  */ V(3, 11, 2),
  /* 011  */ V(3, 11, 2),
  /* 100  */ V(11, 0, 3),
  /* 101  */ V(0, 10, 3),
  /* 110  */ V(1, 10, 2),
  /* 111  */ V(1, 10, 2),

  /* 0101 0010 ... */
  /* 00   */ V(11, 4, 1),	/* 308 */
  /* 01   */ V(11, 4, 1),
  /* 10   */ V(6, 10, 2),
  /* 11   */ V(10, 6, 2),

  /* 0101 0011 ... */
  /* 000  */ V(7, 9, 2),	/* 312 */
  /* 001  */ V(7, 9, 2),
  /* 010  */ V(9, 7, 2),
  /* 011  */ V(9, 7, 2),
  /* 100  */ V(10, 0, 3),
  /* 101  */ V(0, 9, 3),
  /* 110  */ V(9, 0, 2),
  /* 111  */ V(9, 0, 2),

  /* 0101 0100 ... */
  /* 0    */ V(11, 3, 1),	/* 320 */
  /* 1    */ V(8, 8, 1),

  /* 0101 0101 ... */
  /* 00   */ V(2, 11, 2),	/* 322 */
  /* 01   */ V(5, 10, 2),
  /* 10   */ V(11, 2, 1),
  /* 11   */ V(11, 2, 1),

  /* 0101 0110 ... */
  /* 00   */ V(10, 5, 2),	/* 326 */
  /* 01   */ V(1, 11, 2),
  /* 10   */ V(11, 1, 2),
  /* 11   */ V(6, 9, 2),

  /* 0101 0111 ... */
  /* 0    */ V(9, 6, 1),	/* 330 */
  /* 1    */ V(10, 4, 1),

  /* 0101 1000 ... */
  /* 00   */ V(4, 10, 2),	/* 332 */
  /* 01   */ V(7, 8, 2),
  /* 10   */ V(8, 7, 1),
  /* 11   */ V(8, 7, 1),

  /* 0101 1001 ... */
  /* 0    */ V(3, 10, 1),	/* 336 */
  /* 1    */ V(10, 3, 1),

  /* 0101 1010 ... */
  /* 0    */ V(5, 9, 1),	/* 338 */
  /* 1    */ V(9, 5, 1),

  /* 0101 1011 ... */
  /* 0    */ V(2, 10, 1),	/* 340 */
  /* 1    */ V(10, 2, 1),

  /* 0101 1100 ... */
  /* 0    */ V(10, 1, 1),	/* 342 */
  /* 1    */ V(6, 8, 1),

  /* 0101 1101 ... */
  /* 0    */ V(8, 6, 1),	/* 344 */
  /* 1    */ V(7, 7, 1),

  /* 0101 1110 ... */
  /* 0    */ V(4, 9, 1),	/* 346 */
  /* 1    */ V(9, 4, 1),

  /* 0101 1111 ... */
  /* 0    */ V(3, 9, 1),	/* 348 */
  /* 1    */ V(9, 3, 1),

  /* 0110 0000 ... */
  /* 0    */ V(5, 8, 1),	/* 350 */
  /* 1    */ V(8, 5, 1),

  /* 0110 0001 ... */
  /* 0    */ V(2, 9, 1),	/* 352 */
  /* 1    */ V(6, 7, 1),

  /* 0110 0010 ... */
  /* 0    */ V(7, 6, 1),	/* 354 */
  /* 1    */ V(9, 2, 1),

  /* 0110 0011 ... */
  /* 0    */ V(1, 9, 1),	/* 356 */
  /* 1    */ V(9, 1, 1),

  /* 0110 0100 ... */
  /* 0    */ V(4, 8, 1),	/* 358 */
  /* 1    */ V(8, 4, 1),

  /* 0110 0101 ... */
  /* 0    */ V(5, 7, 1),	/* 360 */
  /* 1    */ V(7, 5, 1),

  /* 0110 0110 ... */
  /* 0    */ V(3, 8, 1),	/* 362 */
  /* 1    */ V(8, 3, 1),

  /* 0110 0111 ... */
  /* 0    */ V(6, 6, 1),	/* 364 */
  /* 1    */ V(2, 8, 1),

  /* 0110 1000 ... */
  /* 0    */ V(8, 2, 1),	/* 366 */
  /* 1    */ V(1, 8, 1),

  /* 0110 1001 ... */
  /* 0    */ V(4, 7, 1),	/* 368 */
  /* 1    */ V(7, 4, 1),

  /* 0110 1010 ... */
  /* 00   */ V(8, 1, 1),	/* 370 */
  /* 01   */ V(8, 1, 1),
  /* 10   */ V(0, 8, 2),
  /* 11   */ V(8, 0, 2),

  /* 0110 1011 ... */
  /* 0    */ V(5, 6, 1),	/* 374 */
  /* 1    */ V(6, 5, 1),

  /* 0110 1100 ... */
  /* 00   */ V(1, 7, 1),	/* 376 */
  /* 01   */ V(1, 7, 1),
  /* 10   */ V(0, 7, 2),
  /* 11   */ V(7, 0, 2),

  /* 0110 1110 ... */
  /* 0    */ V(3, 7, 1),	/* 380  */
  /* 1    */ V(2, 7, 1),

  /* 0111 1100 ... */
  /* 0    */ V(0, 6, 1),	/* 382 */
  /* 1    */ V(6, 0, 1),

  /* 1000 0011 ... */
  /* 0    */ V(0, 5, 1),	/* 384 */
  /* 1    */ V(5, 0, 1)
};

# undef V
# undef PTR

/* external tables */

union huffquad const *const mad_huff_quad_table[2] = { hufftabA, hufftabB };

struct hufftable const mad_huff_pair_table[32] = {
  /*  0 */ { hufftab0,   0, 0 },
  /*  1 */ { hufftab1,   0, 3 },
  /*  2 */ { hufftab2,   0, 3 },
  /*  3 */ { hufftab3,   0, 3 },
  /*  4 */ { 0 /* not used */ },
  /*  5 */ { hufftab5,   0, 3 },
  /*  6 */ { hufftab6,   0, 4 },
  /*  7 */ { hufftab7,   0, 4 },
  /*  8 */ { hufftab8,   0, 4 },
  /*  9 */ { hufftab9,   0, 4 },
  /* 10 */ { hufftab10,  0, 4 },
  /* 11 */ { hufftab11,  0, 4 },
  /* 12 */ { hufftab12,  0, 4 },
  /* 13 */ { hufftab13,  0, 4 },
  /* 14 */ { 0 /* not used */ },
  /* 15 */ { hufftab15,  0, 4 },
  /* 16 */ { hufftab16,  1, 4 },
  /* 17 */ { hufftab16,  2, 4 },
  /* 18 */ { hufftab16,  3, 4 },
  /* 19 */ { hufftab16,  4, 4 },
  /* 20 */ { hufftab16,  6, 4 },
  /* 21 */ { hufftab16,  8, 4 },
  /* 22 */ { hufftab16, 10, 4 },
  /* 23 */ { hufftab16, 13, 4 },
  /* 24 */ { hufftab24,  4, 4 },
  /* 25 */ { hufftab24,  5, 4 },
  /* 26 */ { hufftab24,  6, 4 },
  /* 27 */ { hufftab24,  7, 4 },
  /* 28 */ { hufftab24,  8, 4 },
  /* 29 */ { hufftab24,  9, 4 },
  /* 30 */ { hufftab24, 11, 4 },
  /* 31 */ { hufftab24, 13, 4 }
};


================================================
FILE: 3rdParty/libmad/include/huffman.h
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: huffman.h,v 1.11 2004/01/23 09:41:32 rob Exp $
 */

# ifndef LIBMAD_HUFFMAN_H
# define LIBMAD_HUFFMAN_H

union huffquad {
  struct {
    unsigned short final  :  1;
    unsigned short bits   :  3;
    unsigned short offset : 12;
  } ptr;
  struct {
    unsigned short final  :  1;
    unsigned short hlen   :  3;
    unsigned short v      :  1;
    unsigned short w      :  1;
    unsigned short x      :  1;
    unsigned short y      :  1;
  } value;
  unsigned short final    :  1;
};

union huffpair {
  struct {
    unsigned short final  :  1;
    unsigned short bits   :  3;
    unsigned short offset : 12;
  } ptr;
  struct {
    unsigned short final  :  1;
    unsigned short hlen   :  3;
    unsigned short x      :  4;
    unsigned short y      :  4;
  } value;
  unsigned short final    :  1;
};

struct hufftable {
  union huffpair const *table;
  unsigned short linbits;
  unsigned short startbits;
};

extern union huffquad const *const mad_huff_quad_table[2];
extern struct hufftable const mad_huff_pair_table[32];

# endif


================================================
FILE: 3rdParty/libmad/include/layer12.c
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: layer12.c,v 1.17 2004/02/05 09:02:39 rob Exp $
 */

# ifdef HAVE_CONFIG_H
#  include "config.h"
# endif

# include "global.h"

# ifdef HAVE_LIMITS_H
#  include <limits.h>
# else
#  define CHAR_BIT  8
# endif

# include "fixed.h"
# include "bit.h"
# include "stream.h"
# include "frame.h"
# include "layer12.h"

/*
 * scalefactor table
 * used in both Layer I and Layer II decoding
 */
static
mad_fixed_t const sf_table[64] = {
# include "sf_table.dat"
};

/* --- Layer I ------------------------------------------------------------- */

/* linear scaling table */
static
mad_fixed_t const linear_table[14] = {
  MAD_F(0x15555555),  /* 2^2  / (2^2  - 1) == 1.33333333333333 */
  MAD_F(0x12492492),  /* 2^3  / (2^3  - 1) == 1.14285714285714 */
  MAD_F(0x11111111),  /* 2^4  / (2^4  - 1) == 1.06666666666667 */
  MAD_F(0x10842108),  /* 2^5  / (2^5  - 1) == 1.03225806451613 */
  MAD_F(0x10410410),  /* 2^6  / (2^6  - 1) == 1.01587301587302 */
  MAD_F(0x10204081),  /* 2^7  / (2^7  - 1) == 1.00787401574803 */
  MAD_F(0x10101010),  /* 2^8  / (2^8  - 1) == 1.00392156862745 */
  MAD_F(0x10080402),  /* 2^9  / (2^9  - 1) == 1.00195694716243 */
  MAD_F(0x10040100),  /* 2^10 / (2^10 - 1) == 1.00097751710655 */
  MAD_F(0x10020040),  /* 2^11 / (2^11 - 1) == 1.00048851978505 */
  MAD_F(0x10010010),  /* 2^12 / (2^12 - 1) == 1.00024420024420 */
  MAD_F(0x10008004),  /* 2^13 / (2^13 - 1) == 1.00012208521548 */
  MAD_F(0x10004001),  /* 2^14 / (2^14 - 1) == 1.00006103888177 */
  MAD_F(0x10002000)   /* 2^15 / (2^15 - 1) == 1.00003051850948 */
};

/*
 * NAME:	I_sample()
 * DESCRIPTION:	decode one requantized Layer I sample from a bitstream
 */
static
mad_fixed_t I_sample(struct mad_bitptr *ptr, unsigned int nb)
{
  mad_fixed_t sample;

  sample = mad_bit_read(ptr, nb);

  /* invert most significant bit, extend sign, then scale to fixed format */

  sample ^= 1 << (nb - 1);
  sample |= -(sample & (1 << (nb - 1)));

  sample <<= MAD_F_FRACBITS - (nb - 1);

  /* requantize the sample */

  /* s'' = (2^nb / (2^nb - 1)) * (s''' + 2^(-nb + 1)) */

  sample += MAD_F_ONE >> (nb - 1);

  return mad_f_mul(sample, linear_table[nb - 2]);

  /* s' = factor * s'' */
  /* (to be performed by caller) */
}

/*
 * NAME:	layer->I()
 * DESCRIPTION:	decode a single Layer I frame
 */
int mad_layer_I(struct mad_stream *stream, struct mad_frame *frame)
{
  struct mad_header *header = &frame->header;
  unsigned int nch, bound, ch, s, sb, nb;
  unsigned char allocation[2][32], scalefactor[2][32];

  nch = MAD_NCHANNELS(header);

  bound = 32;
  if (header->mode == MAD_MODE_JOINT_STEREO) {
    header->flags |= MAD_FLAG_I_STEREO;
    bound = 4 + header->mode_extension * 4;
  }

  /* check CRC word */

  if (header->flags & MAD_FLAG_PROTECTION) {
    header->crc_check =
      mad_bit_crc(stream->ptr, 4 * (bound * nch + (32 - bound)),
		  header->crc_check);

    if (header->crc_check != header->crc_target &&
	!(frame->options & MAD_OPTION_IGNORECRC)) {
      stream->error = MAD_ERROR_BADCRC;
      return -1;
    }
  }

  /* decode bit allocations */

  for (sb = 0; sb < bound; ++sb) {
    for (ch = 0; ch < nch; ++ch) {
      nb = mad_bit_read(&stream->ptr, 4);

      if (nb == 15) {
	stream->error = MAD_ERROR_BADBITALLOC;
	return -1;
      }

      allocation[ch][sb] = nb ? nb + 1 : 0;
    }
  }

  for (sb = bound; sb < 32; ++sb) {
    nb = mad_bit_read(&stream->ptr, 4);

    if (nb == 15) {
      stream->error = MAD_ERROR_BADBITALLOC;
      return -1;
    }

    allocation[0][sb] =
    allocation[1][sb] = nb ? nb + 1 : 0;
  }

  /* decode scalefactors */

  for (sb = 0; sb < 32; ++sb) {
    for (ch = 0; ch < nch; ++ch) {
      if (allocation[ch][sb]) {
	scalefactor[ch][sb] = mad_bit_read(&stream->ptr, 6);

# if defined(OPT_STRICT)
	/*
	 * Scalefactor index 63 does not appear in Table B.1 of
	 * ISO/IEC 11172-3. Nonetheless, other implementations accept it,
	 * so we only reject it if OPT_STRICT is defined.
	 */
	if (scalefactor[ch][sb] == 63) {
	  stream->error = MAD_ERROR_BADSCALEFACTOR;
	  return -1;
	}
# endif
      }
    }
  }

  /* decode samples */

  for (s = 0; s < 12; ++s) {
    for (sb = 0; sb < bound; ++sb) {
      for (ch = 0; ch < nch; ++ch) {
	nb = allocation[ch][sb];
	frame->sbsample[ch][s][sb] = nb ?
	  mad_f_mul(I_sample(&stream->ptr, nb),
		    sf_table[scalefactor[ch][sb]]) : 0;
      }
    }

    for (sb = bound; sb < 32; ++sb) {
      if ((nb = allocation[0][sb])) {
	mad_fixed_t sample;

	sample = I_sample(&stream->ptr, nb);

	for (ch = 0; ch < nch; ++ch) {
	  frame->sbsample[ch][s][sb] =
	    mad_f_mul(sample, sf_table[scalefactor[ch][sb]]);
	}
      }
      else {
	for (ch = 0; ch < nch; ++ch)
	  frame->sbsample[ch][s][sb] = 0;
      }
    }
  }

  return 0;
}

/* --- Layer II ------------------------------------------------------------ */

/* possible quantization per subband table */
static
struct {
  unsigned int sblimit;
  unsigned char const offsets[30];
} const sbquant_table[5] = {
  /* ISO/IEC 11172-3 Table B.2a */
  { 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3,	/* 0 */
	  3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
  /* ISO/IEC 11172-3 Table B.2b */
  { 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3,	/* 1 */
	  3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
  /* ISO/IEC 11172-3 Table B.2c */
  {  8, { 5, 5, 2, 2, 2, 2, 2, 2 } },				/* 2 */
  /* ISO/IEC 11172-3 Table B.2d */
  { 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } },		/* 3 */
  /* ISO/IEC 13818-3 Table B.1 */
  { 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,	/* 4 */
	  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
};

/* bit allocation table */
static
struct {
  unsigned short nbal;
  unsigned short offset;
} const bitalloc_table[8] = {
  { 2, 0 },  /* 0 */
  { 2, 3 },  /* 1 */
  { 3, 3 },  /* 2 */
  { 3, 1 },  /* 3 */
  { 4, 2 },  /* 4 */
  { 4, 3 },  /* 5 */
  { 4, 4 },  /* 6 */
  { 4, 5 }   /* 7 */
};

/* offsets into quantization class table */
static
unsigned char const offset_table[6][15] = {
  { 0, 1, 16                                             },  /* 0 */
  { 0, 1,  2, 3, 4, 5, 16                                },  /* 1 */
  { 0, 1,  2, 3, 4, 5,  6, 7,  8,  9, 10, 11, 12, 13, 14 },  /* 2 */
  { 0, 1,  3, 4, 5, 6,  7, 8,  9, 10, 11, 12, 13, 14, 15 },  /* 3 */
  { 0, 1,  2, 3, 4, 5,  6, 7,  8,  9, 10, 11, 12, 13, 16 },  /* 4 */
  { 0, 2,  4, 5, 6, 7,  8, 9, 10, 11, 12, 13, 14, 15, 16 }   /* 5 */
};

/* quantization class table */
static
struct quantclass {
  unsigned short nlevels;
  unsigned char group;
  unsigned char bits;
  mad_fixed_t C;
  mad_fixed_t D;
} const qc_table[17] = {
# include "qc_table.dat"
};

/*
 * NAME:	II_samples()
 * DESCRIPTION:	decode three requantized Layer II samples from a bitstream
 */
static
void II_samples(struct mad_bitptr *ptr,
		struct quantclass const *quantclass,
		mad_fixed_t output[3])
{
  unsigned int nb, s, sample[3];

  if ((nb = quantclass->group)) {
    unsigned int c, nlevels;

    /* degrouping */
    c = mad_bit_read(ptr, quantclass->bits);
    nlevels = quantclass->nlevels;

    for (s = 0; s < 3; ++s) {
      sample[s] = c % nlevels;
      c /= nlevels;
    }
  }
  else {
    nb = quantclass->bits;

    for (s = 0; s < 3; ++s)
      sample[s] = mad_bit_read(ptr, nb);
  }

  for (s = 0; s < 3; ++s) {
    mad_fixed_t requantized;

    /* invert most significant bit, extend sign, then scale to fixed format */

    requantized  = sample[s] ^ (1 << (nb - 1));
    requantized |= -(requantized & (1 << (nb - 1)));

    requantized <<= MAD_F_FRACBITS - (nb - 1);

    /* requantize the sample */

    /* s'' = C * (s''' + D) */

    output[s] = mad_f_mul(requantized + quantclass->D, quantclass->C);

    /* s' = factor * s'' */
    /* (to be performed by caller) */
  }
}

/*
 * NAME:	layer->II()
 * DESCRIPTION:	decode a single Layer II frame
 */
int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)
{
  struct mad_header *header = &frame->header;
  struct mad_bitptr start;
  unsigned int index, sblimit, nbal, nch, bound, gr, ch, s, sb;
  unsigned char const *offsets;
  unsigned char allocation[2][32], scfsi[2][32], scalefactor[2][32][3];
  mad_fixed_t samples[3];

  nch = MAD_NCHANNELS(header);

  if (header->flags & MAD_FLAG_LSF_EXT)
    index = 4;
  else if (header->flags & MAD_FLAG_FREEFORMAT)
    goto freeformat;
  else {
    unsigned long bitrate_per_channel;

    bitrate_per_channel = header->bitrate;
    if (nch == 2) {
      bitrate_per_channel /= 2;

# if defined(OPT_STRICT)
      /*
       * ISO/IEC 11172-3 allows only single channel mode for 32, 48, 56, and
       * 80 kbps bitrates in Layer II, but some encoders ignore this
       * restriction. We enforce it if OPT_STRICT is defined.
       */
      if (bitrate_per_channel <= 28000 || bitrate_per_channel == 40000) {
	stream->error = MAD_ERROR_BADMODE;
	return -1;
      }
# endif
    }
    else {  /* nch == 1 */
      if (bitrate_per_channel > 192000) {
	/*
	 * ISO/IEC 11172-3 does not allow single channel mode for 224, 256,
	 * 320, or 384 kbps bitrates in Layer II.
	 */
	stream->error = MAD_ERROR_BADMODE;
	return -1;
      }
    }

    if (bitrate_per_channel <= 48000)
      index = (header->samplerate == 32000) ? 3 : 2;
    else if (bitrate_per_channel <= 80000)
      index = 0;
    else {
    freeformat:
      index = (header->samplerate == 48000) ? 0 : 1;
    }
  }

  sblimit = sbquant_table[index].sblimit;
  offsets = sbquant_table[index].offsets;

  bound = 32;
  if (header->mode == MAD_MODE_JOINT_STEREO) {
    header->flags |= MAD_FLAG_I_STEREO;
    bound = 4 + header->mode_extension * 4;
  }

  if (bound > sblimit)
    bound = sblimit;

  start = stream->ptr;

  /* decode bit allocations */

  for (sb = 0; sb < bound; ++sb) {
    nbal = bitalloc_table[offsets[sb]].nbal;

    for (ch = 0; ch < nch; ++ch)
      allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
  }

  for (sb = bound; sb < sblimit; ++sb) {
    nbal = bitalloc_table[offsets[sb]].nbal;

    allocation[0][sb] =
    allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
  }

  /* decode scalefactor selection info */

  for (sb = 0; sb < sblimit; ++sb) {
    for (ch = 0; ch < nch; ++ch) {
      if (allocation[ch][sb])
	scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
    }
  }

  /* check CRC word */

  if (header->flags & MAD_FLAG_PROTECTION) {
    header->crc_check =
      mad_bit_crc(start, mad_bit_length(&start, &stream->ptr),
		  header->crc_check);

    if (header->crc_check != header->crc_target &&
	!(frame->options & MAD_OPTION_IGNORECRC)) {
      stream->error = MAD_ERROR_BADCRC;
      return -1;
    }
  }

  /* decode scalefactors */

  for (sb = 0; sb < sblimit; ++sb) {
    for (ch = 0; ch < nch; ++ch) {
      if (allocation[ch][sb]) {
	scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);

	switch (scfsi[ch][sb]) {
	case 2:
	  scalefactor[ch][sb][2] =
	  scalefactor[ch][sb][1] =
	  scalefactor[ch][sb][0];
	  break;

	case 0:
	  scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
	  /* fall through */

	case 1:
	case 3:
	  scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
	}

	if (scfsi[ch][sb] & 1)
	  scalefactor[ch][sb][1] = scalefactor[ch][sb][scfsi[ch][sb] - 1];

# if defined(OPT_STRICT)
	/*
	 * Scalefactor index 63 does not appear in Table B.1 of
	 * ISO/IEC 11172-3. Nonetheless, other implementations accept it,
	 * so we only reject it if OPT_STRICT is defined.
	 */
	if (scalefactor[ch][sb][0] == 63 ||
	    scalefactor[ch][sb][1] == 63 ||
	    scalefactor[ch][sb][2] == 63) {
	  stream->error = MAD_ERROR_BADSCALEFACTOR;
	  return -1;
	}
# endif
      }
    }
  }

  /* decode samples */

  for (gr = 0; gr < 12; ++gr) {
    for (sb = 0; sb < bound; ++sb) {
      for (ch = 0; ch < nch; ++ch) {
	if ((index = allocation[ch][sb])) {
	  index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];

	  II_samples(&stream->ptr, &qc_table[index], samples);

	  for (s = 0; s < 3; ++s) {
	    frame->sbsample[ch][3 * gr + s][sb] =
	      mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
	  }
	}
	else {
	  for (s = 0; s < 3; ++s)
	    frame->sbsample[ch][3 * gr + s][sb] = 0;
	}
      }
    }

    for (sb = bound; sb < sblimit; ++sb) {
      if ((index = allocation[0][sb])) {
	index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];

	II_samples(&stream->ptr, &qc_table[index], samples);

	for (ch = 0; ch < nch; ++ch) {
	  for (s = 0; s < 3; ++s) {
	    frame->sbsample[ch][3 * gr + s][sb] =
	      mad_f_mul(samples[s], sf_table[scalefactor[ch][sb][gr / 4]]);
	  }
	}
      }
      else {
	for (ch = 0; ch < nch; ++ch) {
	  for (s = 0; s < 3; ++s)
	    frame->sbsample[ch][3 * gr + s][sb] = 0;
	}
      }
    }

    for (ch = 0; ch < nch; ++ch) {
      for (s = 0; s < 3; ++s) {
	for (sb = sblimit; sb < 32; ++sb)
	  frame->sbsample[ch][3 * gr + s][sb] = 0;
      }
    }
  }

  return 0;
}


================================================
FILE: 3rdParty/libmad/include/layer12.h
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: layer12.h,v 1.10 2004/01/23 09:41:32 rob Exp $
 */

# ifndef LIBMAD_LAYER12_H
# define LIBMAD_LAYER12_H

# include "stream.h"
# include "frame.h"

int mad_layer_I(struct mad_stream *, struct mad_frame *);
int mad_layer_II(struct mad_stream *, struct mad_frame *);

# endif


================================================
FILE: 3rdParty/libmad/include/layer3.c
================================================
/*
 * libmad - MPEG audio decoder library
 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * $Id: layer3.c,v 1.43 2004/01/23 09:41:32 rob Exp $
 */

# ifdef HAVE_CONFIG_H
#  include "config.h"
# endif

# include "global.h"

# include <stdlib.h>
# include <string.h>

# ifdef HAVE_ASSERT_H
#  include <assert.h>
# endif

# ifdef HAVE_LIMITS_H
#  include <limits.h>
# else
#  define CHAR_BIT  8
# endif

# include "fixed.h"
# include "bit.h"
# include "stream.h"
# include "frame.h"
# include "huffman.h"
# include "layer3.h"

/* --- Layer III ----------------------------------------------------------- */

enum {
  count1table_select = 0x01,
  scalefac_scale     = 0x02,
  preflag	     = 0x04,
  mixed_block_flag   = 0x08
};

enum {
  I_STEREO  = 0x1,
  MS_STEREO = 0x2
};

struct sideinfo {
  unsigned int main_data_begin;
  unsigned int private_bits;

  unsigned char scfsi[2];

  struct granule {
    struct channel {
      /* from side info */
      unsigned short part2_3_length;
      unsigned short big_values;
      unsigned short global_gain;
      unsigned short scalefac_compress;

      unsigned char flags;
      unsigned char block_type;
      unsigned char table_select[3];
      unsigned char subblock_gain[3];
      unsigned char region0_count;
      unsigned char region1_count;

      /* from main_data */
      unsigned char scalefac[39];	/* scalefac_l and/or scalefac_s */
    } ch[2];
  } gr[2];
};

/*
 * scalefactor bit lengths
 * derived from section 2.4.2.7 of ISO/IEC 11172-3
 */
static
struct {
  unsigned char slen1;
  unsigned char slen2;
} const sflen_table[16] = {
  { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 },
  { 3, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 },
  { 2, 1 }, { 2, 2 }, { 2, 3 }, { 3, 1 },
  { 3, 2 }, { 3, 3 }, { 4, 2 }, { 4, 3 }
};

/*
 * number of LSF scalefactor band values
 * derived from section 2.4.3.2 of ISO/IEC 13818-3
 */
static
unsigned char const nsfb_table[6][3][4] = {
  { {  6,  5,  5, 5 },
    {  9,  9,  9, 9 },
    {  6,  9,  9, 9 } },

  { {  6,  5,  7, 3 },
    {  9,  9, 12, 6 },
    {  6,  9, 12, 6 } },

  { { 11, 10,  0, 0 },
    { 18, 18,  0, 0 },
    { 15, 18,  0, 0 } },

  { {  7,  7,  7, 0 },
    { 12, 12, 12, 0 },
    {  6, 15, 12, 0 } },

  { {  6,  6,  6, 3 },
    { 12,  9,  9, 6 },
    {  6, 12,  9, 6 } },

  { {  8,  8,  5, 0 },
    { 15, 12,  9, 0 },
    {  6, 18,  9, 0 } }
};

/*
 * MPEG-1 scalefactor band widths
 * derived from Table B.8 of ISO/IEC 11172-3
 */
static
unsigned char const sfb_48000_long[] = {
   4,  4,  4,  4,  4,  4,  6,  6,  6,   8,  10,
  12, 16, 18, 22, 28, 34, 40, 46, 54,  54, 192
};

static
unsigned char const sfb_44100_long[] = {
   4,  4,  4,  4,  4,  4,  6,  6,  8,   8,  10,
  12, 16, 20, 24, 28, 34, 42, 50, 54,  76, 158
};

static
unsigned char const sfb_32000_long[] = {
   4,  4,  4,  4,  4,  4,  6,  6,  8,  10,  12,
  16, 20, 24, 30, 38, 46, 56, 68, 84, 102,  26
};

static
unsigned char const sfb_48000_short[] = {
   4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  6,
   6,  6,  6,  6,  6, 10, 10, 10, 12, 12, 12, 14, 14,
  14, 16, 16, 16, 20, 20, 20, 26, 26, 26, 66, 66, 66
};

static
unsigned char const sfb_44100_short[] = {
   4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  6,
   6,  6,  8,  8,  8, 10, 10, 10, 12, 12, 12, 14, 14,
  14, 18, 18, 18, 22, 22, 22, 30, 30, 30, 56, 56, 56
};

static
unsigned char const sfb_32000_short[] = {
   4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  6,
   6,  6,  8,  8,  8, 12, 12, 12, 16, 16, 16, 20, 20,
  20, 26, 26, 26, 34, 34, 34, 42, 42, 42, 12, 12, 12
};

static
unsigned char const sfb_48000_mixed[] = {
  /* long */   4,  4,  4,  4,  4,  4,  6,  6,
  /* short */  4,  4,  4,  6,  6,  6,  6,  6,  6, 10,
              10, 10, 12, 12, 12, 14, 14, 14, 16, 16,
              16, 20, 20, 20, 26, 26, 26, 66, 66, 66
};

static
unsigned char const sfb_44100_mixed[] = {
  /* long */   4,  4,  4,  4,  4,  4,  6,  6,
  /* short */  4,  4,  4,  6,  6,  6,  8,  8,  8, 10,
              10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
              18, 22, 22, 22, 30, 30, 30, 56, 56, 56
};

static
unsigned char const sfb_32000_mixed[] = {
  /* long */   4,  4,  4,  4,  4,  4,  6,  6,
  /* short */  4,  4,  4,  6,  6,  6,  8,  8,  8, 12,
              12, 12, 16, 16, 16, 20, 20, 20, 26, 26,
              26, 34, 34, 34, 42, 42, 42, 12, 12, 12
};

/*
 * MPEG-2 scalefactor band widths
 * derived from Table B.2 of ISO/IEC 13818-3
 */
static
unsigned char const sfb_24000_long[] = {
   6,  6,  6,  6,  6,  6,  8, 10, 12,  14,  16,
  18, 22, 26, 32, 38, 46, 54, 62, 70,  76,  36
};

static
unsigned char const sfb_22050_long[] = {
   6,  6,  6,  6,  6,  6,  8, 10, 12,  14,  16,
  20, 24, 28, 32, 38, 46, 52, 60, 68,  58,  54
};

# define sfb_16000_long  sfb_22050_long

static
unsigned char const sfb_24000_short[] = {
   4,  4,  4,  4,  4,  4,  4,  4,  4,  6,  6,  6,  8,
   8,  8, 10, 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
  18, 24, 24, 24, 32, 32, 32, 44, 44, 44, 12, 12, 12
};

static
unsigned char const sfb_22050_short[] = {
   4,  4,  4,  4,  4,  4,  4,  4,  4,  6,  6,  6,  6,
   6,  6,  8,  8,  8, 10, 10, 10, 14, 14, 14, 18, 18,
  18, 26, 26, 26, 32, 32, 32, 42, 42, 42, 18, 18, 18
};

static
unsigned char const sfb_16000_short[] = {
   4,  4,  4,  4,  4,  4,  4,  4,  4,  6,  6,  6,  8,
   8,  8, 10, 10, 10, 12, 12, 12, 14, 14, 14, 18, 18,
  18, 24, 24, 24, 30, 30, 30, 40, 40, 40, 18, 18, 18
};

static
unsigned char const sfb_24000_mixed[] = {
  /* long */   6,  6,  6,  6,  6,  6,
  /* short */  6,  6,  6,  8,  8,  8, 10, 10, 10, 12,
              12, 12, 14, 14, 14, 18, 18, 18, 24, 24,
              24, 32, 32, 32, 44, 44, 44, 12, 12, 12
};

static
unsigned char const sfb_22050_mixed[] = {
  /* long */   6,  6,  6,  6,  6,  6,
  /* short */  6,  6,  6,  6,  6,  6,  8,  8,  8, 10,
              10, 10, 14, 14, 14, 18, 18, 18, 26, 26,
              26, 32, 32, 32, 42, 42, 42, 18, 18, 18
};

static
unsigned char const sfb_16000_mixed[] = {
  /* long */   6,  6,  6,  6,  6,  6,
  /* short */  6,  6,  6,  8,  8,  8, 10, 10, 10, 12,
              12, 12, 14, 14, 14, 18, 18, 18, 24, 24,
              24, 30, 30, 30, 40, 40, 40, 18, 18, 18
};

/*
 * MPEG 2.5 scalefactor band widths
 * derived from public sources
 */
# define sfb_12000_long  sfb_16000_long
# define sfb_11025_long  sfb_12000_long

static
unsigned char const sfb_8000_long[] = {
  12, 12, 12, 12, 12, 12, 16, 20, 24,  28,  32,
  40, 48, 56, 64, 76, 90,  2,  2,  2,   2,   2
};

# define sfb_12000_short  sfb_16000_short
# define sfb_11025_short  sfb_12000_short

static
unsigned char const sfb_8000_short[] = {
   8,  8,  8,  8,  8,  8,  8,  8,  8, 12, 12, 12, 16,
  16, 16, 20, 20, 20, 24, 24, 24, 28, 28, 28, 36, 36,
  36,  2,  2,  2,  2,  2,  2,  2,  2,  2, 26, 26, 26
};

# define sfb_12000_mixed  sfb_16000_mixed
# define sfb_11025_mixed  sfb_12000_mixed

/* the 8000 Hz short block scalefactor bands do not break after
   the first 36 frequency lines, so this is probably wrong */
static
unsigned char const sfb_8000_mixed[] = {
  /* long */  12, 12, 12,
  /* short */  4,  4,  4,  8,  8,  8, 12, 12, 12, 16, 16, 16,
              20, 20, 20, 24, 24, 24, 28, 28, 28, 36, 36, 36,
               2,  2,  2,  2,  2,  2,  2,  2,  2, 26, 26, 26
};

static
struct {
  unsigned char const *l;
  unsigned char const *s;
  unsigned char const *m;
} const sfbwidth_table[9] = {
  { sfb_48000_long, sfb_48000_short, sfb_48000_mixed },
  { sfb_44100_long, sfb_44100_short, sfb_44100_mixed },
  { sfb_32000_long, sfb_32000_short, sfb_32000_mixed },
  { sfb_24000_long, sfb_24000_short, sfb_24000_mixed },
  { sfb_22050_long, sfb_22050_short, sfb_22050_mixed },
  { sfb_16000_long, sfb_16000_short, sfb_16000_mixed },
  { sfb_12000_long, sfb_12000_short, sfb_12000_mixed },
  { sfb_11025_long, sfb_11025_short, sfb_11025_mixed },
  {  sfb_8000_long,  sfb_8000_short,  sfb_8000_mixed }
};

/*
 * scalefactor band preemphasis (used only when preflag is set)
 * derived from Table B.6 of ISO/IEC 11172-3
 */
static
unsigned char const pretab[22] = {
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0
};

/*
 * table for requantization
 *
 * rq_table[x].mantissa * 2^(rq_table[x].exponent) = x^(4/3)
 */
static
struct fixedfloat {
  unsigned long mantissa  : 27;
  unsigned short exponent :  5;
} const rq_table[8207] = {
# include "rq_table.dat"
};

/*
 * fractional powers of two
 * used for requantization and joint stereo decoding
 *
 * root_table[3 + x] = 2^(x/4)
 */
static
mad_fixed_t const root_table[7] = {
  MAD_F(0x09837f05) /* 2^(-3/4) == 0.59460355750136 */,
  MAD_F(0x0b504f33) /* 2^(-2/4) == 0.70710678118655 */,
  MAD_F(0x0d744fcd) /* 2^(-1/4) == 0.84089641525371 */,
  MAD_F(0x10000000) /* 2^( 0/4) == 1.00000000000000 */,
  MAD_F(0x1306fe0a) /* 2^(+1/4) == 1.18920711500272 */,
  MAD_F(0x16a09e66) /* 2^(+2/4) == 1.41421356237310 */,
  MAD_F(0x1ae89f99) /* 2^(+3/4) == 1.68179283050743 */
};

/*
 * coefficients for aliasing reduction
 * derived from Table B.9 of ISO/IEC 11172-3
 *
 *  c[]  = { -0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037 }
 * cs[i] =    1 / sqrt(1 + c[i]^2)
 * ca[i] = c[i] / sqrt(1 + c[i]^2)
 */
static
mad_fixed_t const cs[8] = {
  +MAD_F(0x0db84a81) /* +0.857492926 */, +MAD_F(0x0e1b9d7f) /* +0.881741997 */,
  +MAD_F(0x0f31adcf) /* +0.949628649 */, +MAD_F(0x0fbba815) /* +0.983314592 */,
  +MAD_F(0x0feda417) /* +0.995517816 */, +MAD_F(0x0ffc8fc8) /* +0.999160558 */,
  +MAD_F(0x0fff964c) /* +0.999899195 */, +MAD_F(0x0ffff8d3) /* +0.999993155 */
};

static
mad_fixed_t const ca[8] = {
  -MAD_F(0x083b5fe7) /* -0.514495755 */, -MAD_F(0x078c36d2) /* -0.471731969 */,
  -MAD_F(0x05039814) /* -0.313377454 */, -MAD_F(0x02e91dd1) /* -0.181913200 */,
  -MAD_F(0x0183603a) /* -0.094574193 */, -MAD_F(0x00a7cb87) /* -0.040965583 */,
  -MAD_F(0x003a2847) /* -0.014198569 */, -MAD_F(0x000f27b4) /* -0.003699975 */
};

/*
 * IMDCT coefficients for short blocks
 * derived from section 2.4.3.4.10.2 of ISO/IEC 11172-3
 *
 * imdct_s[i/even][k] = cos((PI / 24) * (2 *       (i / 2) + 7) * (2 * k + 1))
 * imdct_s[i /odd][k] = cos((PI / 24) * (2 * (6 + (i-1)/2) + 7) * (2 * k + 1))
 */
static
mad_fixed_t const imdct_s[6][6] = {
# include "imdct_s.dat"
};

# if !defined(ASO_IMDCT)
/*
 * windowing coefficients for long blocks
 * derived from section 2.4.3.4.10.3 of ISO/IEC 11172-3
 *
 * window_l[i] = sin((PI / 36) * (i + 1/2))
 */
static
mad_fixed_t const window_l[36] = {
  MAD_F(0x00b2aa3e) /* 0.043619387 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
  MAD_F(0x03768962) /* 0.216439614 */, MAD_F(0x04cfb0e2) /* 0.300705800 */,
  MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x07635284) /* 0.461748613 */,
  MAD_F(0x0898c779) /* 0.537299608 */, MAD_F(0x09bd7ca0) /* 0.608761429 */,
  MAD_F(0x0acf37ad) /* 0.675590208 */, MAD_F(0x0bcbe352) /* 0.737277337 */,
  MAD_F(0x0cb19346) /* 0.793353340 */, MAD_F(0x0d7e8807) /* 0.843391446 */,

  MAD_F(0x0e313245) /* 0.887010833 */, MAD_F(0x0ec835e8) /* 0.923879533 */,
  MAD_F(0x0f426cb5) /* 0.953716951 */, MAD_F(0x0f9ee890) /* 0.976296007 */,
  MAD_F(0x0fdcf549) /* 0.991444861 */, MAD_F(0x0ffc19fd) /* 0.999048222 */,
  MAD_F(0x0ffc19fd) /* 0.999048222 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
  MAD_F(0x0f9ee890) /* 0.976296007 */, MAD_F(0x0f426cb5) /* 0.953716951 */,
  MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0e313245) /* 0.887010833 */,

  MAD_F(0x0d7e8807) /* 0.843391446 */, MAD_F(0x0cb19346) /* 0.793353340 */,
  MAD_F(0x0bcbe352) /* 0.737277337 */, MAD_F(0x0acf37ad) /* 0.675590208 */,
  MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0898c779) /* 0.537299608 */,
  MAD_F(0x07635284) /* 0.461748613 */, MAD_F(0x061f78aa) /* 0.382683432 */,
  MAD_F(0x04cfb0e2) /* 0.300705800 */, MAD_F(0x03768962) /* 0.216439614 */,
  MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x00b2aa3e) /* 0.043619387 */,
};
# endif  /* ASO_IMDCT */

/*
 * windowing coefficients for short blocks
 * derived from section 2.4.3.4.10.3 of ISO/IEC 11172-3
 *
 * window_s[i] = sin((PI / 12) * (i + 1/2))
 */
static
mad_fixed_t const window_s[12] = {
  MAD_F(0x0216a2a2) /* 0.130526192 */, MAD_F(0x061f78aa) /* 0.382683432 */,
  MAD_F(0x09bd7ca0) /* 0.608761429 */, MAD_F(0x0cb19346) /* 0.793353340 */,
  MAD_F(0x0ec835e8) /* 0.923879533 */, MAD_F(0x0fdcf549) /* 0.991444861 */,
  MAD_F(0x0fdcf549) /* 0.991444861 */, MAD_F(0x0ec835e8) /* 0.923879533 */,
  MAD_F(0x0cb19346) /* 0.793353340 */, MAD_F(0x09bd7ca0) /* 0.608761429 */,
  MAD_F(0x061f78aa) /* 0.382683432 */, MAD_F(0x0216a2a2) /* 0.130526192 */,
};

/*
 * coefficients for intensity stereo processing
 * derived from section 2.4.3.4.9.3 of ISO/IEC 11172-3
 *
 * is_ratio[i] = tan(i * (PI / 12))
 * is_table[i] = is_ratio[i] / (1 + is_ratio[i])
 */
static
mad_fixed_t const is_table[7] = {
  MAD_F(0x00000000) /* 0.000000000 */,
  MAD_F(0x0361962f) /* 0.211324865 */,
  MAD_F(0x05db3d74) /* 0.366025404 */,
  MAD_F(0x08000000) /* 0.500000000 */,
  MAD_F(0x0a24c28c) /* 0.633974596 */,
  MAD_F(0x0c9e69d1) /* 0.788675135 */,
  MAD_F(0x10000000) /* 1.000000000 */
};

/*
 * coefficients for LSF intensity stereo processing
 * derived from section 2.4.3.2 of ISO/IEC 13818-3
 *
 * is_lsf_table[0][i] = (1 / sqrt(sqrt(2)))^(i + 1)
 * is_lsf_table[1][i] = (1 /      sqrt(2)) ^(i + 1)
 */
static
mad_fixed_t const is_lsf_table[2][15] = {
  {
    MAD_F(0x0d744fcd) /* 0.840896415 */,
    MAD_F(0x0b504f33) /* 0.707106781 */,
    MAD_F(0x09837f05) /* 0.594603558 */,
    MAD_F(0x08000000) /* 0.500000000 */,
    MAD_F(0x06ba27e6) /* 0.420448208 */,
    MAD_F(0x05a8279a) /* 0.353553391 */,
    MAD_F(0x04c1bf83) /* 0.297301779 */,
    MAD_F(0x04000000) /* 0.250000000 */,
    MAD_F(0x035d13f3) /* 0.210224104 */,
    MAD_F(0x02d413cd) /* 0.176776695 */,
    MAD_F(0x0260dfc1) /* 0.148650889 */,
    MAD_F(0x02000000) /* 0.125000000 */,
    MAD_F(0x01ae89fa) /* 0.105112052 */,
    MAD_F(0x016a09e6) /* 0.088388348 */,
    MAD_F(0x01306fe1) /* 0.074325445 */
  }, {
    MAD_F(0x0b504f33) /* 0.707106781 */,
    MAD_F(0x08000000) /* 0.500000000 */,
    MAD_F(0x05a8279a) /* 0.353553391 */,
    MAD_F(0x04000000) /* 0.250000000 */,
    MAD_F(0x02d413cd) /* 0.176776695 */,
    MAD_F(0x02000000) /* 0.125000000 */,
    MAD_F(0x016a09e6) /* 0.088388348 */,
    MAD_F(0x01000000) /* 0.062500000 */,
    MAD_F(0x00b504f3) /* 0.044194174 */,
    MAD_F(0x00800000) /* 0.031250000 */,
    MAD_F(0x005a827a) /* 0.022097087 */,
    MAD_F(0x00400000) /* 0.015625000 */,
    MAD_F(0x002d413d) /* 0.011048543 */,
    MAD_F(0x00200000) /* 0.007812500 */,
    MAD_F(0x0016a09e) /* 0.005524272 */
  }
};

/*
 * NAME:	III_sideinfo()
 * DESCRIPTION:	decode frame side information from a bitstream
 */
static
enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
			    int lsf, struct sideinfo *si,
			    unsigned int *data_bitlen,
			    unsigned int *priv_bitlen)
{
  unsigned int ngr, gr, ch, i;
  enum mad_error result = MAD_ERROR_NONE;

  *data_bitlen = 0;
  *priv_bitlen = lsf ? ((nch == 1) ? 1 : 2) : ((nch == 1) ? 5 : 3);

  si->main_data_begin = mad_bit_read(ptr, lsf ? 8 : 9);
  si->private_bits    = mad_bit_read(ptr, *priv_bitlen);

  ngr = 1;
  if (!lsf) {
    ngr = 2;

    for (ch = 0; ch < nch; ++ch)
      si->scfsi[ch] = mad_bit_read(ptr, 4);
  }

  for (gr = 0; gr < ngr; ++gr) {
    struct granule *granule = &si->gr[gr];

    for (ch = 0; ch < nch; ++ch) {
      struct channel *channel = &granule->ch[ch];

      channel->part2_3_length    = mad_bit_read(ptr, 12);
      channel->big_values        = mad_bit_read(ptr, 9);
      channel->global_gain       = mad_bit_read(ptr, 8);
      channel->scalefac_compress = mad_bit_read(ptr, lsf ? 9 : 4);

      *data_bitlen += channel->part2_3_length;

      if (channel->big_values > 288 && result == 0)
	result = MAD_ERROR_BADBIGVALUES;

      channel->flags = 0;

      /* window_switching_flag */
      if (mad_bit_read(ptr, 1)) {
	channel->block_type = mad_bit_read(ptr, 2);

	if (channel->block_type == 0 && result == 0)
	  result = MAD_ERROR_BADBLOCKTYPE;

	if (!lsf && channel->block_type == 2 && si->scfsi[ch] && result == 0)
	  result = MAD_ERROR_BADSCFSI;

	channel->region0_count = 7;
	channel->region1_count = 36;

	if (mad_bit_read(ptr, 1))
	  channel->flags |= mixed_block_flag;
	else if (channel->block_type == 2)
	  channel->region0_count = 8;

	for (i = 0; i < 2; ++i)
	  channel->table_select[i] = mad_bit_read(ptr, 5);

# if defined(DEBUG)
	channel->table_select[2] = 4;  /* not used */
# endif

	for (i = 0; i < 3; ++i)
	  channel->subblock_gain[i] = mad_bit_read(ptr, 3);
      }
      else {
	channel->block_type = 0;

	for (i = 0; i < 3; ++i)
	  channel->table_select[i] = mad_bit_read(ptr, 5);

	channel->region0_count = mad_bit_read(ptr, 4);
	channel->region1_count = mad_bit_read(ptr, 3);
      }

      /* [preflag,] scalefac_scale, count1table_select */
      channel->flags |= mad_bit_read(ptr, lsf ? 2 : 3);
    }
  }

  return result;
}

/*
 * NAME:	III_scalefactors_lsf()
 * DESCRIPTION:	decode channel scalefactors for LSF from a bitstream
 */
static
unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
				  struct channel *channel,
				  struct channel *gr1ch, int mode_extension)
{
  struct mad_bitptr start;
  unsigned int scalefac_compress, index, slen[4], part, n, i;
  unsigned char const *nsfb;

  start = *ptr;

  scalefac_compress = channel->scalefac_compress;
  index = (channel->block_type == 2) ?
    ((channel->flags & mixed_block_flag) ? 2 : 1) : 0;

  if (!((mode_extension & I_STEREO) && gr1ch)) {
    if (scalefac_compress < 400) {
      slen[0] = (scalefac_compress >> 4) / 5;
      slen[1] = (scalefac_compress >> 4) % 5;
      slen[2] = (scalefac_compress % 16) >> 2;
      slen[3] =  scalefac_compress %  4;

      nsfb = nsfb_table[0][index];
    }
    else if (scalefac_compress < 500) {
      scalefac_compress -= 400;

      slen[0] = (scalefac_compress >> 2) / 5;
      slen[1] = (scalefac_compress >> 2) % 5;
      slen[2] =  scalefac_compress %  4;
      slen[3] = 0;

      nsfb = nsfb_table[1][index];
    }
    else {
      scalefac_compress -= 500;

      slen[0] = scalefac_compress / 3;
      slen[1] = scalefac_compress % 3;
      slen[2] = 0;
      slen[3] = 0;

      channel->flags |= preflag;

      nsfb = nsfb_table[2][index];
    }

    n = 0;
    for (part = 0; part < 4; ++part) {
      for (i = 0; i < nsfb[part]; ++i)
	channel->scalefac[n++] = mad_bit_read(ptr, slen[part]);
    }

    while (n < 39)
      channel->scalefac[n++] = 0;
  }
  else {  /* (mode_extension & I_STEREO) && gr1ch (i.e. ch == 1) */
    scalefac_compress >>= 1;

    if (scalefac_compress < 180) {
      slen[0] =  scalefac_compress / 36;
      slen[1] = (scalefac_compress % 36) / 6;
      slen[2] = (scalefac_compress % 36) % 6;
      slen[3] = 0;

      nsfb = nsfb_table[3][index];
    }
    else if (scalefac_compress < 244) {
      scalefac_compress -= 180;

      slen[0] = (scalefac_compress % 64) >> 4;
      slen[1] = (scalefac_compress % 16) >> 2;
      slen[2] =  scalefac_compress %  4;
      slen[3] = 0;

      nsfb = nsfb_table[4][index];
    }
    else {
      scalefac_compress -= 244;

      slen[0] = scalefac_compress / 3;
      slen[1] = scalefac_compress % 3;
      slen[2] = 0;
      slen[3] = 0;

      nsfb = nsfb_table[5][index];
    }

    n = 0;
    for (part = 0; part < 4; ++part) {
      unsigned int max, is_pos;

      max = (1 << slen[part]) - 1;

      for (i = 0; i < nsfb[part]; ++i) {
	is_pos = mad_bit_read(ptr, slen[part]);

	channel->scalefac[n] = is_pos;
	gr1ch->scalefac[n++] = (is_pos == max);
      }
    }

    while (n < 39) {
      channel->scalefac[n] = 0;
      gr1ch->scalefac[n++] = 0;  /* apparently not illegal */
    }
  }

  return mad_bit_length(&start, ptr);
}

/*
 * NAME:	III_scalefactors()
 * DESCRIPTION:	decode channel scalefactors of one granule from a bitstream
 */
static
unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
			      struct channel const *gr0ch, unsigned int scfsi)
{
  struct mad_bitptr start;
  unsigned int slen1, slen2, sfbi;

  start = *ptr;

  slen1 = sflen_table[channel->scalefac_compress].slen1;
  slen2 = sflen_table[channel->scalefac_compress].slen2;

  if (channel->block_type == 2) {
    unsigned int nsfb;

    sfbi = 0;

    nsfb = (channel->flags & mixed_block_flag) ? 8 + 3 * 3 : 6 * 3;
    while (nsfb--)
      channel->scalefac[sfbi++] = mad_bit_read(ptr, slen1);

    nsfb = 6 * 3;
    while (nsfb--)
      channel->scalefac[sfbi++] = mad_bit_read(ptr, slen2);

    nsfb = 1 * 3;
    while (nsfb--)
      channel->scalefac[sfbi++] = 0;
  }
  else {  /* channel->block_type != 2 */
    if (scfsi & 0x8) {
      for (sfbi = 0; sfbi < 6; ++sfbi)
	channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
    }
    else {
      for (sfbi = 0; sfbi < 6; ++sfbi)
	channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
    }

    if (scfsi & 0x4) {
      for (sfbi = 6; sfbi < 11; ++sfbi)
	channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
    }
    else {
      for (sfbi = 6; sfbi < 11; ++sfbi)
	channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
    }

    if (scfsi & 0x2) {
      for (sfbi = 11; sfbi < 16; ++sfbi)
	channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
    }
    else {
      for (sfbi = 11; sfbi < 16; ++sfbi)
	channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
    }

    if (scfsi & 0x1) {
      for (sfbi = 16; sfbi < 21; ++sfbi)
	channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
    }
    else {
      for (sfbi = 16; sfbi < 21; ++sfbi)
	channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
    }

    channel->scalefac[21] = 0;
  }

  return mad_bit_length(&start, ptr);
}

/*
 * The Layer III formula for requantization and scaling is defined by
 * section 2.4.3.4.7.1 of ISO/IEC 11172-3, as follows:
 *
 *   long blocks:
 *   xr[i] = sign(is[i]) * abs(is[i])^(4/3) *
 *           2^((1/4) * (global_gain - 210)) *
 *           2^-(scalefac_multiplier *
 *               (scalefac_l[sfb] + preflag * pretab[sfb]))
 *
 *   short blocks:
 *   xr[i] = sign(is[i]) * abs(is[i])^(4/3) *
 *           2^((1/4) * (global_gain - 210 - 8 * subblock_gain[w])) *
 *           2^-(scalefac_multiplier * scalefac_s[sfb][w])
 *
 *   where:
 *   scalefac_multiplier = (scalefac_scale + 1) / 2
 *
 * The routines III_exponents() and III_requantize() facilitate this
 * calculation.
 */

/*
 * NAME:	III_exponents()
 * DESCRIPTION:	calculate scalefactor exponents
 */
static
void III_exponents(struct channel const *channel,
		   unsigned char const *sfbwidth, signed int exponents[39])
{
  signed int gain;
  unsigned int scalefac_multiplier, sfbi;

  gain = (signed int) channel->global_gain - 210;
  scalefac_multiplier = (channel->flags & scalefac_scale) ? 2 : 1;

  if (channel->block_type == 2) {
    unsigned int l;
    signed int gain0, gain1, gain2;

    sfbi = l = 0;

    if (channel->flags & mixed_block_flag) {
      unsigned int premask;

      premask = (channel->flags & preflag) ? ~0 : 0;

      /* long block subbands 0-1 */

      while (l < 36) {
	exponents[sfbi] = gain -
	  (signed int) ((channel->scalefac[sfbi] + (pretab[sfbi] & premask)) <<
			scalefac_multiplier);

	l += sfbwidth[sfbi++];
      }
    }

    /* this is probably wrong for 8000 Hz short/mixed blocks */

    gain0 = gain - 8 * (signed int) channel->subblock_gain[0];
    gain1 = gain - 8 * (signed int) channel->subblock_gain[1];
    gain2 = gain - 8 * (signed int) channel->subblock_gain[2];

    while (l < 576) {
      exponents[sfbi + 0] = gain0 -
	(signed int) (channel->scalefac[sfbi + 0] << scalefac_multiplier);
      exponents[sfbi + 1] = gain1 -
	(signed int) (channel->scalefac[sfbi + 1] << scalefac_multiplier);
      exponents[sfbi + 2] = gain2 -
	(signed int) (channel->scalefac[sfbi + 2] << scalefac_multiplier);

      l    
Download .txt
gitextract_c_rmr097/

├── 3rdParty/
│   ├── equalizer/
│   │   ├── eq.cpp
│   │   ├── eq.h
│   │   ├── iir.h
│   │   ├── iir_cfs.cpp
│   │   ├── iir_cfs.h
│   │   ├── iir_fpu.cpp
│   │   └── iir_fpu.h
│   ├── libmad/
│   │   ├── include/
│   │   │   ├── bit.c
│   │   │   ├── bit.h
│   │   │   ├── config.h
│   │   │   ├── decoder.c
│   │   │   ├── decoder.h
│   │   │   ├── fixed.c
│   │   │   ├── fixed.h
│   │   │   ├── frame.c
│   │   │   ├── frame.h
│   │   │   ├── global.h
│   │   │   ├── huffman.c
│   │   │   ├── huffman.h
│   │   │   ├── layer12.c
│   │   │   ├── layer12.h
│   │   │   ├── layer3.c
│   │   │   ├── layer3.h
│   │   │   ├── mad.h
│   │   │   ├── stream.c
│   │   │   ├── stream.h
│   │   │   ├── synth.c
│   │   │   ├── synth.h
│   │   │   ├── timer.c
│   │   │   ├── timer.h
│   │   │   ├── version.c
│   │   │   └── version.h
│   │   └── lib/
│   │       ├── libmad.lib
│   │       └── libmadd.lib
│   ├── libogg/
│   │   ├── include/
│   │   │   ├── ogg.h
│   │   │   └── os_types.h
│   │   └── lib/
│   │       ├── libogg.lib
│   │       └── liboggd.lib
│   ├── libvorbis/
│   │   ├── include/
│   │   │   ├── analysis.c
│   │   │   ├── backends.h
│   │   │   ├── bitrate.c
│   │   │   ├── bitrate.h
│   │   │   ├── block.c
│   │   │   ├── codebook.c
│   │   │   ├── codebook.h
│   │   │   ├── codec.h
│   │   │   ├── codec_internal.h
│   │   │   ├── envelope.c
│   │   │   ├── envelope.h
│   │   │   ├── floor0.c
│   │   │   ├── floor1.c
│   │   │   ├── floor_all.h
│   │   │   ├── highlevel.h
│   │   │   ├── info.c
│   │   │   ├── lookup.c
│   │   │   ├── lookup.h
│   │   │   ├── lookup_data.h
│   │   │   ├── lpc.c
│   │   │   ├── lpc.h
│   │   │   ├── lsp.c
│   │   │   ├── lsp.h
│   │   │   ├── mapping0.c
│   │   │   ├── masking.h
│   │   │   ├── mdct.c
│   │   │   ├── mdct.h
│   │   │   ├── misc.h
│   │   │   ├── os.h
│   │   │   ├── psy.c
│   │   │   ├── psy.h
│   │   │   ├── psych_11.h
│   │   │   ├── psych_16.h
│   │   │   ├── psych_44.h
│   │   │   ├── psych_8.h
│   │   │   ├── psytune.c
│   │   │   ├── registry.c
│   │   │   ├── registry.h
│   │   │   ├── res0.c
│   │   │   ├── residue_16.h
│   │   │   ├── residue_44.h
│   │   │   ├── residue_44u.h
│   │   │   ├── residue_8.h
│   │   │   ├── scales.h
│   │   │   ├── setup_11.h
│   │   │   ├── setup_16.h
│   │   │   ├── setup_22.h
│   │   │   ├── setup_32.h
│   │   │   ├── setup_44.h
│   │   │   ├── setup_44u.h
│   │   │   ├── setup_8.h
│   │   │   ├── setup_X.h
│   │   │   ├── sharedbook.c
│   │   │   ├── smallft.c
│   │   │   ├── smallft.h
│   │   │   ├── synthesis.c
│   │   │   ├── tone.c
│   │   │   ├── vorbisenc.c
│   │   │   ├── vorbisenc.h
│   │   │   ├── vorbisfile.c
│   │   │   ├── vorbisfile.h
│   │   │   ├── window.c
│   │   │   └── window.h
│   │   └── lib/
│   │       ├── libvorbis.lib
│   │       └── libvorbisd.lib
│   ├── qdeviceWatcher/
│   │   ├── include/
│   │   │   ├── qdevicechangeevent.cpp
│   │   │   ├── qdevicechangeevent.h
│   │   │   ├── qdevicewatcher.cpp
│   │   │   ├── qdevicewatcher.h
│   │   │   ├── qdevicewatcher_global.h
│   │   │   ├── qdevicewatcher_linux.cpp
│   │   │   ├── qdevicewatcher_p.h
│   │   │   ├── qdevicewatcher_win32.cpp
│   │   │   └── qdevicewatcher_wince.cpp
│   │   └── lib/
│   │       └── QDeviceWatcherd2.lib
│   ├── qtsingleapplication/
│   │   ├── QtLockedFile
│   │   ├── QtSingleApplication
│   │   ├── qtlocalpeer.cpp
│   │   ├── qtlocalpeer.h
│   │   ├── qtlockedfile.cpp
│   │   ├── qtlockedfile.h
│   │   ├── qtlockedfile_unix.cpp
│   │   ├── qtlockedfile_win.cpp
│   │   ├── qtsingleapplication.cpp
│   │   ├── qtsingleapplication.h
│   │   ├── qtsingleapplication.pri
│   │   ├── qtsinglecoreapplication.cpp
│   │   ├── qtsinglecoreapplication.h
│   │   └── qtsinglecoreapplication.pri
│   └── qxtglobalshortcut/
│       ├── qxtglobal.h
│       ├── qxtglobalshortcut.cpp
│       ├── qxtglobalshortcut.h
│       ├── qxtglobalshortcut.pri
│       ├── qxtglobalshortcut_mac.cpp
│       ├── qxtglobalshortcut_p.h
│       ├── qxtglobalshortcut_win.cpp
│       └── qxtglobalshortcut_x11.cpp
├── AboutPanel/
│   ├── AboutPage.cpp
│   ├── AboutPage.h
│   ├── AboutPanel.cpp
│   ├── AboutPanel.h
│   ├── AboutPanel.pri
│   ├── AuthorPage.cpp
│   ├── AuthorPage.h
│   ├── ThanksPage.cpp
│   └── ThanksPage.h
├── CZPlayer.pro
├── ConfigPanel/
│   ├── ConfigDialog.cpp
│   ├── ConfigDialog.h
│   ├── ConfigPanel.pri
│   ├── DownloadSettingsPage.cpp
│   ├── DownloadSettingsPage.h
│   ├── EditHotkeyDialog.cpp
│   ├── EditHotkeyDialog.h
│   ├── GeneralSettingsPage.cpp
│   ├── GeneralSettingsPage.h
│   ├── Global.cpp
│   ├── Global.h
│   ├── GlobalConfig.cpp
│   ├── GlobalConfig.h
│   ├── HotkeysSettingsPage.cpp
│   ├── HotkeysSettingsPage.h
│   ├── HotkeysTableWidget.cpp
│   ├── HotkeysTableWidget.h
│   ├── LrcDemo.cpp
│   ├── LrcDemo.h
│   ├── LrcSettingsPage.cpp
│   ├── LrcSettingsPage.h
│   ├── UpdatePage.cpp
│   └── UpdatePage.h
├── Copyright
├── Core/
│   ├── AutoStart.cpp
│   ├── AutoStart.h
│   ├── AutoStartHandle.cpp
│   ├── AutoStartHandle.h
│   ├── ChineseToLetter.h
│   ├── Core.pri
│   ├── FileRelation.cpp
│   ├── FileRelation.h
│   ├── FileRelationHandle.cpp
│   ├── FileRelationHandle.h
│   ├── GlobalHotkey.cpp
│   ├── GlobalHotkey.h
│   ├── NoFocusDelegate.cpp
│   ├── NoFocusDelegate.h
│   ├── StatusDefine.h
│   ├── TR.h
│   └── signal_slot.h
├── DB/
│   ├── DB.pri
│   ├── DBModule.cpp
│   └── DBModule.h
├── Doxyfile
├── Engine/
│   ├── AudioStream.cpp
│   ├── AudioStream.h
│   ├── BasicPlayer.cpp
│   ├── BasicPlayer.h
│   ├── CriticalSection.h
│   ├── Engine.pri
│   ├── FastFourierTransform.cpp
│   ├── FastFourierTransform.h
│   ├── IO.cpp
│   ├── IO.h
│   ├── SoundControl.cpp
│   ├── SoundControl.h
│   ├── SpectroGraph.cpp
│   ├── SpectroGraph.h
│   ├── Stream.cpp
│   ├── Stream.h
│   ├── Thread.h
│   ├── Utils.cpp
│   ├── Utils.h
│   └── WMWrapper.cpp
├── Entity/
│   ├── Entity.pri
│   ├── MusicInfoEntity.cpp
│   ├── MusicInfoEntity.h
│   ├── MusicListSaveFormatEntity.cpp
│   ├── MusicListSaveFormatEntity.h
│   ├── RadioInfoEntity.cpp
│   └── RadioInfoEntity.h
├── ExecDir/
│   ├── AutoUpdate/
│   │   └── qt.conf
│   ├── CZPlayer.exe.embed.manifest
│   ├── RadioInfo.xml
│   ├── qt.conf
│   └── update.xml
├── LICENSE
├── LrcLabel/
│   ├── LrcLabel.pri
│   ├── MusicLrc.cpp
│   └── MusicLrc.h
├── MainWidget/
│   ├── MainWidget.cpp
│   ├── MainWidget.h
│   └── MainWidget.pri
├── MediaWidget/
│   ├── CollectionPanel.cpp
│   ├── CollectionPanel.h
│   ├── DownloadListPanel.cpp
│   ├── DownloadListPanel.h
│   ├── LrcPortraitPanel.cpp
│   ├── LrcPortraitPanel.h
│   ├── MediaWidget.cpp
│   ├── MediaWidget.h
│   ├── MediaWidget.pri
│   ├── RadioPanel.cpp
│   ├── RadioPanel.h
│   ├── RankingPanel.cpp
│   ├── RankingPanel.h
│   ├── SearchPanel.cpp
│   └── SearchPanel.h
├── MinWidget/
│   ├── MinMusicWidget.cpp
│   ├── MinMusicWidget.h
│   └── MinWidget.pri
├── MusicList/
│   ├── MusicList.cpp
│   ├── MusicList.h
│   ├── MusicList.pri
│   ├── MusicListWidget.cpp
│   ├── MusicListWidget.h
│   ├── SharedDialog.cpp
│   └── SharedDialog.h
├── README.md
├── Resources/
│   ├── CZPlayer.qrc
│   ├── CZPlayer.rc
│   ├── audio/
│   │   └── README
│   ├── qss/
│   │   └── CZPlayer.qss
│   └── xml/
│       ├── README
│       ├── RadioInfo.xml
│       └── update.xml
├── TODO
├── Thread/
│   ├── AlbumThread.cpp
│   ├── AlbumThread.h
│   ├── DownloadMusicThread.cpp
│   ├── DownloadMusicThread.h
│   ├── LoadMusicThread.cpp
│   ├── LoadMusicThread.h
│   ├── LrcThread.cpp
│   ├── LrcThread.h
│   ├── SearchThread.cpp
│   ├── SearchThread.h
│   └── Thread.pri
├── doc/
│   ├── _about_page_8cpp.html
│   ├── _about_page_8h.html
│   ├── _about_page_8h_source.html
│   ├── _about_panel_8cpp.html
│   ├── _about_panel_8h.html
│   ├── _about_panel_8h_source.html
│   ├── _album_thread_8cpp.html
│   ├── _album_thread_8h.html
│   ├── _album_thread_8h_source.html
│   ├── _audio_stream_8h_source.html
│   ├── _author_page_8cpp.html
│   ├── _author_page_8h.html
│   ├── _author_page_8h_source.html
│   ├── _basic_player_8cpp.html
│   ├── _basic_player_8h.html
│   ├── _basic_player_8h_source.html
│   ├── _collection_panel_8cpp.html
│   ├── _collection_panel_8h.html
│   ├── _collection_panel_8h_source.html
│   ├── _config_dialog_8cpp.html
│   ├── _config_dialog_8h.html
│   ├── _config_dialog_8h_source.html
│   ├── _critical_section_8h_source.html
│   ├── _d_b_module_8cpp.html
│   ├── _d_b_module_8h.html
│   ├── _d_b_module_8h_source.html
│   ├── _download_list_panel_8cpp.html
│   ├── _download_list_panel_8h.html
│   ├── _download_list_panel_8h_source.html
│   ├── _download_settings_page_8cpp.html
│   ├── _download_settings_page_8h.html
│   ├── _download_settings_page_8h_source.html
│   ├── _edit_hotkey_dialog_8cpp.html
│   ├── _edit_hotkey_dialog_8h.html
│   ├── _edit_hotkey_dialog_8h_source.html
│   ├── _fast_fourier_transform_8h_source.html
│   ├── _general_settings_page_8cpp.html
│   ├── _general_settings_page_8h.html
│   ├── _general_settings_page_8h_source.html
│   ├── _global_8h_source.html
│   ├── _global_config_8cpp.html
│   ├── _global_config_8h.html
│   ├── _global_config_8h_source.html
│   ├── _global_hotkey_8cpp.html
│   ├── _global_hotkey_8h.html
│   ├── _global_hotkey_8h_source.html
│   ├── _hotkeys_settings_page_8cpp.html
│   ├── _hotkeys_settings_page_8h.html
│   ├── _hotkeys_settings_page_8h_source.html
│   ├── _hotkeys_table_widget_8cpp.html
│   ├── _hotkeys_table_widget_8h.html
│   ├── _hotkeys_table_widget_8h_source.html
│   ├── _i_o_8h_source.html
│   ├── _load_music_thread_8cpp.html
│   ├── _load_music_thread_8h.html
│   ├── _load_music_thread_8h_source.html
│   ├── _lrc_demo_8cpp.html
│   ├── _lrc_demo_8h.html
│   ├── _lrc_demo_8h_source.html
│   ├── _lrc_portrait_panel_8cpp.html
│   ├── _lrc_portrait_panel_8h.html
│   ├── _lrc_portrait_panel_8h_source.html
│   ├── _lrc_settings_page_8cpp.html
│   ├── _lrc_settings_page_8h.html
│   ├── _lrc_settings_page_8h_source.html
│   ├── _lrc_thread_8cpp.html
│   ├── _lrc_thread_8h.html
│   ├── _lrc_thread_8h_source.html
│   ├── _main_widget_8h.html
│   ├── _main_widget_8h_source.html
│   ├── _media_widget_8cpp.html
│   ├── _media_widget_8h.html
│   ├── _media_widget_8h_source.html
│   ├── _min_music_widget_8cpp.html
│   ├── _min_music_widget_8h.html
│   ├── _min_music_widget_8h_source.html
│   ├── _music_info_entity_8cpp.html
│   ├── _music_info_entity_8h.html
│   ├── _music_info_entity_8h_source.html
│   ├── _music_list_8cpp.html
│   ├── _music_list_8h.html
│   ├── _music_list_8h_source.html
│   ├── _music_list_save_format_entity_8cpp.html
│   ├── _music_list_save_format_entity_8h.html
│   ├── _music_list_save_format_entity_8h_source.html
│   ├── _music_list_widget_8cpp.html
│   ├── _music_list_widget_8h.html
│   ├── _music_list_widget_8h_source.html
│   ├── _music_lrc_8cpp.html
│   ├── _music_lrc_8h.html
│   ├── _music_lrc_8h_source.html
│   ├── _no_focus_delegate_8h_source.html
│   ├── _radio_panel_8cpp.html
│   ├── _radio_panel_8h.html
│   ├── _radio_panel_8h_source.html
│   ├── _ranking_panel_8cpp.html
│   ├── _ranking_panel_8h.html
│   ├── _ranking_panel_8h_source.html
│   ├── _search_panel_8cpp.html
│   ├── _search_panel_8h.html
│   ├── _search_panel_8h_source.html
│   ├── _shared_dialog_8cpp.html
│   ├── _shared_dialog_8h.html
│   ├── _shared_dialog_8h_source.html
│   ├── _sound_control_8cpp.html
│   ├── _sound_control_8h.html
│   ├── _sound_control_8h_source.html
│   ├── _spectro_graph_8cpp.html
│   ├── _spectro_graph_8h.html
│   ├── _spectro_graph_8h_source.html
│   ├── _status_define_8h.html
│   ├── _status_define_8h_source.html
│   ├── _stream_8h_source.html
│   ├── _t_r_8h.html
│   ├── _t_r_8h_source.html
│   ├── _thanks_page_8cpp.html
│   ├── _thanks_page_8h.html
│   ├── _thanks_page_8h_source.html
│   ├── _thread_8h_source.html
│   ├── _update_page_8cpp.html
│   ├── _update_page_8h.html
│   ├── _update_page_8h_source.html
│   ├── _utils_8h_source.html
│   ├── annotated.html
│   ├── class_about_page-members.html
│   ├── class_about_page.html
│   ├── class_about_panel-members.html
│   ├── class_about_panel.html
│   ├── class_album_thread-members.html
│   ├── class_album_thread.html
│   ├── class_author_page-members.html
│   ├── class_author_page.html
│   ├── class_c_audio_stream-members.html
│   ├── class_c_audio_stream.html
│   ├── class_c_basic_player-members.html
│   ├── class_c_basic_player.html
│   ├── class_c_critical_section-members.html
│   ├── class_c_critical_section.html
│   ├── class_c_custom_memory_stream-members.html
│   ├── class_c_custom_memory_stream.html
│   ├── class_c_fast_fourier_transform-members.html
│   ├── class_c_fast_fourier_transform.html
│   ├── class_c_file_input-members.html
│   ├── class_c_file_input.html
│   ├── class_c_file_stream-members.html
│   ├── class_c_file_stream.html
│   ├── class_c_handle_stream-members.html
│   ├── class_c_handle_stream.html
│   ├── class_c_input-members.html
│   ├── class_c_input.html
│   ├── class_c_memory_stream-members.html
│   ├── class_c_memory_stream.html
│   ├── class_c_mp3_input-members.html
│   ├── class_c_mp3_input.html
│   ├── class_c_play_thread-members.html
│   ├── class_c_play_thread.html
│   ├── class_c_spectrum_analyser-members.html
│   ├── class_c_spectrum_analyser.html
│   ├── class_c_spectrum_analyser_thread-members.html
│   ├── class_c_spectrum_analyser_thread.html
│   ├── class_c_stream-members.html
│   ├── class_c_stream.html
│   ├── class_c_streamed_input-members.html
│   ├── class_c_streamed_input.html
│   ├── class_c_system-members.html
│   ├── class_c_system.html
│   ├── class_c_thread-members.html
│   ├── class_c_thread.html
│   ├── class_c_vorbis_input-members.html
│   ├── class_c_vorbis_input.html
│   ├── class_c_wave_converter-members.html
│   ├── class_c_wave_converter.html
│   ├── class_c_wave_input-members.html
│   ├── class_c_wave_input.html
│   ├── class_c_wma_input-members.html
│   ├── class_c_wma_input.html
│   ├── class_collection_panel-members.html
│   ├── class_collection_panel.html
│   ├── class_config_dialog-members.html
│   ├── class_config_dialog.html
│   ├── class_d_b_module-members.html
│   ├── class_d_b_module.html
│   ├── class_d_s___start_buffer_helper-members.html
│   ├── class_d_s___start_buffer_helper.html
│   ├── class_d_s___start_buffer_helper_1_1_data-members.html
│   ├── class_d_s___start_buffer_helper_1_1_data.html
│   ├── class_download_list_panel-members.html
│   ├── class_download_list_panel.html
│   ├── class_download_settings_page-members.html
│   ├── class_download_settings_page.html
│   ├── class_edit_hotkey_dialog-members.html
│   ├── class_edit_hotkey_dialog.html
│   ├── class_general_settings_page-members.html
│   ├── class_general_settings_page.html
│   ├── class_global_config-members.html
│   ├── class_global_config.html
│   ├── class_global_hot_key-members.html
│   ├── class_global_hot_key.html
│   ├── class_hot_keys_settings_page-members.html
│   ├── class_hot_keys_settings_page.html
│   ├── class_hot_keys_table_widget-members.html
│   ├── class_hot_keys_table_widget.html
│   ├── class_load_music_thread-members.html
│   ├── class_load_music_thread.html
│   ├── class_load_music_thread_event-members.html
│   ├── class_load_music_thread_event.html
│   ├── class_lrc_demo-members.html
│   ├── class_lrc_demo.html
│   ├── class_lrc_portrait_panel-members.html
│   ├── class_lrc_portrait_panel.html
│   ├── class_lrc_settings_page-members.html
│   ├── class_lrc_settings_page.html
│   ├── class_lrc_thread-members.html
│   ├── class_lrc_thread.html
│   ├── class_main_widget-members.html
│   ├── class_main_widget.html
│   ├── class_media_widget-members.html
│   ├── class_media_widget.html
│   ├── class_min_music_widget-members.html
│   ├── class_min_music_widget.html
│   ├── class_music_info_entity-members.html
│   ├── class_music_info_entity.html
│   ├── class_music_list-members.html
│   ├── class_music_list.html
│   ├── class_music_list_save_format_entity-members.html
│   ├── class_music_list_save_format_entity.html
│   ├── class_music_list_widget-members.html
│   ├── class_music_list_widget.html
│   ├── class_music_lrc-members.html
│   ├── class_music_lrc.html
│   ├── class_no_focus_delegate-members.html
│   ├── class_no_focus_delegate.html
│   ├── class_radio_panel-members.html
│   ├── class_radio_panel.html
│   ├── class_ranking_panel-members.html
│   ├── class_ranking_panel.html
│   ├── class_search_panel-members.html
│   ├── class_search_panel.html
│   ├── class_shared_dialog-members.html
│   ├── class_shared_dialog.html
│   ├── class_signal-members.html
│   ├── class_signal.html
│   ├── class_signal1-members.html
│   ├── class_signal1.html
│   ├── class_signal2-members.html
│   ├── class_signal2.html
│   ├── class_signal3-members.html
│   ├── class_signal3.html
│   ├── class_signal4-members.html
│   ├── class_signal4.html
│   ├── class_signal5-members.html
│   ├── class_signal5.html
│   ├── class_signal6-members.html
│   ├── class_signal6.html
│   ├── class_signal7-members.html
│   ├── class_signal7.html
│   ├── class_signal8-members.html
│   ├── class_signal8.html
│   ├── class_signal9-members.html
│   ├── class_signal9.html
│   ├── class_slot-members.html
│   ├── class_slot.html
│   ├── class_slot1-members.html
│   ├── class_slot1.html
│   ├── class_slot2-members.html
│   ├── class_slot2.html
│   ├── class_slot3-members.html
│   ├── class_slot3.html
│   ├── class_slot4-members.html
│   ├── class_slot4.html
│   ├── class_slot5-members.html
│   ├── class_slot5.html
│   ├── class_slot6-members.html
│   ├── class_slot6.html
│   ├── class_slot7-members.html
│   ├── class_slot7.html
│   ├── class_slot8-members.html
│   ├── class_slot8.html
│   ├── class_slot9-members.html
│   ├── class_slot9.html
│   ├── class_slot_base-members.html
│   ├── class_slot_base.html
│   ├── class_slot_base1-members.html
│   ├── class_slot_base1.html
│   ├── class_slot_base2-members.html
│   ├── class_slot_base2.html
│   ├── class_slot_base3-members.html
│   ├── class_slot_base3.html
│   ├── class_slot_base4-members.html
│   ├── class_slot_base4.html
│   ├── class_slot_base5-members.html
│   ├── class_slot_base5.html
│   ├── class_slot_base6-members.html
│   ├── class_slot_base6.html
│   ├── class_slot_base7-members.html
│   ├── class_slot_base7.html
│   ├── class_slot_base8-members.html
│   ├── class_slot_base8.html
│   ├── class_slot_base9-members.html
│   ├── class_slot_base9.html
│   ├── class_slot_impl-members.html
│   ├── class_slot_impl.html
│   ├── class_slot_impl1-members.html
│   ├── class_slot_impl1.html
│   ├── class_slot_impl2-members.html
│   ├── class_slot_impl2.html
│   ├── class_slot_impl3-members.html
│   ├── class_slot_impl3.html
│   ├── class_slot_impl4-members.html
│   ├── class_slot_impl4.html
│   ├── class_slot_impl5-members.html
│   ├── class_slot_impl5.html
│   ├── class_slot_impl6-members.html
│   ├── class_slot_impl6.html
│   ├── class_slot_impl7-members.html
│   ├── class_slot_impl7.html
│   ├── class_slot_impl8-members.html
│   ├── class_slot_impl8.html
│   ├── class_slot_impl9-members.html
│   ├── class_slot_impl9.html
│   ├── class_sound_control-members.html
│   ├── class_sound_control.html
│   ├── class_spectrograph-members.html
│   ├── class_spectrograph.html
│   ├── class_thanks_page-members.html
│   ├── class_thanks_page.html
│   ├── class_update_page-members.html
│   ├── class_update_page.html
│   ├── classes.html
│   ├── dir_0b6ee6e7e9547e675db4add2e5de97da.html
│   ├── dir_39ce8d35579d5eb10e41a1450265d156.html
│   ├── dir_4d857fb7e9085ae5b88ad2c12868c8c8.html
│   ├── dir_800159ee4c5072e219532c73d0742501.html
│   ├── dir_8f184a2117dd7a79280d84efd9c8507d.html
│   ├── dir_9ee117705b853058628419415d05a484.html
│   ├── dir_a625c670f828dfaff80322b07e1365a6.html
│   ├── dir_abd33bfc052dc4b28a34b6a77a4d5bc7.html
│   ├── dir_bbfe1637124d83753e4f60ab7a9ad152.html
│   ├── dir_c211989d999a6a303a2b08461c3c22b8.html
│   ├── dir_c6310732a22f63c0c2fc5595561e68f1.html
│   ├── dir_db9980dfd90e37473d4dfba3eb448642.html
│   ├── doxygen.css
│   ├── dynsections.js
│   ├── files.html
│   ├── functions.html
│   ├── functions_a.html
│   ├── functions_c.html
│   ├── functions_d.html
│   ├── functions_e.html
│   ├── functions_f.html
│   ├── functions_func.html
│   ├── functions_func_c.html
│   ├── functions_func_d.html
│   ├── functions_func_e.html
│   ├── functions_func_f.html
│   ├── functions_func_g.html
│   ├── functions_func_h.html
│   ├── functions_func_i.html
│   ├── functions_func_l.html
│   ├── functions_func_m.html
│   ├── functions_func_n.html
│   ├── functions_func_o.html
│   ├── functions_func_p.html
│   ├── functions_func_r.html
│   ├── functions_func_s.html
│   ├── functions_func_t.html
│   ├── functions_func_u.html
│   ├── functions_func_v.html
│   ├── functions_func_~.html
│   ├── functions_g.html
│   ├── functions_h.html
│   ├── functions_i.html
│   ├── functions_l.html
│   ├── functions_m.html
│   ├── functions_n.html
│   ├── functions_o.html
│   ├── functions_p.html
│   ├── functions_r.html
│   ├── functions_s.html
│   ├── functions_t.html
│   ├── functions_u.html
│   ├── functions_v.html
│   ├── functions_vars.html
│   ├── functions_~.html
│   ├── globals.html
│   ├── globals_defs.html
│   ├── globals_enum.html
│   ├── globals_eval.html
│   ├── globals_vars.html
│   ├── hierarchy.html
│   ├── index.html
│   ├── jquery.js
│   ├── main_8cpp.html
│   ├── search/
│   │   ├── all_0.html
│   │   ├── all_0.js
│   │   ├── all_1.html
│   │   ├── all_1.js
│   │   ├── all_10.html
│   │   ├── all_10.js
│   │   ├── all_11.html
│   │   ├── all_11.js
│   │   ├── all_12.html
│   │   ├── all_12.js
│   │   ├── all_13.html
│   │   ├── all_13.js
│   │   ├── all_14.html
│   │   ├── all_14.js
│   │   ├── all_15.html
│   │   ├── all_15.js
│   │   ├── all_16.html
│   │   ├── all_16.js
│   │   ├── all_17.html
│   │   ├── all_17.js
│   │   ├── all_2.html
│   │   ├── all_2.js
│   │   ├── all_3.html
│   │   ├── all_3.js
│   │   ├── all_4.html
│   │   ├── all_4.js
│   │   ├── all_5.html
│   │   ├── all_5.js
│   │   ├── all_6.html
│   │   ├── all_6.js
│   │   ├── all_7.html
│   │   ├── all_7.js
│   │   ├── all_8.html
│   │   ├── all_8.js
│   │   ├── all_9.html
│   │   ├── all_9.js
│   │   ├── all_a.html
│   │   ├── all_a.js
│   │   ├── all_b.html
│   │   ├── all_b.js
│   │   ├── all_c.html
│   │   ├── all_c.js
│   │   ├── all_d.html
│   │   ├── all_d.js
│   │   ├── all_e.html
│   │   ├── all_e.js
│   │   ├── all_f.html
│   │   ├── all_f.js
│   │   ├── classes_0.html
│   │   ├── classes_0.js
│   │   ├── classes_1.html
│   │   ├── classes_1.js
│   │   ├── classes_2.html
│   │   ├── classes_2.js
│   │   ├── classes_3.html
│   │   ├── classes_3.js
│   │   ├── classes_4.html
│   │   ├── classes_4.js
│   │   ├── classes_5.html
│   │   ├── classes_5.js
│   │   ├── classes_6.html
│   │   ├── classes_6.js
│   │   ├── classes_7.html
│   │   ├── classes_7.js
│   │   ├── classes_8.html
│   │   ├── classes_8.js
│   │   ├── classes_9.html
│   │   ├── classes_9.js
│   │   ├── classes_a.html
│   │   ├── classes_a.js
│   │   ├── classes_b.html
│   │   ├── classes_b.js
│   │   ├── classes_c.html
│   │   ├── classes_c.js
│   │   ├── classes_d.html
│   │   ├── classes_d.js
│   │   ├── classes_e.html
│   │   ├── classes_e.js
│   │   ├── classes_f.html
│   │   ├── classes_f.js
│   │   ├── defines_0.html
│   │   ├── defines_0.js
│   │   ├── defines_1.html
│   │   ├── defines_1.js
│   │   ├── defines_2.html
│   │   ├── defines_2.js
│   │   ├── defines_3.html
│   │   ├── defines_3.js
│   │   ├── defines_4.html
│   │   ├── defines_4.js
│   │   ├── defines_5.html
│   │   ├── defines_5.js
│   │   ├── defines_6.html
│   │   ├── defines_6.js
│   │   ├── defines_7.html
│   │   ├── defines_7.js
│   │   ├── defines_8.html
│   │   ├── defines_8.js
│   │   ├── defines_9.html
│   │   ├── defines_9.js
│   │   ├── defines_a.html
│   │   ├── defines_a.js
│   │   ├── defines_b.html
│   │   ├── defines_b.js
│   │   ├── defines_c.html
│   │   ├── defines_c.js
│   │   ├── enums_0.html
│   │   ├── enums_0.js
│   │   ├── enums_1.html
│   │   ├── enums_1.js
│   │   ├── enumvalues_0.html
│   │   ├── enumvalues_0.js
│   │   ├── enumvalues_1.html
│   │   ├── enumvalues_1.js
│   │   ├── files_0.html
│   │   ├── files_0.js
│   │   ├── files_1.html
│   │   ├── files_1.js
│   │   ├── files_2.html
│   │   ├── files_2.js
│   │   ├── files_3.html
│   │   ├── files_3.js
│   │   ├── files_4.html
│   │   ├── files_4.js
│   │   ├── files_5.html
│   │   ├── files_5.js
│   │   ├── files_6.html
│   │   ├── files_6.js
│   │   ├── files_7.html
│   │   ├── files_7.js
│   │   ├── files_8.html
│   │   ├── files_8.js
│   │   ├── files_9.html
│   │   ├── files_9.js
│   │   ├── files_a.html
│   │   ├── files_a.js
│   │   ├── files_b.html
│   │   ├── files_b.js
│   │   ├── files_c.html
│   │   ├── files_c.js
│   │   ├── functions_0.html
│   │   ├── functions_0.js
│   │   ├── functions_1.html
│   │   ├── functions_1.js
│   │   ├── functions_10.html
│   │   ├── functions_10.js
│   │   ├── functions_11.html
│   │   ├── functions_11.js
│   │   ├── functions_12.html
│   │   ├── functions_12.js
│   │   ├── functions_2.html
│   │   ├── functions_2.js
│   │   ├── functions_3.html
│   │   ├── functions_3.js
│   │   ├── functions_4.html
│   │   ├── functions_4.js
│   │   ├── functions_5.html
│   │   ├── functions_5.js
│   │   ├── functions_6.html
│   │   ├── functions_6.js
│   │   ├── functions_7.html
│   │   ├── functions_7.js
│   │   ├── functions_8.html
│   │   ├── functions_8.js
│   │   ├── functions_9.html
│   │   ├── functions_9.js
│   │   ├── functions_a.html
│   │   ├── functions_a.js
│   │   ├── functions_b.html
│   │   ├── functions_b.js
│   │   ├── functions_c.html
│   │   ├── functions_c.js
│   │   ├── functions_d.html
│   │   ├── functions_d.js
│   │   ├── functions_e.html
│   │   ├── functions_e.js
│   │   ├── functions_f.html
│   │   ├── functions_f.js
│   │   ├── nomatches.html
│   │   ├── search.css
│   │   ├── search.js
│   │   ├── variables_0.html
│   │   ├── variables_0.js
│   │   ├── variables_1.html
│   │   ├── variables_1.js
│   │   ├── variables_2.html
│   │   ├── variables_2.js
│   │   ├── variables_3.html
│   │   ├── variables_3.js
│   │   ├── variables_4.html
│   │   ├── variables_4.js
│   │   ├── variables_5.html
│   │   ├── variables_5.js
│   │   ├── variables_6.html
│   │   └── variables_6.js
│   ├── signal__slot_8h_source.html
│   ├── struct___a_c_m_wave_format-members.html
│   ├── struct___a_c_m_wave_format.html
│   ├── struct___d_v_i___a_d_p_c_m___e_n_c_o_d_e___s_t_a_t_e___s_t_e_r_e_o-members.html
│   ├── struct___d_v_i___a_d_p_c_m___e_n_c_o_d_e___s_t_a_t_e___s_t_e_r_e_o.html
│   ├── struct___d_v_i___a_d_p_c_m___i_n_f_o-members.html
│   ├── struct___d_v_i___a_d_p_c_m___i_n_f_o.html
│   ├── struct___d_v_i___a_d_p_c_m___s_t_a_t_e___s_t_e_r_e_o-members.html
│   ├── struct___d_v_i___a_d_p_c_m___s_t_a_t_e___s_t_e_r_e_o.html
│   ├── struct___d_v_i_a_d_p_c_m_block_header-members.html
│   ├── struct___d_v_i_a_d_p_c_m_block_header.html
│   ├── struct___d_v_i_a_d_p_c_m_header-members.html
│   ├── struct___d_v_i_a_d_p_c_m_header.html
│   ├── struct___i_d3_tag-members.html
│   ├── struct___i_d3_tag.html
│   ├── struct___i_d3v2_frame-members.html
│   ├── struct___i_d3v2_frame.html
│   ├── struct___i_d3v2_tag-members.html
│   ├── struct___i_d3v2_tag.html
│   ├── struct___m_s___a_d_p_c_m___c_o_e_f___s_e_t-members.html
│   ├── struct___m_s___a_d_p_c_m___c_o_e_f___s_e_t.html
│   ├── struct___m_s___a_d_p_c_m___i_n_f_o-members.html
│   ├── struct___m_s___a_d_p_c_m___i_n_f_o.html
│   ├── struct___m_s_a_d_p_c_m_block_header_mono-members.html
│   ├── struct___m_s_a_d_p_c_m_block_header_mono.html
│   ├── struct___m_s_a_d_p_c_m_block_header_stereo-members.html
│   ├── struct___m_s_a_d_p_c_m_block_header_stereo.html
│   ├── struct___riff_header-members.html
│   ├── struct___riff_header.html
│   ├── struct___w_m_a___s_y_n_c___r_e_a_d_e_r-members.html
│   ├── struct___w_m_a___s_y_n_c___r_e_a_d_e_r.html
│   ├── struct___w_m_a_format_spec-members.html
│   ├── struct___w_m_a_format_spec.html
│   ├── struct___wave_header-members.html
│   ├── struct___wave_header.html
│   ├── struct___wave_header_ex-members.html
│   ├── struct___wave_header_ex.html
│   ├── struct_d_s___audio_device_cache-members.html
│   ├── struct_d_s___audio_device_cache.html
│   ├── struct_d_s___info-members.html
│   ├── struct_d_s___info.html
│   ├── struct_d_s___refresh_cache_struct-members.html
│   ├── struct_d_s___refresh_cache_struct.html
│   ├── struct_w_a_v_e_f_o_r_m_a_t_e_x_t_e_n_s_i_b_l_e-members.html
│   ├── struct_w_a_v_e_f_o_r_m_a_t_e_x_t_e_n_s_i_b_l_e.html
│   ├── structdither-members.html
│   ├── structdither.html
│   ├── structtag___direct_audio_device_description-members.html
│   ├── structtag___direct_audio_device_description.html
│   ├── structxing-members.html
│   ├── structxing.html
│   └── tabs.css
├── doc.bat
└── main.cpp
Download .txt
SYMBOL INDEX (1108 symbols across 162 files)

FILE: 3rdParty/equalizer/eq.cpp
  function init_equliazer (line 30) | void   init_equliazer(int nBand)
  function uninit_equliazer (line 43) | void   uninit_equliazer()
  function set_eq_value (line 49) | void set_eq_value(float value, int index, int chn)
  function do_equliazer (line 66) | int do_equliazer(short * d, int length, int srate, int nch)

FILE: 3rdParty/equalizer/iir.h
  type sample_t (line 51) | typedef double sample_t;
  type sample_t (line 52) | typedef sample_t level_t;

FILE: 3rdParty/equalizer/iir_cfs.cpp
  function sIIRCoefficients (line 125) | sIIRCoefficients* get_coeffs(int *bands, int sfreq, bool use_xmms_origin...
  function find_f1_and_f2 (line 163) | static void find_f1_and_f2(double f0, double octave_percent, double *f1,...
  function find_root (line 172) | static int find_root(double a, double b, double c, double *x0) {
  function calc_coeffs (line 186) | void calc_coeffs()

FILE: 3rdParty/equalizer/iir_cfs.h
  type sIIRCoefficients (line 28) | typedef struct

FILE: 3rdParty/equalizer/iir_fpu.cpp
  function get_eq_band_count (line 62) | int    get_eq_band_count()
  function set_preamp (line 66) | void set_preamp(int chn, double val)
  function init_iir (line 72) | void init_iir(int nBand)
  function set_gain (line 90) | void set_gain(int index, int chn, double val, float rawValue)
  function get_eq_value (line 96) | float  get_eq_value(int index , int chn)
  function clean_history (line 101) | void clean_history()
  function iir (line 116) | int iir(short * d, int length, int srate, int nch)

FILE: 3rdParty/equalizer/iir_fpu.h
  type sXYData (line 31) | typedef struct

FILE: 3rdParty/libmad/include/bit.c
  function mad_bit_init (line 88) | void mad_bit_init(struct mad_bitptr *bitptr, unsigned char const *byte)
  function mad_bit_length (line 99) | unsigned int mad_bit_length(struct mad_bitptr const *begin,
  type mad_bitptr (line 110) | struct mad_bitptr
  function mad_bit_skip (line 119) | void mad_bit_skip(struct mad_bitptr *bitptr, unsigned int len)
  function mad_bit_read (line 137) | unsigned long mad_bit_read(struct mad_bitptr *bitptr, unsigned int len)
  function mad_bit_write (line 182) | void mad_bit_write(struct mad_bitptr *bitptr, unsigned int len,
  function mad_bit_crc (line 197) | unsigned short mad_bit_crc(struct mad_bitptr bitptr, unsigned int len,

FILE: 3rdParty/libmad/include/bit.h
  type mad_bitptr (line 25) | struct mad_bitptr {
  type mad_bitptr (line 31) | struct mad_bitptr
  type mad_bitptr (line 35) | struct mad_bitptr
  type mad_bitptr (line 36) | struct mad_bitptr
  type mad_bitptr (line 39) | struct mad_bitptr
  type mad_bitptr (line 41) | struct mad_bitptr
  type mad_bitptr (line 42) | struct mad_bitptr
  type mad_bitptr (line 43) | struct mad_bitptr
  type mad_bitptr (line 45) | struct mad_bitptr

FILE: 3rdParty/libmad/include/decoder.c
  function mad_decoder_init (line 59) | void mad_decoder_init(struct mad_decoder *decoder, void *data,
  function mad_decoder_finish (line 96) | int mad_decoder_finish(struct mad_decoder *decoder)
  function send_io (line 128) | static
  function receive_io (line 149) | static
  function receive_io_blocking (line 172) | static
  function send (line 197) | static
  function receive (line 214) | static
  function check_message (line 264) | static
  function error_default (line 295) | static
  function run_sync (line 315) | static
  function run_async (line 466) | static
  function mad_decoder_run (line 533) | int mad_decoder_run(struct mad_decoder *decoder, enum mad_decoder_mode m...
  function mad_decoder_message (line 569) | int mad_decoder_message(struct mad_decoder *decoder,

FILE: 3rdParty/libmad/include/decoder.h
  type mad_decoder_mode (line 29) | enum mad_decoder_mode {
  type mad_flow (line 34) | enum mad_flow {
  type mad_decoder (line 41) | struct mad_decoder {
  type mad_decoder (line 70) | struct mad_decoder
  type mad_flow (line 71) | enum mad_flow
  type mad_stream (line 71) | struct mad_stream
  type mad_flow (line 72) | enum mad_flow
  type mad_header (line 72) | struct mad_header
  type mad_flow (line 73) | enum mad_flow
  type mad_stream (line 74) | struct mad_stream
  type mad_frame (line 75) | struct mad_frame
  type mad_flow (line 76) | enum mad_flow
  type mad_header (line 77) | struct mad_header
  type mad_pcm (line 78) | struct mad_pcm
  type mad_flow (line 79) | enum mad_flow
  type mad_stream (line 80) | struct mad_stream
  type mad_frame (line 81) | struct mad_frame
  type mad_flow (line 82) | enum mad_flow
  type mad_decoder (line 83) | struct mad_decoder
  type mad_decoder (line 88) | struct mad_decoder
  type mad_decoder_mode (line 88) | enum mad_decoder_mode
  type mad_decoder (line 89) | struct mad_decoder

FILE: 3rdParty/libmad/include/fixed.c
  function mad_fixed_t (line 34) | mad_fixed_t mad_f_abs(mad_fixed_t x)
  function mad_fixed_t (line 43) | mad_fixed_t mad_f_div(mad_fixed_t x, mad_fixed_t y)

FILE: 3rdParty/libmad/include/fixed.h
  type mad_fixed_t (line 26) | typedef   signed int mad_fixed_t;
  type mad_fixed64hi_t (line 28) | typedef   signed int mad_fixed64hi_t;
  type mad_fixed64lo_t (line 29) | typedef unsigned int mad_fixed64lo_t;
  type mad_fixed_t (line 31) | typedef   signed long mad_fixed_t;
  type mad_fixed64hi_t (line 33) | typedef   signed long mad_fixed64hi_t;
  type mad_fixed64lo_t (line 34) | typedef unsigned long mad_fixed64lo_t;
  type mad_sample_t (line 44) | typedef double mad_sample_t;
  type mad_fixed_t (line 46) | typedef mad_fixed_t mad_sample_t;

FILE: 3rdParty/libmad/include/frame.c
  type mad_stream (line 58) | struct mad_stream
  type mad_frame (line 58) | struct mad_frame
  function mad_header_init (line 68) | void mad_header_init(struct mad_header *header)
  function mad_frame_init (line 91) | void mad_frame_init(struct mad_frame *frame)
  function mad_frame_finish (line 105) | void mad_frame_finish(struct mad_frame *frame)
  function decode_header (line 119) | static
  function free_bitrate (line 238) | static
  function mad_header_decode (line 300) | int mad_header_decode(struct mad_header *header, struct mad_stream *stream)
  function mad_frame_decode (line 438) | int mad_frame_decode(struct mad_frame *frame, struct mad_stream *stream)
  function mad_frame_mute (line 484) | void mad_frame_mute(struct mad_frame *frame)

FILE: 3rdParty/libmad/include/frame.h
  type mad_layer (line 29) | enum mad_layer {
  type mad_mode (line 35) | enum mad_mode {
  type mad_emphasis (line 42) | enum mad_emphasis {
  type mad_header (line 49) | struct mad_header {
  type mad_frame (line 67) | struct mad_frame {
  type mad_header (line 105) | struct mad_header
  type mad_header (line 109) | struct mad_header
  type mad_stream (line 109) | struct mad_stream
  type mad_frame (line 111) | struct mad_frame
  type mad_frame (line 112) | struct mad_frame
  type mad_frame (line 114) | struct mad_frame
  type mad_stream (line 114) | struct mad_stream
  type mad_frame (line 116) | struct mad_frame

FILE: 3rdParty/libmad/include/huffman.c
  type hufftable (line 3076) | struct hufftable

FILE: 3rdParty/libmad/include/huffman.h
  type hufftable (line 57) | struct hufftable {
  type hufftable (line 64) | struct hufftable

FILE: 3rdParty/libmad/include/layer12.c
  function mad_fixed_t (line 74) | static
  function mad_layer_I (line 104) | int mad_layer_I(struct mad_stream *stream, struct mad_frame *frame)
  type quantclass (line 266) | struct quantclass {
  function II_samples (line 280) | static
  function mad_layer_II (line 331) | int mad_layer_II(struct mad_stream *stream, struct mad_frame *frame)

FILE: 3rdParty/libmad/include/layer12.h
  type mad_stream (line 28) | struct mad_stream
  type mad_frame (line 28) | struct mad_frame
  type mad_stream (line 29) | struct mad_stream
  type mad_frame (line 29) | struct mad_frame

FILE: 3rdParty/libmad/include/layer3.c
  type sideinfo (line 62) | struct sideinfo {
  type fixedfloat (line 333) | struct fixedfloat {
  function III_sideinfo (line 507) | static
  function III_scalefactors_lsf (line 598) | static
  function III_scalefactors (line 713) | static
  function III_exponents (line 811) | static
  function mad_fixed_t (line 882) | static
  function III_huffdecode (line 932) | static
  function III_reorder (line 1280) | static
  function III_stereo (line 1327) | static
  function III_aliasreduce (line 1540) | static
  function fastsdct (line 1579) | static
  function sdctII (line 1647) | static inline
  function dctIV (line 1692) | static inline
  function imdct36 (line 1736) | static inline
  function imdct36 (line 1769) | static inline
  function III_imdct_l (line 2061) | static
  function III_imdct_s (line 2148) | static
  function III_overlap (line 2227) | static
  function III_overlap_z (line 2275) | static inline
  function III_freqinver (line 2315) | static
  function III_decode (line 2349) | static
  function mad_layer_III (line 2516) | int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)

FILE: 3rdParty/libmad/include/layer3.h
  type mad_stream (line 28) | struct mad_stream
  type mad_frame (line 28) | struct mad_frame

FILE: 3rdParty/libmad/include/mad.h
  type mad_fixed_t (line 71) | typedef   signed int mad_fixed_t;
  type mad_fixed64hi_t (line 73) | typedef   signed int mad_fixed64hi_t;
  type mad_fixed64lo_t (line 74) | typedef unsigned int mad_fixed64lo_t;
  type mad_fixed_t (line 76) | typedef   signed long mad_fixed_t;
  type mad_fixed64hi_t (line 78) | typedef   signed long mad_fixed64hi_t;
  type mad_fixed64lo_t (line 79) | typedef unsigned long mad_fixed64lo_t;
  type mad_sample_t (line 89) | typedef double mad_sample_t;
  type mad_fixed_t (line 91) | typedef mad_fixed_t mad_sample_t;
  type mad_bitptr (line 551) | struct mad_bitptr {
  type mad_bitptr (line 557) | struct mad_bitptr
  type mad_bitptr (line 561) | struct mad_bitptr
  type mad_bitptr (line 562) | struct mad_bitptr
  type mad_bitptr (line 565) | struct mad_bitptr
  type mad_bitptr (line 567) | struct mad_bitptr
  type mad_bitptr (line 568) | struct mad_bitptr
  type mad_bitptr (line 569) | struct mad_bitptr
  type mad_bitptr (line 571) | struct mad_bitptr
  type mad_timer_t (line 580) | typedef struct {
  type mad_units (line 589) | enum mad_units {
  type mad_units (line 650) | enum mad_units
  type mad_units (line 653) | enum mad_units
  type mad_units (line 653) | enum mad_units
  type mad_error (line 666) | enum mad_error {
  type mad_stream (line 697) | struct mad_stream {
  type mad_stream (line 730) | struct mad_stream
  type mad_stream (line 731) | struct mad_stream
  type mad_stream (line 736) | struct mad_stream
  type mad_stream (line 738) | struct mad_stream
  type mad_stream (line 740) | struct mad_stream
  type mad_stream (line 742) | struct mad_stream
  type mad_layer (line 752) | enum mad_layer {
  type mad_mode (line 758) | enum mad_mode {
  type mad_emphasis (line 765) | enum mad_emphasis {
  type mad_header (line 772) | struct mad_header {
  type mad_frame (line 790) | struct mad_frame {
  type mad_header (line 828) | struct mad_header
  type mad_header (line 832) | struct mad_header
  type mad_stream (line 832) | struct mad_stream
  type mad_frame (line 834) | struct mad_frame
  type mad_frame (line 835) | struct mad_frame
  type mad_frame (line 837) | struct mad_frame
  type mad_stream (line 837) | struct mad_stream
  type mad_frame (line 839) | struct mad_frame
  type mad_pcm (line 849) | struct mad_pcm {
  type mad_synth (line 856) | struct mad_synth {
  type mad_synth (line 882) | struct mad_synth
  type mad_synth (line 886) | struct mad_synth
  type mad_synth (line 888) | struct mad_synth
  type mad_frame (line 888) | struct mad_frame
  type mad_decoder_mode (line 898) | enum mad_decoder_mode {
  type mad_flow (line 903) | enum mad_flow {
  type mad_decoder (line 910) | struct mad_decoder {
  type mad_decoder (line 939) | struct mad_decoder
  type mad_flow (line 940) | enum mad_flow
  type mad_stream (line 940) | struct mad_stream
  type mad_flow (line 941) | enum mad_flow
  type mad_header (line 941) | struct mad_header
  type mad_flow (line 942) | enum mad_flow
  type mad_stream (line 943) | struct mad_stream
  type mad_frame (line 944) | struct mad_frame
  type mad_flow (line 945) | enum mad_flow
  type mad_header (line 946) | struct mad_header
  type mad_pcm (line 947) | struct mad_pcm
  type mad_flow (line 948) | enum mad_flow
  type mad_stream (line 949) | struct mad_stream
  type mad_frame (line 950) | struct mad_frame
  type mad_flow (line 951) | enum mad_flow
  type mad_decoder (line 952) | struct mad_decoder
  type mad_decoder (line 957) | struct mad_decoder
  type mad_decoder_mode (line 957) | enum mad_decoder_mode
  type mad_decoder (line 958) | struct mad_decoder

FILE: 3rdParty/libmad/include/stream.c
  function mad_stream_init (line 37) | void mad_stream_init(struct mad_stream *stream)
  function mad_stream_finish (line 64) | void mad_stream_finish(struct mad_stream *stream)
  function mad_stream_buffer (line 79) | void mad_stream_buffer(struct mad_stream *stream,
  function mad_stream_skip (line 97) | void mad_stream_skip(struct mad_stream *stream, unsigned long length)
  function mad_stream_sync (line 106) | int mad_stream_sync(struct mad_stream *stream)
  type mad_stream (line 129) | struct mad_stream

FILE: 3rdParty/libmad/include/stream.h
  type mad_error (line 30) | enum mad_error {
  type mad_stream (line 61) | struct mad_stream {
  type mad_stream (line 94) | struct mad_stream
  type mad_stream (line 95) | struct mad_stream
  type mad_stream (line 100) | struct mad_stream
  type mad_stream (line 102) | struct mad_stream
  type mad_stream (line 104) | struct mad_stream
  type mad_stream (line 106) | struct mad_stream

FILE: 3rdParty/libmad/include/synth.c
  function mad_synth_init (line 36) | void mad_synth_init(struct mad_synth *synth)
  function mad_synth_mute (line 51) | void mad_synth_mute(struct mad_synth *synth)
  function dct32 (line 122) | static
  type mad_synth (line 550) | struct mad_synth
  type mad_frame (line 550) | struct mad_frame
  function synth_full (line 557) | static
  function synth_half (line 694) | static
  function mad_synth_frame (line 832) | void mad_synth_frame(struct mad_synth *synth, struct mad_frame const *fr...

FILE: 3rdParty/libmad/include/synth.h
  type mad_pcm (line 28) | struct mad_pcm {
  type mad_synth (line 35) | struct mad_synth {
  type mad_synth (line 61) | struct mad_synth
  type mad_synth (line 65) | struct mad_synth
  type mad_synth (line 67) | struct mad_synth
  type mad_frame (line 67) | struct mad_frame

FILE: 3rdParty/libmad/include/timer.c
  function mad_timer_compare (line 42) | int mad_timer_compare(mad_timer_t timer1, mad_timer_t timer2)
  function mad_timer_negate (line 65) | void mad_timer_negate(mad_timer_t *timer)
  function mad_timer_t (line 79) | mad_timer_t mad_timer_abs(mad_timer_t timer)
  function reduce_timer (line 91) | static
  function gcd (line 102) | static
  function reduce_rational (line 120) | static
  function scale_rational (line 137) | static
  function mad_timer_set (line 158) | void mad_timer_set(mad_timer_t *timer, unsigned long seconds,
  function mad_timer_add (line 230) | void mad_timer_add(mad_timer_t *timer, mad_timer_t incr)
  function mad_timer_multiply (line 243) | void mad_timer_multiply(mad_timer_t *timer, signed long scalar)
  function mad_timer_count (line 270) | signed long mad_timer_count(mad_timer_t timer, enum mad_units units)
  function mad_timer_fraction (line 324) | unsigned long mad_timer_fraction(mad_timer_t timer, unsigned long denom)
  function mad_timer_string (line 345) | void mad_timer_string(mad_timer_t timer,

FILE: 3rdParty/libmad/include/timer.h
  type mad_timer_t (line 25) | typedef struct {
  type mad_units (line 34) | enum mad_units {
  type mad_units (line 95) | enum mad_units
  type mad_units (line 98) | enum mad_units
  type mad_units (line 98) | enum mad_units

FILE: 3rdParty/libogg/include/ogg.h
  type oggpack_buffer (line 27) | typedef struct {
  type ogg_page (line 38) | typedef struct {
  type ogg_stream_state (line 48) | typedef struct {
  type ogg_packet (line 85) | typedef struct {
  type ogg_sync_state (line 100) | typedef struct {

FILE: 3rdParty/libogg/include/os_types.h
  type _G_int64_t (line 31) | typedef _G_int64_t ogg_int64_t;
  type _G_int32_t (line 32) | typedef _G_int32_t ogg_int32_t;
  type _G_uint32_t (line 33) | typedef _G_uint32_t ogg_uint32_t;
  type _G_int16_t (line 34) | typedef _G_int16_t ogg_int16_t;
  type _G_uint16_t (line 35) | typedef _G_uint16_t ogg_uint16_t;
  type ogg_int16_t (line 37) | typedef short ogg_int16_t;
  type ogg_uint16_t (line 38) | typedef unsigned short ogg_uint16_t;
  type ogg_int32_t (line 39) | typedef int ogg_int32_t;
  type ogg_uint32_t (line 40) | typedef unsigned int ogg_uint32_t;
  type ogg_int64_t (line 41) | typedef long long ogg_int64_t;
  type ogg_uint64_t (line 42) | typedef unsigned long long ogg_uint64_t;
  type ogg_int64_t (line 44) | typedef long long ogg_int64_t;
  type ogg_int32_t (line 45) | typedef int ogg_int32_t;
  type ogg_uint32_t (line 46) | typedef unsigned int ogg_uint32_t;
  type ogg_int16_t (line 47) | typedef short ogg_int16_t;
  type ogg_uint16_t (line 48) | typedef unsigned short ogg_uint16_t;
  type __int64 (line 51) | typedef __int64 ogg_int64_t;
  type __int32 (line 52) | typedef __int32 ogg_int32_t;
  type ogg_uint32_t (line 53) | typedef unsigned __int32 ogg_uint32_t;
  type __int16 (line 54) | typedef __int16 ogg_int16_t;
  type ogg_uint16_t (line 55) | typedef unsigned __int16 ogg_uint16_t;
  type SInt16 (line 61) | typedef SInt16 ogg_int16_t;
  type UInt16 (line 62) | typedef UInt16 ogg_uint16_t;
  type SInt32 (line 63) | typedef SInt32 ogg_int32_t;
  type UInt32 (line 64) | typedef UInt32 ogg_uint32_t;
  type SInt64 (line 65) | typedef SInt64 ogg_int64_t;
  type ogg_int16_t (line 70) | typedef int16_t ogg_int16_t;
  type u_int16_t (line 71) | typedef u_int16_t ogg_uint16_t;
  type ogg_int32_t (line 72) | typedef int32_t ogg_int32_t;
  type u_int32_t (line 73) | typedef u_int32_t ogg_uint32_t;
  type ogg_int64_t (line 74) | typedef int64_t ogg_int64_t;
  type ogg_int16_t (line 80) | typedef int16_t ogg_int16_t;
  type u_int16_t (line 81) | typedef u_int16_t ogg_uint16_t;
  type ogg_int32_t (line 82) | typedef int32_t ogg_int32_t;
  type u_int32_t (line 83) | typedef u_int32_t ogg_uint32_t;
  type ogg_int64_t (line 84) | typedef int64_t ogg_int64_t;
  type ogg_int16_t (line 89) | typedef short ogg_int16_t;
  type ogg_uint16_t (line 90) | typedef unsigned short ogg_uint16_t;
  type ogg_int32_t (line 91) | typedef int ogg_int32_t;
  type ogg_uint32_t (line 92) | typedef unsigned int ogg_uint32_t;
  type ogg_int64_t (line 93) | typedef long long ogg_int64_t;
  type ogg_int16_t (line 98) | typedef short ogg_int16_t;
  type ogg_int32_t (line 99) | typedef int ogg_int32_t;
  type ogg_uint32_t (line 100) | typedef unsigned int ogg_uint32_t;
  type ogg_int64_t (line 101) | typedef long long ogg_int64_t;
  type ogg_int64_t (line 106) | typedef long ogg_int64_t;
  type ogg_int32_t (line 107) | typedef int ogg_int32_t;
  type ogg_uint32_t (line 108) | typedef unsigned ogg_uint32_t;
  type ogg_int16_t (line 109) | typedef short ogg_int16_t;
  type ogg_int16_t (line 114) | typedef signed short ogg_int16_t;
  type ogg_uint16_t (line 115) | typedef unsigned short ogg_uint16_t;
  type ogg_int32_t (line 116) | typedef signed int ogg_int32_t;
  type ogg_uint32_t (line 117) | typedef unsigned int ogg_uint32_t;
  type ogg_int64_t (line 118) | typedef long long int ogg_int64_t;

FILE: 3rdParty/libvorbis/include/analysis.c
  function vorbis_analysis (line 32) | int vorbis_analysis(vorbis_block *vb, ogg_packet *op){
  function _analysis_output_always (line 69) | void _analysis_output_always(char *base,int i,float *v,int n,int bark,in...
  function _analysis_output (line 105) | void _analysis_output(char *base,int i,float *v,int n,int bark,int dB,

FILE: 3rdParty/libvorbis/include/backends.h
  type vorbis_func_floor (line 30) | typedef struct{
  type vorbis_info_floor0 (line 41) | typedef struct{
  type vorbis_info_floor1 (line 61) | typedef struct{
  type vorbis_func_residue (line 88) | typedef struct{
  type vorbis_info_residue0 (line 104) | typedef struct vorbis_info_residue0{
  type vorbis_func_mapping (line 122) | typedef struct{
  type vorbis_info_mapping0 (line 131) | typedef struct vorbis_info_mapping0{

FILE: 3rdParty/libvorbis/include/bitrate.c
  function vorbis_bitrate_init (line 29) | void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bm){
  function vorbis_bitrate_clear (line 59) | void vorbis_bitrate_clear(bitrate_manager_state *bm){
  function vorbis_bitrate_managed (line 64) | int vorbis_bitrate_managed(vorbis_block *vb){
  function vorbis_bitrate_addblock (line 74) | int vorbis_bitrate_addblock(vorbis_block *vb){
  function vorbis_bitrate_flushpacket (line 230) | int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,ogg_packet *op){

FILE: 3rdParty/libvorbis/include/bitrate.h
  type bitrate_manager_state (line 26) | typedef struct bitrate_manager_state {
  type bitrate_manager_info (line 42) | typedef struct bitrate_manager_info{

FILE: 3rdParty/libvorbis/include/block.c
  function ilog2 (line 34) | static int ilog2(unsigned int v){
  function vorbis_block_init (line 88) | int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb){
  type alloc_chain (line 118) | struct alloc_chain
  function _vorbis_block_ripcord (line 137) | void _vorbis_block_ripcord(vorbis_block *vb){
  function vorbis_block_clear (line 159) | int vorbis_block_clear(vorbis_block *vb){
  function _vds_shared_init (line 181) | static int _vds_shared_init(vorbis_dsp_state *v,vorbis_info *vi,int encp){
  function vorbis_analysis_init (line 283) | int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi){
  function vorbis_dsp_clear (line 303) | void vorbis_dsp_clear(vorbis_dsp_state *v){
  function _preextrapolate_helper (line 404) | static void _preextrapolate_helper(vorbis_dsp_state *v){
  function vorbis_analysis_wrote (line 437) | int vorbis_analysis_wrote(vorbis_dsp_state *v, int vals){
  function vorbis_analysis_blockout (line 501) | int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb){
  function vorbis_synthesis_restart (line 662) | int vorbis_synthesis_restart(vorbis_dsp_state *v){
  function vorbis_synthesis_init (line 685) | int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi){
  function vorbis_synthesis_blockin (line 696) | int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){
  function vorbis_synthesis_pcmout (line 883) | int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm){
  function vorbis_synthesis_read (line 898) | int vorbis_synthesis_read(vorbis_dsp_state *v,int n){
  function vorbis_synthesis_lapout (line 909) | int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm){

FILE: 3rdParty/libvorbis/include/codebook.c
  function vorbis_staticbook_pack (line 30) | int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *opb){
  function vorbis_staticbook_unpack (line 149) | int vorbis_staticbook_unpack(oggpack_buffer *opb,static_codebook *s){
  function vorbis_book_encode (line 257) | int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b){
  function vorbis_book_errorv (line 278) | int vorbis_book_errorv(codebook *book,float *a){
  function vorbis_book_encodev (line 287) | int vorbis_book_encodev(codebook *book,int best,float *a,oggpack_buffer ...
  function ogg_uint32_t (line 302) | static ogg_uint32_t bitreverse(ogg_uint32_t x){
  function decode_packed_entry_number (line 310) | STIN long decode_packed_entry_number(codebook *book, oggpack_buffer *b){
  function vorbis_book_decode (line 372) | long vorbis_book_decode(codebook *book, oggpack_buffer *b){
  function vorbis_book_decodevs_add (line 384) | long vorbis_book_decodevs_add(codebook *book,float *a,oggpack_buffer *b,...
  function vorbis_book_decodev_add (line 403) | long vorbis_book_decodev_add(codebook *book,float *a,oggpack_buffer *b,i...
  function vorbis_book_decodev_set (line 448) | long vorbis_book_decodev_set(codebook *book,float *a,oggpack_buffer *b,i...
  function vorbis_book_decodevv_add (line 471) | long vorbis_book_decodevv_add(codebook *book,float **a,long offset,int ch,
  function main (line 569) | int main(){

FILE: 3rdParty/libvorbis/include/codebook.h
  type static_codebook (line 36) | typedef struct static_codebook{
  type encode_aux_nearestmatch (line 66) | typedef struct encode_aux_nearestmatch{
  type encode_aux_threshmatch (line 78) | typedef struct encode_aux_threshmatch{
  type encode_aux_pigeonhole (line 85) | typedef struct encode_aux_pigeonhole{
  type codebook (line 99) | typedef struct codebook{

FILE: 3rdParty/libvorbis/include/codec.h
  type vorbis_info (line 29) | typedef struct vorbis_info{
  type vorbis_dsp_state (line 60) | typedef struct vorbis_dsp_state{
  type vorbis_block (line 89) | typedef struct vorbis_block{
  type alloc_chain (line 128) | struct alloc_chain{
  type vorbis_comment (line 141) | typedef struct vorbis_comment{

FILE: 3rdParty/libvorbis/include/codec_internal.h
  type vorbis_block_internal (line 31) | typedef struct vorbis_block_internal{
  type vorbis_look_floor (line 42) | typedef void vorbis_look_floor;
  type vorbis_look_residue (line 43) | typedef void vorbis_look_residue;
  type vorbis_look_transform (line 44) | typedef void vorbis_look_transform;
  type vorbis_info_mode (line 47) | typedef struct {
  type vorbis_info_floor (line 54) | typedef void vorbis_info_floor;
  type vorbis_info_residue (line 55) | typedef void vorbis_info_residue;
  type vorbis_info_mapping (line 56) | typedef void vorbis_info_mapping;
  type private_state (line 61) | typedef struct private_state {
  type codec_setup_info (line 94) | typedef struct codec_setup_info {

FILE: 3rdParty/libvorbis/include/envelope.c
  function _ve_envelope_init (line 32) | void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi){
  function _ve_envelope_clear (line 76) | void _ve_envelope_clear(envelope_lookup *e){
  function _ve_amp (line 90) | static int _ve_amp(envelope_lookup *ve,
  function _ve_envelope_search (line 217) | long _ve_envelope_search(vorbis_dsp_state *v){
  function _ve_envelope_mark (line 331) | int _ve_envelope_mark(vorbis_dsp_state *v){
  function _ve_envelope_shift (line 357) | void _ve_envelope_shift(envelope_lookup *e,long shift){

FILE: 3rdParty/libvorbis/include/envelope.h
  type envelope_filter_state (line 34) | typedef struct {
  type envelope_band (line 45) | typedef struct {
  type envelope_lookup (line 52) | typedef struct {

FILE: 3rdParty/libvorbis/include/floor0.c
  type vorbis_look_floor0 (line 35) | typedef struct {
  function floor0_free_info (line 50) | static void floor0_free_info(vorbis_info_floor *i){
  function floor0_free_look (line 58) | static void floor0_free_look(vorbis_look_floor *i){
  function vorbis_info_floor (line 74) | static vorbis_info_floor *floor0_unpack (vorbis_info *vi,oggpack_buffer ...
  function floor0_map_lazy_init (line 110) | static void floor0_map_lazy_init(vorbis_block      *vb,
  function vorbis_look_floor (line 144) | static vorbis_look_floor *floor0_look(vorbis_dsp_state *vd,
  function floor0_inverse2 (line 193) | static int floor0_inverse2(vorbis_block *vb,vorbis_look_floor *i,

FILE: 3rdParty/libvorbis/include/floor1.c
  type vorbis_look_floor1 (line 33) | typedef struct {
  type lsfit_acc (line 51) | typedef struct lsfit_acc{
  function floor1_free_info (line 65) | static void floor1_free_info(vorbis_info_floor *i){
  function floor1_free_look (line 73) | static void floor1_free_look(vorbis_look_floor *i){
  function ilog (line 86) | static int ilog(unsigned int v){
  function ilog2 (line 95) | static int ilog2(unsigned int v){
  function floor1_pack (line 105) | static void floor1_pack (vorbis_info_floor *i,oggpack_buffer *opb){
  function vorbis_info_floor (line 142) | static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer ...
  function icomp (line 192) | static int icomp(const void *a,const void *b){
  function vorbis_look_floor (line 196) | static vorbis_look_floor *floor1_look(vorbis_dsp_state *vd,
  function render_point (line 271) | static int render_point(int x0,int x1,int y0,int y1,int x){
  function vorbis_dBquant (line 287) | static int vorbis_dBquant(const float *x){
  function render_line (line 361) | static void render_line(int n, int x0,int x1,int y0,int y1,float *d){
  function render_line0 (line 390) | static void render_line0(int x0,int x1,int y0,int y1,int *d){
  function accumulate_fit (line 416) | static int accumulate_fit(const float *flr,const float *mdct,
  function fit_line (line 472) | static void fit_line(lsfit_acc *a,int fits,int *y0,int *y1){
  function inspect_error (line 538) | static int inspect_error(int x0,int x1,int y0,int y1,const float *mask,
  function post_Y (line 589) | static int post_Y(int *A,int *B,int pos){
  function floor1_encode (line 764) | int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
  function floor1_inverse2 (line 1052) | static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *...

FILE: 3rdParty/libvorbis/include/highlevel.h
  type highlevel_byblocktype (line 18) | typedef struct highlevel_byblocktype {
  type highlevel_encode_setup (line 25) | typedef struct highlevel_encode_setup {

FILE: 3rdParty/libvorbis/include/info.c
  function ilog2 (line 35) | static int ilog2(unsigned int v){
  function _v_writestring (line 45) | static void _v_writestring(oggpack_buffer *o,char *s, int bytes){
  function _v_readstring (line 52) | static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){
  function vorbis_comment_init (line 58) | void vorbis_comment_init(vorbis_comment *vc){
  function vorbis_comment_add (line 62) | void vorbis_comment_add(vorbis_comment *vc,char *comment){
  function vorbis_comment_add_tag (line 74) | void vorbis_comment_add_tag(vorbis_comment *vc, char *tag, char *contents){
  function tagcompare (line 84) | static int tagcompare(const char *s1, const char *s2, int n){
  function vorbis_comment_query_count (line 115) | int vorbis_comment_query_count(vorbis_comment *vc, char *tag){
  function vorbis_comment_clear (line 130) | void vorbis_comment_clear(vorbis_comment *vc){
  function vorbis_info_blocksize (line 144) | int vorbis_info_blocksize(vorbis_info *vi,int zo){
  function vorbis_info_init (line 150) | void vorbis_info_init(vorbis_info *vi){
  function vorbis_info_clear (line 155) | void vorbis_info_clear(vorbis_info *vi){
  function _vorbis_unpack_info (line 204) | static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
  function _vorbis_unpack_comment (line 235) | static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
  function _vorbis_unpack_books (line 263) | static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){
  function vorbis_synthesis_idheader (line 342) | int vorbis_synthesis_idheader(ogg_packet *op){
  function vorbis_synthesis_headerin (line 371) | int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_pac...
  function _vorbis_pack_info (line 429) | static int _vorbis_pack_info(oggpack_buffer *opb,vorbis_info *vi){
  function _vorbis_pack_comment (line 453) | static int _vorbis_pack_comment(oggpack_buffer *opb,vorbis_comment *vc){
  function _vorbis_pack_books (line 484) | static int _vorbis_pack_books(oggpack_buffer *opb,vorbis_info *vi){
  function vorbis_commentheader_out (line 540) | int vorbis_commentheader_out(vorbis_comment *vc,
  function vorbis_analysis_headerout (line 560) | int vorbis_analysis_headerout(vorbis_dsp_state *v,
  function vorbis_granule_time (line 640) | double vorbis_granule_time(vorbis_dsp_state *v,ogg_int64_t granulepos){

FILE: 3rdParty/libvorbis/include/lookup.c
  function vorbis_coslook (line 27) | float vorbis_coslook(float a){
  function vorbis_invsqlook (line 35) | float vorbis_invsqlook(float a){
  function vorbis_invsq2explook (line 42) | float vorbis_invsq2explook(int a){
  function vorbis_fromdBlook (line 48) | float vorbis_fromdBlook(float a){
  function vorbis_invsqlook_i (line 62) | long vorbis_invsqlook_i(long a,long e){
  function vorbis_fromdBlook_i (line 78) | float vorbis_fromdBlook_i(long a){
  function vorbis_coslook_i (line 87) | long vorbis_coslook_i(long a){

FILE: 3rdParty/libvorbis/include/lpc.c
  function vorbis_lpc_from_data (line 61) | float vorbis_lpc_from_data(float *data,float *lpci,int n,int m){
  function vorbis_lpc_predict (line 117) | void vorbis_lpc_predict(float *coeff,float *prime,int m,

FILE: 3rdParty/libvorbis/include/lsp.c
  function vorbis_lsp_to_curve (line 64) | void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,i...
  function vorbis_lsp_to_curve (line 139) | void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,i...
  function vorbis_lsp_to_curve (line 247) | void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,i...
  function cheby (line 285) | static void cheby(float *g, int ord) {
  function comp (line 297) | static int comp(const void *a,const void *b){
  function Laguerre_With_Deflation (line 309) | static int Laguerre_With_Deflation(float *a,int ord,float *r){
  function Newton_Raphson (line 365) | static int Newton_Raphson(float *a,int ord,float *r){
  function vorbis_lpc_to_lsp (line 404) | int vorbis_lpc_to_lsp(float *lpc,float *lsp,int m){

FILE: 3rdParty/libvorbis/include/mapping0.c
  function mapping0_free_info (line 40) | static void mapping0_free_info(vorbis_info_mapping *i){
  function ilog (line 48) | static int ilog(unsigned int v){
  function mapping0_pack (line 58) | static void mapping0_pack(vorbis_info *vi,vorbis_info_mapping *vm,
  function vorbis_info_mapping (line 102) | static vorbis_info_mapping *mapping0_unpack(vorbis_info *vi,oggpack_buff...
  function mapping0_inverse (line 732) | static int mapping0_inverse(vorbis_block *vb,vorbis_info_mapping *l){

FILE: 3rdParty/libvorbis/include/mdct.c
  function mdct_init (line 52) | void mdct_init(mdct_lookup *lookup,int n){
  function STIN (line 94) | STIN void mdct_butterfly_8(DATA_TYPE *x){
  function STIN (line 118) | STIN void mdct_butterfly_16(DATA_TYPE *x){
  function STIN (line 153) | STIN void mdct_butterfly_32(DATA_TYPE *x){
  function STIN (line 217) | STIN void mdct_butterfly_first(DATA_TYPE *T,
  function STIN (line 264) | STIN void mdct_butterfly_generic(DATA_TYPE *T,
  function STIN (line 317) | STIN void mdct_butterflies(mdct_lookup *init,
  function mdct_clear (line 339) | void mdct_clear(mdct_lookup *l){
  function STIN (line 347) | STIN void mdct_bitreverse(mdct_lookup *init,
  function mdct_backward (line 397) | void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out){
  function mdct_forward (line 493) | void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out){

FILE: 3rdParty/libvorbis/include/mdct.h
  type mdct_lookup (line 56) | typedef struct {

FILE: 3rdParty/libvorbis/include/os.h
  type ogg_int16_t (line 91) | typedef ogg_int16_t vorbis_fpu_control;
  function vorbis_fpu_setround (line 93) | static inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
  function vorbis_fpu_restore (line 104) | static inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
  function vorbis_ftoi (line 109) | static inline int vorbis_ftoi(double f){  /* yes, double!  Otherwise,
  type ogg_int16_t (line 122) | typedef ogg_int16_t vorbis_fpu_control;
  function vorbis_ftoi (line 124) | static __inline int vorbis_ftoi(double f){
  function vorbis_fpu_setround (line 133) | static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
  function vorbis_fpu_restore (line 136) | static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
  type vorbis_fpu_control (line 144) | typedef int vorbis_fpu_control;
  function vorbis_ftoi (line 146) | static int vorbis_ftoi(double f){

FILE: 3rdParty/libvorbis/include/psy.c
  function vorbis_look_psy_global (line 36) | vorbis_look_psy_global *_vp_global_look(vorbis_info *vi){
  function _vp_global_free (line 48) | void _vp_global_free(vorbis_look_psy_global *look){
  function _vi_gpsy_free (line 55) | void _vi_gpsy_free(vorbis_info_psy_global *i){
  function _vi_psy_free (line 62) | void _vi_psy_free(vorbis_info_psy *i){
  function min_curve (line 69) | static void min_curve(float *c,
  function max_curve (line 74) | static void max_curve(float *c,
  function attenuate_curve (line 80) | static void attenuate_curve(float *c,float att){
  function _vp_psy_init (line 267) | void _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi,
  function _vp_psy_clear (line 357) | void _vp_psy_clear(vorbis_look_psy *p){
  function seed_curve (line 383) | static void seed_curve(float *seed,
  function seed_loop (line 410) | static void seed_loop(vorbis_look_psy *p,
  function seed_chase (line 447) | static void seed_chase(float *seeds, int linesper, long n){
  function max_seeds (line 505) | static void max_seeds(vorbis_look_psy *p,
  function bark_noise_hybridmp (line 540) | static void bark_noise_hybridmp(int n,const long *b,
  function _vp_remove_floor (line 762) | void _vp_remove_floor(vorbis_look_psy *p,
  function _vp_noisemask (line 781) | void _vp_noisemask(vorbis_look_psy *p,
  function _vp_tonemask (line 829) | void _vp_tonemask(vorbis_look_psy *p,
  function _vp_offset_and_mix (line 854) | void _vp_offset_and_mix(vorbis_look_psy *p,
  function _vp_ampmax_decay (line 912) | float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd){
  function couple_lossless (line 925) | static void couple_lossless(float A, float B,
  function precomputed_couple_point (line 955) | static void precomputed_couple_point(float premag,
  function dipole_hypot (line 975) | static float dipole_hypot(float a, float b){
  function round_hypot (line 985) | static float round_hypot(float a, float b){
  function apsort (line 1021) | static int apsort(const void *a, const void *b){
  function _vp_noise_normalize_sort (line 1053) | void _vp_noise_normalize_sort(vorbis_look_psy *p,
  function _vp_noise_normalize (line 1071) | void _vp_noise_normalize(vorbis_look_psy *p,
  function _vp_couple (line 1117) | void _vp_couple(int blobno,
  function hf_reduction (line 1213) | void hf_reduction(vorbis_info_psy_global *g,

FILE: 3rdParty/libvorbis/include/psy.h
  type vorbis_info_psy (line 36) | typedef struct vorbis_info_psy{
  type vorbis_info_psy_global (line 67) | typedef struct{
  type vorbis_look_psy_global (line 87) | typedef struct {
  type vorbis_look_psy (line 96) | typedef struct {

FILE: 3rdParty/libvorbis/include/psytune.c
  function analysis (line 199) | void analysis(char *base,int i,float *v,int n,int bark,int dB){
  function main (line 231) | int main(int argc,char *argv[]){

FILE: 3rdParty/libvorbis/include/res0.c
  type vorbis_look_residue0 (line 38) | typedef struct {
  function res0_free_info (line 65) | void res0_free_info(vorbis_info_residue *i){
  function res0_free_look (line 73) | void res0_free_look(vorbis_look_residue *i){
  function ilog (line 151) | static int ilog(unsigned int v){
  function icount (line 160) | static int icount(unsigned int v){
  function res0_pack (line 170) | void res0_pack(vorbis_info_residue *vr,oggpack_buffer *opb){
  function vorbis_info_residue (line 200) | vorbis_info_residue *res0_unpack(vorbis_info *vi,oggpack_buffer *opb){
  function vorbis_look_residue (line 232) | vorbis_look_residue *res0_look(vorbis_dsp_state *vd,
  function local_book_besterror (line 290) | static int local_book_besterror(codebook *book,float *a){
  function _encodepart (line 348) | static int _encodepart(oggpack_buffer *opb,float *vec, int n,
  function _01forward (line 493) | static int _01forward(oggpack_buffer *opb,
  function _01inverse (line 611) | static int _01inverse(vorbis_block *vb,vorbis_look_residue *vl,
  function res0_forward (line 688) | int res0_forward(vorbis_block *vb,vorbis_look_residue *vl,
  function res0_inverse (line 719) | int res0_inverse(vorbis_block *vb,vorbis_look_residue *vl,
  function res1_forward (line 731) | int res1_forward(oggpack_buffer *opb,vorbis_block *vb,vorbis_look_residu...
  function res1_inverse (line 772) | int res1_inverse(vorbis_block *vb,vorbis_look_residue *vl,
  function res2_forward (line 798) | int res2_forward(oggpack_buffer *opb,
  function res2_inverse (line 834) | int res2_inverse(vorbis_block *vb,vorbis_look_residue *vl,

FILE: 3rdParty/libvorbis/include/scales.h
  function unitnorm (line 28) | static float unitnorm(float x){
  function todB (line 39) | static float todB(const float *x){
  function unitnorm (line 53) | static float unitnorm(float x){

FILE: 3rdParty/libvorbis/include/sharedbook.c
  function _ilog (line 29) | int _ilog(unsigned int v){
  function _float32_pack (line 47) | long _float32_pack(float val){
  function _float32_unpack (line 62) | float _float32_unpack(long val){
  function ogg_uint32_t (line 73) | ogg_uint32_t *_make_words(long *l,long n,long sparsecount){
  function _book_maptype1_quantvals (line 150) | long _book_maptype1_quantvals(const static_codebook *b){
  function vorbis_staticbook_clear (line 248) | void vorbis_staticbook_clear(static_codebook *b){
  function vorbis_staticbook_destroy (line 271) | void vorbis_staticbook_destroy(static_codebook *b){
  function vorbis_book_clear (line 278) | void vorbis_book_clear(codebook *b){
  function vorbis_book_init_encode (line 291) | int vorbis_book_init_encode(codebook *c,const static_codebook *s){
  function ogg_uint32_t (line 304) | static ogg_uint32_t bitreverse(ogg_uint32_t x){
  function sort32a (line 312) | static int sort32a(const void *a,const void *b){
  function vorbis_book_init_decode (line 318) | int vorbis_book_init_decode(codebook *c,const static_codebook *s){
  function _dist (line 435) | static float _dist(int el,float *ref, float *b,int step){
  function _best (line 445) | int _best(codebook *book, float *a, int step){
  function vorbis_book_codeword (line 586) | long vorbis_book_codeword(codebook *book,int entry){
  function vorbis_book_codelen (line 593) | long vorbis_book_codelen(codebook *book,int entry){
  function run_test (line 692) | void run_test(static_codebook *b,float *comp){
  function main (line 718) | int main(){

FILE: 3rdParty/libvorbis/include/smallft.c
  function drfti1 (line 38) | static void drfti1(int n, float *wa, int *ifac){
  function fdrffti (line 108) | static void fdrffti(int n, float *wsave, int *ifac){
  function dradf2 (line 114) | static void dradf2(int ido,int l1,float *cc,float *ch,float *wa1){
  function dradf4 (line 169) | static void dradf4(int ido,int l1,float *cc,float *ch,float *wa1,
  function dradfg (line 271) | static void dradfg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
  function drftf1 (line 573) | static void drftf1(int n,float *c,float *ch,float *wa,int *ifac){
  function dradb2 (line 634) | static void dradb2(int ido,int l1,float *cc,float *ch,float *wa1){
  function dradb3 (line 686) | static void dradb3(int ido,int l1,float *cc,float *ch,float *wa1,
  function dradb4 (line 749) | static void dradb4(int ido,int l1,float *cc,float *ch,float *wa1,
  function dradbg (line 840) | static void dradbg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
  function drftb1 (line 1154) | static void drftb1(int n, float *c, float *ch, float *wa, int *ifac){
  function drft_forward (line 1232) | void drft_forward(drft_lookup *l,float *data){
  function drft_backward (line 1237) | void drft_backward(drft_lookup *l,float *data){
  function drft_init (line 1242) | void drft_init(drft_lookup *l,int n){
  function drft_clear (line 1249) | void drft_clear(drft_lookup *l){

FILE: 3rdParty/libvorbis/include/smallft.h
  type drft_lookup (line 23) | typedef struct {

FILE: 3rdParty/libvorbis/include/synthesis.c
  function vorbis_synthesis (line 26) | int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){
  function vorbis_synthesis_trackonly (line 82) | int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op){
  function vorbis_packet_blocksize (line 127) | long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){
  function vorbis_synthesis_halfrate (line 155) | int vorbis_synthesis_halfrate(vorbis_info *vi,int flag){
  function vorbis_synthesis_halfrate_p (line 165) | int vorbis_synthesis_halfrate_p(vorbis_info *vi){

FILE: 3rdParty/libvorbis/include/tone.c
  function usage (line 6) | void usage(){
  function main (line 11) | int main (int argc,char *argv[]){

FILE: 3rdParty/libvorbis/include/vorbisenc.c
  type static_bookblock (line 34) | typedef struct {
  type vorbis_residue_template (line 38) | typedef struct {
  type vorbis_mapping_template (line 48) | typedef struct {
  type vp_adjblock (line 53) | typedef struct vp_adjblock{
  type compandblock (line 57) | typedef struct {
  type att3 (line 68) | typedef struct {
  type adj3 (line 73) | typedef struct { int data[P_NOISECURVES]; } adj3;
  type adj_stereo (line 75) | typedef struct {
  type noiseguard (line 82) | typedef struct {
  type noise3 (line 87) | typedef struct {
  type ve_setup_data_template (line 91) | typedef struct {
  function vorbis_encode_toplevel_setup (line 187) | static int vorbis_encode_toplevel_setup(vorbis_info *vi,int ch,long rate){
  function vorbis_encode_floor_setup (line 199) | static void vorbis_encode_floor_setup(vorbis_info *vi,double s,int block,
  function vorbis_encode_global_psych_setup (line 239) | static void vorbis_encode_global_psych_setup(vorbis_info *vi,double s,
  function vorbis_encode_global_stereo (line 266) | static void vorbis_encode_global_stereo(vorbis_info *vi,
  function vorbis_encode_psyset_setup (line 315) | static void vorbis_encode_psyset_setup(vorbis_info *vi,double s,
  function vorbis_encode_tonemask_setup (line 346) | static void vorbis_encode_tonemask_setup(vorbis_info *vi,double s,int bl...
  function vorbis_encode_compand_setup (line 371) | static void vorbis_encode_compand_setup(vorbis_info *vi,double s,int block,
  function vorbis_encode_peak_setup (line 392) | static void vorbis_encode_peak_setup(vorbis_info *vi,double s,int block,
  function vorbis_encode_noisebias_setup (line 404) | static void vorbis_encode_noisebias_setup(vorbis_info *vi,double s,int b...
  function vorbis_encode_ath_setup (line 436) | static void vorbis_encode_ath_setup(vorbis_info *vi,int block){
  function book_dup_or_new (line 446) | static int book_dup_or_new(codec_setup_info *ci,static_codebook *book){
  function vorbis_encode_blocksize_setup (line 454) | static void vorbis_encode_blocksize_setup(vorbis_info *vi,double s,
  function vorbis_encode_residue_setup (line 467) | static void vorbis_encode_residue_setup(vorbis_info *vi,
  function vorbis_encode_map_n_res_setup (line 578) | static void vorbis_encode_map_n_res_setup(vorbis_info *vi,double s,
  function setting_to_approx_bitrate (line 607) | static double setting_to_approx_bitrate(vorbis_info *vi){
  function get_setup_template (line 622) | static void get_setup_template(vorbis_info *vi,
  function vorbis_encode_setup_init (line 673) | int vorbis_encode_setup_init(vorbis_info *vi){
  function vorbis_encode_setup_setting (line 857) | static int vorbis_encode_setup_setting(vorbis_info *vi,
  function vorbis_encode_setup_vbr (line 902) | int vorbis_encode_setup_vbr(vorbis_info *vi,
  function vorbis_encode_init_vbr (line 918) | int vorbis_encode_init_vbr(vorbis_info *vi,
  function vorbis_encode_setup_managed (line 938) | int vorbis_encode_setup_managed(vorbis_info *vi,
  function vorbis_encode_init (line 988) | int vorbis_encode_init(vorbis_info *vi,
  function vorbis_encode_ctl (line 1011) | int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg){

FILE: 3rdParty/libvorbis/include/vorbisenc.h
  type ovectl_ratemanage_arg (line 68) | struct ovectl_ratemanage_arg {
  type ovectl_ratemanage2_arg (line 86) | struct ovectl_ratemanage2_arg {

FILE: 3rdParty/libvorbis/include/vorbisfile.c
  function _get_data (line 63) | static long _get_data(OggVorbis_File *vf){
  function _seek_helper (line 77) | static int _seek_helper(OggVorbis_File *vf,ogg_int64_t offset){
  function ogg_int64_t (line 104) | static ogg_int64_t _get_next_page(OggVorbis_File *vf,ogg_page *og,
  function ogg_int64_t (line 142) | static ogg_int64_t _get_prev_page(OggVorbis_File *vf,ogg_page *og){
  function _add_serialno (line 179) | static void _add_serialno(ogg_page *og,long **serialno_list, int *n){
  function _lookup_serialno (line 193) | static int _lookup_serialno(ogg_page *og, long *serialno_list, int n){
  function _get_serialnos (line 207) | static int _get_serialnos(OggVorbis_File *vf, long **s, int *n){
  function _bisect_forward_serialno (line 235) | static int _bisect_forward_serialno(OggVorbis_File *vf,
  function _fetch_headers (line 298) | static int _fetch_headers(OggVorbis_File *vf,vorbis_info *vi,vorbis_comm...
  function _prefetch_all_headers (line 413) | static void _prefetch_all_headers(OggVorbis_File *vf, ogg_int64_t dataof...
  function _make_decode_ready (line 529) | static int _make_decode_ready(OggVorbis_File *vf){
  function _open_seekable2 (line 546) | static int _open_seekable2(OggVorbis_File *vf){
  function _decode_clear (line 587) | static void _decode_clear(OggVorbis_File *vf){
  function _fetch_and_process_packet (line 604) | static int _fetch_and_process_packet(OggVorbis_File *vf,
  function _fseek64_wrap (line 798) | static int _fseek64_wrap(FILE *f,ogg_int64_t off,int whence){
  function _ov_open1 (line 803) | static int _ov_open1(void *f,OggVorbis_File *vf,char *initial,
  function _ov_open2 (line 844) | static int _ov_open2(OggVorbis_File *vf){
  function ov_clear (line 862) | int ov_clear(OggVorbis_File *vf){
  function ov_open_callbacks (line 900) | int ov_open_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes,
  function ov_open (line 907) | int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){
  function ov_fopen (line 918) | int ov_fopen(char *path,OggVorbis_File *vf){
  function ov_halfrate (line 932) | int ov_halfrate(OggVorbis_File *vf,int flag){
  function ov_halfrate_p (line 952) | int ov_halfrate_p(OggVorbis_File *vf){
  function ov_test_callbacks (line 962) | int ov_test_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes,
  function ov_test (line 968) | int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){
  function ov_test_open (line 979) | int ov_test_open(OggVorbis_File *vf){
  function ov_streams (line 985) | long ov_streams(OggVorbis_File *vf){
  function ov_seekable (line 990) | long ov_seekable(OggVorbis_File *vf){
  function ov_bitrate (line 1003) | long ov_bitrate(OggVorbis_File *vf,int i){
  function ov_bitrate_instant (line 1045) | long ov_bitrate_instant(OggVorbis_File *vf){
  function ov_serialnumber (line 1057) | long ov_serialnumber(OggVorbis_File *vf,int i){
  function ogg_int64_t (line 1072) | ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i){
  function ogg_int64_t (line 1091) | ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i){
  function ov_time_total (line 1110) | double ov_time_total(OggVorbis_File *vf,int i){
  function ov_raw_seek (line 1131) | int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
  function ov_pcm_seek_page (line 1288) | int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
  function ov_pcm_seek (line 1471) | int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos){
  function ov_time_seek (line 1566) | int ov_time_seek(OggVorbis_File *vf,double seconds){
  function ov_time_seek_page (line 1596) | int ov_time_seek_page(OggVorbis_File *vf,double seconds){
  function ogg_int64_t (line 1626) | ogg_int64_t ov_raw_tell(OggVorbis_File *vf){
  function ogg_int64_t (line 1632) | ogg_int64_t ov_pcm_tell(OggVorbis_File *vf){
  function ov_time_tell (line 1638) | double ov_time_tell(OggVorbis_File *vf){
  function vorbis_info (line 1667) | vorbis_info *ov_info(OggVorbis_File *vf,int link){
  function vorbis_comment (line 1685) | vorbis_comment *ov_comment(OggVorbis_File *vf,int link){
  function host_is_big_endian (line 1702) | static int host_is_big_endian() {
  function ov_read (line 1740) | long ov_read(OggVorbis_File *vf,char *buffer,int length,
  function ov_read_float (line 1885) | long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int length,
  function _ov_splice (line 1919) | static void _ov_splice(float **pcm,float **lappcm,
  function _ov_initset (line 1955) | static int _ov_initset(OggVorbis_File *vf){
  function _ov_initprime (line 1970) | static int _ov_initprime(OggVorbis_File *vf){
  function _ov_getlap (line 1988) | static void _ov_getlap(OggVorbis_File *vf,vorbis_info *vi,vorbis_dsp_sta...
  function ov_crosslap (line 2028) | int ov_crosslap(OggVorbis_File *vf1, OggVorbis_File *vf2){
  function _ov_64_seek_lap (line 2078) | static int _ov_64_seek_lap(OggVorbis_File *vf,ogg_int64_t pos,
  function ov_raw_seek_lap (line 2127) | int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos){
  function ov_pcm_seek_lap (line 2131) | int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos){
  function ov_pcm_seek_page_lap (line 2135) | int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos){
  function _ov_d_seek_lap (line 2139) | static int _ov_d_seek_lap(OggVorbis_File *vf,double pos,
  function ov_time_seek_lap (line 2188) | int ov_time_seek_lap(OggVorbis_File *vf,double pos){
  function ov_time_seek_page_lap (line 2192) | int ov_time_seek_page_lap(OggVorbis_File *vf,double pos){

FILE: 3rdParty/libvorbis/include/vorbisfile.h
  type ov_callbacks (line 39) | typedef struct {
  function _ov_header_fseek_wrap (line 51) | static int _ov_header_fseek_wrap(FILE *f,ogg_int64_t off,int whence){
  type OggVorbis_File (line 90) | typedef struct OggVorbis_File {

FILE: 3rdParty/libvorbis/include/window.c
  function _vorbis_apply_window (line 2102) | void _vorbis_apply_window(float *d,int *winno,long *blocksizes,

FILE: 3rdParty/qdeviceWatcher/include/qdevicechangeevent.h
  type Action (line 31) | enum Action { Add, Remove, Change}
  function Type (line 38) | static Type registeredType()

FILE: 3rdParty/qdeviceWatcher/include/qdevicewatcher_linux.cpp
  type udev_monitor_netlink_group (line 54) | enum udev_monitor_netlink_group {
  type sockaddr_nl (line 173) | struct sockaddr_nl
  type sockaddr_nl (line 177) | struct sockaddr_nl
  type sockaddr (line 191) | struct sockaddr
  type sockaddr_nl (line 191) | struct sockaddr_nl
  type sockaddr_nl (line 199) | struct sockaddr_nl
  type sockaddr_nl (line 206) | struct sockaddr_nl
  type sockaddr (line 207) | struct sockaddr
  function foreach (line 261) | foreach(QObject* obj, event_receivers) {

FILE: 3rdParty/qdeviceWatcher/include/qdevicewatcher_p.h
  function setWatcher (line 75) | void setWatcher(QDeviceWatcher *w) {watcher=w;}

FILE: 3rdParty/qdeviceWatcher/include/qdevicewatcher_win32.cpp
  function QStringList (line 54) | static inline QStringList drivesFromMask(quint32 driveBits) //driveBits ...
  function UpdateDevice (line 79) | void static UpdateDevice(PDEV_BROADCAST_DEVICEINTERFACE pDevInf, WPARAM ...
  function LRESULT (line 173) | LRESULT CALLBACK dw_internal_proc(HWND hwnd, UINT message, WPARAM wParam...
  function QString (line 282) | static inline QString className()
  function HWND (line 287) | static inline HWND dw_create_internal_window(const void* userData)
  function else (line 330) | else if (userData) {
  function dw_destroy_internal_window (line 341) | static inline void dw_destroy_internal_window(HWND hwnd)

FILE: 3rdParty/qdeviceWatcher/include/qdevicewatcher_wince.cpp
  function foreach (line 124) | foreach(QObject* obj, event_receivers) {

FILE: 3rdParty/qtsingleapplication/qtlocalpeer.cpp
  type QtLP_Private (line 57) | namespace QtLP_Private {
  type timespec (line 151) | struct timespec

FILE: 3rdParty/qtsingleapplication/qtlocalpeer.h
  function class (line 50) | class QtLocalPeer : public QObject

FILE: 3rdParty/qtsingleapplication/qtlockedfile.h
  function namespace (line 65) | namespace QtLP_Private {

FILE: 3rdParty/qtsingleapplication/qtlockedfile_unix.cpp
  type flock (line 64) | struct flock
  type flock (line 94) | struct flock

FILE: 3rdParty/qtsingleapplication/qtlockedfile_win.cpp
  function foreach (line 193) | foreach(Qt::HANDLE mutex, rmutexes) {

FILE: 3rdParty/qtsingleapplication/qtsingleapplication.cpp
  function QString (line 268) | QString QtSingleApplication::id() const
  function QWidget (line 302) | QWidget* QtSingleApplication::activationWindow() const

FILE: 3rdParty/qtsingleapplication/qtsinglecoreapplication.cpp
  function QString (line 136) | QString QtSingleCoreApplication::id() const

FILE: 3rdParty/qtsingleapplication/qtsinglecoreapplication.h
  function class (line 48) | class QtSingleCoreApplication : public QCoreApplication

FILE: 3rdParty/qxtglobalshortcut/qxtglobal.h
  function QXT_setPublic (line 156) | inline void QXT_setPublic(PUB* pub)
  function setPublic (line 189) | inline void setPublic(PUB* pub)
  function PVT (line 193) | inline PVT& operator()()

FILE: 3rdParty/qxtglobalshortcut/qxtglobalshortcut.cpp
  function QKeySequence (line 165) | QKeySequence QxtGlobalShortcut::shortcut() const

FILE: 3rdParty/qxtglobalshortcut/qxtglobalshortcut.h
  function class (line 33) | class QxtGlobalShortcut : public QObject

FILE: 3rdParty/qxtglobalshortcut/qxtglobalshortcut_mac.cpp
  function OSStatus (line 38) | OSStatus qxt_mac_handle_hot_key(EventHandlerCallRef nextHandler, EventRe...
  function quint32 (line 73) | quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers ...
  function quint32 (line 89) | quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key)

FILE: 3rdParty/qxtglobalshortcut/qxtglobalshortcut_win.cpp
  function quint32 (line 55) | quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers ...
  function quint32 (line 73) | quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key)

FILE: 3rdParty/qxtglobalshortcut/qxtglobalshortcut_x11.cpp
  function qxt_x_errhandler (line 31) | static int qxt_x_errhandler(Display* display, XErrorEvent *event)
  function quint32 (line 78) | quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers ...
  function quint32 (line 95) | quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key)

FILE: AboutPanel/AboutPage.h
  function class (line 51) | class AboutPage : public QWidget

FILE: AboutPanel/AboutPanel.h
  function class (line 56) | class AboutPanel : public QDialog

FILE: AboutPanel/AuthorPage.h
  function class (line 51) | class AuthorPage : public QWidget

FILE: AboutPanel/ThanksPage.h
  function class (line 51) | class ThanksPage: public QWidget

FILE: ConfigPanel/ConfigDialog.h
  function class (line 60) | class ConfigDialog : public QDialog

FILE: ConfigPanel/DownloadSettingsPage.h
  function class (line 54) | class DownloadSettingsPage : public QWidget

FILE: ConfigPanel/EditHotkeyDialog.h
  function class (line 54) | class EditHotkeyDialog : public QDialog

FILE: ConfigPanel/GeneralSettingsPage.h
  function class (line 51) | class GeneralSettingsPage : public QWidget

FILE: ConfigPanel/GlobalConfig.cpp
  type PlayModeType (line 207) | enum PlayModeType
  type PlayModeType (line 212) | enum PlayModeType
  function GlobalConfig (line 234) | GlobalConfig* GlobalConfig::instance()
  function foreach (line 336) | foreach (QFileInfo fileInfo, fileInfoList)
  type PlayModeType (line 609) | enum PlayModeType
  function QString (line 874) | QString GlobalConfig::musicPath() const
  function QString (line 879) | QString GlobalConfig::albumPath() const
  function QString (line 884) | QString GlobalConfig::lrcPath() const
  function QString (line 999) | QString GlobalConfig::settingsHotKey() const
  function QString (line 1004) | QString GlobalConfig::minToTrayHotKey() const
  function QString (line 1009) | QString GlobalConfig::openMinWidgetHotKey() const
  function QString (line 1014) | QString GlobalConfig::openMusicFileHotKey() const
  function QString (line 1019) | QString GlobalConfig::openMediaWidgetHotKey() const
  function QString (line 1024) | QString GlobalConfig::openListWidgetHotKey() const
  function QString (line 1029) | QString GlobalConfig::openLrcHotKey() const
  function QString (line 1034) | QString GlobalConfig::pauseHotKey() const
  function QString (line 1039) | QString GlobalConfig::lastHotKey() const
  function QString (line 1044) | QString GlobalConfig::nextHotKey() const
  function QString (line 1170) | QString GlobalConfig::fontName() const
  function QString (line 1175) | QString GlobalConfig::fontSize() const
  function QString (line 1180) | QString GlobalConfig::fontType() const
  function QColor (line 1185) | QColor GlobalConfig::noPlayShang() const
  function QColor (line 1190) | QColor GlobalConfig::noPlayZhong() const
  function QColor (line 1195) | QColor GlobalConfig::noPlayXia() const
  function QColor (line 1200) | QColor GlobalConfig::playedShang() const
  function QColor (line 1205) | QColor GlobalConfig::playedZhong() const
  function QColor (line 1210) | QColor GlobalConfig::playedXia() const
  function QString (line 1215) | QString GlobalConfig::defaultChoiceColor() const
  type PlayModeType (line 1251) | enum PlayModeType
  type PlayModeType (line 1276) | enum PlayModeType

FILE: ConfigPanel/GlobalConfig.h
  type PlayModeType (line 130) | enum PlayModeType
  type PlayModeType (line 477) | enum PlayModeType
  type PlayModeType (line 492) | enum PlayModeType
  type PlayModeType (line 666) | enum PlayModeType
  type PlayModeType (line 774) | enum PlayModeType

FILE: ConfigPanel/HotkeysSettingsPage.h
  function class (line 55) | class HotKeysSettingsPage : public QWidget

FILE: ConfigPanel/HotkeysTableWidget.h
  function class (line 49) | class HotKeysTableWidget : public QTableWidget

FILE: ConfigPanel/LrcDemo.h
  function class (line 55) | class LrcDemo : public QLabel

FILE: ConfigPanel/LrcSettingsPage.h
  function class (line 61) | class LrcSettingsPage : public QWidget

FILE: ConfigPanel/UpdatePage.h
  function class (line 52) | class UpdatePage : public QWidget

FILE: Core/AutoStart.h
  function class (line 49) | class AutoStart

FILE: Core/AutoStartHandle.h
  function class (line 49) | class AutoStartHandle : public QObject

FILE: Core/ChineseToLetter.h
  function string (line 58) | static string getLetter(const string &strText)
  function string (line 117) | static string findLetter(const int &nCode)

FILE: Core/FileRelation.h
  function class (line 50) | class FileRelation

FILE: Core/FileRelationHandle.h
  function class (line 49) | class FileRelationHandle : public QObject

FILE: Core/GlobalHotkey.h
  function class (line 52) | class GlobalHotKey : public QObject

FILE: Core/NoFocusDelegate.h
  function class (line 8) | class NoFocusDelegate : public QStyledItemDelegate

FILE: Core/StatusDefine.h
  type AlbumDownloadStatus (line 46) | enum AlbumDownloadStatus
  type LrcDownloadStatus (line 53) | enum LrcDownloadStatus
  type MusicSearchStatus (line 60) | enum MusicSearchStatus
  type MusicDownloadStatus (line 67) | enum MusicDownloadStatus

FILE: Core/TR.h
  function QString (line 53) | inline static QString TR(const char *chars)
  function QString (line 63) | inline static QString TR(const QByteArray &chars)

FILE: Core/signal_slot.h
  function class (line 19) | class SlotBase
  function exec (line 39) | void exec()
  function class (line 52) | class Slot
  function class (line 78) | class Signal
  function exec (line 132) | void exec(T1 t1)
  function exec (line 160) | void exec(T1 t1)
  function exec (line 227) | void exec(T1 t1, T2 t2)
  function exec (line 255) | void exec(T1 t1, T2 t2)
  function exec (line 322) | void exec(T1 t1, T2 t2, T3 t3)
  function exec (line 350) | void exec(T1 t1, T2 t2, T3 t3)
  function exec (line 417) | void exec(T1 t1, T2 t2, T3 t3, T4 t4)
  function exec (line 445) | void exec(T1 t1, T2 t2, T3 t3, T4 t4)
  function exec (line 512) | void exec(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
  function exec (line 540) | void exec(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
  function exec (line 607) | void exec(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
  function exec (line 635) | void exec(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6)
  function exec (line 702) | void exec(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
  function exec (line 730) | void exec(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7)
  function exec (line 797) | void exec(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
  function exec (line 825) | void exec(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8)
  function exec (line 892) | void exec(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)
  function exec (line 920) | void exec(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9)

FILE: DB/DBModule.h
  function class (line 53) | class DBModule

FILE: Engine/AudioStream.cpp
  function HRESULT (line 14) | HRESULT STDMETHODCALLTYPE CAudioStream::QueryInterface(const IID &riid, ...
  function ULONG (line 27) | ULONG STDMETHODCALLTYPE CAudioStream::AddRef()
  function ULONG (line 32) | ULONG STDMETHODCALLTYPE CAudioStream::Release()
  function HRESULT (line 43) | HRESULT STDMETHODCALLTYPE CAudioStream::Read(void *pv, ULONG cb, ULONG *...
  function HRESULT (line 50) | HRESULT STDMETHODCALLTYPE CAudioStream::Write(const void *pv, ULONG cb, ...
  function HRESULT (line 57) | HRESULT STDMETHODCALLTYPE CAudioStream::Seek(LARGE_INTEGER dlibMove, DWO...
  function HRESULT (line 63) | HRESULT STDMETHODCALLTYPE CAudioStream::SetSize(ULARGE_INTEGER libNewSize)
  function HRESULT (line 69) | HRESULT STDMETHODCALLTYPE CAudioStream::CopyTo(IStream *pstm, ULARGE_INT...
  function HRESULT (line 74) | HRESULT STDMETHODCALLTYPE CAudioStream::Commit(DWORD grfCommitFlags)
  function HRESULT (line 79) | HRESULT STDMETHODCALLTYPE CAudioStream::Revert(void)
  function HRESULT (line 84) | HRESULT STDMETHODCALLTYPE CAudioStream::LockRegion(ULARGE_INTEGER libOff...
  function HRESULT (line 89) | HRESULT STDMETHODCALLTYPE CAudioStream::UnlockRegion(ULARGE_INTEGER libO...
  function HRESULT (line 94) | HRESULT STDMETHODCALLTYPE CAudioStream::Stat(STATSTG *pstatstg, DWORD gr...
  function HRESULT (line 112) | HRESULT STDMETHODCALLTYPE CAudioStream::Clone(IStream **ppstm)

FILE: Engine/AudioStream.h
  type WMA_SYNC_READER (line 16) | typedef struct _WMA_SYNC_READER
  type WMAFormatSpec (line 34) | typedef struct _WMAFormatSpec
  function class (line 41) | class CAudioStream : public IStream

FILE: Engine/BasicPlayer.cpp
  function set_low (line 77) | inline void set_low(jlong* value, jint low)
  function set_high (line 83) | inline void set_high(jlong* value, jint high)
  function jlong (line 89) | jlong as_long(LARGE_INTEGER x)
  function jlong (line 836) | jlong CBasicPlayer::GetLongFramePosition()
  function CFileInput (line 843) | CFileInput* CBasicPlayer::GetInput()

FILE: Engine/BasicPlayer.h
  type __int64 (line 69) | typedef __int64				jlong;
  type juint (line 70) | typedef unsigned int		juint;
  type julong (line 71) | typedef unsigned __int64	julong;
  type jint (line 72) | typedef long				jint;
  type jbyte (line 73) | typedef signed char			jbyte;
  function class (line 83) | class CSystem
  function class (line 116) | class CPlayThread : public CThread
  function class (line 139) | class CSpectrumAnalyserThread : public CThread
  function class (line 167) | class CSpectrumAnalyser
  function class (line 231) | class CBasicPlayer

FILE: Engine/CriticalSection.h
  function class (line 9) | class CCriticalSection

FILE: Engine/FastFourierTransform.h
  function class (line 14) | class CFastFourierTransform

FILE: Engine/IO.cpp
  function DWORD (line 36) | DWORD CInput::GetTotalTime()
  function LARGE_INTEGER (line 41) | LARGE_INTEGER CInput::GetTotalSamples()
  function LARGE_INTEGER (line 50) | LARGE_INTEGER CInput::GetSize()
  function LARGE_INTEGER (line 55) | LARGE_INTEGER CInput::GetPosition()
  function DWORD (line 88) | DWORD CInput::CopyData(void* buffer, DWORD size)
  function DWORD (line 99) | DWORD CInput::FillBuffer(void* buffer, DWORD size, bool *eof)
  function WORD (line 313) | WORD CFileInput::GetBitsPerSample()
  function DWORD (line 319) | DWORD CFileInput::GetSampleRate()
  function WORD (line 325) | WORD CFileInput::GetChannels()
  function LARGE_INTEGER (line 376) | LARGE_INTEGER CFileInput::GetTotalSamples()
  function DWORD (line 449) | DWORD CFileInput::GetTotalTime()
  function SHORT (line 531) | SHORT CWmaInput::CNToShortInt()
  function DWORD (line 555) | DWORD CWmaInput::GetBitrate()
  function DWORD (line 561) | DWORD CWmaInput::GetFormatsCount()
  function Compare4 (line 1701) | bool Compare4(CHAR* S1, CHAR* S2)
  function ConvertIEEEFloatTo32 (line 1715) | void ConvertIEEEFloatTo32(int* InOutBuf, int InSize)
  function ConvertShortIEEEFloatTo32 (line 1727) | void ConvertShortIEEEFloatTo32(int* InOutBuf, int InSize)
  function parse_xing (line 2012) | int parse_xing(struct xing *xing, struct mad_bitptr ptr, unsigned int bi...
  function scan_header (line 2082) | int scan_header(CStream* pInStream, struct mad_header *header, struct xi...
  function prng (line 2169) | __inline unsigned long prng(unsigned long state)
  function dither (line 2178) | __inline signed int dither(mad_fixed_t sample, struct dither *dither)
  function pack_pcm (line 2234) | void pack_pcm(unsigned char **pcm, unsigned int nsamples,
  function vorbisRead (line 2433) | size_t vorbisRead(void *buffer, size_t size, size_t amount, void *file)
  function vorbisSeek (line 2440) | int vorbisSeek(void *file, ogg_int64_t newpos, int set)
  function vorbisClose (line 2449) | int vorbisClose(void *file)
  function vorbisTell (line 2454) | long vorbisTell(void *file)

FILE: Engine/IO.h
  function class (line 22) | class CInput
  function class (line 68) | class CStreamedInput : public CInput
  function class (line 96) | class CFileInput : public CStreamedInput
  type ChannelsNumber (line 142) | typedef enum _ChannelsNumber
  function class (line 152) | class CWmaInput : public CFileInput
  type WaveType (line 204) | typedef enum _WaveType
  type WaveHeader (line 217) | typedef struct _WaveHeader
  type WaveHeaderEx (line 234) | typedef struct _WaveHeaderEx
  type DVIADPCMHeader (line 246) | typedef struct _DVIADPCMHeader
  type DVI_ADPCM_INFO (line 268) | typedef struct _DVI_ADPCM_INFO
  type DVI_ADPCM_STATE_STEREO (line 275) | typedef struct _DVI_ADPCM_STATE_STEREO
  type DVI_ADPCM_ENCODE_STATE_STEREO (line 283) | typedef struct _DVI_ADPCM_ENCODE_STATE_STEREO
  type MS_ADPCM_COEF_SET (line 291) | typedef struct _MS_ADPCM_COEF_SET
  type MS_ADPCM_INFO (line 297) | typedef struct _MS_ADPCM_INFO
  type MSADPCMBlockHeaderMono (line 306) | typedef struct _MSADPCMBlockHeaderMono
  type MSADPCMBlockHeaderStereo (line 314) | typedef struct _MSADPCMBlockHeaderStereo
  type DVIADPCMBlockHeader (line 322) | typedef struct _DVIADPCMBlockHeader
  function class (line 332) | class CWaveInput : public CFileInput
  type xing (line 383) | struct xing
  type dither (line 402) | struct dither
  type ID3Tag (line 408) | typedef struct _ID3Tag
  type ID3v2Tag (line 419) | typedef struct _ID3v2Tag
  type ID3v2Frame (line 427) | typedef struct _ID3v2Frame
  type xing (line 434) | struct xing
  type mad_bitptr (line 434) | struct mad_bitptr
  type mad_header (line 435) | struct mad_header
  type xing (line 435) | struct xing
  function class (line 438) | class CMp3Input : public CFileInput
  function class (line 475) | class CVorbisInput : public CFileInput

FILE: Engine/SoundControl.h
  function class (line 47) | class SoundControl

FILE: Engine/Stream.cpp
  function INT64 (line 12) | INT64 CStream::GetSize()
  function INT64 (line 40) | INT64 CStream::GetPosition()
  function DWORD (line 58) | DWORD CHandleStream::Read(void* buf, DWORD size)
  function DWORD (line 67) | DWORD CHandleStream::Write(void *buf, DWORD size)
  function DWORD (line 76) | DWORD CHandleStream::Seek(int offset, WORD origin)
  function DWORD (line 98) | DWORD CCustomMemoryStream::Read(void *buf, DWORD size)
  function DWORD (line 118) | DWORD CCustomMemoryStream::Seek(int offset, WORD origin)
  function DWORD (line 252) | DWORD CMemoryStream::Write(void *buf, DWORD size)

FILE: Engine/Stream.h
  function class (line 15) | class CStream
  function class (line 37) | class CHandleStream : public CStream
  function class (line 60) | class CCustomMemoryStream : public CStream
  function class (line 84) | class CMemoryStream : public CCustomMemoryStream
  type FILE_MODE (line 108) | typedef enum _FILE_MODE
  function class (line 113) | class CFileStream : public CHandleStream
  type RiffHeader (line 123) | typedef struct _RiffHeader
  type ACMWaveFormat (line 129) | typedef struct _ACMWaveFormat
  function class (line 138) | class CWaveConverter : public CMemoryStream

FILE: Engine/Thread.h
  function class (line 7) | class CThread
  function Resume (line 48) | void Resume()
  function Suspend (line 58) | void Suspend()
  function Suspended (line 68) | bool Suspended()
  function Stop (line 74) | void Stop()
  function wait (line 84) | void wait()

FILE: Engine/Utils.cpp
  function DS_lockCache (line 23) | bool DS_lockCache() {
  function DS_unlockCache (line 28) | void DS_unlockCache() {
  function isEqualGUID (line 34) | bool isEqualGUID(LPGUID lpGuid1, LPGUID lpGuid2)
  function findCacheItemByGUID (line 56) | signed int findCacheItemByGUID(LPGUID lpGuid, bool isSource)
  function findCacheItemByMixerIndex (line 71) | signed int findCacheItemByMixerIndex(signed int mixerIndex)
  function DS_RefreshCacheEnum (line 85) | bool CALLBACK DS_RefreshCacheEnum(LPGUID lpGuid, LPCSTR lpstrDescription,
  function DAUDIO_GetDirectAudioDeviceCount (line 130) | signed int DAUDIO_GetDirectAudioDeviceCount()
  function DS_GetDescEnum (line 191) | bool CALLBACK DS_GetDescEnum(LPGUID lpGuid, LPCTSTR lpstrDescription,
  function DAUDIO_GetDirectAudioDeviceDescription (line 208) | signed int DAUDIO_GetDirectAudioDeviceDescription(signed int mixerIndex,...
  function DAUDIO_GetFormats (line 249) | void DAUDIO_GetFormats(signed int mixerIndex, signed int deviceID, int i...
  function LPSTR (line 286) | LPSTR TranslateDSError(HRESULT hr) {
  class DS_StartBufferHelper (line 352) | class DS_StartBufferHelper {
    method isInitialized (line 357) | static inline bool isInitialized() { return data.threadHandle != NULL; }
    method DS_StartBufferHelper (line 359) | DS_StartBufferHelper() {}
    class Data (line 362) | class Data {
  function DWORD (line 406) | DWORD WINAPI __stdcall DS_StartBufferHelper::ThreadProc(void *param)
  function HRESULT (line 430) | HRESULT DS_StartBufferHelper::StartBuffer(DS_Info* info) {
  function DS_getDistance (line 449) | inline int DS_getDistance(DS_Info* info, int pos1, int pos2) {
  function DS_addPos (line 458) | inline int DS_addPos(DS_Info* info, int pos1, int pos2) {
  function DS_addDeviceRef (line 465) | bool DS_addDeviceRef(signed int deviceID)
  function DS_removeDeviceRef (line 534) | void DS_removeDeviceRef(signed int deviceID) {
  function createWaveFormat (line 551) | void createWaveFormat(WAVEFORMATEXTENSIBLE* format, int sampleRate,
  function DS_clearBuffer (line 580) | void DS_clearBuffer(DS_Info* info, bool fromWritePos)
  function DS_destroySoundBuffer (line 782) | void DS_destroySoundBuffer(DS_Info* info)
  function DAUDIO_Start (line 902) | int DAUDIO_Start(void* id, int isSource)
  function DAUDIO_Stop (line 964) | int DAUDIO_Stop(void* id, int isSource) {
  function DAUDIO_Close (line 981) | void DAUDIO_Close(void* id, int isSource) {
  function DS_CheckUnderrun (line 996) | void DS_CheckUnderrun(DS_Info* info, DWORD playCursor, DWORD writeCursor) {
  function DS_GetAvailable (line 1034) | int DS_GetAvailable(DS_Info* info, DWORD* playCursor, DWORD* writeCursor,
  function DAUDIO_Write (line 1128) | int DAUDIO_Write(void* id, char* data, int byteSize)
  function DAUDIO_Read (line 1242) | int DAUDIO_Read(void* id, char* data, int byteSize) {
  function DAUDIO_GetBufferSize (line 1302) | int DAUDIO_GetBufferSize(void* id, int isSource) {
  function DAUDIO_StillDraining (line 1307) | int DAUDIO_StillDraining(void* id, int isSource) {
  function DAUDIO_Flush (line 1323) | int DAUDIO_Flush(void* id, int isSource) {
  function DAUDIO_GetAvailable (line 1348) | int DAUDIO_GetAvailable(void* id, int isSource) {
  function INT64 (line 1359) | INT64 estimatePositionFromAvail(DS_Info* info, INT64 javaBytePos, int bu...
  function INT64 (line 1376) | INT64 DAUDIO_GetBytePosition(void* id, int isSource, INT64 javaBytePos) {
  function DAUDIO_SetBytePosition (line 1388) | void DAUDIO_SetBytePosition(void* id, int isSource, INT64 javaBytePos) {
  function DAUDIO_RequiresServicing (line 1394) | int DAUDIO_RequiresServicing(void* id, int isSource) {
  function DAUDIO_Service (line 1399) | void DAUDIO_Service(void* id, int isSource) {
  function DAUDIO_AddAudioFormat (line 1419) | void DAUDIO_AddAudioFormat(void* creatorV, int significantBits, int fram...

FILE: Engine/Utils.h
  type UBYTE (line 17) | typedef unsigned char   UBYTE;
  type SBYTE (line 18) | typedef char            SBYTE;
  type DirectAudioDeviceDescription (line 23) | typedef struct tag_DirectAudioDeviceDescription {
  type DirectAudioDeviceDescription (line 33) | typedef struct tag_DirectAudioDeviceDescription {
  type DS_AudioDeviceCache (line 44) | typedef struct {
  type DS_RefreshCacheStruct (line 54) | typedef struct {
  type DS_Info (line 59) | typedef struct {
  type WAVEFORMATEXTENSIBLE (line 95) | typedef struct {

FILE: Engine/WMWrapper.cpp
  function WMA_Reader_Init (line 10) | void WMA_Reader_Init(WMA_SYNC_READER* reader, CStream* pStream, bool bDe...
  function DWORD (line 251) | DWORD WMA_Reader_GetDuration(WMA_SYNC_READER* reader)
  function WMA_Reader_GetTag (line 258) | void WMA_Reader_GetTag(WMA_SYNC_READER* reader, WCHAR* pszTagName, WCHAR...
  function WORD (line 268) | WORD WMA_Reader_GetTagLength(WMA_SYNC_READER* reader, WCHAR* pszTagName)
  function WMA_Reader_GetAuthor (line 282) | void WMA_Reader_GetAuthor(WMA_SYNC_READER* reader, WCHAR* pszAuthor)
  function WMA_Reader_Uninit (line 292) | void WMA_Reader_Uninit(WMA_SYNC_READER* reader)
  function DWORD (line 324) | DWORD WMA_Reader_GetBitrate(WMA_SYNC_READER* reader)
  function DWORD (line 339) | DWORD WMA_Reader_GetFormatCount(WMA_SYNC_READER* reader, bool Descrete)
  function WMA_Reader_GetFormat (line 350) | void WMA_Reader_GetFormat(WMA_SYNC_READER* reader, bool Descrete, int in...
  function WMA_Reader_GetIsVBR (line 385) | bool WMA_Reader_GetIsVBR(WMA_SYNC_READER* reader)
  function WMA_Reader_Free (line 399) | void WMA_Reader_Free(WMA_SYNC_READER* reader)
  function WMA_Reader_GetData (line 420) | void WMA_Reader_GetData(WMA_SYNC_READER* reader, void** buffer, DWORD* b...
  function WMA_Reader_GetAudioPropties (line 465) | void WMA_Reader_GetAudioPropties(WMA_SYNC_READER* reader, WORD* channels...
  function WMA_Reader_Seek (line 472) | void WMA_Reader_Seek(WMA_SYNC_READER* reader, DWORD offset)
  function WMA_Reader_SetFormat (line 477) | void WMA_Reader_SetFormat(WMA_SYNC_READER* reader, bool Descrete, DWORD ...

FILE: Entity/MusicInfoEntity.cpp
  function QString (line 61) | QString MusicInfoEntity::fileName() const
  function QString (line 71) | QString MusicInfoEntity::time() const
  function QString (line 81) | QString MusicInfoEntity::filePath() const

FILE: Entity/MusicInfoEntity.h
  function class (line 49) | class MusicInfoEntity

FILE: Entity/MusicListSaveFormatEntity.cpp
  function QString (line 61) | QString MusicListSaveFormatEntity::fileName() const
  function QString (line 71) | QString MusicListSaveFormatEntity::time() const
  function QString (line 81) | QString MusicListSaveFormatEntity::filePath() const

FILE: Entity/MusicListSaveFormatEntity.h
  function class (line 49) | class MusicListSaveFormatEntity

FILE: Entity/RadioInfoEntity.cpp
  function QString (line 56) | QString RadioInfoEntity::name() const
  function QString (line 66) | QString RadioInfoEntity::url() const

FILE: Entity/RadioInfoEntity.h
  function class (line 49) | class RadioInfoEntity

FILE: LrcLabel/MusicLrc.h
  function class (line 59) | class MusicLrc : public QLabel

FILE: MainWidget/MainWidget.cpp
  function getMusicTime (line 198) | inline static unsigned long getMusicTime(WCHAR *szPath)
  type PlayModeType (line 645) | enum PlayModeType
  type PlayModeType (line 645) | enum PlayModeType
  type PlayModeType (line 862) | enum PlayModeType
  type PlayModeType (line 866) | enum PlayModeType
  function foreach (line 1216) | foreach(QString oneLine, lrcLines)
  function foreach (line 1457) | foreach(QFileInfo fileInfo, fileInfoList)
  function foreach (line 1612) | foreach(long long value, m_lrcMap.keys())
  function foreach (line 1759) | foreach(QUrl url, urls)
  type PlayModeType (line 2418) | enum PlayModeType

FILE: MainWidget/MainWidget.h
  function class (line 102) | class MainWidget : public QWidget

FILE: MediaWidget/CollectionPanel.h
  function class (line 52) | class CollectionPanel : public QWidget

FILE: MediaWidget/DownloadListPanel.cpp
  function foreach (line 121) | foreach (DownloadInfo *downloadInfo, m_musicInfos)
  function foreach (line 162) | foreach (DownloadInfo *downloadInfo, m_musicInfos)
  function foreach (line 188) | foreach (DownloadInfo *downloadInfo, m_musicInfos)
  function QString (line 293) | QString DownloadInfo::title() const
  function QString (line 304) | QString DownloadInfo::status() const
  function QString (line 314) | QString DownloadInfo::size() const
  function QString (line 324) | QString DownloadInfo::speed() const
  function qint64 (line 334) | qint64 DownloadInfo::progress() const
  function QThread (line 349) | QThread *DownloadInfo::thread() const

FILE: MediaWidget/DownloadListPanel.h
  function class (line 68) | class DownloadListPanel : public QWidget
  function class (line 139) | class DownloadInfo : public QObject

FILE: MediaWidget/LrcPortraitPanel.h
  function class (line 51) | class LrcPortraitPanel : public QWidget

FILE: MediaWidget/MediaWidget.h
  function class (line 60) | class MediaWidget : public QWidget

FILE: MediaWidget/RadioPanel.cpp
  function foreach (line 228) | foreach (RadioInfoEntity entity, radioInfos)
  function QString (line 360) | QString RadioPanel::errorCodeToString(QMediaPlayer::Error error)

FILE: MediaWidget/RadioPanel.h
  function class (line 64) | class RadioPanel : public QWidget

FILE: MediaWidget/RankingPanel.h
  function class (line 51) | class RankingPanel : public QWidget

FILE: MediaWidget/SearchPanel.h
  function class (line 70) | class SearchPanel : public QWidget

FILE: MinWidget/MinMusicWidget.h
  function class (line 57) | class MinMusicWidget : public QWidget

FILE: MusicList/MusicList.cpp
  function foreach (line 245) | foreach (MusicListSaveFormatEntity entity, list)

FILE: MusicList/MusicList.h
  function class (line 55) | class MusicList : public QTableWidget

FILE: MusicList/MusicListWidget.h
  function class (line 56) | class MusicListWidget : public QWidget

FILE: MusicList/SharedDialog.h
  function class (line 55) | class SharedDialog : public QDialog

FILE: Thread/AlbumThread.cpp
  function foreach (line 181) | foreach(QVariant var, resultList)
  function QString (line 342) | QString AlbumThread::errorCodeToString( QNetworkReply::NetworkError netw...

FILE: Thread/AlbumThread.h
  function class (line 63) | class AlbumThread : public QThread

FILE: Thread/DownloadMusicThread.cpp
  function QString (line 302) | QString DownloadMusicThread::errorCodeToString(QNetworkReply::NetworkErr...

FILE: Thread/DownloadMusicThread.h
  function class (line 62) | class DownloadMusicThread : public QThread

FILE: Thread/LoadMusicThread.cpp
  function getMusicTime (line 56) | static unsigned long getMusicTime(WCHAR *szPath)
  function foreach (line 170) | foreach (QString filePath, m_musicList)
  function foreach (line 178) | foreach (QUrl url, m_urls)
  function foreach (line 314) | foreach (MusicInfoEntity entity, list)
  function foreach (line 326) | foreach (QFileInfo fileInfo, fileInfoList)

FILE: Thread/LoadMusicThread.h
  function class (line 55) | class LoadMusicThread : public QThread
  function class (line 76) | class LoadMusicThreadEvent : public QObject

FILE: Thread/LrcThread.h
  function class (line 64) | class LrcThread : public QThread

FILE: Thread/SearchThread.cpp
  function foreach (line 164) | foreach(QVariant var, resultList)

FILE: Thread/SearchThread.h
  function class (line 61) | class SearchThread : public QThread
  function class (line 82) | class SearchThreadEvent : public QObject

FILE: doc/dynsections.js
  function toggleVisibility (line 1) | function toggleVisibility(linkObj)
  function updateStripes (line 22) | function updateStripes()
  function toggleLevel (line 27) | function toggleLevel(level)
  function toggleFolder (line 48) | function toggleFolder(id)
  function toggleInherit (line 84) | function toggleInherit(id)

FILE: doc/jquery.js
  function b0 (line 16) | function b0(b3,b4){return new b0.fn.init(b3,b4)}
  function bw (line 16) | function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("lef...
  function X (line 16) | function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.lengt...
  function bD (line 16) | function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(ar...
  function bz (line 16) | function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(ar...
  function a5 (line 17) | function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.repl...
  function S (line 17) | function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){c...
  function bi (line 17) | function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._...
  function bE (line 17) | function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}
  function bk (line 18) | function bk(){return false}
  function i (line 18) | function i(){return true}
  function bv (line 27) | function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var...
  function bN (line 27) | function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var...
  function C (line 27) | function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}
  function aG (line 27) | function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,func...
  function a (line 27) | function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.c...
  function ba (line 28) | function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("...
  function t (line 28) | function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e...
  function ai (line 28) | function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes)...
  function bg (line 28) | function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e....
  function az (line 28) | function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecke...
  function E (line 28) | function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(...
  function al (line 28) | function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.inne...
  function bo (line 28) | function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"sc...
  function p (line 28) | function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,...
  function f (line 29) | function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="...
  function aW (line 29) | function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=t...
  function am (line 29) | function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in ...
  function bF (line 29) | function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}...
  function v (line 29) | function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(b...
  function bj (line 29) | function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseF...
  function G (line 29) | function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var...
  function aL (line 29) | function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}
  function aj (line 29) | function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch...
  function bv (line 30) | function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK...
  function bB (line 30) | function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}
  function bh (line 30) | function bh(){setTimeout(at,0);return(a4=b.now())}
  function at (line 30) | function at(){a4=L}
  function a0 (line 30) | function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),fun...
  function bv (line 30) | function bv(bA){return e.step(bA)}
  function x (line 30) | function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=...
  function aK (line 30) | function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.pa...

FILE: doc/search/search.js
  function convertToId (line 32) | function convertToId(search)
  function getXPos (line 55) | function getXPos(item)
  function getYPos (line 69) | function getYPos(item)
  function SearchBox (line 90) | function SearchBox(name, resultsPath, inFrame, label)
  function SearchResults (line 435) | function SearchResults(name)
  function setKeyActions (line 740) | function setKeyActions(elem,action)
  function setClassAttr (line 747) | function setClassAttr(elem,attr)
  function createResults (line 753) | function createResults()

FILE: main.cpp
  function main (line 64) | int main(int argc, char *argv[])
Condensed preview — 916 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,996K chars).
[
  {
    "path": "3rdParty/equalizer/eq.cpp",
    "chars": 1795,
    "preview": "/*\n *   PCM time-domain equalizer\n *\n *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users.sourceforge.net>\n *\n"
  },
  {
    "path": "3rdParty/equalizer/eq.h",
    "chars": 1237,
    "preview": "/*\n *   PCM time-domain equalizer\n *\n *   Copyright (C) 2002  Felipe Rivera <liebremx at users.sourceforge.net>\n *\n *   "
  },
  {
    "path": "3rdParty/equalizer/iir.h",
    "chars": 2200,
    "preview": "/*\n *   PCM time-domain equalizer\n *\n *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users.sourceforge.net>\n *\n"
  },
  {
    "path": "3rdParty/equalizer/iir_cfs.cpp",
    "chars": 8202,
    "preview": "/*\n *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users.sourceforge.net>\n *\n *   This program is free software"
  },
  {
    "path": "3rdParty/equalizer/iir_cfs.h",
    "chars": 1287,
    "preview": "/*\n *   PCM time-domain equalizer\n *\n *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users.sourceforge.net>\n *\n"
  },
  {
    "path": "3rdParty/equalizer/iir_fpu.cpp",
    "chars": 7136,
    "preview": "/*\n *   PCM time-domain equalizer\n *\n *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users sourceforge net>\n *\n"
  },
  {
    "path": "3rdParty/equalizer/iir_fpu.h",
    "chars": 1254,
    "preview": "/*\n *   PCM time-domain equalizer\n *\n *   Copyright (C) 2002-2006  Felipe Rivera <liebremx at users.sourceforge.net>\n *\n"
  },
  {
    "path": "3rdParty/libmad/include/bit.c",
    "chars": 6853,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/bit.h",
    "chars": 1613,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/config.h",
    "chars": 3723,
    "preview": "/* config.h.  Generated by configure.  */\n/* config.h.in.  Generated from configure.ac by autoheader.  */\n\n/* Define to "
  },
  {
    "path": "3rdParty/libmad/include/decoder.c",
    "chars": 11570,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/decoder.h",
    "chars": 2844,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/fixed.c",
    "chars": 1795,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/fixed.h",
    "chars": 13560,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/frame.c",
    "chars": 12098,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/frame.h",
    "chars": 4051,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/global.h",
    "chars": 1646,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/huffman.c",
    "chars": 73174,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/huffman.h",
    "chars": 1862,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/layer12.c",
    "chars": 13623,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/layer12.h",
    "chars": 1097,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/layer3.c",
    "chars": 70147,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/layer3.h",
    "chars": 1037,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/mad.h",
    "chars": 27125,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/stream.c",
    "chars": 4475,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/stream.h",
    "chars": 4219,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/synth.c",
    "chars": 24366,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/synth.h",
    "chars": 1950,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/timer.c",
    "chars": 10577,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/timer.h",
    "chars": 2879,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/version.c",
    "chars": 2105,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libmad/include/version.h",
    "chars": 1610,
    "preview": "/*\n * libmad - MPEG audio decoder library\n * Copyright (C) 2000-2004 Underbit Technologies, Inc.\n *\n * This program is f"
  },
  {
    "path": "3rdParty/libogg/include/ogg.h",
    "chars": 7613,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libogg/include/os_types.h",
    "chars": 4121,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/analysis.c",
    "chars": 3128,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/backends.h",
    "chars": 5030,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/bitrate.c",
    "chars": 8397,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/bitrate.h",
    "chars": 2027,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/block.c",
    "chars": 27774,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/codebook.c",
    "chars": 16774,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/codebook.h",
    "chars": 5994,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/codec.h",
    "chars": 8123,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/codec_internal.h",
    "chars": 4571,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/envelope.c",
    "chars": 10440,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/envelope.h",
    "chars": 2182,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/floor0.c",
    "chars": 6646,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/floor1.c",
    "chars": 28648,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/floor_all.h",
    "chars": 7166,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/highlevel.h",
    "chars": 1850,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/info.c",
    "chars": 18153,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/lookup.c",
    "chars": 3293,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/lookup.h",
    "chars": 1314,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/lookup_data.h",
    "chars": 9153,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/lpc.c",
    "chars": 4298,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/lpc.h",
    "chars": 1214,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/lsp.c",
    "chars": 12344,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/lsp.h",
    "chars": 1189,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/mapping0.c",
    "chars": 27594,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/masking.h",
    "chars": 40215,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/mdct.c",
    "chars": 14683,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/mdct.h",
    "chars": 2030,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/misc.h",
    "chars": 1817,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/os.h",
    "chars": 3861,
    "preview": "#ifndef _OS_H\n#define _OS_H\n/********************************************************************\n *                    "
  },
  {
    "path": "3rdParty/libvorbis/include/psy.c",
    "chars": 32585,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/psy.h",
    "chars": 5000,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/psych_11.h",
    "chars": 2357,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/psych_16.h",
    "chars": 6315,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/psych_44.h",
    "chars": 34053,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/psych_8.h",
    "chars": 4044,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/psytune.c",
    "chars": 14121,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/registry.c",
    "chars": 1766,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/registry.h",
    "chars": 1276,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/res0.c",
    "chars": 23731,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/residue_16.h",
    "chars": 4795,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/residue_44.h",
    "chars": 9884,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/residue_44u.h",
    "chars": 9035,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/residue_8.h",
    "chars": 3195,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/scales.h",
    "chars": 2710,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/setup_11.h",
    "chars": 2715,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/setup_16.h",
    "chars": 3236,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/setup_22.h",
    "chars": 2858,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/setup_32.h",
    "chars": 3101,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/setup_44.h",
    "chars": 2843,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/setup_44u.h",
    "chars": 2031,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/setup_8.h",
    "chars": 2816,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/setup_X.h",
    "chars": 4288,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/sharedbook.c",
    "chars": 19815,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/smallft.c",
    "chars": 22210,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/smallft.h",
    "chars": 1282,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/synthesis.c",
    "chars": 4919,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/tone.c",
    "chars": 985,
    "preview": "#include <stdlib.h>\n#include <stdio.h>\n#include <math.h>\n#include <string.h>\n\nvoid usage(){\n  fprintf(stderr,\"tone <freq"
  },
  {
    "path": "3rdParty/libvorbis/include/vorbisenc.c",
    "chars": 33173,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/vorbisenc.h",
    "chars": 3009,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/vorbisfile.c",
    "chars": 62478,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/vorbisfile.h",
    "chars": 6946,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/window.c",
    "chars": 130661,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/libvorbis/include/window.h",
    "chars": 1143,
    "preview": "/********************************************************************\n *                                                "
  },
  {
    "path": "3rdParty/qdeviceWatcher/include/qdevicechangeevent.cpp",
    "chars": 1236,
    "preview": "/******************************************************************************\n\tQDeviceChangeEvent: Device change event"
  },
  {
    "path": "3rdParty/qdeviceWatcher/include/qdevicechangeevent.h",
    "chars": 1614,
    "preview": "/******************************************************************************\n\tQDeviceChangeEvent: Device change event"
  },
  {
    "path": "3rdParty/qdeviceWatcher/include/qdevicewatcher.cpp",
    "chars": 2560,
    "preview": "/******************************************************************************\n\tQDeviceWatcher: Device watcher class\n\tC"
  },
  {
    "path": "3rdParty/qdeviceWatcher/include/qdevicewatcher.h",
    "chars": 1597,
    "preview": "/******************************************************************************\n\tQDeviceWatcher: Device watcher class\n\tC"
  },
  {
    "path": "3rdParty/qdeviceWatcher/include/qdevicewatcher_global.h",
    "chars": 1215,
    "preview": "/******************************************************************************\n\tqdevicewatcher_global.h: description\n\tC"
  },
  {
    "path": "3rdParty/qdeviceWatcher/include/qdevicewatcher_linux.cpp",
    "chars": 7889,
    "preview": "/******************************************************************************\n  QDeviceWatcherPrivate: watching depend"
  },
  {
    "path": "3rdParty/qdeviceWatcher/include/qdevicewatcher_p.h",
    "chars": 3040,
    "preview": "/******************************************************************************\n\tQDeviceWatcherPrivate: watching depends"
  },
  {
    "path": "3rdParty/qdeviceWatcher/include/qdevicewatcher_win32.cpp",
    "chars": 12675,
    "preview": "/******************************************************************************\n\tQDeviceWatcherPrivate: watching depend"
  },
  {
    "path": "3rdParty/qdeviceWatcher/include/qdevicewatcher_wince.cpp",
    "chars": 3866,
    "preview": "/******************************************************************************\n\tqdevicewatcher_wince.cpp: for wince. TO"
  },
  {
    "path": "3rdParty/qtsingleapplication/QtLockedFile",
    "chars": 26,
    "preview": "#include \"qtlockedfile.h\"\n"
  },
  {
    "path": "3rdParty/qtsingleapplication/QtSingleApplication",
    "chars": 33,
    "preview": "#include \"qtsingleapplication.h\"\n"
  },
  {
    "path": "3rdParty/qtsingleapplication/qtlocalpeer.cpp",
    "chars": 6688,
    "preview": "/****************************************************************************\n**\n** Copyright (C) 2013 Digia Plc and/or "
  },
  {
    "path": "3rdParty/qtsingleapplication/qtlocalpeer.h",
    "chars": 2693,
    "preview": "/****************************************************************************\n**\n** Copyright (C) 2013 Digia Plc and/or "
  },
  {
    "path": "3rdParty/qtsingleapplication/qtlockedfile.cpp",
    "chars": 6114,
    "preview": "/****************************************************************************\n**\n** Copyright (C) 2013 Digia Plc and/or "
  },
  {
    "path": "3rdParty/qtsingleapplication/qtlockedfile.h",
    "chars": 3271,
    "preview": "/****************************************************************************\n**\n** Copyright (C) 2013 Digia Plc and/or "
  },
  {
    "path": "3rdParty/qtsingleapplication/qtlockedfile_unix.cpp",
    "chars": 3468,
    "preview": "/****************************************************************************\n**\n** Copyright (C) 2013 Digia Plc and/or "
  },
  {
    "path": "3rdParty/qtsingleapplication/qtlockedfile_win.cpp",
    "chars": 6579,
    "preview": "/****************************************************************************\n**\n** Copyright (C) 2013 Digia Plc and/or "
  },
  {
    "path": "3rdParty/qtsingleapplication/qtsingleapplication.cpp",
    "chars": 11783,
    "preview": "/****************************************************************************\n**\n** Copyright (C) 2013 Digia Plc and/or "
  },
  {
    "path": "3rdParty/qtsingleapplication/qtsingleapplication.h",
    "chars": 3983,
    "preview": "/****************************************************************************\n**\n** Copyright (C) 2013 Digia Plc and/or "
  },
  {
    "path": "3rdParty/qtsingleapplication/qtsingleapplication.pri",
    "chars": 561,
    "preview": "INCLUDEPATH += $$PWD\nDEPENDPATH += $$PWD\nQT *= network\ngreaterThan(QT_MAJOR_VERSION, 4): QT *= widgets\n\nqtsingleapplicat"
  },
  {
    "path": "3rdParty/qtsingleapplication/qtsinglecoreapplication.cpp",
    "chars": 5357,
    "preview": "/****************************************************************************\n**\n** Copyright (C) 2013 Digia Plc and/or "
  },
  {
    "path": "3rdParty/qtsingleapplication/qtsinglecoreapplication.h",
    "chars": 2581,
    "preview": "/****************************************************************************\n**\n** Copyright (C) 2013 Digia Plc and/or "
  },
  {
    "path": "3rdParty/qtsingleapplication/qtsinglecoreapplication.pri",
    "chars": 324,
    "preview": "INCLUDEPATH\t+= $$PWD\nDEPENDPATH      += $$PWD\nHEADERS\t\t+= $$PWD/qtsinglecoreapplication.h $$PWD/qtlocalpeer.h\nSOURCES\t\t+"
  },
  {
    "path": "3rdParty/qxtglobalshortcut/qxtglobal.h",
    "chars": 5807,
    "preview": "/****************************************************************************\n **\n ** Copyright (C) Qxt Foundation. Some"
  },
  {
    "path": "3rdParty/qxtglobalshortcut/qxtglobalshortcut.cpp",
    "chars": 6471,
    "preview": "/****************************************************************************\n **\n ** Copyright (C) Qxt Foundation. Some"
  },
  {
    "path": "3rdParty/qxtglobalshortcut/qxtglobalshortcut.h",
    "chars": 2046,
    "preview": "/****************************************************************************\n **\n ** Copyright (C) Qxt Foundation. Some"
  },
  {
    "path": "3rdParty/qxtglobalshortcut/qxtglobalshortcut.pri",
    "chars": 386,
    "preview": "INCLUDEPATH += $$PWD  \nDEPENDPATH += $$PWD  \n \nHEADERS += $$PWD/qxtglobal.h \\  \n           $$PWD/qxtglobalshortcut.h \\  "
  },
  {
    "path": "3rdParty/qxtglobalshortcut/qxtglobalshortcut_mac.cpp",
    "chars": 8462,
    "preview": "/****************************************************************************\n **\n ** Copyright (C) Qxt Foundation. Some"
  },
  {
    "path": "3rdParty/qxtglobalshortcut/qxtglobalshortcut_p.h",
    "chars": 2584,
    "preview": "/****************************************************************************\n **\n ** Copyright (C) Qxt Foundation. Some"
  },
  {
    "path": "3rdParty/qxtglobalshortcut/qxtglobalshortcut_win.cpp",
    "chars": 6093,
    "preview": "/****************************************************************************\n **\n ** Copyright (C) Qxt Foundation. Some"
  },
  {
    "path": "3rdParty/qxtglobalshortcut/qxtglobalshortcut_x11.cpp",
    "chars": 4700,
    "preview": "/****************************************************************************\n **\n ** Copyright (C) Qxt Foundation. Some"
  },
  {
    "path": "AboutPanel/AboutPage.cpp",
    "chars": 2396,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "AboutPanel/AboutPage.h",
    "chars": 2037,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "AboutPanel/AboutPanel.cpp",
    "chars": 3951,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "AboutPanel/AboutPanel.h",
    "chars": 2373,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "AboutPanel/AboutPanel.pri",
    "chars": 274,
    "preview": "DEPENDPATH  += $$PWD\nINCLUDEPATH += $$PWD\n\nHEADERS += \\\n    $$PWD/AboutPage.h \\\n    $$PWD/AboutPanel.h \\\n    $$PWD/Autho"
  },
  {
    "path": "AboutPanel/AuthorPage.cpp",
    "chars": 2583,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "AboutPanel/AuthorPage.h",
    "chars": 2135,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "AboutPanel/ThanksPage.cpp",
    "chars": 2341,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "AboutPanel/ThanksPage.h",
    "chars": 2050,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "CZPlayer.pro",
    "chars": 1010,
    "preview": "#-------------------------------------------------\n#\n# Project created by QtCreator 2015-02-12T13:54:45\n#\n#-------------"
  },
  {
    "path": "ConfigPanel/ConfigDialog.cpp",
    "chars": 10750,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/ConfigDialog.h",
    "chars": 3668,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/ConfigPanel.pri",
    "chars": 659,
    "preview": "DEPENDPATH  += $$PWD\nINCLUDEPATH += $$PWD\n\nHEADERS += \\\n    $$PWD/ConfigDialog.h \\\n    $$PWD/DownloadSettingsPage.h \\\n  "
  },
  {
    "path": "ConfigPanel/DownloadSettingsPage.cpp",
    "chars": 6527,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/DownloadSettingsPage.h",
    "chars": 2870,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/EditHotkeyDialog.cpp",
    "chars": 11893,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/EditHotkeyDialog.h",
    "chars": 3213,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/GeneralSettingsPage.cpp",
    "chars": 5023,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/GeneralSettingsPage.h",
    "chars": 2428,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/Global.cpp",
    "chars": 1820,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "ConfigPanel/Global.h",
    "chars": 1972,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "ConfigPanel/GlobalConfig.cpp",
    "chars": 32945,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "ConfigPanel/GlobalConfig.h",
    "chars": 16013,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "ConfigPanel/HotkeysSettingsPage.cpp",
    "chars": 14056,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/HotkeysSettingsPage.h",
    "chars": 3663,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/HotkeysTableWidget.cpp",
    "chars": 2924,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/HotkeysTableWidget.h",
    "chars": 2050,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/LrcDemo.cpp",
    "chars": 4796,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/LrcDemo.h",
    "chars": 3337,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/LrcSettingsPage.cpp",
    "chars": 27103,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/LrcSettingsPage.h",
    "chars": 5239,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/UpdatePage.cpp",
    "chars": 3679,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "ConfigPanel/UpdatePage.h",
    "chars": 2206,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Copyright",
    "chars": 416,
    "preview": "<HR style=\"FILTER: alpha(opacity=100,finishopacity=0,style=3)\" width=\"100%\" color=#000000 SIZE=3>\n<table width=\"100%\">\n<"
  },
  {
    "path": "Core/AutoStart.cpp",
    "chars": 5326,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/AutoStart.h",
    "chars": 2169,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/AutoStartHandle.cpp",
    "chars": 2677,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/AutoStartHandle.h",
    "chars": 2193,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/ChineseToLetter.h",
    "chars": 106217,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/Core.pri",
    "chars": 585,
    "preview": "DEPENDPATH  += $$PWD\nINCLUDEPATH += $$PWD\n\nHEADERS += \\\n    $$PWD/GlobalHotkey.h \\\n    $$PWD/NoFocusDelegate.h \\\n    $$P"
  },
  {
    "path": "Core/FileRelation.cpp",
    "chars": 4790,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/FileRelation.h",
    "chars": 2742,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/FileRelationHandle.cpp",
    "chars": 4388,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/FileRelationHandle.h",
    "chars": 2233,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/GlobalHotkey.cpp",
    "chars": 7242,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/GlobalHotkey.h",
    "chars": 4438,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Core/NoFocusDelegate.cpp",
    "chars": 206,
    "preview": "#include \"NoFocusDelegate.h\"\n\nNoFocusDelegate::NoFocusDelegate( QStyledItemDelegate *parent /*= 0*/ ) : m_parent(parent)"
  },
  {
    "path": "Core/NoFocusDelegate.h",
    "chars": 691,
    "preview": "#ifndef NOFOCUSDELEGATE_H\n#define NOFOCUSDELEGATE_H\n\n#include <QStyledItemDelegate>\n#include <QModelIndex>\n#include <QPa"
  },
  {
    "path": "Core/StatusDefine.h",
    "chars": 2268,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "Core/TR.h",
    "chars": 2183,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "Core/signal_slot.h",
    "chars": 19885,
    "preview": "#ifndef SIGNAL_handleH\n#define SIGNAL_handleH\n\n/**<\n    ĿǰźŲۻ޶ֻ֧9Ĵ\n    Ҫָ֧򽫴ڱļĩβ\n */\n\n#include <vector>\n#define c_emit\n#d"
  },
  {
    "path": "DB/DB.pri",
    "chars": 132,
    "preview": "DEPENDPATH  += $$PWD\nINCLUDEPATH += $$PWD\n\nQT       += sql\n\nHEADERS += \\\n    $$PWD/DBModule.h\n\nSOURCES += \\\n    $$PWD/DB"
  },
  {
    "path": "DB/DBModule.cpp",
    "chars": 5569,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "DB/DBModule.h",
    "chars": 3331,
    "preview": "/***************************************************************************\n *   Copyright (C) 2012-2015 Highway-9 Stud"
  },
  {
    "path": "Doxyfile",
    "chars": 103250,
    "preview": "# Doxyfile 1.8.6\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) "
  },
  {
    "path": "Engine/AudioStream.cpp",
    "chars": 2710,
    "preview": "#include \"AudioStream.h\"\n\n#pragma warning(disable : 4100)\n\nCAudioStream::CAudioStream()\n{\n    m_cRef = 0;\n}\n\nCAudioStrea"
  },
  {
    "path": "Engine/AudioStream.h",
    "chars": 3227,
    "preview": "#ifndef INCLUDE_AUDIOSTREAM\n#define INCLUDE_AUDIOSTREAM\n\n#include \"CriticalSection.h\"\n#include \"Stream.h\"\n#include <tcha"
  },
  {
    "path": "Engine/BasicPlayer.cpp",
    "chars": 24779,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Engine/BasicPlayer.h",
    "chars": 8045,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Engine/CriticalSection.h",
    "chars": 682,
    "preview": "#ifndef INCLUDE_CRITICALSECTION\n#define INCLUDE_CRITICALSECTION\n\n#include <windows.h>\n\n/********************************"
  },
  {
    "path": "Engine/Engine.pri",
    "chars": 1389,
    "preview": "DEPENDPATH  += $$PWD\nINCLUDEPATH += $$PWD\n\nHEADERS += \\\n    $$PWD/AudioStream.h \\\n    $$PWD/BasicPlayer.h \\\n    $$PWD/Cr"
  },
  {
    "path": "Engine/FastFourierTransform.cpp",
    "chars": 2824,
    "preview": "#include \"FastFourierTransform.h\"\n\n/************************************************************************/\n/* CFastFo"
  },
  {
    "path": "Engine/FastFourierTransform.h",
    "chars": 760,
    "preview": "#ifndef INCLUDE_FASTTOURIERTRANSFORM\n#define INCLUDE_FASTTOURIERTRANSFORM\n\n#include <math.h>\n#include <stdlib.h>\n\n/*****"
  },
  {
    "path": "Engine/IO.cpp",
    "chars": 61566,
    "preview": "#include \"IO.h\"\n#include <windows.h>\n#include <strsafe.h>\n#include <tchar.h>\n\n#pragma warning(disable : 4018)\n#pragma wa"
  },
  {
    "path": "Engine/IO.h",
    "chars": 13844,
    "preview": "#ifndef INCLUDE_IO\n#define INCLUDE_IO\n\n#include \"AudioStream.h\"\n#include \"CriticalSection.h\"\n#include \"Stream.h\"\n/* libm"
  },
  {
    "path": "Engine/SoundControl.cpp",
    "chars": 5628,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Engine/SoundControl.h",
    "chars": 2746,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Engine/SpectroGraph.cpp",
    "chars": 4166,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Engine/SpectroGraph.h",
    "chars": 2649,
    "preview": "/***************************************************************************\n*   Copyright (C) 2012-2015 Highway-9 Studi"
  },
  {
    "path": "Engine/Stream.cpp",
    "chars": 13018,
    "preview": "#include \"Stream.h\"\n#include <tchar.h>\n#include <mmreg.h>\n#include <msacm.h>\n#include <strsafe.h>\n\n#pragma warning(disab"
  },
  {
    "path": "Engine/Stream.h",
    "chars": 3995,
    "preview": "#pragma once\n\n#include <stdlib.h>\n#include <windows.h>\n\n#ifndef INCLUDE_CSTREAM\n#define INCLUDE_CSTREAM\n\n#pragma warning"
  },
  {
    "path": "Engine/Thread.h",
    "chars": 1586,
    "preview": "#ifndef INCLUDE_THREAD\n#define INCLUDE_THREAD\n\n/************************************************************************"
  }
]

// ... and 716 more files (download for full content)

About this extraction

This page contains the full source code of the chxuan/CZPlayer GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 916 files (7.0 MB), approximately 1.9M tokens, and a symbol index with 1108 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!